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>maint
parent
71dfbf224f
commit
03840fc32d
|
@ -134,7 +134,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!force &&
|
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 "
|
error("The branch '%s' is not a strict subset of "
|
||||||
"your current HEAD.\n"
|
"your current HEAD.\n"
|
||||||
"If you are sure you want to delete it, "
|
"If you are sure you want to delete it, "
|
||||||
|
|
|
@ -217,8 +217,8 @@ static int expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
|
||||||
|
|
||||||
if ((timestamp < cb->cmd->expire_unreachable) &&
|
if ((timestamp < cb->cmd->expire_unreachable) &&
|
||||||
(!cb->ref_commit ||
|
(!cb->ref_commit ||
|
||||||
(old && !in_merge_bases(old, cb->ref_commit)) ||
|
(old && !in_merge_bases(old, &cb->ref_commit, 1)) ||
|
||||||
(new && !in_merge_bases(new, cb->ref_commit))))
|
(new && !in_merge_bases(new, &cb->ref_commit, 1))))
|
||||||
goto prune;
|
goto prune;
|
||||||
|
|
||||||
if (cb->newlog)
|
if (cb->newlog)
|
||||||
|
|
9
commit.c
9
commit.c
|
@ -1158,14 +1158,17 @@ struct commit_list *get_merge_bases(struct commit *one,
|
||||||
return result;
|
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;
|
struct commit_list *bases, *b;
|
||||||
int ret = 0;
|
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) {
|
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;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
2
commit.h
2
commit.h
|
@ -114,5 +114,5 @@ extern int is_repository_shallow();
|
||||||
extern struct commit_list *get_shallow_commits(struct object_array *heads,
|
extern struct commit_list *get_shallow_commits(struct object_array *heads,
|
||||||
int depth, int shallow_flag, int not_shallow_flag);
|
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 */
|
#endif /* COMMIT_H */
|
||||||
|
|
Loading…
Reference in New Issue