patch: support -N. By Olivier Duclos (olivier.duclos AT gmail.com)

function                                             old     new   delta
packed_usage                                       26646   26656     +10
patch_main                                          1101    1110      +9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-08-20 23:33:19 +02:00
parent 0793491ff8
commit d7874ed1d4
2 changed files with 13 additions and 2 deletions

View File

@ -74,12 +74,18 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
int patch_level; int patch_level;
int ret = 0; int ret = 0;
char plus = '+'; char plus = '+';
unsigned opt;
enum {
OPT_R = (1 << 2),
OPT_N = (1 << 3),
};
xfunc_error_retval = 2; xfunc_error_retval = 2;
{ {
const char *p = "-1"; const char *p = "-1";
const char *i = "-"; /* compat */ 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 = '-'; plus = '-';
patch_level = xatoi(p); /* can be negative! */ patch_level = xatoi(p); /* can be negative! */
patch_file = xfopen_stdin(i); patch_file = xfopen_stdin(i);
@ -202,6 +208,10 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
src_line = NULL; src_line = NULL;
} }
} }
/* Do not patch an already patched hunk with -N */
if (src_line == 0 && (opt & OPT_N)) {
continue;
}
if (!src_line) { if (!src_line) {
bb_error_msg("hunk #%u FAILED at %u", hunk_count, hunk_offset_start); bb_error_msg("hunk #%u FAILED at %u", hunk_count, hunk_offset_start);
bad_hunk_count++; bad_hunk_count++;

View File

@ -3218,11 +3218,12 @@
) )
#define patch_trivial_usage \ #define patch_trivial_usage \
"[-p NUM] [-i DIFF] [-R]" "[-p NUM] [-i DIFF] [-R] [-N]"
#define patch_full_usage "\n\n" \ #define patch_full_usage "\n\n" \
" -p NUM Strip NUM leading components from file names" \ " -p NUM Strip NUM leading components from file names" \
"\n -i DIFF Read DIFF instead of stdin" \ "\n -i DIFF Read DIFF instead of stdin" \
"\n -R Reverse patch" \ "\n -R Reverse patch" \
"\n -N Ignore already applied patches" \
#define patch_example_usage \ #define patch_example_usage \
"$ patch -p1 < example.diff\n" \ "$ patch -p1 < example.diff\n" \