patch: tweaks
authorRob Landley <rob@landley.net>
Sun, 3 Oct 2010 22:49:48 +0000 (00:49 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 3 Oct 2010 22:49:48 +0000 (00:49 +0200)
1) Eliminate spurious warnings about possibly reduced hunks.  Instead only
note a possible location if we don't find a non-reversed place to apply it.
(Otherwise, hunks that move code forward around within a file look reversed at
the removal site.)

2) Open the source file read-only, so we can apply patches to read-only files.

Signed-off-by: Rob Landley <rob@landley.net>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/patch.c

index c40f54155e0419928d838d7693c1fd99dd40f3c3..0bde2cab35165dfa7babb67ae64b32514ea4b105 100644 (file)
@@ -344,14 +344,12 @@ static int apply_one_hunk(void)
                while (plist && *plist->data == "+-"[reverse]) {
                        if (data && !strcmp(data, plist->data+1)) {
                                if (!backwarn) {
-                                       backwarn++;
+                                       backwarn = TT.linenum;
                                        if (option_mask32 & FLAG_IGNORE) {
                                                dummy_revert = 1;
                                                reverse ^= 1;
                                                continue;
                                        }
-                                       fdprintf(2,"Possibly reversed hunk %d at %ld\n",
-                                               TT.hunknum, TT.linenum);
                                }
                        }
                        plist = plist->next;
@@ -364,6 +362,10 @@ static int apply_one_hunk(void)
                        // Does this hunk need to match EOF?
                        if (!plist && matcheof) break;
 
+                       if (backwarn)
+                               fdprintf(2,"Possibly reversed hunk %d at %ld\n",
+                                       TT.hunknum, TT.linenum);
+
                        // File ended before we found a place for this hunk.
                        fail_hunk();
                        goto done;
@@ -592,7 +594,7 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
                                                TT.filein = xopen3(name, O_CREAT|O_EXCL|O_RDWR, 0666);
                                        } else {
                                                printf("patching file %s\n", name);
-                                               TT.filein = xopen(name, O_RDWR);
+                                               TT.filein = xopen(name, O_RDONLY);
                                        }
                                        TT.fileout = copy_tempfile(TT.filein, name, &TT.tempname);
                                        TT.linenum = 0;