Add get_merge_bases_clean()
Add get_merge_bases_clean(), a wrapper for get_merge_bases() that cleans up after doing its work and make get_merge_bases() NOT clean up. Single-shot programs like git-merge-base can use the dirty and fast version. Also move the object flags used in get_merge_bases() out of the range defined in revision.h. This fixes the "66ae0c77...ced9456a 89719209...262a6ef7" test of the ... operator which is introduced with the next patch. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
7c6f8aaf6d
commit
31609c1725
20
commit.c
20
commit.c
@ -849,9 +849,10 @@ void sort_in_topological_order_fn(struct commit_list ** list, int lifo,
|
||||
|
||||
/* merge-rebase stuff */
|
||||
|
||||
#define PARENT1 1
|
||||
#define PARENT2 2
|
||||
#define UNINTERESTING 4
|
||||
/* bits #0..7 in revision.h */
|
||||
#define PARENT1 (1u<< 8)
|
||||
#define PARENT2 (1u<< 9)
|
||||
#define UNINTERESTING (1u<<10)
|
||||
|
||||
static struct commit *interesting(struct commit_list *list)
|
||||
{
|
||||
@ -1080,9 +1081,20 @@ struct commit_list *get_merge_bases(struct commit *rev1, struct commit *rev2)
|
||||
tmp = next;
|
||||
}
|
||||
|
||||
/* reset flags */
|
||||
return result;
|
||||
}
|
||||
|
||||
struct commit_list *get_merge_bases_clean(struct commit *rev1,
|
||||
struct commit *rev2)
|
||||
{
|
||||
unsigned int flags1 = rev1->object.flags;
|
||||
unsigned int flags2 = rev2->object.flags;
|
||||
struct commit_list *result = get_merge_bases(rev1, rev2);
|
||||
|
||||
clear_commit_marks(rev1, PARENT1 | PARENT2 | UNINTERESTING);
|
||||
clear_commit_marks(rev2, PARENT1 | PARENT2 | UNINTERESTING);
|
||||
rev1->object.flags = flags1;
|
||||
rev2->object.flags = flags2;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
1
commit.h
1
commit.h
@ -106,5 +106,6 @@ int register_commit_graft(struct commit_graft *, int);
|
||||
int read_graft_file(const char *graft_file);
|
||||
|
||||
extern struct commit_list *get_merge_bases(struct commit *rev1, struct commit *rev2);
|
||||
extern struct commit_list *get_merge_bases_clean(struct commit *rev1, struct commit *rev2);
|
||||
|
||||
#endif /* COMMIT_H */
|
||||
|
Loading…
Reference in New Issue
Block a user