Hi!
[Sorry for not putting the shell script as an attachment. Could not
create a new thread with mutt.]
I'm getting a conflict when using svn patch with the shell script
below. According to the issue all lines after the empty line should be
ignored. Did I do something wrong?
My explanation to the behavior is that svn patch in
subversion/libsvn_client/patch.c (match_hunk) only compares hunk lines
that begin with '-' or ' '. I must add a ' ' if the hunk line does not
begin with one.
#!/bin/sh
# Tries to apply a diff where leading space on one line is dropped.
BASE_DIR=~/Code/Subversion/trunk
SVN=${BASE_DIR}/subversion/svn/svn
SVNADMIN=${BASE_DIR}/subversion/svnadmin/svnadmin
URL=file:///`pwd`/repos
rm -rf repos wc* import-me
${SVNADMIN} create repos
mkdir import-me;
cd import-me;
cat >> foo << EOF
bar
baz
EOF
${SVN} import -q -m "" ${URL}/trunk
cd ..;
${SVN} co ${URL}/trunk wc -q
cd wc
cat > foo << EOF
foo
EOF
${SVN} di > p
${SVN} revert foo;
# Remove the space from the empty line in the diff
cat p | sed -e "s/^[ ]$//" > p2
${SVN} patch p2
cat foo
My first ideas briefly (not implemented):
* subversion/libsvn_diff/parse_diff.c
(svn_diff__parse_next_hunk): Allow empty lines to be part of hunk.
Should use some library function.
* subversion/libsvn_client/patch.c
(apply_one_hunk): Allow for applying diffs with fuzz. Issue 3460.
* subversion/libsvn_client/patch.c
(match_hunk): Right now it demands that hunk lines begin with ' ' or
'-' and that the hunk line is one character longer than the target line.
That must be fixed.
Am I on the right track?
My idea for allowing empty lines:
Index: subversion/libsvn_diff/parse-diff.c
===================================================================
--- subversion/libsvn_diff/parse-diff.c (revision 38568)
+++ subversion/libsvn_diff/parse-diff.c (arbetskopia)
@@ -358,7 +358,10 @@
}
c = line->data[0];
- if (c == ' ' || c == '-' || c == '+')
+ if (c == ' ' || c == '-' || c == '+'
+ || (line->len == 1 && c == '\n')
+ || (line->len == 1 && c == '\r')
+ || (line->len == 2 && c == '\r' && line->data[1] == '\n'))
hunk_seen = TRUE;
else
Mvh
Daniel
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2380627
Received on 2009-08-05 22:47:25 CEST