* [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables
@ 2008-06-19 17:32 Brandon Casey
2008-06-19 17:39 ` Mike Hommey
0 siblings, 1 reply; 8+ messages in thread
From: Brandon Casey @ 2008-06-19 17:32 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git Mailing List
When the arguments to test_must_fail() begin with a variable assignment,
test_must_fail() attempts to execute the variable assignment as a command.
This fails, and so test_must_fail returns with a successful status value
without running the command it was intended to test.
For example, the following script:
#!/bin/sh
test_must_fail () {
"$@"
test $? -gt 0 -a $? -le 129
}
foo='wo adrian'
test_must_fail foo='yo adrian' sh -c 'echo foo: $foo'
always exits zero and prints the message:
test.sh: line 3: foo=yo adrian: command not found
Test 16 calls test_must_fail in such a way and therefore has not been
testing whether git 'do[es] not fire editor in the presence of conflicts'.
Fix this by reverting to the traditional negation operator '!' and accept
the caveat that segfault will not be detected.
Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
---
Unless you have a better work around...
-brandon
t/t7502-commit.sh | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/t/t7502-commit.sh b/t/t7502-commit.sh
index ed871a6..e3469e0 100755
--- a/t/t7502-commit.sh
+++ b/t/t7502-commit.sh
@@ -212,7 +212,9 @@ test_expect_success 'do not fire editor in the presence of conflicts' '
# Must fail due to conflict
test_must_fail git cherry-pick -n master &&
echo "editor not started" >.git/result &&
- test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
+ # We intentionally do not use test_must_fail on the next line since the
+ # mechanism does not work when setting environment variables inline
+ ! GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
test "$(cat .git/result)" = "editor not started"
'
--
1.5.5.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables
2008-06-19 17:32 [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables Brandon Casey
@ 2008-06-19 17:39 ` Mike Hommey
2008-06-19 17:44 ` Brandon Casey
0 siblings, 1 reply; 8+ messages in thread
From: Mike Hommey @ 2008-06-19 17:39 UTC (permalink / raw)
To: Brandon Casey; +Cc: Junio C Hamano, Git Mailing List
On Thu, Jun 19, 2008 at 12:32:02PM -0500, Brandon Casey wrote:
> - test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
> + # We intentionally do not use test_must_fail on the next line since the
> + # mechanism does not work when setting environment variables inline
> + ! GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
Doesn't GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" test_must_fail git commit
work ?
Mike
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables
2008-06-19 17:39 ` Mike Hommey
@ 2008-06-19 17:44 ` Brandon Casey
2008-06-19 17:56 ` Mike Hommey
2008-06-19 18:40 ` Junio C Hamano
0 siblings, 2 replies; 8+ messages in thread
From: Brandon Casey @ 2008-06-19 17:44 UTC (permalink / raw)
To: Mike Hommey; +Cc: Junio C Hamano, Git Mailing List
Mike Hommey wrote:
> On Thu, Jun 19, 2008 at 12:32:02PM -0500, Brandon Casey wrote:
>> - test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
>> + # We intentionally do not use test_must_fail on the next line since the
>> + # mechanism does not work when setting environment variables inline
>> + ! GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
>
> Doesn't GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" test_must_fail git commit
> work ?
That leaves GIT_EDITOR set to the new value after the command completes.
-brandon
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables
2008-06-19 17:44 ` Brandon Casey
@ 2008-06-19 17:56 ` Mike Hommey
2008-06-19 18:07 ` Brandon Casey
2008-06-19 18:40 ` Junio C Hamano
1 sibling, 1 reply; 8+ messages in thread
From: Mike Hommey @ 2008-06-19 17:56 UTC (permalink / raw)
To: Brandon Casey; +Cc: Junio C Hamano, Git Mailing List
On Thu, Jun 19, 2008 at 12:44:23PM -0500, Brandon Casey wrote:
> Mike Hommey wrote:
> > On Thu, Jun 19, 2008 at 12:32:02PM -0500, Brandon Casey wrote:
> >> - test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
> >> + # We intentionally do not use test_must_fail on the next line since the
> >> + # mechanism does not work when setting environment variables inline
> >> + ! GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
> >
> > Doesn't GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" test_must_fail git commit
> > work ?
>
> That leaves GIT_EDITOR set to the new value after the command completes.
It really shouldn't.
Mike
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables
2008-06-19 17:56 ` Mike Hommey
@ 2008-06-19 18:07 ` Brandon Casey
2008-06-19 18:12 ` Brandon Casey
0 siblings, 1 reply; 8+ messages in thread
From: Brandon Casey @ 2008-06-19 18:07 UTC (permalink / raw)
To: Mike Hommey; +Cc: Junio C Hamano, Git Mailing List
Mike Hommey wrote:
> On Thu, Jun 19, 2008 at 12:44:23PM -0500, Brandon Casey wrote:
>> Mike Hommey wrote:
>>> On Thu, Jun 19, 2008 at 12:32:02PM -0500, Brandon Casey wrote:
>>>> - test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
>>>> + # We intentionally do not use test_must_fail on the next line since the
>>>> + # mechanism does not work when setting environment variables inline
>>>> + ! GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
>>> Doesn't GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" test_must_fail git commit
>>> work ?
>> That leaves GIT_EDITOR set to the new value after the command completes.
>
> It really shouldn't.
The change you suggested is also what I tried first. Looks like it depends on the
shell. On my system /bin/sh is a symlink to /bin/bash and that is the behavior
I observed. On other shells the assignment is not passed to the environment of
the called procedure at all.
Here is an example script:
#!/bin/sh
test_must_fail () {
"$@"
test $? -gt 0 -a $? -le 129
}
foo='wo adrian'
foo='yo adrian' test_must_fail sh -c 'echo foo: $foo'
echo "foo: $foo"
When /bin/sh is a symlink to bash, I get:
foo: yo adrian
foo: yo adrian
If I change #!/bin/sh to #!/bin/bash I get what is expected:
foo: yo adrian
foo: wo adrian
#!/bin/ksh
foo:
foo: yo adrian
#!/bin/dash
foo:
foo: yo adrian
-brandon
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables
2008-06-19 17:44 ` Brandon Casey
2008-06-19 17:56 ` Mike Hommey
@ 2008-06-19 18:40 ` Junio C Hamano
2008-06-19 20:39 ` Brandon Casey
1 sibling, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2008-06-19 18:40 UTC (permalink / raw)
To: Brandon Casey; +Cc: Mike Hommey, Git Mailing List
Brandon Casey <casey@nrlssc.navy.mil> writes:
> Mike Hommey wrote:
>> On Thu, Jun 19, 2008 at 12:32:02PM -0500, Brandon Casey wrote:
>>> - test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
>>> + # We intentionally do not use test_must_fail on the next line since the
>>> + # mechanism does not work when setting environment variables inline
>>> + ! GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
>>
>> Doesn't GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" test_must_fail git commit
>> work ?
>
> That leaves GIT_EDITOR set to the new value after the command completes.
>
> -brandon
A Subshell?
@@ -212,6 +212,7 @@ test_expect_success 'do not fire
# Must fail due to conflict
test_must_fail git cherry-pick -n master &&
echo "editor not started" >.git/result &&
- test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
+ ( GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" && export GIT_EDITOR &&
+ test_must_fail git commit ) &&
test "$(cat .git/result)" = "editor not started"
'
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables
2008-06-19 18:40 ` Junio C Hamano
@ 2008-06-19 20:39 ` Brandon Casey
0 siblings, 0 replies; 8+ messages in thread
From: Brandon Casey @ 2008-06-19 20:39 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Mike Hommey, Git Mailing List
Junio C Hamano wrote:
> A Subshell?
>
> @@ -212,6 +212,7 @@ test_expect_success 'do not fire
> # Must fail due to conflict
> test_must_fail git cherry-pick -n master &&
> echo "editor not started" >.git/result &&
> - test_must_fail GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" git commit &&
> + ( GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" && export GIT_EDITOR &&
> + test_must_fail git commit ) &&
> test "$(cat .git/result)" = "editor not started"
> '
That works and it's better.
-brandon
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-06-19 20:40 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-19 17:32 [PATCH] t7502-commit.sh: test_must_fail doesn't work with inline environment variables Brandon Casey
2008-06-19 17:39 ` Mike Hommey
2008-06-19 17:44 ` Brandon Casey
2008-06-19 17:56 ` Mike Hommey
2008-06-19 18:07 ` Brandon Casey
2008-06-19 18:12 ` Brandon Casey
2008-06-19 18:40 ` Junio C Hamano
2008-06-19 20:39 ` Brandon Casey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox