summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-01-28 11:04:30 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-02-05 08:38:41 (GMT)
commitecf4c2ec6ba6dc39e72c6b37f2a238e28fec2dc1 (patch)
tree374f1a731497684787e925b85ed29727b36b1cf9
parentb94f2eda99646fea71f84ccd895d94b0001d0db6 (diff)
downloadgit-ecf4c2ec6ba6dc39e72c6b37f2a238e28fec2dc1.zip
git-ecf4c2ec6ba6dc39e72c6b37f2a238e28fec2dc1.tar.gz
git-ecf4c2ec6ba6dc39e72c6b37f2a238e28fec2dc1.tar.bz2
builtin-apply.c: optimize match_beginning/end processing a bit.
Wnen the caller knows the hunk needs to match at the beginning or at the end, there is no point starting from the line number that is found in the patch and trying match with increasing offset. The logic to find matching lines was made more line oriented with the previous patch and this optimization is now trivial. Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-apply.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/builtin-apply.c b/builtin-apply.c
index e046e87..dc650f1 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -1579,6 +1579,16 @@ static int find_pos(struct image *img,
if (preimage->nr > img->nr)
return -1;
+ /*
+ * If match_begining or match_end is specified, there is no
+ * point starting from a wrong line that will never match and
+ * wander around and wait for a match at the specified end.
+ */
+ if (match_beginning)
+ line = 0;
+ else if (match_end)
+ line = img->nr - preimage->nr;
+
try = 0;
for (i = 0; i < line; i++)
try += img->line[i].len;