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:
Rene Scharfe 2006-07-02 01:29:26 +02:00 committed by Junio C Hamano
parent 7c6f8aaf6d
commit 31609c1725
2 changed files with 17 additions and 4 deletions

View File

@ -849,9 +849,10 @@ void sort_in_topological_order_fn(struct commit_list ** list, int lifo,
/* merge-rebase stuff */ /* merge-rebase stuff */
#define PARENT1 1 /* bits #0..7 in revision.h */
#define PARENT2 2 #define PARENT1 (1u<< 8)
#define UNINTERESTING 4 #define PARENT2 (1u<< 9)
#define UNINTERESTING (1u<<10)
static struct commit *interesting(struct commit_list *list) 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; 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(rev1, PARENT1 | PARENT2 | UNINTERESTING);
clear_commit_marks(rev2, PARENT1 | PARENT2 | UNINTERESTING); clear_commit_marks(rev2, PARENT1 | PARENT2 | UNINTERESTING);
rev1->object.flags = flags1;
rev2->object.flags = flags2;
return result; return result;
} }

View File

@ -106,5 +106,6 @@ int register_commit_graft(struct commit_graft *, int);
int read_graft_file(const char *graft_file); 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(struct commit *rev1, struct commit *rev2);
extern struct commit_list *get_merge_bases_clean(struct commit *rev1, struct commit *rev2);
#endif /* COMMIT_H */ #endif /* COMMIT_H */