diff options
-rw-r--r-- | http-push.c | 10 | ||||
-rw-r--r-- | rev-list.c | 4 | ||||
-rw-r--r-- | revision.c | 21 | ||||
-rw-r--r-- | revision.h | 1 |
4 files changed, 18 insertions, 18 deletions
diff --git a/http-push.c b/http-push.c index b60fa8d241..57cefdea53 100644 --- a/http-push.c +++ b/http-push.c @@ -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 diff --git a/rev-list.c b/rev-list.c index 1301502627..359195b547 100644 --- a/rev-list.c +++ b/rev-list.c @@ -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" diff --git a/revision.c b/revision.c index ce35b5a7e6..fe26562381 100644 --- a/revision.c +++ b/revision.c @@ -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 @@ -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; @@ -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) @@ -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; } @@ -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; diff --git a/revision.h b/revision.h index 0caeecf00f..83d28d5205 100644 --- a/revision.h +++ b/revision.h @@ -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; |