Skip to content

Commit

Permalink
Make "--parents" logs also be incremental
Browse files Browse the repository at this point in the history
The parent rewriting feature caused us to create the whole history in one
go, and then simplify it later, because of how rewrite_parents() had been
written. However, with a little tweaking, it's perfectly possible to do
even that one incrementally.

Right now, this doesn't really much matter, because every user of
"--parents" will probably generally _also_ use "--topo-order", which will
cause the old non-incremental behaviour anyway. However, I'm hopeful that
we could make even the topological sort incremental, or at least
_partially_ so (for example, make it incremental up to the first merge).

In the meantime, this at least moves things in the right direction, and
removes a strange special case.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed Apr 9, 2006
1 parent 0ed49a3 commit 3381c79
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 18 deletions.
10 changes: 5 additions & 5 deletions http-push.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ enum XML_Status {
#define LOCK_TIME 600
#define LOCK_REFRESH 30

/* bits #0-4 in revision.h */
/* bits #0-6 in revision.h */

#define LOCAL (1u << 5)
#define REMOTE (1u << 6)
#define FETCHING (1u << 7)
#define PUSHING (1u << 8)
#define LOCAL (1u << 7)
#define REMOTE (1u << 8)
#define FETCHING (1u << 9)
#define PUSHING (1u << 10)

/* We allow "recursive" symbolic refs. Only within reason, though */
#define MAXDEPTH 5
Expand Down
4 changes: 2 additions & 2 deletions rev-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
#include "tree-walk.h"
#include "revision.h"

/* bits #0-5 in revision.h */
/* bits #0-6 in revision.h */

#define COUNTED (1u<<6)
#define COUNTED (1u<<7)

static const char rev_list_usage[] =
"git-rev-list [OPTION] <commit-id>... [ -- paths... ]\n"
Expand Down
21 changes: 10 additions & 11 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,10 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st
{
struct commit_list *parent = commit->parents;

if (commit->object.flags & ADDED)
return;
commit->object.flags |= ADDED;

/*
* If the commit is uninteresting, don't try to
* prune parents - we want the maximal uninteresting
Expand Down Expand Up @@ -705,13 +709,6 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
if (revs->prune_data) {
diff_tree_setup_paths(revs->prune_data);
revs->prune_fn = try_to_simplify_commit;

/*
* If we fix up parent data, we currently cannot
* do that on-the-fly.
*/
if (revs->parents)
revs->limited = 1;
}

return left;
Expand All @@ -728,10 +725,12 @@ void prepare_revision_walk(struct rev_info *revs)
revs->topo_getter);
}

static int rewrite_one(struct commit **pp)
static int rewrite_one(struct rev_info *revs, struct commit **pp)
{
for (;;) {
struct commit *p = *pp;
if (!revs->limited)
add_parents_to_list(revs, p, &revs->commits);
if (p->object.flags & (TREECHANGE | UNINTERESTING))
return 0;
if (!p->parents)
Expand All @@ -740,12 +739,12 @@ static int rewrite_one(struct commit **pp)
}
}

static void rewrite_parents(struct commit *commit)
static void rewrite_parents(struct rev_info *revs, struct commit *commit)
{
struct commit_list **pp = &commit->parents;
while (*pp) {
struct commit_list *parent = *pp;
if (rewrite_one(&parent->item) < 0) {
if (rewrite_one(revs, &parent->item) < 0) {
*pp = parent->next;
continue;
}
Expand Down Expand Up @@ -802,7 +801,7 @@ struct commit *get_revision(struct rev_info *revs)
if (!(commit->object.flags & TREECHANGE))
continue;
if (revs->parents)
rewrite_parents(commit);
rewrite_parents(revs, commit);
}
commit->object.flags |= SHOWN;
return commit;
Expand Down
1 change: 1 addition & 0 deletions revision.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#define SHOWN (1u<<3)
#define TMP_MARK (1u<<4) /* for isolated cases; clean after use */
#define BOUNDARY (1u<<5)
#define ADDED (1u<<6) /* Parents already parsed and added? */

struct rev_info;

Expand Down

0 comments on commit 3381c79

Please sign in to comment.