git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re* [take 2] git send-email updates

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 13, 2008, 00:01 UTC
Message-ID
<7vfxlwlcid.fsf_-_@gitster.siamese.dyndns.org>
In-Reply-To
<7vk5b9x0kj.fsf@gitster.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 33 quoted lines
> Actually, "send-email --format-patch master..fixes Documentation/" may be
> a useful command to send out only documentation fixes.  For such a usage,
> Documentation/ should not be taken as a maildir.  If we would want to
> support such usage (and I'd say why not), a token can fall into one (or
> two) of three categories:
>
>     - can it be a rev?
>
>     - is it a tracked path (either blob or a leading dir)?
>
>     - is it a file/dir that is not tracked?
>
> The first two would be format-patch candidate.  The last one is the
> traditional mail source.  Because the latter two are disjoint set, and
> because it does not matter if you have a tracked file 'master' and a
> branch 'master' in your repo (either will be passed to format-patch
> anyway), the actual disambiguity is reduced, but it still is different
> from what you have in your patch, I suspect.
>
> As to options, how about doing this:
>
>     --no-format-patch means never ever run format-patch, behave exactly as
>     before;
>
>     --format-patch means what you have in your patch.  guess and favor 
>     format-patch parameter when ambiguous;
>
>     without either option, guess and favor mbox/maildir but still run
>     format-patch if remaining parameters and options need to
>     (e.g. "send-email my-cover-letter origin/master..master" will find
>     my-cover-letter which is not tracked and take it as mbox, and grab
>     patches from commits between origin/master..master, and send all of
>     them).

This patch on top of your [2/4] illustrates what I had in mind (it also removes the "print foo" while at it).

 git-send-email.perl |   35 +++++++++++++++++++++++++++++++----
 1 files changed, 31 insertions(+), 4 deletions(-)
diff --git c/git-send-email.perl w/git-send-email.perl
index 6f5a613..9aa3500 100755
--- c/git-send-email.perl
+++ w/git-send-email.perl
@@ -152,7 +152,7 @@ if ($@) {
 
 # Behavior modification variables
 my ($quiet, $dry_run) = (0, 0);
-my $format_patch;
+my $format_patch = 'unspecified';
 my $compose_filename = $repo->repo_path() . "/.gitsendemail.msg.$$";
 
 # Variables with corresponding config settings
@@ -243,6 +243,15 @@ unless ($rc) {
     usage();
 }
 
+if ($format_patch && $format_patch eq 'unspecified') {
+	# No --format-patch nor --no-format-patch on the command line
+	$format_patch = 0;
+} elsif (!$format_patch) {
+	$format_patch = undef;
+} else {
+	$format_patch = 1;
+}
+
 # Now, let's fill any that aren't set in with defaults:
 
 sub read_config {
@@ -374,11 +383,27 @@ if (@alias_files and $aliasfiletype and defined $parse_alias{$aliasfiletype}) {
 # returns 1 if the conflict must be solved using it as a format-patch argument
 sub check_file_rev_conflict($) {
 	my $f = shift;
+
+	if (!defined $format_patch) {
+		# The command line explicitly forbids acting as a wrapper
+		return 0;
+	}
+
+	# If it is a tracked path it can't be tracking the e-mails you
+	# are going to send out to describe the change to this repository.
+	eval {
+		$repo->command(['ls-files', '--error-unmatch', $f],
+			       { STDERR => 0 });
+	};
+	if (!$@) {
+		return 1;
+	}
+
+	# Can it be interpreted as a rev?
 	try {
 		$repo->command('rev-parse', '--verify', '--quiet', $f);
-		if (defined($format_patch)) {
-			print "foo\n";
-			return $format_patch;
+		if ($format_patch) {
+			return 1;
 		}
 		die(<<EOF);
 File '$f' exists but it could also be the range of commits
@@ -408,6 +433,8 @@ while (my $f = pop @ARGV) {
 		closedir(DH);
 	} elsif ((-f $f or -p $f) and !check_file_rev_conflict($f)) {
 		push @files, $f;
+	} elsif (!defined $format_patch) {
+		die("--no-format-patch was given but $f is not a valid send-email argument");
 	} else {
 		push @rev_list_opts, $f;
 	}
Previous: Junio C HamanoNext: Pierre Habouzit
Message 60 of 62 in “git send-email improvements”
  1. Pierre HabouzitOct 31, 2008
  2. 1/3 git send-email: avoid leaking directory file descriptors.Pierre Habouzit, Oct 31, 2008
  3. 2/3 git send-email: interpret unknown files as revision listsPierre Habouzit, Oct 31, 2008
  4. 3/3 git send-email: add --annotate optionPierre Habouzit, Oct 31, 2008
  5. Ian HiltOct 31, 2008
  6. Junio C HamanoNov 2, 2008
  7. Pierre HabouzitNov 2, 2008
  8. Matthieu MoyNov 3, 2008
  9. git send-email: allow any rev-list option as an argument.Pierre Habouzit, Oct 31, 2008
  10. Jeff KingNov 2, 2008
  11. Pierre HabouzitNov 2, 2008
  12. Jeff KingNov 2, 2008
  13. Pierre HabouzitNov 3, 2008
  14. Junio C HamanoNov 4, 2008
  15. Pierre HabouzitNov 4, 2008
  16. Jeff KingNov 2, 2008
  17. Further enhancement proposal for git-send-emailPierre Habouzit, Oct 31, 2008
  18. 1/3 git send-email: make the message file name more specific.Pierre Habouzit, Oct 31, 2008
  19. 2/3 git send-email: do not ask questions when --compose is used.Pierre Habouzit, Oct 31, 2008
  20. 3/3 git send-email: turn --compose on when more than one patch.Pierre Habouzit, Oct 31, 2008
  21. Ian HiltOct 31, 2008
  22. Pierre HabouzitOct 31, 2008
  23. Ian HiltOct 31, 2008
  24. Ian HiltNov 1, 2008
  25. Pierre HabouzitNov 1, 2008
  26. Ian HiltNov 1, 2008
  27. Pierre HabouzitNov 1, 2008
  28. Francis GaliegueNov 1, 2008
  29. Pierre HabouzitNov 1, 2008
  30. Francis GaliegueNov 1, 2008
  31. Ian HiltNov 1, 2008
  32. Junio C HamanoNov 2, 2008
  33. Pierre HabouzitNov 2, 2008
  34. Ian HiltNov 2, 2008
  35. Pierre HabouzitNov 3, 2008
  36. [take 2] git send-email updatesPierre Habouzit, Nov 4, 2008
  37. 1/5 git send-email: make the message file name more specific.Pierre Habouzit, Nov 4, 2008
  38. 2/5 git send-email: interpret unknown files as revision listsPierre Habouzit, Nov 4, 2008
  39. 3/5 git send-email: add --annotate optionPierre Habouzit, Nov 4, 2008
  40. 4/5 git send-email: ask less questions when --compose is used.Pierre Habouzit, Nov 4, 2008
  41. 5/5 git send-email: turn --compose on when more than one patch.Pierre Habouzit, Nov 4, 2008
  42. Junio C HamanoNov 4, 2008
  43. Jeff KingNov 5, 2008
  44. Junio C HamanoNov 5, 2008
  45. Pierre HabouzitNov 5, 2008
  46. Junio C HamanoNov 5, 2008
  47. Junio C HamanoNov 9, 2008
  48. Francis GaliegueNov 4, 2008
  49. Junio C HamanoNov 4, 2008
  50. Junio C HamanoNov 4, 2008
  51. [take 2] git send-email updatesPierre Habouzit, Nov 10, 2008
  52. 1/4 git send-email: make the message file name more specific.Pierre Habouzit, Nov 10, 2008
  53. 2/4 git send-email: interpret unknown files as revision listsPierre Habouzit, Nov 10, 2008
  54. 3/4 git send-email: add --annotate optionPierre Habouzit, Nov 10, 2008
  55. 4/4 git send-email: ask less questions when --compose is used.Pierre Habouzit, Nov 10, 2008
  56. Junio C HamanoNov 12, 2008
  57. Junio C HamanoNov 11, 2008
  58. Pierre HabouzitNov 11, 2008
  59. Junio C HamanoNov 12, 2008
  60. Re* [take 2] git send-email updatesJunio C Hamano, Nov 13, 2008
  61. Pierre HabouzitNov 15, 2008
  62. Pierre HabouzitNov 15, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.