patch: support -N. By Olivier Duclos (olivier.duclos AT gmail.com)
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 20 Aug 2009 21:33:19 +0000 (23:33 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 20 Aug 2009 21:33:19 +0000 (23:33 +0200)
function                                             old     new   delta
packed_usage                                       26646   26656     +10
patch_main                                          1101    1110      +9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/patch.c
include/usage.h

index e8482a7..4a97151 100644 (file)
@@ -74,12 +74,18 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
        int patch_level;
        int ret = 0;
        char plus = '+';
+       unsigned opt;
+       enum {
+               OPT_R = (1 << 2),
+               OPT_N = (1 << 3),
+       };
 
        xfunc_error_retval = 2;
        {
                const char *p = "-1";
                const char *i = "-"; /* compat */
-               if (getopt32(argv, "p:i:R", &p, &i) & 4)
+               opt = getopt32(argv, "p:i:RN", &p, &i);
+               if (opt & OPT_R)
                        plus = '-';
                patch_level = xatoi(p); /* can be negative! */
                patch_file = xfopen_stdin(i);
@@ -202,6 +208,10 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
                                                                src_line = NULL;
                                                }
                                        }
+                                       /* Do not patch an already patched hunk with -N */
+                                       if (src_line == 0 && (opt & OPT_N)) {
+                                               continue;
+                                       }
                                        if (!src_line) {
                                                bb_error_msg("hunk #%u FAILED at %u", hunk_count, hunk_offset_start);
                                                bad_hunk_count++;
index accda33..81ddbd2 100644 (file)
        )
 
 #define patch_trivial_usage \
-       "[-p NUM] [-i DIFF] [-R]"
+       "[-p NUM] [-i DIFF] [-R] [-N]"
 #define patch_full_usage "\n\n" \
        "       -p NUM  Strip NUM leading components from file names" \
      "\n       -i DIFF Read DIFF instead of stdin" \
      "\n       -R      Reverse patch" \
+     "\n       -N      Ignore already applied patches" \
 
 #define patch_example_usage \
        "$ patch -p1 < example.diff\n" \