summaryrefslogtreecommitdiff
path: root/revision.c
diff options
context:
space:
mode:
authorThomas Rast <trast@student.ethz.ch>2010-02-20 11:42:04 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-02-20 18:33:11 (GMT)
commit36c079756f9f3ad0bbbe2097550c62427670146b (patch)
treeca9ed8e8cc0288cd5af0c71f64f33f740dfb3826 /revision.c
parentea02eef096d4bfcbb83e76cfab0fcb42dbcad35e (diff)
downloadgit-36c079756f9f3ad0bbbe2097550c62427670146b.zip
git-36c079756f9f3ad0bbbe2097550c62427670146b.tar.gz
git-36c079756f9f3ad0bbbe2097550c62427670146b.tar.bz2
cherry_pick_list: quit early if one side is empty
The --cherry-pick logic starts by counting the commits on each side, so that it can filter away commits on the bigger one. However, so far it missed an opportunity for optimization: it doesn't need to do any work if either side is empty. This in particular helps the common use-case 'git rebase -i HEAD~$n': it internally uses --cherry-pick, but since HEAD~$n is a direct ancestor the left side is always empty. Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'revision.c')
-rw-r--r--revision.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/revision.c b/revision.c
index e75079a..c2fad2f 100644
--- a/revision.c
+++ b/revision.c
@@ -514,6 +514,9 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
right_count++;
}
+ if (!left_count || !right_count)
+ return;
+
left_first = left_count < right_count;
init_patch_ids(&ids);
if (revs->diffopt.nr_paths) {