Re: [PATCH] Teach fmt-patch to write individual files.

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH] Teach fmt-patch to write individual files.

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:25

Johannes Schindelin [off-list ref] writes:
When called with "--stdout", it still writes to standard output.

Notable differences to git-format-patch:

	- since fmt-patch uses the standardized logging machinery, it is
	  no longer "From nobody", but "From <commit_sha1>",
Yes, and the date on that UNIX-From line has been updated ;-).
	- the empty lines before and after the "---" just before the
	  diffstat are no longer there,
Personally, I find this the most annoying myself.  I am not
complaining to you because as you know you inherited this
behaviour from my code.
	- git-format-patch outputs the commit_sha1 just before the first
	  diff, which fmt-patch does not,
Which should be fine.
	- the file names are no longer output to stdout, but to stderr
	  (since stdout is freopen()ed all the time), and
Which might be a bigger deal; I suspect people capture that while
dumping patches into individual files, and do their
postprocessing using the list of filenames.
	- "git fmt-patch HEAD^" does not work as expected: it outputs
	  *all* commits reachable from HEAD^!
If we really wanted to handle this, you could do something like
what builtin-diff does before letting the revision machinery
start walking the revision tree.  Look at pending objects, and
if you find only one UNINTERESTING commit, add_object the
current HEAD there as well.  Personally I do not think it is
worth it; rather we would probably want to standardize on rev-list
syntax.

Two major differences you forgot to mention.

One is that it does not do the "git cherry" filtering.  It is
not a big deal for me personally, but some people may be
depending on it.  I dunno.

Another is -o outdir, which should be trivial to add once you
have implemented output switching with freopen().

Anyhow, thanks for starting this.

Re: [PATCH] Teach fmt-patch to write individual files.

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:25

Hi,

On Thu, 4 May 2006, Junio C Hamano wrote:
Johannes Schindelin [off-list ref] writes:
quoted
When called with "--stdout", it still writes to standard output.

Notable differences to git-format-patch:

	- since fmt-patch uses the standardized logging machinery, it is
	  no longer "From nobody", but "From <commit_sha1>",
Yes, and the date on that UNIX-From line has been updated ;-).
Right.
quoted
	- the empty lines before and after the "---" just before the
	  diffstat are no longer there,
Personally, I find this the most annoying myself.  I am not
complaining to you because as you know you inherited this
behaviour from my code.
How about this?

-- snip --
diff --git a/log-tree.c b/log-tree.c
index d92abaf..6379d43 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -86,7 +86,7 @@ int log_tree_diff_flush(struct rev_info 
 	}
 
 	if (opt->loginfo && !opt->no_commit_id)
-		show_log(opt, opt->loginfo, opt->diffopt.with_stat ? "---\n" : "\n");
+		show_log(opt, opt->loginfo, opt->diffopt.with_stat ? "\n---\n\n" : "\n");
 	diff_flush(&opt->diffopt);
 	return 1;
 }
-- snap --
quoted
	- git-format-patch outputs the commit_sha1 just before the first
	  diff, which fmt-patch does not,
Which should be fine.
Yeah, I just wanted to mention it in case people rely on it.
quoted
	- the file names are no longer output to stdout, but to stderr
	  (since stdout is freopen()ed all the time), and
Which might be a bigger deal; I suspect people capture that while
dumping patches into individual files, and do their
postprocessing using the list of filenames.
I hoped it is not necessary to "FILE *realstdout = fdopen(dup(1));" but I 
can do it if this is wanted.
quoted
	- "git fmt-patch HEAD^" does not work as expected: it outputs
	  *all* commits reachable from HEAD^!
If we really wanted to handle this, you could do something like
what builtin-diff does before letting the revision machinery
start walking the revision tree.  Look at pending objects, and
if you find only one UNINTERESTING commit, add_object the
current HEAD there as well.  Personally I do not think it is
worth it; rather we would probably want to standardize on rev-list
syntax.
Well, I have to get used to add ".." after HEAD^, but that is probably not 
very difficult. I would like fmt-patch to error out without a range, 
though.
Two major differences you forgot to mention.

One is that it does not do the "git cherry" filtering.  It is
not a big deal for me personally, but some people may be
depending on it.  I dunno.
Oops. I really did not think of that.
Another is -o outdir, which should be trivial to add once you
have implemented output switching with freopen().
Yes, this becomes easy now. I'll do that next.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help