mirror of
https://github.com/sheumann/hush.git
synced 2024-08-21 11:28:57 +00:00
patch: implement -E option
Signed-off-by: Lukas Huba <Huba.Lukas@centrum.cz> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
e7599d1cc7
commit
08187356d7
@ -17,7 +17,6 @@
|
|||||||
* -o outfile output here instead of in place
|
* -o outfile output here instead of in place
|
||||||
* -r rejectfile write rejected hunks to this file
|
* -r rejectfile write rejected hunks to this file
|
||||||
*
|
*
|
||||||
* -E remove empty files --remove-empty-files
|
|
||||||
* -f force (no questions asked)
|
* -f force (no questions asked)
|
||||||
* -F fuzz (number, default 2)
|
* -F fuzz (number, default 2)
|
||||||
* [file] which file to patch
|
* [file] which file to patch
|
||||||
@ -42,7 +41,7 @@ config PATCH
|
|||||||
hunks to stderr, and exits with nonzero status if any hunks fail.
|
hunks to stderr, and exits with nonzero status if any hunks fail.
|
||||||
|
|
||||||
A file compared against /dev/null (or with a date <= the epoch) is
|
A file compared against /dev/null (or with a date <= the epoch) is
|
||||||
created/deleted as appropriate.
|
created or deleted if -E or --remove-empty-files set.
|
||||||
*/
|
*/
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
@ -243,15 +242,16 @@ struct globals {
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
#define FLAG_STR "Rup:i:Nx"
|
#define FLAG_STR "Rup:i:NEx"
|
||||||
/* FLAG_REVERSE must be == 1! Code uses this fact. */
|
/* FLAG_REVERSE must be == 1! Code uses this fact. */
|
||||||
#define FLAG_REVERSE (1 << 0)
|
#define FLAG_REVERSE (1 << 0)
|
||||||
#define FLAG_u (1 << 1)
|
#define FLAG_u (1 << 1)
|
||||||
#define FLAG_PATHLEN (1 << 2)
|
#define FLAG_PATHLEN (1 << 2)
|
||||||
#define FLAG_INPUT (1 << 3)
|
#define FLAG_INPUT (1 << 3)
|
||||||
#define FLAG_IGNORE (1 << 4)
|
#define FLAG_IGNORE (1 << 4)
|
||||||
|
#define FLAG_RMEMPTY (1 << 5)
|
||||||
//non-standard:
|
//non-standard:
|
||||||
#define FLAG_DEBUG (1 << 5)
|
#define FLAG_DEBUG (1 << 6)
|
||||||
|
|
||||||
// Dispose of a line of input, either by writing it out or discarding it.
|
// Dispose of a line of input, either by writing it out or discarding it.
|
||||||
|
|
||||||
@ -551,7 +551,7 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
// If this is the first hunk, open the file.
|
// If this is the first hunk, open the file.
|
||||||
if (TT.filein == -1) {
|
if (TT.filein == -1) {
|
||||||
int oldsum, newsum, del = 0;
|
int oldsum, newsum, empty = 0;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
oldsum = TT.oldline + TT.oldlen;
|
oldsum = TT.oldline + TT.oldlen;
|
||||||
@ -564,7 +564,7 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum))
|
if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum))
|
||||||
{
|
{
|
||||||
name = reverse ? newname : oldname;
|
name = reverse ? newname : oldname;
|
||||||
del++;
|
empty++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle -p path truncation.
|
// handle -p path truncation.
|
||||||
@ -576,10 +576,17 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (del) {
|
if (empty) {
|
||||||
printf("removing %s\n", name);
|
// File is empty after the patches have been applied
|
||||||
xunlink(name);
|
|
||||||
state = 0;
|
state = 0;
|
||||||
|
if (option_mask32 & FLAG_RMEMPTY) {
|
||||||
|
// If flag -E or --remove-empty-files is set
|
||||||
|
printf("removing %s\n", name);
|
||||||
|
xunlink(name);
|
||||||
|
} else {
|
||||||
|
printf("patching file %s\n", name);
|
||||||
|
xclose(xopen(name, O_WRONLY | O_TRUNC));
|
||||||
|
}
|
||||||
// If we've got a file to open, do so.
|
// If we've got a file to open, do so.
|
||||||
} else if (!(option_mask32 & FLAG_PATHLEN) || i <= TT.prefix) {
|
} else if (!(option_mask32 & FLAG_PATHLEN) || i <= TT.prefix) {
|
||||||
// If the old file was null, we're creating a new one.
|
// If the old file was null, we're creating a new one.
|
||||||
|
@ -2857,17 +2857,19 @@ INSERT
|
|||||||
"[OPTIONS] [ORIGFILE [PATCHFILE]]"
|
"[OPTIONS] [ORIGFILE [PATCHFILE]]"
|
||||||
#define patch_full_usage "\n\n" \
|
#define patch_full_usage "\n\n" \
|
||||||
IF_LONG_OPTS( \
|
IF_LONG_OPTS( \
|
||||||
" -p,--strip N Strip N leading components from file names" \
|
" -p,--strip N Strip N leading components from file names" \
|
||||||
"\n -i,--input DIFF Read DIFF instead of stdin" \
|
"\n -i,--input DIFF Read DIFF instead of stdin" \
|
||||||
"\n -R,--reverse Reverse patch" \
|
"\n -R,--reverse Reverse patch" \
|
||||||
"\n -N,--forward Ignore already applied patches" \
|
"\n -N,--forward Ignore already applied patches" \
|
||||||
"\n --dry-run Don't actually change files" \
|
"\n --dry-run Don't actually change files" \
|
||||||
|
"\n -E,--remove-empty-files Remove output files if they become empty" \
|
||||||
) \
|
) \
|
||||||
IF_NOT_LONG_OPTS( \
|
IF_NOT_LONG_OPTS( \
|
||||||
" -p N Strip N leading components from file names" \
|
" -p N Strip N 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" \
|
"\n -N Ignore already applied patches" \
|
||||||
|
"\n -E Remove output files if they become empty" \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define patch_example_usage \
|
#define patch_example_usage \
|
||||||
|
Loading…
Reference in New Issue
Block a user