I tested on Debian 6.0 Squeeze and on Sourceforge Redhat server. Just installed FreeBSD 9.0 in a VM and sed on FreeBSD needs a semicolon to separate last command and closing bracket. The used sed functions are just the most basic sed and regexe functions.
Corrected line: SUSPICIOUS=$($SVNLOOK diff -t "$TXN" "$REPOS" | sed -n -e '/^+<<<<<<< \..*$/,/^+>>>>>>> \..*$/ { /^+=======$/p ; //q ; }' | wc -l) Also re-tested successfully on Debian 6.0 Squeeze and Sourceforge Redhat server. Sorry for the inconvenience Maddes I'm not subscribed and would appreciate being explicitly Cc:ed in any responses. Thanks. On 20.02.2013 15:47, Daniel Shahaf wrote: > Thanks Gavin. Matthias: how portable are the sed constructs you used? > > They seem to be invalid on BSD sed: > % printf 'foo\nbar\nbaz\n' | sed -ne '/foo/,/baz/ { /bar/p }' > sed: 1: "/foo/,/baz/ { /bar/p } > ": extra characters at the end of p command > > I don't mind improving the detection but I'd like to keep the script > portable (and the check cheap, if possible, since 'diff' output can be > large). > > Gavin Baumanis wrote on Wed, Feb 20, 2013 at 09:10:48 -0500: >> Ping. >> This Patch submission has received no comments. >> >> >> >> > -----Original Message----- >> > From: Matthias Buecher / Germany [mailto:m...@maddes.net] >> > Sent: Saturday, 2 February 2013 15:20 >> > To: dev@subversion.apache.org >> > Subject: [bug] detect-merge-conflicts.sh reports false positive merge >> > conflict >> > markers >> > >> > Hello, >> > >> > the contrib script "detect-merge-conflicts.sh" [1] uses a grep command >> > which >> > also finds false positive merge conflict markers: it finds single lines of >> > "=======" and the pre-commit will fail. >> > >> > For example I wanted to add a readme file that contains the following two >> > lines: >> > Install >> > ======= >> > >> > Of course committing failed. >> > >> > The correct solution would be to use sed and search for real blocks of >> > merge >> > conflict marker: >> > SUSPICIOUS=$($SVNLOOK diff -t "$TXN" "$REPOS" | sed -n -e '/^+<<<<<<< >> > \..*$/,/^+>>>>>>> \..*$/ { /^+=======$/p ; //q }' | wc -l) >> > >> > This sed command finds blocks enclosed with new "<<<<<< ." and ">>>>>>>." >> > and checks if this block contains a new line with "=======". If found it >> > prints >> > out that line and quits sed. >> > >> > Kind regards >> > Matthias "Maddes" Bücher >> > >> > P.S.: >> > I'm not subscribed and would appreciate being explicitly Cc:ed in any >> > responses. Thanks. >> > >> > [1] http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook- >> > scripts/detect-merge-conflicts.sh >> > Matthias "Maddes" Bücher -- http://www.maddes.net/ Home: Earth / Germany / Ruhr-Area