diff: implement flag -B (Ignore changes whose lines are all blank)
>>From 7c3ce93213590bd0592435dc27d1272d0fd3309b Mon Sep 17 00:00:00 2001 From: Matheus Izvekov <mizvekov@gmail.com> Date: Mon, 18 Jan 2010 15:52:31 -0200 Subject: [PATCH] diff: implement flag -B (Ignore changes whose lines are all blank) function old new delta diffreg 1196 1240 +44 .rodata 6538 6561 +23 packed_usage 457 478 +21 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 88/0) Total: 88 bytes text data bss dec hex filename 70123 733 8576 79432 13648 busybox_old 70190 733 8576 79499 1368b busybox_unstripped Signed-off-by: Matheus Izvekov <mizvekov@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b7a044043c
commit
fe1ce2e43e
@ -84,27 +84,31 @@
|
||||
#define dbg_error_msg(...) ((void)0)
|
||||
#endif
|
||||
|
||||
enum { /* print_status() and diffreg() return values */
|
||||
STATUS_SAME, /* files are the same */
|
||||
STATUS_DIFFER, /* files differ */
|
||||
STATUS_BINARY, /* binary files differ */
|
||||
enum { /* print_status() and diffreg() return values */
|
||||
STATUS_SAME, /* files are the same */
|
||||
STATUS_DIFFER, /* files differ */
|
||||
STATUS_BINARY, /* binary files differ */
|
||||
};
|
||||
|
||||
enum { /* Commandline flags */
|
||||
enum { /* Commandline flags */
|
||||
FLAG_a,
|
||||
FLAG_b,
|
||||
FLAG_d,
|
||||
FLAG_i,
|
||||
FLAG_L, /* unused */
|
||||
FLAG_L, /* never used, handled by getopt32 */
|
||||
FLAG_N,
|
||||
FLAG_q,
|
||||
FLAG_r,
|
||||
FLAG_s,
|
||||
FLAG_S, /* unused */
|
||||
FLAG_S, /* never used, handled by getopt32 */
|
||||
FLAG_t,
|
||||
FLAG_T,
|
||||
FLAG_U, /* unused */
|
||||
FLAG_U, /* never used, handled by getopt32 */
|
||||
FLAG_w,
|
||||
FLAG_u, /* ignored, this is the default */
|
||||
FLAG_p, /* not implemented */
|
||||
FLAG_B,
|
||||
FLAG_E, /* not implemented */
|
||||
};
|
||||
#define FLAG(x) (1 << FLAG_##x)
|
||||
|
||||
@ -578,6 +582,8 @@ static bool diff(FILE_and_pos_t ft[2], char *file[2])
|
||||
int idx = -1, i = 1;
|
||||
|
||||
do {
|
||||
bool nonempty = false;
|
||||
|
||||
while (1) {
|
||||
struct context_vec v;
|
||||
|
||||
@ -606,6 +612,7 @@ static bool diff(FILE_and_pos_t ft[2], char *file[2])
|
||||
) {
|
||||
break;
|
||||
}
|
||||
nonempty |= (v.a >= v.b) && (v.c >= v.d);
|
||||
vec = xrealloc_vector(vec, 6, ++idx);
|
||||
vec[idx] = v;
|
||||
}
|
||||
@ -617,7 +624,7 @@ static bool diff(FILE_and_pos_t ft[2], char *file[2])
|
||||
}
|
||||
if (idx < 0)
|
||||
continue;
|
||||
if (!(option_mask32 & FLAG(q))) {
|
||||
if (!(option_mask32 & FLAG(q)) && !((option_mask32 & FLAG(B)) && !nonempty)) {
|
||||
struct context_vec *cvp = vec;
|
||||
int lowa = MAX(1, cvp->a - opt_U_context);
|
||||
int upb = MIN(nlen[0], vec[idx].b + opt_U_context);
|
||||
@ -880,8 +887,7 @@ int diff_main(int argc UNUSED_PARAM, char **argv)
|
||||
|
||||
/* exactly 2 params; collect multiple -L <label>; -U N */
|
||||
opt_complementary = "=2:L::U+";
|
||||
getopt32(argv, "abdiL:NqrsS:tTU:wu"
|
||||
"p" /* ignored (for compatibility) */,
|
||||
getopt32(argv, "abdiL:NqrsS:tTU:wupBE",
|
||||
&L_arg, &s_start, &opt_U_context);
|
||||
argv += optind;
|
||||
while (L_arg) {
|
||||
|
@ -852,13 +852,14 @@
|
||||
"Relay DHCP requests between clients and server" \
|
||||
|
||||
#define diff_trivial_usage \
|
||||
"[-abdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2"
|
||||
"[-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2"
|
||||
#define diff_full_usage "\n\n" \
|
||||
"Compare files line by line and output the differences between them.\n" \
|
||||
"This implementation supports unified diffs only.\n" \
|
||||
"\nOptions:" \
|
||||
"\n -a Treat all files as text" \
|
||||
"\n -b Ignore changes in the amount of whitespace" \
|
||||
"\n -B Ignore changes whose lines are all blank" \
|
||||
"\n -d Try hard to find a smaller set of changes" \
|
||||
"\n -i Ignore case differences" \
|
||||
"\n -L Use LABEL instead of the filename in the unified header" \
|
||||
|
Loading…
Reference in New Issue
Block a user