diff options
author | Junio C Hamano <junkio@cox.net> | 2007-01-08 23:22:31 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-01-09 17:57:03 -0800 |
commit | 03840fc32d783be6750bf7e41a89687b8c3053eb (patch) | |
tree | 8653bc787e3eee04d2fad107b32c1fe12e7fe05f | |
parent | 71dfbf224ff980f4085f75868dc409118418731e (diff) | |
download | git-03840fc32d783be6750bf7e41a89687b8c3053eb.tar.gz |
Allow in_merge_bases() to take more than one reference commits.
The internal function in_merge_bases(A, B) is used to make sure
that commit A is an ancestor of commit B. This changes the
signature of it to take an array of B's and updates its current
callers.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | builtin-branch.c | 2 | ||||
-rw-r--r-- | builtin-reflog.c | 4 | ||||
-rw-r--r-- | commit.c | 9 | ||||
-rw-r--r-- | commit.h | 2 |
4 files changed, 10 insertions, 7 deletions
diff --git a/builtin-branch.c b/builtin-branch.c index d3df5a57f1..020ed6be7b 100644 --- a/builtin-branch.c +++ b/builtin-branch.c @@ -134,7 +134,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds) */ if (!force && - !in_merge_bases(rev, head_rev)) { + !in_merge_bases(rev, &head_rev, 1)) { error("The branch '%s' is not a strict subset of " "your current HEAD.\n" "If you are sure you want to delete it, " diff --git a/builtin-reflog.c b/builtin-reflog.c index a967117661..fb37984ae6 100644 --- a/builtin-reflog.c +++ b/builtin-reflog.c @@ -217,8 +217,8 @@ static int expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1, if ((timestamp < cb->cmd->expire_unreachable) && (!cb->ref_commit || - (old && !in_merge_bases(old, cb->ref_commit)) || - (new && !in_merge_bases(new, cb->ref_commit)))) + (old && !in_merge_bases(old, &cb->ref_commit, 1)) || + (new && !in_merge_bases(new, &cb->ref_commit, 1)))) goto prune; if (cb->newlog) @@ -1158,14 +1158,17 @@ struct commit_list *get_merge_bases(struct commit *one, return result; } -int in_merge_bases(struct commit *rev1, struct commit *rev2) +int in_merge_bases(struct commit *commit, struct commit **reference, int num) { struct commit_list *bases, *b; int ret = 0; - bases = get_merge_bases(rev1, rev2, 1); + if (num == 1) + bases = get_merge_bases(commit, *reference, 1); + else + die("not yet"); for (b = bases; b; b = b->next) { - if (!hashcmp(rev1->object.sha1, b->item->object.sha1)) { + if (!hashcmp(commit->object.sha1, b->item->object.sha1)) { ret = 1; break; } @@ -114,5 +114,5 @@ extern int is_repository_shallow(); extern struct commit_list *get_shallow_commits(struct object_array *heads, int depth, int shallow_flag, int not_shallow_flag); -int in_merge_bases(struct commit *rev1, struct commit *rev2); +int in_merge_bases(struct commit *, struct commit **, int); #endif /* COMMIT_H */ |