[PATCH 1/6] Allow in_merge_bases() to take more than one reference commits.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxx>
---
 builtin-branch.c |    2 +-
 builtin-reflog.c |    4 ++--
 commit.c         |    9 ++++++---
 commit.h         |    2 +-
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/builtin-branch.c b/builtin-branch.c
index c760e18..daca603 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 a967117..fb37984 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)
diff --git a/commit.c b/commit.c
index 496d37a..aa14c5a 100644
--- a/commit.c
+++ b/commit.c
@@ -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;
 		}
diff --git a/commit.h b/commit.h
index 936f8fc..b8e6e18 100644
--- a/commit.h
+++ b/commit.h
@@ -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 */
-- 
1.4.4.4.g564d


-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]