All of lore.kernel.org
 help / color / mirror / Atom feed
* git-send-email no longer works outside a repository?
@ 2017-06-01 22:45 Jacob Keller
  2017-06-01 23:00 ` Brandon Williams
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Jacob Keller @ 2017-06-01 22:45 UTC (permalink / raw)
  To: Git mailing list

I often use git-send-email in order to send patch files. Recently when
I tried to do this outside a repository I got some cryptic failures,
I'm using the master branch, git version 2.13.0.311.g0339965c70d6

I generate the patch files and copy them into a separate folder
outside of the repository, and make sure everything looks good and
write a cover letter, then I try to send them with

$git send-email --to=<address> 00*
Can't call method "repo_path" on an undefined value at
/home/jekeller/libexec/git-core/git-send-email line 1759.

Even weirder, if I move into the repository and try to send files
which are outside, such as:

$git send-email --to=iwl<address> ../patches/00*
fatal: /home/jekeller/git/patches/00*:
'/home/jekeller/git/patches/00*' is outside repository
format-patch -o /tmp/AZatqXB1uD /home/jekeller/git/patches/00*:
command returned error: 128

I would expect that if you're outside a repository the command (as
before) would alllow you to send files. It shouldn't strictly need to
be inside a repository to function.

I found this first on pu, but as above, I checked out master and still
seem to have the problem.

I'm working on a bisect now.

Thanks,
Jake

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git-send-email no longer works outside a repository?
  2017-06-01 22:45 git-send-email no longer works outside a repository? Jacob Keller
@ 2017-06-01 23:00 ` Brandon Williams
  2017-06-01 23:14 ` Junio C Hamano
  2017-06-01 23:50 ` [PATCH] send-email: check for repo before invoking hook Jonathan Tan
  2 siblings, 0 replies; 7+ messages in thread
From: Brandon Williams @ 2017-06-01 23:00 UTC (permalink / raw)
  To: Jacob Keller; +Cc: Git mailing list, jonathantanmy

On 06/01, Jacob Keller wrote:
> I often use git-send-email in order to send patch files. Recently when
> I tried to do this outside a repository I got some cryptic failures,
> I'm using the master branch, git version 2.13.0.311.g0339965c70d6
> 
> I generate the patch files and copy them into a separate folder
> outside of the repository, and make sure everything looks good and
> write a cover letter, then I try to send them with
> 
> $git send-email --to=<address> 00*
> Can't call method "repo_path" on an undefined value at
> /home/jekeller/libexec/git-core/git-send-email line 1759.
> 
> Even weirder, if I move into the repository and try to send files
> which are outside, such as:
> 
> $git send-email --to=iwl<address> ../patches/00*
> fatal: /home/jekeller/git/patches/00*:
> '/home/jekeller/git/patches/00*' is outside repository
> format-patch -o /tmp/AZatqXB1uD /home/jekeller/git/patches/00*:
> command returned error: 128
> 
> I would expect that if you're outside a repository the command (as
> before) would alllow you to send files. It shouldn't strictly need to
> be inside a repository to function.
> 
> I found this first on pu, but as above, I checked out master and still
> seem to have the problem.
> 
> I'm working on a bisect now.
> 
> Thanks,
> Jake

This looks like it is due to '6489660b4
(origin/jt/send-email-validate-hook) send-email: support validate hook'.
It's trying to look for a hook in a non-existent repository.

-- 
Brandon Williams

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: git-send-email no longer works outside a repository?
  2017-06-01 22:45 git-send-email no longer works outside a repository? Jacob Keller
  2017-06-01 23:00 ` Brandon Williams
@ 2017-06-01 23:14 ` Junio C Hamano
  2017-06-01 23:50 ` [PATCH] send-email: check for repo before invoking hook Jonathan Tan
  2 siblings, 0 replies; 7+ messages in thread
From: Junio C Hamano @ 2017-06-01 23:14 UTC (permalink / raw)
  To: Jacob Keller; +Cc: Git mailing list, Jonathan Tan

Jacob Keller <jacob.keller@gmail.com> writes:

> I often use git-send-email in order to send patch files. Recently when
> I tried to do this outside a repository I got some cryptic failures,
> I'm using the master branch, git version 2.13.0.311.g0339965c70d6
>
> I generate the patch files and copy them into a separate folder
> outside of the repository, and make sure everything looks good and
> write a cover letter, then I try to send them with
>
> $git send-email --to=<address> 00*
> Can't call method "repo_path" on an undefined value at
> /home/jekeller/libexec/git-core/git-send-email line 1759.
>
> Even weirder, if I move into the repository and try to send files
> which are outside, such as:
>
> $git send-email --to=iwl<address> ../patches/00*
> fatal: /home/jekeller/git/patches/00*:
> '/home/jekeller/git/patches/00*' is outside repository
> format-patch -o /tmp/AZatqXB1uD /home/jekeller/git/patches/00*:
> command returned error: 128
>
> I would expect that if you're outside a repository the command (as
> before) would alllow you to send files. It shouldn't strictly need to
> be inside a repository to function.
>
> I found this first on pu, but as above, I checked out master and still
> seem to have the problem.
>
> I'm working on a bisect now.

This certainly is not an intended change.  That validate-hook thing
must be made optional and conditional to the existence of a
repository.

Thanks for reporting.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] send-email: check for repo before invoking hook
  2017-06-01 22:45 git-send-email no longer works outside a repository? Jacob Keller
  2017-06-01 23:00 ` Brandon Williams
  2017-06-01 23:14 ` Junio C Hamano
@ 2017-06-01 23:50 ` Jonathan Tan
  2017-06-02  0:22   ` Todd Zullinger
  2017-06-02  1:59   ` Junio C Hamano
  2 siblings, 2 replies; 7+ messages in thread
From: Jonathan Tan @ 2017-06-01 23:50 UTC (permalink / raw)
  To: git; +Cc: Jonathan Tan, bmwill, gitster, jacob.keller

Unless --no-validate is passed, send-email will invoke
$repo->repo_path() in its search for a validate hook regardless of
whether a Git repo is actually present.  Teach send-email to first check
for repo existence.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
---
Thanks for the notification. Here's a patch to fix that.
---
 git-send-email.perl   | 32 +++++++++++++++++---------------
 t/t9001-send-email.sh |  8 ++++++++
 2 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/git-send-email.perl b/git-send-email.perl
index f0417f64e..94c54dc5a 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -1755,21 +1755,23 @@ sub unique_email_list {
 sub validate_patch {
 	my $fn = shift;
 
-	my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'),
-				    'sendemail-validate');
-	my $hook_error;
-	if (-x $validate_hook) {
-		my $target = abs_path($fn);
-		# The hook needs a correct cwd and GIT_DIR.
-		my $cwd_save = cwd();
-		chdir($repo->wc_path() or $repo->repo_path())
-			or die("chdir: $!");
-		local $ENV{"GIT_DIR"} = $repo->repo_path();
-		$hook_error = "rejected by sendemail-validate hook"
-			if system($validate_hook, $target);
-		chdir($cwd_save) or die("chdir: $!");
-	}
-	return $hook_error if $hook_error;
+	if ($repo) {
+		my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'),
+					    'sendemail-validate');
+		my $hook_error;
+		if (-x $validate_hook) {
+			my $target = abs_path($fn);
+			# The hook needs a correct cwd and GIT_DIR.
+			my $cwd_save = cwd();
+			chdir($repo->wc_path() or $repo->repo_path())
+				or die("chdir: $!");
+			local $ENV{"GIT_DIR"} = $repo->repo_path();
+			$hook_error = "rejected by sendemail-validate hook"
+				if system($validate_hook, $target);
+			chdir($cwd_save) or die("chdir: $!");
+		}
+		return $hook_error if $hook_error;
+	}
 
 	open(my $fh, '<', $fn)
 		or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 15128c755..d1e4e8ad1 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -1953,4 +1953,12 @@ test_expect_success $PREREQ 'invoke hook' '
 	)
 '
 
+test_expect_success $PREREQ 'test that send-email works outside a repo' '
+	nongit git send-email \
+		--from="Example <nobody@example.com>" \
+		--to=nobody@example.com \
+		--smtp-server="$(pwd)/fake.sendmail" \
+		"$(pwd)/0001-add-master.patch"
+'
+
 test_done
-- 
2.13.0.506.g27d5fe0cd-goog


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] send-email: check for repo before invoking hook
  2017-06-01 23:50 ` [PATCH] send-email: check for repo before invoking hook Jonathan Tan
@ 2017-06-02  0:22   ` Todd Zullinger
  2017-06-02  0:49     ` Jacob Keller
  2017-06-02  1:59   ` Junio C Hamano
  1 sibling, 1 reply; 7+ messages in thread
From: Todd Zullinger @ 2017-06-02  0:22 UTC (permalink / raw)
  To: Jonathan Tan; +Cc: git, bmwill, gitster, jacob.keller

Hi Jonathan,

Jonathan Tan wrote:
> Thanks for the notification. Here's a patch to fix that. 
> --- 
> git-send-email.perl   | 32 +++++++++++++++++--------------- 
> t/t9001-send-email.sh |  8 ++++++++ 
> 2 files changed, 25 insertions(+), 15 deletions(-)
>
> diff --git a/git-send-email.perl b/git-send-email.perl 
> index f0417f64e..94c54dc5a 100755 
> --- a/git-send-email.perl 
> +++ b/git-send-email.perl 
> @@ -1755,21 +1755,23 @@ sub unique_email_list { 
> sub validate_patch { 
> 	my $fn = shift;
>
> -	my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'), 
> -				    'sendemail-validate'); 
> -	my $hook_error; 
> -	if (-x $validate_hook) { 
> -		my $target = abs_path($fn); 
> -		# The hook needs a correct cwd and GIT_DIR. 
> -		my $cwd_save = cwd(); 
> -		chdir($repo->wc_path() or $repo->repo_path()) 
> -			or die("chdir: $!"); 
> -		local $ENV{"GIT_DIR"} = $repo->repo_path(); 
> -		$hook_error = "rejected by sendemail-validate hook" 
> -			if system($validate_hook, $target); 
> -		chdir($cwd_save) or die("chdir: $!"); 
> -	} 
> -	return $hook_error if $hook_error; 
> +	if ($repo) { 
> +		my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'), 
> +					    'sendemail-validate'); 
> +		my $hook_error; 
> +		if (-x $validate_hook) { 
> +			my $target = abs_path($fn); 
> +			# The hook needs a correct cwd and GIT_DIR. 
> +			my $cwd_save = cwd(); 
> +			chdir($repo->wc_path() or $repo->repo_path()) 
> +				or die("chdir: $!"); 
> +			local $ENV{"GIT_DIR"} = $repo->repo_path(); 
> +			$hook_error = "rejected by sendemail-validate hook" 
> +				if system($validate_hook, $target); 
> +			chdir($cwd_save) or die("chdir: $!"); 
> +		} 
> +		return $hook_error if $hook_error; 
> +	}

Would it be worth doing the $repo test when defining $validate_hook 
to avoid a layer of indentation?  Something like this (with whatever 
proper wrapping/indentation is used for perl, if I have that wildly 
incorrect, of course)?

-- >8 --
diff --git i/git-send-email.perl w/git-send-email.perl
index f0417f64e7..e78a0a728a 100755
--- i/git-send-email.perl
+++ w/git-send-email.perl
@@ -1755,8 +1755,9 @@ sub unique_email_list {
 sub validate_patch {
 	my $fn = shift;
 
-	my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'),
-				    'sendemail-validate');
+	my $validate_hook = $repo ?
+		catfile(catdir($repo->repo_path(), 'hooks'),
+			'sendemail-validate') : '';
 	my $hook_error;
 	if (-x $validate_hook) {
 		my $target = abs_path($fn);

-- 
Todd
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I have to decide between two equally frightening options.  If I wanted
to do that, I'd vote.
    -- Duckman


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] send-email: check for repo before invoking hook
  2017-06-02  0:22   ` Todd Zullinger
@ 2017-06-02  0:49     ` Jacob Keller
  0 siblings, 0 replies; 7+ messages in thread
From: Jacob Keller @ 2017-06-02  0:49 UTC (permalink / raw)
  To: Todd Zullinger
  Cc: Jonathan Tan, Git mailing list, Brandon Williams, Junio C Hamano

On Thu, Jun 1, 2017 at 5:22 PM, Todd Zullinger <tmz@pobox.com> wrote:
> Hi Jonathan,
>
> Jonathan Tan wrote:
>>
>> Thanks for the notification. Here's a patch to fix that. ---
>> git-send-email.perl   | 32 +++++++++++++++++---------------
>> t/t9001-send-email.sh |  8 ++++++++ 2 files changed, 25 insertions(+), 15
>> deletions(-)
>>
>> diff --git a/git-send-email.perl b/git-send-email.perl index
>> f0417f64e..94c54dc5a 100755 --- a/git-send-email.perl +++
>> b/git-send-email.perl @@ -1755,21 +1755,23 @@ sub unique_email_list { sub
>> validate_patch {       my $fn = shift;
>>
>> -       my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'), -
>> 'sendemail-validate'); -    my $hook_error; -       if (-x $validate_hook) {
>> -              my $target = abs_path($fn); -           # The hook needs a
>> correct cwd and GIT_DIR. -           my $cwd_save = cwd(); -
>> chdir($repo->wc_path() or $repo->repo_path()) -                 or
>> die("chdir: $!"); -          local $ENV{"GIT_DIR"} = $repo->repo_path(); -
>> $hook_error = "rejected by sendemail-validate hook" -                   if
>> system($validate_hook, $target); -           chdir($cwd_save) or die("chdir:
>> $!"); - } -     return $hook_error if $hook_error; +    if ($repo) { +
>> my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'), +
>> 'sendemail-validate'); +            my $hook_error; +               if (-x
>> $validate_hook) { +                      my $target = abs_path($fn); +
>> # The hook needs a correct cwd and GIT_DIR. +                   my $cwd_save
>> = cwd(); +                 chdir($repo->wc_path() or $repo->repo_path()) +
>> or die("chdir: $!"); +                  local $ENV{"GIT_DIR"} =
>> $repo->repo_path(); +                   $hook_error = "rejected by
>> sendemail-validate hook" +                           if
>> system($validate_hook, $target); +                   chdir($cwd_save) or
>> die("chdir: $!"); +         } +             return $hook_error if
>> $hook_error; +    }
>
>
> Would it be worth doing the $repo test when defining $validate_hook to avoid
> a layer of indentation?  Something like this (with whatever proper
> wrapping/indentation is used for perl, if I have that wildly incorrect, of
> course)?
>

This approach makes more sense to me, but either should fix the bug.
The first approach might be more resilient against future changes
though...?

Thanks,
Jake

> -- >8 --
> diff --git i/git-send-email.perl w/git-send-email.perl
> index f0417f64e7..e78a0a728a 100755
> --- i/git-send-email.perl
> +++ w/git-send-email.perl
> @@ -1755,8 +1755,9 @@ sub unique_email_list {
> sub validate_patch {
>         my $fn = shift;
>
> -       my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'),
> -                                   'sendemail-validate');
> +       my $validate_hook = $repo ?
> +               catfile(catdir($repo->repo_path(), 'hooks'),
> +                       'sendemail-validate') : '';
>         my $hook_error;
>         if (-x $validate_hook) {
>                 my $target = abs_path($fn);
>
> --
> Todd
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> I have to decide between two equally frightening options.  If I wanted
> to do that, I'd vote.
>    -- Duckman
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] send-email: check for repo before invoking hook
  2017-06-01 23:50 ` [PATCH] send-email: check for repo before invoking hook Jonathan Tan
  2017-06-02  0:22   ` Todd Zullinger
@ 2017-06-02  1:59   ` Junio C Hamano
  1 sibling, 0 replies; 7+ messages in thread
From: Junio C Hamano @ 2017-06-02  1:59 UTC (permalink / raw)
  To: Jonathan Tan; +Cc: git, bmwill, jacob.keller

Thanks.  

"git show -w" tells readers how this fix is trivially correct ;-)

Will apply.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-06-02  1:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-01 22:45 git-send-email no longer works outside a repository? Jacob Keller
2017-06-01 23:00 ` Brandon Williams
2017-06-01 23:14 ` Junio C Hamano
2017-06-01 23:50 ` [PATCH] send-email: check for repo before invoking hook Jonathan Tan
2017-06-02  0:22   ` Todd Zullinger
2017-06-02  0:49     ` Jacob Keller
2017-06-02  1:59   ` Junio C Hamano

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.