git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Fixes to mh/rebase-fixup
@ 2010-01-22  9:22 Michael Haggerty
  2010-01-22  9:22 ` [PATCH 1/3] rebase -i: Avoid non-portable "test X -a Y" Michael Haggerty
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Michael Haggerty @ 2010-01-22  9:22 UTC (permalink / raw)
  To: git; +Cc: gitster, Johannes.Schindelin, tarmigan+git, j.sixt,
	Michael Haggerty

This patch series contains fixes to the mh/rebase-fixup patch series
as suggested by reviewers on the mailing list.

Since the mh/rebase-fixup patch series is already in "next", I have
written these fixup patches against "next".  I hope that is OK.

The third patch removes the attempt to use one-shot export of
variables in do_with_author(), as the "$@" command that it calls might
be a shell function.  This issue was discussed on the mailing list
[1].  This change has the side effect that the GIT_AUTHOR_* variables
remain exported after do_with_author() returns, but I don't think that
this is a problem in the context of git-rebase--interactive.sh.
However, additional review would be welcome here.

[1] http://marc.info/?l=git&m=126345851831751&w=2

Michael Haggerty (3):
  rebase -i: Avoid non-portable "test X -a Y"
  rebase -i: Enclose sed command substitution in quotes
  rebase -i: Export GIT_AUTHOR_* variables explicitly

 git-rebase--interactive.sh |    6 ++----
 t/lib-rebase.sh            |    2 +-
 2 files changed, 3 insertions(+), 5 deletions(-)

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

* [PATCH 1/3] rebase -i: Avoid non-portable "test X -a Y"
  2010-01-22  9:22 [PATCH 0/3] Fixes to mh/rebase-fixup Michael Haggerty
@ 2010-01-22  9:22 ` Michael Haggerty
  2010-01-22  9:22 ` [PATCH 2/3] rebase -i: Enclose sed command substitution in quotes Michael Haggerty
  2010-01-22  9:22 ` [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly Michael Haggerty
  2 siblings, 0 replies; 7+ messages in thread
From: Michael Haggerty @ 2010-01-22  9:22 UTC (permalink / raw)
  To: git; +Cc: gitster, Johannes.Schindelin, tarmigan+git, j.sixt,
	Michael Haggerty

Reported by: Eric Blake <ebb9@byu.net>

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 git-rebase--interactive.sh |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index e551906..c2f6089 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -235,7 +235,7 @@ pick_one () {
 	parent_sha1=$(git rev-parse --verify $sha1^) ||
 		die "Could not get the parent of $sha1"
 	current_sha1=$(git rev-parse --verify HEAD)
-	if test -z "$no_ff" -a "$current_sha1" = "$parent_sha1"
+	if test -z "$no_ff" && test "$current_sha1" = "$parent_sha1"
 	then
 		output git reset --hard $sha1
 		output warn Fast-forward to $(git rev-parse --short $sha1)
-- 
1.6.6

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

* [PATCH 2/3] rebase -i: Enclose sed command substitution in quotes
  2010-01-22  9:22 [PATCH 0/3] Fixes to mh/rebase-fixup Michael Haggerty
  2010-01-22  9:22 ` [PATCH 1/3] rebase -i: Avoid non-portable "test X -a Y" Michael Haggerty
@ 2010-01-22  9:22 ` Michael Haggerty
  2010-01-22  9:22 ` [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly Michael Haggerty
  2 siblings, 0 replies; 7+ messages in thread
From: Michael Haggerty @ 2010-01-22  9:22 UTC (permalink / raw)
  To: git; +Cc: gitster, Johannes.Schindelin, tarmigan+git, j.sixt,
	Michael Haggerty

Reported by: Johannes Sixt <j.sixt@viscovery.net>

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 t/lib-rebase.sh |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/t/lib-rebase.sh b/t/lib-rebase.sh
index 2d922ae..6aefe27 100644
--- a/t/lib-rebase.sh
+++ b/t/lib-rebase.sh
@@ -27,7 +27,7 @@ set_fake_editor () {
 case "$1" in
 */COMMIT_EDITMSG)
 	test -z "$EXPECT_HEADER_COUNT" ||
-		test "$EXPECT_HEADER_COUNT" = $(sed -n '1s/^# This is a combination of \(.*\) commits\./\1/p' < "$1") ||
+		test "$EXPECT_HEADER_COUNT" = "$(sed -n '1s/^# This is a combination of \(.*\) commits\./\1/p' < "$1")" ||
 		exit
 	test -z "$FAKE_COMMIT_MESSAGE" || echo "$FAKE_COMMIT_MESSAGE" > "$1"
 	test -z "$FAKE_COMMIT_AMEND" || echo "$FAKE_COMMIT_AMEND" >> "$1"
-- 
1.6.6

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

* [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly
  2010-01-22  9:22 [PATCH 0/3] Fixes to mh/rebase-fixup Michael Haggerty
  2010-01-22  9:22 ` [PATCH 1/3] rebase -i: Avoid non-portable "test X -a Y" Michael Haggerty
  2010-01-22  9:22 ` [PATCH 2/3] rebase -i: Enclose sed command substitution in quotes Michael Haggerty
@ 2010-01-22  9:22 ` Michael Haggerty
  2010-01-22 11:16   ` Johannes Schindelin
  2 siblings, 1 reply; 7+ messages in thread
From: Michael Haggerty @ 2010-01-22  9:22 UTC (permalink / raw)
  To: git; +Cc: gitster, Johannes.Schindelin, tarmigan+git, j.sixt,
	Michael Haggerty

As pointed out on the mailing list, one-shot shell variable exports do
not necessarily work with shell functions.  So export the GIT_AUTHOR_*
variables explicitly using "export".

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 git-rebase--interactive.sh |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index c2f6089..c8603f0 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -215,9 +215,7 @@ has_action () {
 # Run command with GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
 # GIT_AUTHOR_DATE exported from the current environment.
 do_with_author () {
-	GIT_AUTHOR_NAME="$GIT_AUTHOR_NAME" \
-	GIT_AUTHOR_EMAIL="$GIT_AUTHOR_EMAIL" \
-	GIT_AUTHOR_DATE="$GIT_AUTHOR_DATE" \
+	export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE &&
 	"$@"
 }
 
-- 
1.6.6

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

* Re: [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly
  2010-01-22  9:22 ` [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly Michael Haggerty
@ 2010-01-22 11:16   ` Johannes Schindelin
  2010-01-22 21:09     ` Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Johannes Schindelin @ 2010-01-22 11:16 UTC (permalink / raw)
  To: Michael Haggerty; +Cc: git, gitster, tarmigan+git, j.sixt

Hi,

On Fri, 22 Jan 2010, Michael Haggerty wrote:

> As pointed out on the mailing list, one-shot shell variable exports do
> not necessarily work with shell functions.  So export the GIT_AUTHOR_*
> variables explicitly using "export".

This one's a bit hairy; I really was not sure about unintended side 
effects, that is why I avoided the export.

Just imagine, for example, some git commit --amend which forgets to set 
the author information; I am not saying that this is happening, but I 
cannot be sure, because every possible code path to a git 
commit/commit-tree has to be checked, and this does not mean that future 
patches will not introduce such broken code, either.

It might also be possible that some people scripted rebase -i with a 
custom "editor" as in the tests (I have done so in the past).  They would 
be affected.

Ciao,
Dscho

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

* Re: [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly
  2010-01-22 11:16   ` Johannes Schindelin
@ 2010-01-22 21:09     ` Junio C Hamano
  2010-01-24  5:33       ` Michael Haggerty
  0 siblings, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2010-01-22 21:09 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Michael Haggerty, git, gitster, tarmigan+git, j.sixt

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> On Fri, 22 Jan 2010, Michael Haggerty wrote:
>
>> As pointed out on the mailing list, one-shot shell variable exports do
>> not necessarily work with shell functions.  So export the GIT_AUTHOR_*
>> variables explicitly using "export".
>
> This one's a bit hairy; I really was not sure about unintended side 
> effects, that is why I avoided the export.
> ... (sensible worries omitted) ...

My reading of "git grep -C3 AUTHOR git-rebase--interactive.sh" is that
GIT_AUTHOR_NAME/EMAIL/DATE are set by:
 
   - redoing a merge (while preserving history) by reading from the merge;

   - squashing/fixing into the last one (relying on the last one did the
     right thing) by reading from the HEAD; or

   - sourcing AUTHOR_SCRIPT upon --continue, reading from the file left
     by make_patch immediately before the previous invocation gave control
     back to the user (e.g. "e"dit, or conflict).

The places we want to see these variables in effect are while doing one of
the above three places, and they all do this with do_with_author.

Nothing that is called with do_with_author has a side effect of setting
shell variables for the caller of do_with_author.

So I tend to think this patch would be the cleanest and safest
alternative, albeit it may cost an extra fork.

What do you think?

-- >8 --
Subject: rebase -i: Export GIT_AUTHOR_* variables explicitly

There is no point doing self-assignments of these variables.  Instead,
just export them to the environment, but do so in a sub-shell, because

	VAR1=VAL1 VAR2=VAL2 ... command arg1 arg2...

does not mark the variables exported if command that is run
is a shell function, according to POSIX.1.

The callers of do_with_author do not rely on seeing the effect of any
shell variable assignments that may happen inside what was called through
this shell function (currently "output" is the only one), so running it in
the subshell doesn't have an adverse semantic effect.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 git-rebase--interactive.sh |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index c2f6089..9187e9b 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -215,10 +215,10 @@ has_action () {
 # Run command with GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
 # GIT_AUTHOR_DATE exported from the current environment.
 do_with_author () {
-	GIT_AUTHOR_NAME="$GIT_AUTHOR_NAME" \
-	GIT_AUTHOR_EMAIL="$GIT_AUTHOR_EMAIL" \
-	GIT_AUTHOR_DATE="$GIT_AUTHOR_DATE" \
-	"$@"
+	(
+		export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
+		"$@"
+	)
 }
 
 pick_one () {

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

* Re: [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly
  2010-01-22 21:09     ` Junio C Hamano
@ 2010-01-24  5:33       ` Michael Haggerty
  0 siblings, 0 replies; 7+ messages in thread
From: Michael Haggerty @ 2010-01-24  5:33 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Schindelin, git, tarmigan+git, j.sixt

Junio C Hamano wrote:
> [...]
> So I tend to think this patch would be the cleanest and safest
> alternative, albeit it may cost an extra fork.
> 
> What do you think?
> 
> -- >8 --
> Subject: rebase -i: Export GIT_AUTHOR_* variables explicitly

Your version is fine with me.

Michael

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

end of thread, other threads:[~2010-01-24  5:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-22  9:22 [PATCH 0/3] Fixes to mh/rebase-fixup Michael Haggerty
2010-01-22  9:22 ` [PATCH 1/3] rebase -i: Avoid non-portable "test X -a Y" Michael Haggerty
2010-01-22  9:22 ` [PATCH 2/3] rebase -i: Enclose sed command substitution in quotes Michael Haggerty
2010-01-22  9:22 ` [PATCH 3/3] rebase -i: Export GIT_AUTHOR_* variables explicitly Michael Haggerty
2010-01-22 11:16   ` Johannes Schindelin
2010-01-22 21:09     ` Junio C Hamano
2010-01-24  5:33       ` Michael Haggerty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).