path: root/builtin/receive-pack.c
diff options
authorJunio C Hamano <>2012-09-11 18:35:26 (GMT)
committerJunio C Hamano <>2012-09-11 18:36:05 (GMT)
commit34f5130af84f7a37fba327d5a5be4f4427dc6886 (patch)
tree1f8836fe7fb70566e31b3f4f5d1475fabd95981b /builtin/receive-pack.c
parent0083f1d43a7280aefa23656eaac7266139484b24 (diff)
parentf37d3c755209234acfc2ca280027ebdab8e9ea8a (diff)
Merge branch 'jc/merge-bases'
Optimise the "merge-base" computation a bit, and also update its users that do not need the full merge-base information to call a cheaper subset. * jc/merge-bases: reduce_heads(): reimplement on top of remove_redundant() merge-base: "--is-ancestor A B" get_merge_bases_many(): walk from many tips in parallel in_merge_bases(): use paint_down_to_common() merge_bases_many(): split out the logic to paint history in_merge_bases(): omit unnecessary redundant common ancestor reduction http-push: use in_merge_bases() for fast-forward check receive-pack: use in_merge_bases() for fast-forward check in_merge_bases(): support only one "other" commit
Diffstat (limited to 'builtin/receive-pack.c')
1 files changed, 1 insertions, 7 deletions
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 2cb854f..9145f1a 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -480,7 +480,6 @@ static const char *update(struct command *cmd)
!prefixcmp(name, "refs/heads/")) {
struct object *old_object, *new_object;
struct commit *old_commit, *new_commit;
- struct commit_list *bases, *ent;
old_object = parse_object(old_sha1);
new_object = parse_object(new_sha1);
@@ -493,12 +492,7 @@ static const char *update(struct command *cmd)
old_commit = (struct commit *)old_object;
new_commit = (struct commit *)new_object;
- bases = get_merge_bases(old_commit, new_commit, 1);
- for (ent = bases; ent; ent = ent->next)
- if (!hashcmp(old_sha1, ent->item->object.sha1))
- break;
- free_commit_list(bases);
- if (!ent) {
+ if (!in_merge_bases(old_commit, new_commit)) {
rp_error("denying non-fast-forward %s"
" (you should pull first)", name);
return "non-fast-forward";