Fede [off-list ref] writes:
There is a similar issue with renames and I'm working on that.
I think I queued a fix-up in 'pu' on top of your patch last night. Does
it work for you?
El 22/10/10 15:41, Junio C Hamano escribió:
Fede [off-list ref] writes:
quoted
There is a similar issue with renames and I'm working on that.
I think I queued a fix-up in 'pu' on top of your patch last night. Does
it work for you?
Yes, is almost what I got. I also checked p_value not to be 0.
Anyway, the whole thing is broken when -p 0 , and it requires a little
bit more work. Specially in apply.c:stop_at_slash().
I have this:
diff --git a/builtin/apply.c b/builtin/apply.c
index 14996f8..3197e38 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -919,28 +919,28 @@ static int gitdiff_newfile(const char *line,
struct patch *patch)
static int gitdiff_copysrc(const char *line, struct patch *patch)
{
patch->is_copy = 1;
- patch->old_name = find_name(line, NULL, 0, 0);
+ patch->old_name = find_name(line, NULL, p_value ? p_value - 1 :
0, 0);
return 0;
}
static int gitdiff_copydst(const char *line, struct patch *patch)
{
patch->is_copy = 1;
- patch->new_name = find_name(line, NULL, 0, 0);
+ patch->new_name = find_name(line, NULL, p_value ? p_value - 1 :
0, 0);
return 0;
}
static int gitdiff_renamesrc(const char *line, struct patch *patch)
{
patch->is_rename = 1;
- patch->old_name = find_name(line, NULL, 0, 0);
+ patch->old_name = find_name(line, NULL, p_value ? p_value - 1 :
0, 0);
return 0;
}
static int gitdiff_renamedst(const char *line, struct patch *patch)
{
patch->is_rename = 1;
- patch->new_name = find_name(line, NULL, 0, 0);
+ patch->new_name = find_name(line, NULL, p_value ? p_value - 1 :
0, 0);
return 0;
}
Fix for rename/copy patches. Filenames don't include
'a/' or 'b/' prefix, then use p_value minus one.
Also add 'copy' test script.
Signed-off-by: Federico Cuello <redacted>
---
builtin/apply.c | 8 ++++----
t/t4120-apply-popt.sh | 13 +++++++++++++
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/builtin/apply.c b/builtin/apply.c
index 14996f8..3197e38 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -919,28 +919,28 @@ static int gitdiff_newfile(const char *line, struct patch *patch)
static int gitdiff_copysrc(const char *line, struct patch *patch)
{
patch->is_copy = 1;
- patch->old_name = find_name(line, NULL, 0, 0);
+ patch->old_name = find_name(line, NULL, p_value ? p_value - 1 : 0, 0);
return 0;
}
static int gitdiff_copydst(const char *line, struct patch *patch)
{
patch->is_copy = 1;
- patch->new_name = find_name(line, NULL, 0, 0);
+ patch->new_name = find_name(line, NULL, p_value ? p_value - 1 : 0, 0);
return 0;
}
static int gitdiff_renamesrc(const char *line, struct patch *patch)
{
patch->is_rename = 1;
- patch->old_name = find_name(line, NULL, 0, 0);
+ patch->old_name = find_name(line, NULL, p_value ? p_value - 1 : 0, 0);
return 0;
}
static int gitdiff_renamedst(const char *line, struct patch *patch)
{
patch->is_rename = 1;
- patch->new_name = find_name(line, NULL, 0, 0);
+ patch->new_name = find_name(line, NULL, p_value ? p_value - 1 : 0, 0);
return 0;
}
diff --git a/t/t4120-apply-popt.sh b/t/t4120-apply-popt.sh
index 579c9e6..4ed06f0 100755
--- a/t/t4120-apply-popt.sh
+++ b/t/t4120-apply-popt.sh
@@ -82,4 +82,17 @@ test_expect_success 'apply (-p2) diff, rename' '
test_cmp expected file2
'
+test_expect_success 'apply (-p2) diff, copy' '
+ cat >patch.copy <<-\EOF &&
+ diff --git a/sub/file1 b/sub/file2
+ similarity index 100%
+ copy from sub/file1
+ copy to sub/file2
+ EOF
+ cp file1.saved file1 &&
+ rm -f file2 &&
+ git apply -p2 patch.copy &&
+ test_cmp file1 file2
+'
+
test_done
--
1.7.3.2