Bug 53625

Summary: svn-apply and/or patch(1) has trouble applying patches that makes changes to files with Windows line endings
Product: WebKit Reporter: Daniel Bates <dbates>
Component: Tools / TestsAssignee: Daniel Bates <dbates>
Status: RESOLVED FIXED    
Severity: Normal CC: abarth, abecsi, aroben, carol, ddkilzer, eric, gustavo, levin, mrobinson, ossy, webkit.review.bot
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: PC   
OS: OS X 10.5   
Bug Depends on:    
Bug Blocks: 53607    
Attachments:
Description Flags
Patch
none
Patch
levin: review-
Work-in-progress patch
none
Patch and unit tests
none
Patch and unit tests
none
Patch and unit tests eric: review+

Daniel Bates
Reported 2011-02-02 13:43:47 PST
As observed in bug #53348 and #53607, svn-apply and/or patch(1) has trouble applying patches that make changes to files with Windows line endings.
Attachments
Patch (1.60 KB, patch)
2011-04-09 22:29 PDT, David Levin
no flags
Patch (1.79 KB, patch)
2011-04-09 23:44 PDT, David Levin
levin: review-
Work-in-progress patch (15.28 KB, patch)
2011-04-11 02:13 PDT, Daniel Bates
no flags
Patch and unit tests (21.87 KB, patch)
2011-04-11 12:40 PDT, Daniel Bates
no flags
Patch and unit tests (21.94 KB, patch)
2011-04-11 13:57 PDT, Daniel Bates
no flags
Patch and unit tests (21.96 KB, patch)
2011-04-11 14:02 PDT, Daniel Bates
eric: review+
Daniel Bates
Comment 1 2011-02-02 13:45:38 PST
Also observed in bug #53573.
Daniel Bates
Comment 2 2011-02-02 13:55:48 PST
I did not encounter any issues when using svn-apply to apply the patch for bug #53348, and bug #53607 (attachment 80936 [details] - https://bugs.webkit.org/attachment.cgi?id=80936). I am using Mac OS 10.6.6 with patch(1) version 2.5.8. I am curious as to the whether of patch(1) being used on the various EWS bots. CC'ing Gustavo Silva with regards to the version patch(1) on the GTK EWS bot.
Daniel Bates
Comment 3 2011-02-02 13:57:23 PST
(In reply to comment #2) > I am curious as to the whether of patch(1) being used on the various EWS bots. > Wow, that came out terribly mangled. I meant to write: I am curious as to what version of patch(1) is installed on the various EWS bots.
Daniel Bates
Comment 4 2011-02-02 17:07:53 PST
On IRC today (02/02/11), Gustavo Silva wrote: [14:17] <kov> dydx, hey, 2.6 is the patch I have on the EWS (it's got whatever is in debian unstable usually)
Csaba Osztrogonác
Comment 5 2011-02-18 09:09:38 PST
On Qt EWS now we use patch 2.5.9. After upgrading to Squeeze we will use 2.6. (in 2-3 weeks)
Martin Robinson
Comment 6 2011-02-18 09:14:59 PST
It seems the issue, at least in the case of the GTK+ EWS, is that some files are checked out with CRLF line endings and some with newlines. To ensure proper patch application, I believe that Unix machines need to be using newline line-endings for every file. There are a few knobs you can turn for git checkouts. Gustavo is looking into what the appropriate knob is.
Eric Seidel (no email)
Comment 7 2011-02-18 09:49:30 PST
I'm happy to set up any and all knobs on the commit bots. Especially if they're documented in the WebKit Git instructions (on the wiki).
Carol Szabo
Comment 8 2011-02-18 11:02:22 PST
I am seeing issues on EWS with patching WebCore.vcproj on the mac based bots and GTK+. Patching with non-matching line endings is a pain. The way I addressed the issue in the EWS like systems that I built was partly by rules, partly by software: The rules are: 1. All text files in the system would be required to have the svn:eol-style property set to native. 2. All files that appear as text files, but for whatever reason cannot have the svn:eol-style property set to native should have svn:mime-type property set to something like application/octet-stream. The software would use flip or a similar tool to convert the line-endings in the patch to the configuration native to the architecture the buildbot runs in before application. This should not be that hard to implement. I am volunteering to help.
Gustavo Noronha (kov)
Comment 9 2011-03-14 10:23:39 PDT
I discussed my theory about this on IRC once, and just told dbates about it in an email reply, but thought I'd share it here. There is a .gitattributes file in our tree. It forces CRLF on some file types, including *.vcproj files: $ grep crlf .gitattributes | wc -l 226 $ grep vcproj .gitattributes *.vcproj eol=crlf $ Older checkouts (from before those rules being added) do not seem to suffer from the problem (i.e., my own checkout that runs on a system very much like the EWS bot works, as does Martin's). I'm also happy to apply any knobs, but reading docs and trying (not too much since my time's been quite limited) I didn't find anything that would guarantee the effect we want. Also, since it's not been mentioned explicitly in this bug yet, notice that the commit-queue suffers from the same issue - quite likely because it's got a new checkout itself.
Daniel Bates
Comment 10 2011-03-14 12:02:40 PDT
(In reply to comment #9) > I discussed my theory about this on IRC once, and just told dbates about it in an email reply, but thought I'd share it here. There is a .gitattributes file in our tree. It forces CRLF on some file types, including *.vcproj files: > > $ grep crlf .gitattributes | wc -l > 226 > $ grep vcproj .gitattributes > *.vcproj eol=crlf > $ > Older versions of Git (e.g. 1.7.0.3) do not support the eol attribute. Instead, the line endings for checked out files are influenced by various factors, including the value of core.autocrlf. From a brief check, our .vcproj files have svn:eol-style native. We should look to have both Git and SVN match. Additionally, we should either consider requiring a minimum version of Git (that support the eol attribute) and/or teach svn-apply/svn-unapply how to compensate for older Git versions.
David Levin
Comment 11 2011-04-09 22:29:23 PDT
Adam Barth
Comment 12 2011-04-09 22:40:25 PDT
Comment on attachment 88946 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=88946&action=review That's horrible, but also amazing. > Tools/Scripts/svn-apply:335 > + if (basename($fullPath) =~ "\.vcproj\$" || basename($fullPath) =~ "\.vsprops\$") { I think there's some sneaky way of writing regular expressions in perl that avoids the need to \ the $.
David Levin
Comment 13 2011-04-09 23:00:43 PDT
Comment on attachment 88946 [details] Patch Committed as http://trac.webkit.org/changeset/83394. Also I found the way of not escaping the $ use // instead of "" (I don't speak perl colloquially.)
Daniel Bates
Comment 14 2011-04-09 23:07:59 PDT
I know this patch has already been reviewed and landed in <http://trac.webkit.org/changeset/83394>. I wanted to add some remarks. The patch is incorrect and will break svn-apply/unapply for all people with an SVN checkout on a Unix file system (this includes SVN under a default installation of Cygwin). This is because the Visual Studio project files have been checked into the repository with Unix line endings and have svn:eol-style: native. So, these files will have Unix new lines in an SVN checkout on a Unix file system. Note, this patch will fix the issue for people who use Git version greater than 1.7.0.3. Since the commit/EWS bots seem to using this version of Git, this patch will resolve the issue. At the very least, there should be a FIXME comment.
David Levin
Comment 15 2011-04-09 23:18:06 PDT
Reverted r83394 for reason: Patch Committed r83395: <http://trac.webkit.org/changeset/83395>
Adam Barth
Comment 16 2011-04-09 23:21:49 PDT
It was foolish of me to review this patch without waiting for dbates. I just got so excited about the prospect of fixing this bug. Sorry Dan.
David Levin
Comment 17 2011-04-09 23:22:21 PDT
(In reply to comment #14) > The patch is incorrect and will break svn-apply/unapply for all people with an SVN checkout on a Unix file system (this includes SVN under a default installation of Cygwin). ... Thanks for the info. Rolled out. http://trac.webkit.org/changeset/83395 I suppose patch could be more sophisticated to look at the very first line ending of the file and use that to decided if we are dealing with DOS endings or not. Would that work? I really want to get this fixed as I hear about people hitting this often enough (and then I get pings to help land patches....)
Daniel Bates
Comment 18 2011-04-09 23:30:46 PDT
(In reply to comment #17) > (In reply to comment #14) > > The patch is incorrect and will break svn-apply/unapply for all people with an SVN checkout on a Unix file system (this includes SVN under a default installation of Cygwin). ... > > Thanks for the info. Rolled out. http://trac.webkit.org/changeset/83395 > > I suppose patch could be more sophisticated to look at the very first line ending of the file and use that to decided if we are dealing with DOS endings or not. I take it you mean svn-apply not patch. Yes, this is the approach I'm taking. > > Would that work? I believe it will work. > > I really want to get this fixed as I hear about people hitting this often enough (and then I get pings to help land patches....) I agree. For completeness, I am currently working on a fix for this issue and hope to post it tomorrow (04/10) / Monday. That being said, I would prefer we fix this as soon as possible. So, feel free to post an updated patch or a temporary workaround that we can use.
David Levin
Comment 19 2011-04-09 23:33:35 PDT
(In reply to comment #18) > I take it you mean svn-apply not patch. Yes, this is the approach I'm taking. s/patch/my patch/ for my comment :)
David Levin
Comment 20 2011-04-09 23:44:29 PDT
Daniel Bates
Comment 21 2011-04-10 00:03:03 PDT
Comment on attachment 88947 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=88947&action=review This patch is OK. That being said, we will also need to update svn-unapply and, if possible, add unit tests for this change. Towards this, we should look to extract the file EOL logic into a function in VCSUtils.pm so that it can be shared by both svn-apply/unapply. I suggest that we add a FIXME comment above your change to indicate that we should add similar functionality to svn-unapply and/or extract some of this code and move it to VCSUtils.pm. > Tools/Scripts/svn-apply:339 > + # Think of it as escaping. Patch will convert \r\n to \n, so \r\r\n becomes \r\n. Nit: Patch => Patch(1)
David Levin
Comment 22 2011-04-10 00:13:19 PDT
Comment on attachment 88947 [details] Patch After discussing this more with Daniel, this patch would work ok, but has issues that should be addressed and he has a patch that would be more comprehensive (that should come on Monday and no one will probably hit this much during the weekend, so we'll ditch this version).
Daniel Bates
Comment 23 2011-04-11 02:13:46 PDT
Created attachment 88978 [details] Work-in-progress patch Work-in-progress patch. Needs change log and some more unit tests. Will continue working on it today (04/11).
Daniel Bates
Comment 24 2011-04-11 12:40:13 PDT
Created attachment 89055 [details] Patch and unit tests
WebKit Review Bot
Comment 25 2011-04-11 12:45:20 PDT
Attachment 89055 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Tools/ChangeLog', u'Tools/Scripts/VCSUtils..." exit_code: 1 Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:66: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:67: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:74: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:75: Line contains tab character. [whitespace/tab] [5] Total errors found: 4 in 5 files If any of these errors are false positives, please file a bug against check-webkit-style.
Daniel Bates
Comment 26 2011-04-11 12:52:37 PDT
(In reply to comment #25) > [...] > Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:66: Line contains tab character. [whitespace/tab] [5] > Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:67: Line contains tab character. [whitespace/tab] [5] > Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:74: Line contains tab character. [whitespace/tab] [5] > Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:75: Line contains tab character. [whitespace/tab] [5] > Total errors found: 4 in 5 files The presence of these tab characters on these lines is expected since these lines are part of sample diff headers.
Eric Seidel (no email)
Comment 27 2011-04-11 13:04:12 PDT
Comment on attachment 89055 [details] Patch and unit tests View in context: https://bugs.webkit.org/attachment.cgi?id=89055&action=review > Tools/Scripts/VCSUtils.pm:454 > +sub parseEOL($) Maybe parseFirstEOL? > Tools/Scripts/VCSUtils.pm:872 > +sub parseDiff($$;$) No clue what your fancy semi-colon does.
Daniel Bates
Comment 28 2011-04-11 13:46:05 PDT
(In reply to comment #27) > (From update of attachment 89055 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=89055&action=review > > > Tools/Scripts/VCSUtils.pm:454 > > +sub parseEOL($) > > Maybe parseFirstEOL? Will change. > > > Tools/Scripts/VCSUtils.pm:872 > > +sub parseDiff($$;$) > > No clue what your fancy semi-colon does. As per <http://perldoc.perl.org/perlsub.html#Prototypes>: "A semicolon (;) separates mandatory arguments from optional arguments."
Daniel Bates
Comment 29 2011-04-11 13:57:51 PDT
Created attachment 89081 [details] Patch and unit tests Renamed parseEOL() to parseFirstEOL() as suggested by Eric Seidel. Also, renamed fileEOL() to firstEOLInFile() in VCSUtils.pm and parseEOLWithString() to firstEOLInString() in parseEOL.pl so as to be more descriptive.
WebKit Review Bot
Comment 30 2011-04-11 14:00:42 PDT
Attachment 89081 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Tools/ChangeLog', u'Tools/Scripts/VCSUtils..." exit_code: 1 Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:66: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:67: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:74: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:75: Line contains tab character. [whitespace/tab] [5] Total errors found: 4 in 5 files If any of these errors are false positives, please file a bug against check-webkit-style.
Daniel Bates
Comment 31 2011-04-11 14:02:52 PDT
Created attachment 89082 [details] Patch and unit tests Renamed unit test file parseEOL.pl to parseFirstEOL.pl to reflect the name change of the function it's testing.
WebKit Review Bot
Comment 32 2011-04-11 14:06:05 PDT
Attachment 89082 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Tools/ChangeLog', u'Tools/Scripts/VCSUtils..." exit_code: 1 Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:66: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:67: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:74: Line contains tab character. [whitespace/tab] [5] Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:75: Line contains tab character. [whitespace/tab] [5] Total errors found: 4 in 5 files If any of these errors are false positives, please file a bug against check-webkit-style.
Eric Seidel (no email)
Comment 33 2011-04-11 15:02:56 PDT
Comment on attachment 89082 [details] Patch and unit tests I'm willing to rubber-stamp this. If you need a more indepth review, you'll need to consult with Darin or Adam Roben or someone who speaks perl better than I.
Daniel Bates
Comment 34 2011-04-12 10:18:54 PDT
Note You need to log in before you can comment on or make changes to this bug.