Skip to contentSkip to conversation

diff: add --no-diff-deleted to make -p more pleasant

PATCH In review Eric Wong 3 participants 4 messages Jun 15, 2016

lore
Share & tools
lore

Eric Wong

author
#0 lore raw

PATCH 1/1 diff: add --no-diff-deleted to make -p more pleasant

This is a feature I've stol^Wborrowed from svn that I find very useful since I usually don't care to see what I've deleted.

---

 diff.c |    6 ++++++
 diff.h |    3 +++
 2 files changed, 9 insertions(+), 0 deletions(-)

0b426af15a7da4f430d9cca8c1ad057557d93627

diff.c +6 -0
index f45d18c..6db3e19 100644
@@ -769,6 +769,7 @@ void diff_setup(struct diff_options *opt
 {
 	memset(options, 0, sizeof(*options));
 	options->output_format = DIFF_FORMAT_RAW;
+	options->diff_deleted = 1;
 	options->line_termination = '\n';
 	options->break_opt = -1;
 	options->rename_limit = -1;
@@ -849,6 +850,8 @@ int diff_opt_parse(struct diff_options *
 	}
 	else if (!strcmp(arg, "--find-copies-harder"))
 		options->find_copies_harder = 1;
+	else if (!strcmp(arg, "--no-diff-deleted"))
+		options->diff_deleted = 0;
 	else if (!strcmp(arg, "--abbrev"))
 		options->abbrev = DEFAULT_ABBREV;
 	else if (!strncmp(arg, "--abbrev=", 9)) {
@@ -1103,6 +1106,9 @@ int diff_unmodified_pair(struct diff_fil
 
 static void diff_flush_patch(struct diff_filepair *p, struct diff_options *o)
 {
+	if (!o->diff_deleted && (p->status == DIFF_STATUS_DELETED))
+		return;
+
 	if (diff_unmodified_pair(p))
 		return;
 
diff.h +3 -0
index 9a0169c..4f320ac 100644
@@ -39,6 +39,7 @@ struct diff_options {
 	int find_copies_harder;
 	int line_termination;
 	int output_format;
+	int diff_deleted;
 	int pickaxe_opts;
 	int rename_score;
 	int reverse_diff;
@@ -120,6 +121,8 @@ extern void diffcore_std_no_resolve(stru
 "  -C            detect copies.\n" \
 "  --find-copies-harder\n" \
 "                try unchanged files as candidate for copy detection.\n" \
+"  --no-diff-deleted\n" \
+"                do not print patch format for deleted files\n" \
 "  -l<n>         limit rename attempts up to <n> paths.\n" \
 "  -O<file>      reorder diffs according to the <file>.\n" \
 "  -S<string>    find filepair whose only one side contains the string.\n" \
Signature · 1 line
1.1.5.gae18-dirty
#1 lore raw
Quoted 2 lines · Eric Wong

This is a feature I've stol^Wborrowed from svn that I find very useful since I usually don't care to see what I've deleted.

There is a thing called --diff-filter, and

	git diff -p --no-diff-deleted

is equivalent to

	git diff -p --diff-filter=AM

when you are not using rename/copy detection (and a byte shorter). Or maybe improve its syntax to also take:

	--diff-filter=-D

That is, a minus followed by list of undesired change class letters.

#2 lore raw
Quoted 7 lines · Junio C Hamano
Quoted 2 lines · Eric Wong

This is a feature I've stol^Wborrowed from svn that I find very useful since I usually don't care to see what I've deleted.

There is a thing called --diff-filter, and

Quoted 8 lines
	git diff -p --no-diff-deleted

is equivalent to

	git diff -p --diff-filter=AM

when you are not using rename/copy detection (and a byte shorter).

Hmmm.... I think this may be the problem:

% grep -r diff-filter Documentation/ Documentation/git-diff.txt:$ git diff --diff-filter=MRC <1>

And that is:

Limiting the diff output::
+
------------
$ git diff --diff-filter=MRC <1>
$ git diff --name-status -r <2>
$ git diff arch/i386 include/asm-i386 <3>

<1> show only modification, rename and copy, but not addition nor deletion.
<2> show only names and the nature of change, but not actual diff output. --name-status disables usual patch generation which in turn also disables recursive behaviour, so without -r you would only see the directory name if there is a change in a file in a subdirectory.
<3> limit diff output to named subtrees.

That's pretty thin documentation there.
Unless someone beats me to it, I'll try to find
a spare documentation cycle...

jdl

author
#3 lore raw
In reply to Junio C Hamano
Quoted 5 lines · Junio C Hamano
Quoted 2 lines · Eric Wong

This is a feature I've stol^Wborrowed from svn that I find very useful since I usually don't care to see what I've deleted.

Quoted 7 lines

There is a thing called --diff-filter, and

	git diff -p --no-diff-deleted

is equivalent to

	git diff -p --diff-filter=AM

Cool, didn't notice this feature before. Thanks.

Quoted 7 lines

when you are not using rename/copy detection (and a byte shorter). Or maybe improve its syntax to also take:

	--diff-filter=-D

That is, a minus followed by list of undesired change class letters.

Hmm.. maybe another day. AM is good enough for now.

Signature · 1 line
Eric Wong