зеркало из https://github.com/microsoft/git.git
receive-pack: use in_merge_bases() for fast-forward check
The original computed merge-base between the old commit and the new commit and checked if the old commit was a merge base between them, in order to make sure we are fast-forwarding. Instead, call in_merge_bases(old, new) which does the same. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
a20efee9cf
Коммит
5d55915c7a
|
@ -478,7 +478,6 @@ static const char *update(struct command *cmd)
|
||||||
!prefixcmp(name, "refs/heads/")) {
|
!prefixcmp(name, "refs/heads/")) {
|
||||||
struct object *old_object, *new_object;
|
struct object *old_object, *new_object;
|
||||||
struct commit *old_commit, *new_commit;
|
struct commit *old_commit, *new_commit;
|
||||||
struct commit_list *bases, *ent;
|
|
||||||
|
|
||||||
old_object = parse_object(old_sha1);
|
old_object = parse_object(old_sha1);
|
||||||
new_object = parse_object(new_sha1);
|
new_object = parse_object(new_sha1);
|
||||||
|
@ -491,12 +490,7 @@ static const char *update(struct command *cmd)
|
||||||
}
|
}
|
||||||
old_commit = (struct commit *)old_object;
|
old_commit = (struct commit *)old_object;
|
||||||
new_commit = (struct commit *)new_object;
|
new_commit = (struct commit *)new_object;
|
||||||
bases = get_merge_bases(old_commit, new_commit, 1);
|
if (!in_merge_bases(old_commit, new_commit)) {
|
||||||
for (ent = bases; ent; ent = ent->next)
|
|
||||||
if (!hashcmp(old_sha1, ent->item->object.sha1))
|
|
||||||
break;
|
|
||||||
free_commit_list(bases);
|
|
||||||
if (!ent) {
|
|
||||||
rp_error("denying non-fast-forward %s"
|
rp_error("denying non-fast-forward %s"
|
||||||
" (you should pull first)", name);
|
" (you should pull first)", name);
|
||||||
return "non-fast-forward";
|
return "non-fast-forward";
|
||||||
|
|
Загрузка…
Ссылка в новой задаче