aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-03-15 14:22:00 -0700
committerJunio C Hamano <gitster@pobox.com>2011-03-15 14:22:00 -0700
commitaf2b1848ccf43d5df9f47e0a4fab1ac6f58be78e (patch)
tree8aa16847dfd5b0d45e84f09a8d97e5c8ff594ffb
parent848e219fe696b45d36353d12cdb47870cae2559e (diff)
parent9d158601b3cb9753825e21441c88d31297b97be5 (diff)
downloadgit-af2b1848ccf43d5df9f47e0a4fab1ac6f58be78e.tar.gz
git-af2b1848ccf43d5df9f47e0a4fab1ac6f58be78e.tar.xz
Merge branch 'jc/maint-apply-no-double-patch'
* jc/maint-apply-no-double-patch: apply: do not patch lines that were already patched
-rw-r--r--builtin/apply.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/builtin/apply.c b/builtin/apply.c
index 14951daed..04f56f850 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -204,6 +204,7 @@ struct line {
unsigned hash : 24;
unsigned flag : 8;
#define LINE_COMMON 1
+#define LINE_PATCHED 2
};
/*
@@ -2085,7 +2086,8 @@ static int match_fragment(struct image *img,
/* Quick hash check */
for (i = 0; i < preimage_limit; i++)
- if (preimage->line[i].hash != img->line[try_lno + i].hash)
+ if ((img->line[try_lno + i].flag & LINE_PATCHED) ||
+ (preimage->line[i].hash != img->line[try_lno + i].hash))
return 0;
if (preimage_limit == preimage->nr) {
@@ -2428,6 +2430,9 @@ static void update_image(struct image *img,
memcpy(img->line + applied_pos,
postimage->line,
postimage->nr * sizeof(*img->line));
+ for (i = 0; i < postimage->nr; i++)
+ img->line[applied_pos + i].flag |= LINE_PATCHED;
+
img->nr = nr;
}