Something like:
$ git bisect run ! grep string my_file
does not work right now, probably because '!' is a shell keyword.
(This simple script shows the problem:
$ echo "#"\!"/bin/sh" > ./simple_test.sh
$ echo "echo \"running:\" \"\$@\"" >> ./simple_test.sh
$ echo "\"\$@\"" >> ./simple_test.sh
$ chmod +x ./simple_test.sh
$ ./simple_test.sh ! grep foo bar.txt
running: ! grep foo bar.txt
./simple_test.sh: line 3: !: command not found
)
This patch tries to work around this problem by counting how
many bangs are passed at the beginning of the "bisect run"
argument list and adding them back when evaluating "$@".
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
git-bisect.sh | 25 +++++++++++++++++++++++--
t/t6030-bisect-porcelain.sh | 9 +++++++++
2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/git-bisect.sh b/git-bisect.sh
index 1cd4561..f4ce199 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -307,10 +307,31 @@ bisect_replay () {
bisect_run () {
bisect_next_check fail
+ # Count '!' because they need special code.
+ bang_count=0
+ while [ "$1" == '!' ]
+ do
+ bang_count=$(expr $bang_count + 1)
+ shift
+ done
+ test $bang_count -gt 0 && bang_modulo=$(expr $bang_count % 2)
+
+ # Bisect loop.
while true
do
- echo "running $@"
- "$@"
+ # Run the command/script passed as argument.
+ if [ $bang_count -eq 0 ]; then
+ echo "running $@"
+ "$@"
+ else
+ if [ $bang_modulo -eq 0 ]; then
+ echo "running ! ( ! $@ )"
+ ! ( ! "$@" )
+ else
+ echo "running ! $@"
+ ! "$@"
+ fi
+ fi
res=$?
# Check for really bad run error.
diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh
index 30f6ade..56fd645 100755
--- a/t/t6030-bisect-porcelain.sh
+++ b/t/t6030-bisect-porcelain.sh
@@ -99,6 +99,15 @@ test_expect_success \
grep "$HASH4 is first bad commit" my_bisect_log.txt &&
git bisect reset'
+# We again want to automatically find the commit that
+# introduced "Ciao" into hello.
+test_expect_success \
+ '"git bisect run" with bang in argument' \
+ 'git bisect start $HASH4 $HASH1 &&
+ git bisect run ! grep Ciao hello > my_bisect_log.txt &&
+ grep "$HASH4 is first bad commit" my_bisect_log.txt &&
+ git bisect reset'
+
#
#
test_done
--
1.5.2.rc0.71.g4342-dirty
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| James Bottomley | Re: Integration of SCST in the mainstream Linux kernel |
| Stephen Rothwell | Re: Announce: Linux-next (Or Andrew's dream :-)) |
| Arjan van de Ven | Re: [malware-list] [RFC 0/5] [TALPA] Intro to a linux interfaceforon access scanning |
| Patrick McHardy | Re: [GIT]: Networking |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Eric W. Biederman | Re: namespace support requires network modules to say "GPL" |
git: | |
