Browse Source

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>
maint
Rene Scharfe 19 years ago committed by Junio C Hamano
parent
commit
31609c1725
  1. 20
      commit.c
  2. 1
      commit.h

20
commit.c

@ -849,9 +849,10 @@ void sort_in_topological_order_fn(struct commit_list ** list, int lifo, @@ -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) @@ -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

@ -106,5 +106,6 @@ int register_commit_graft(struct commit_graft *, int); @@ -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…
Cancel
Save