* git cherry unkillable
@ 2006-01-22 10:23 Andrey Borzenkov
[not found] ` <20060122063904.2dbefbe4.seanlkml@sympatico.ca>
0 siblings, 1 reply; 7+ messages in thread
From: Andrey Borzenkov @ 2006-01-22 10:23 UTC (permalink / raw)
To: git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I mistakenly run git cherry on linus tree which was a bit too much for my poor
old system. Trying to kill (^C) it I got
{pts/0}% git cherry ali1535 linus
external diff died, stopping at include/linux/sysctl.h.
external diff died, stopping at drivers/serial/suncore.c.
diff: /home/bor/tmp/.diff_Y6CvCw: No such file or directory
diff: /home/bor/tmp/.diff_tBqCCk: No such file or directory
external diff died, stopping at include/asm-arm/arch-pxa/pxa-regs.h.
external diff died, stopping at fs/cifs/file.c.
external diff died, stopping at MAINTAINERS.
diff: /home/bor/tmp/.diff_P12uX9: No such file or directory
diff: /home/bor/tmp/.diff_R4v0g0: No such file or directory
external diff died, stopping at net/ipv4/route.c.
....
and it jut goes on. This takes really some time here so ability to stop it
would be really nice. It still runs with CPU temp rocketing.
Regards
- -andrey
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
iD8DBQFD010lR6LMutpd94wRArDIAKC4yNPpwZ2AEKpXwjeZREMRCL3VyACeJaYu
UMZUpX3D3UfHSm0m44pvAmY=
=0Cxg
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: git cherry unkillable
[not found] ` <20060122063904.2dbefbe4.seanlkml@sympatico.ca>
@ 2006-01-22 11:39 ` sean
[not found] ` <20060122095113.0eea7aa0.seanlkml@sympatico.ca>
2006-01-22 15:01 ` Andrey Borzenkov
0 siblings, 2 replies; 7+ messages in thread
From: sean @ 2006-01-22 11:39 UTC (permalink / raw)
To: Andrey Borzenkov; +Cc: git
On Sun, 22 Jan 2006 13:23:26 +0300
Andrey Borzenkov <arvidjaar@mail.ru> wrote:
> Hash: SHA1
>
> I mistakenly run git cherry on linus tree which was a bit too much for my poor
> old system. Trying to kill (^C) it I got
>
> {pts/0}% git cherry ali1535 linus
> external diff died, stopping at include/linux/sysctl.h.
> external diff died, stopping at drivers/serial/suncore.c.
> diff: /home/bor/tmp/.diff_Y6CvCw: No such file or directory
> diff: /home/bor/tmp/.diff_tBqCCk: No such file or directory
> external diff died, stopping at include/asm-arm/arch-pxa/pxa-regs.h.
> external diff died, stopping at fs/cifs/file.c.
> external diff died, stopping at MAINTAINERS.
> diff: /home/bor/tmp/.diff_P12uX9: No such file or directory
> diff: /home/bor/tmp/.diff_R4v0g0: No such file or directory
> external diff died, stopping at net/ipv4/route.c.
> ....
>
> and it jut goes on. This takes really some time here so ability to stop it
> would be really nice. It still runs with CPU temp rocketing.
>
Ouch yeah, you'd have to explicitly kill -9 from another command line. The
same problem exists in a few other scripts too, although probably none that
can be as long lived as git-cherry.
The attached patch works for me but i'm concerned about it a bit. With this
patch it looks like the signal handler is executed twice; once as normal and
a second time in response to the added "exit" statement. By adding
";trap - 0;exit" it is only executed once, but i'm not sure how universal that
is, and letting it run twice shouldn't be a big deal anyway.
The other minor concern is that exit should maybe return an error value
instead; but that isn't approprirate when handling signal zero. So it
might be better to have a separate trap for signal zero, but in the end
it doesn't seem worth the bother.
Sean
diff --git a/git-cherry.sh b/git-cherry.sh
index 1a62320..a1e4d70 100755
--- a/git-cherry.sh
+++ b/git-cherry.sh
@@ -49,7 +49,7 @@ ours=`git-rev-list $ours ^$limit` || exi
tmp=.cherry-tmp$$
patch=$tmp-patch
mkdir $patch
-trap "rm -rf $tmp-*" 0 1 2 3 15
+trap "rm -rf $tmp-*;exit" 0 1 2 3 15
_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
diff --git a/git-format-patch.sh b/git-format-patch.sh
index 7e67c4e..38adaad 100755
--- a/git-format-patch.sh
+++ b/git-format-patch.sh
@@ -77,7 +77,7 @@ tt)
esac
tmp=.tmp-series$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+trap 'rm -f $tmp-*;exit' 0 1 2 3 15
series=$tmp-series
commsg=$tmp-commsg
diff --git a/git-ls-remote.sh b/git-ls-remote.sh
index f699268..ba96969 100755
--- a/git-ls-remote.sh
+++ b/git-ls-remote.sh
@@ -38,7 +38,7 @@ peek_repo="$(get_remote_url "$@")"
shift
tmp=.ls-remote-$$
-trap "rm -fr $tmp-*" 0 1 2 3 15
+trap "rm -fr $tmp-*;exit" 0 1 2 3 15
tmpdir=$tmp-d
case "$peek_repo" in
diff --git a/git-reset.sh b/git-reset.sh
index 6c9e58a..1b6781f 100755
--- a/git-reset.sh
+++ b/git-reset.sh
@@ -4,7 +4,7 @@ USAGE='[--mixed | --soft | --hard] [<co
. git-sh-setup
tmp=${GIT_DIR}/reset.$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+trap 'rm -f $tmp-*;exit' 0 1 2 3 15
reset_type=--mixed
case "$1" in
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: git cherry unkillable
[not found] ` <20060122095113.0eea7aa0.seanlkml@sympatico.ca>
@ 2006-01-22 14:51 ` sean
2006-01-22 15:21 ` Andrey Borzenkov
0 siblings, 1 reply; 7+ messages in thread
From: sean @ 2006-01-22 14:51 UTC (permalink / raw)
To: sean; +Cc: arvidjaar, git
On Sun, 22 Jan 2006 06:39:04 -0500
sean <seanlkml@sympatico.ca> wrote:
> The attached patch works for me but i'm concerned about it a bit.
Below is a better version that doesn't obscure the proper exit value in the normal
case and exits with 1 if interrupted by the user. It also ensures that the cleanup
isn't executed twice when the script is interrupted.
However, for Bash (at least) none of this is necessary; all the traps could just
be changed to only trap 0 and the cleanup will be executed for all cases. However,
I don't know how compatible that is with other shells. If other shells behave
the same, the best fix is just to strip the 1,2,3 and 15 from each of the existing
trap lines and not bother with the patch given below.
Sean
diff --git a/git-cherry.sh b/git-cherry.sh
index 1a62320..0b2ef1f 100755
--- a/git-cherry.sh
+++ b/git-cherry.sh
@@ -49,7 +49,8 @@ ours=`git-rev-list $ours ^$limit` || exi
tmp=.cherry-tmp$$
patch=$tmp-patch
mkdir $patch
-trap "rm -rf $tmp-*" 0 1 2 3 15
+trap "rm -rf $tmp-*" 0
+trap "exit 1" 1 2 3 15
_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
diff --git a/git-format-patch.sh b/git-format-patch.sh
index 7e67c4e..6ba6339 100755
--- a/git-format-patch.sh
+++ b/git-format-patch.sh
@@ -77,7 +77,8 @@ tt)
esac
tmp=.tmp-series$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+trap "rm -f $tmp-*" 0
+trap "exit 1" 1 2 3 15
series=$tmp-series
commsg=$tmp-commsg
diff --git a/git-ls-remote.sh b/git-ls-remote.sh
index f699268..7dc224b 100755
--- a/git-ls-remote.sh
+++ b/git-ls-remote.sh
@@ -38,7 +38,8 @@ peek_repo="$(get_remote_url "$@")"
shift
tmp=.ls-remote-$$
-trap "rm -fr $tmp-*" 0 1 2 3 15
+trap "rm -rf $tmp-*" 0
+trap "exit 1" 1 2 3 15
tmpdir=$tmp-d
case "$peek_repo" in
diff --git a/git-reset.sh b/git-reset.sh
index 6c9e58a..166b635 100755
--- a/git-reset.sh
+++ b/git-reset.sh
@@ -4,7 +4,8 @@ USAGE='[--mixed | --soft | --hard] [<co
. git-sh-setup
tmp=${GIT_DIR}/reset.$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+trap "rm -f $tmp-*" 0
+trap "exit 1" 1 2 3 15
reset_type=--mixed
case "$1" in
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: git cherry unkillable
2006-01-22 11:39 ` sean
[not found] ` <20060122095113.0eea7aa0.seanlkml@sympatico.ca>
@ 2006-01-22 15:01 ` Andrey Borzenkov
1 sibling, 0 replies; 7+ messages in thread
From: Andrey Borzenkov @ 2006-01-22 15:01 UTC (permalink / raw)
To: sean; +Cc: git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Sunday 22 January 2006 14:39, sean wrote:
>
> The attached patch works for me
ack at least for git-cherry
> but i'm concerned about it a bit. With
> this patch it looks like the signal handler is executed twice; once as
> normal and a second time in response to the added "exit" statement. By
> adding ";trap - 0;exit" it is only executed once, but i'm not sure how
> universal that is, and letting it run twice shouldn't be a big deal anyway.
>
why not
trap "rm -rf $tmp-*" 0
trap "exit" 1 2 3 15
?
- -andrey
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
iD8DBQFD055JR6LMutpd94wRAn06AJ0RrLXwND67hvhRrSeaQvUjgrfGrACeK1cs
JA0jLNs5/8FPwpZqzKRd3eo=
=8QbF
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: git cherry unkillable
2006-01-22 14:51 ` sean
@ 2006-01-22 15:21 ` Andrey Borzenkov
[not found] ` <20060122103204.05a16683.seanlkml@sympatico.ca>
0 siblings, 1 reply; 7+ messages in thread
From: Andrey Borzenkov @ 2006-01-22 15:21 UTC (permalink / raw)
To: sean; +Cc: git, zsh-workers
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Sunday 22 January 2006 17:51, sean wrote:
> On Sun, 22 Jan 2006 06:39:04 -0500
>
> sean <seanlkml@sympatico.ca> wrote:
> > The attached patch works for me but i'm concerned about it a bit.
>
> Below is a better version that doesn't obscure the proper exit value in the
> normal case and exits with 1 if interrupted by the user. It also ensures
> that the cleanup isn't executed twice when the script is interrupted.
>
> However, for Bash (at least) none of this is necessary; all the traps could
> just be changed to only trap 0 and the cleanup will be executed for all
> cases. However, I don't know how compatible that is with other shells.
> If other shells behave the same, the best fix is just to strip the 1,2,3
> and 15 from each of the existing trap lines and not bother with the patch
> given below.
>
this patch fails on zsh; trap 0 never executed after signal (SIGINT to be
sure) is caught:
#!/bin/zsh
trap "exit 0" 1 2 3 15
trap "echo exiting" 0
sleep 100000000
{pts/0}% /tmp/timout.zsh ^C
{pts/0}%
- -andrey
> Sean
>
>
> diff --git a/git-cherry.sh b/git-cherry.sh
> index 1a62320..0b2ef1f 100755
> --- a/git-cherry.sh
> +++ b/git-cherry.sh
> @@ -49,7 +49,8 @@ ours=`git-rev-list $ours ^$limit` || exi
> tmp=.cherry-tmp$$
> patch=$tmp-patch
> mkdir $patch
> -trap "rm -rf $tmp-*" 0 1 2 3 15
> +trap "rm -rf $tmp-*" 0
> +trap "exit 1" 1 2 3 15
>
> _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
> _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
> diff --git a/git-format-patch.sh b/git-format-patch.sh
> index 7e67c4e..6ba6339 100755
> --- a/git-format-patch.sh
> +++ b/git-format-patch.sh
> @@ -77,7 +77,8 @@ tt)
> esac
>
> tmp=.tmp-series$$
> -trap 'rm -f $tmp-*' 0 1 2 3 15
> +trap "rm -f $tmp-*" 0
> +trap "exit 1" 1 2 3 15
>
> series=$tmp-series
> commsg=$tmp-commsg
> diff --git a/git-ls-remote.sh b/git-ls-remote.sh
> index f699268..7dc224b 100755
> --- a/git-ls-remote.sh
> +++ b/git-ls-remote.sh
> @@ -38,7 +38,8 @@ peek_repo="$(get_remote_url "$@")"
> shift
>
> tmp=.ls-remote-$$
> -trap "rm -fr $tmp-*" 0 1 2 3 15
> +trap "rm -rf $tmp-*" 0
> +trap "exit 1" 1 2 3 15
> tmpdir=$tmp-d
>
> case "$peek_repo" in
> diff --git a/git-reset.sh b/git-reset.sh
> index 6c9e58a..166b635 100755
> --- a/git-reset.sh
> +++ b/git-reset.sh
> @@ -4,7 +4,8 @@ USAGE='[--mixed | --soft | --hard] [<co
> . git-sh-setup
>
> tmp=${GIT_DIR}/reset.$$
> -trap 'rm -f $tmp-*' 0 1 2 3 15
> +trap "rm -f $tmp-*" 0
> +trap "exit 1" 1 2 3 15
>
> reset_type=--mixed
> case "$1" in
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
iD8DBQFD06MSR6LMutpd94wRApgAAJ0e0AUIS83XTa4BA1rEY1XriHKZmQCgnXZd
1sElZOLAgyuxgi3EHiaMGFc=
=xwjP
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: git cherry unkillable
[not found] ` <20060122103204.05a16683.seanlkml@sympatico.ca>
@ 2006-01-22 15:32 ` sean
[not found] ` <20060122104850.33d07ad5.seanlkml@sympatico.ca>
0 siblings, 1 reply; 7+ messages in thread
From: sean @ 2006-01-22 15:32 UTC (permalink / raw)
To: Andrey Borzenkov; +Cc: git, zsh-workers
On Sun, 22 Jan 2006 18:21:53 +0300
Andrey Borzenkov <arvidjaar@mail.ru> wrote:
> this patch fails on zsh; trap 0 never executed after signal (SIGINT to be
> sure) is caught:
>
> #!/bin/zsh
>
> trap "exit 0" 1 2 3 15
> trap "echo exiting" 0
>
> sleep 100000000
>
> {pts/0}% /tmp/timout.zsh ^C
> {pts/0}%
>
Damn, would be so much nicer to get this stuff out of shell scripts. Anyway,
your discovery kills the idea of being able to just ignore the higher signal
traps... The following implements the same idea as my second patch
in hopefully a slightly more cross-shell compatible way; it works on bash
and zsh at least.
diff --git a/git-cherry.sh b/git-cherry.sh
index 1a62320..686210b 100755
--- a/git-cherry.sh
+++ b/git-cherry.sh
@@ -49,7 +49,8 @@ ours=`git-rev-list $ours ^$limit` || exi
tmp=.cherry-tmp$$
patch=$tmp-patch
mkdir $patch
-trap "rm -rf $tmp-*" 0 1 2 3 15
+trap "rm -rf $tmp-*" 0
+trap "kill -0 $$" 1 2 3 15
_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
diff --git a/git-format-patch.sh b/git-format-patch.sh
index 7e67c4e..9f93bbb 100755
--- a/git-format-patch.sh
+++ b/git-format-patch.sh
@@ -77,7 +77,8 @@ tt)
esac
tmp=.tmp-series$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+trap "rm -f $tmp-*" 0
+trap "kill -0 $$" 1 2 3 15
series=$tmp-series
commsg=$tmp-commsg
diff --git a/git-ls-remote.sh b/git-ls-remote.sh
index f699268..0cd1f07 100755
--- a/git-ls-remote.sh
+++ b/git-ls-remote.sh
@@ -38,7 +38,8 @@ peek_repo="$(get_remote_url "$@")"
shift
tmp=.ls-remote-$$
-trap "rm -fr $tmp-*" 0 1 2 3 15
+trap "rm -rf $tmp-*" 0
+trap "kill -0 $$" 1 2 3 15
tmpdir=$tmp-d
case "$peek_repo" in
diff --git a/git-reset.sh b/git-reset.sh
index 6c9e58a..597b36e 100755
--- a/git-reset.sh
+++ b/git-reset.sh
@@ -4,7 +4,8 @@ USAGE='[--mixed | --soft | --hard] [<co
. git-sh-setup
tmp=${GIT_DIR}/reset.$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+trap "rm -f $tmp-*" 0
+trap "kill -0 $$" 1 2 3 15
reset_type=--mixed
case "$1" in
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: git cherry unkillable
[not found] ` <20060122104850.33d07ad5.seanlkml@sympatico.ca>
@ 2006-01-22 15:48 ` sean
0 siblings, 0 replies; 7+ messages in thread
From: sean @ 2006-01-22 15:48 UTC (permalink / raw)
To: sean; +Cc: arvidjaar, git, zsh-workers
On Sun, 22 Jan 2006 10:32:04 -0500
sean <seanlkml@sympatico.ca> wrote:
> Damn, would be so much nicer to get this stuff out of shell scripts. Anyway,
> your discovery kills the idea of being able to just ignore the higher signal
> traps... The following implements the same idea as my second patch
> in hopefully a slightly more cross-shell compatible way; it works on bash
> and zsh at least.
Ooops, not even close on that attempt :o/ Here's a version that really does
work on zsh and bash; and should work on all shells.
Sean
diff --git a/git-cherry.sh b/git-cherry.sh
index 1a62320..4925f1f 100755
--- a/git-cherry.sh
+++ b/git-cherry.sh
@@ -49,7 +49,9 @@ ours=`git-rev-list $ours ^$limit` || exi
tmp=.cherry-tmp$$
patch=$tmp-patch
mkdir $patch
-trap "rm -rf $tmp-*" 0 1 2 3 15
+cleanup() { rm -rf $tmp-*; }
+trap cleanup 0
+trap "cleanup;trap 0;exit 1" 1 2 3 15
_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
diff --git a/git-format-patch.sh b/git-format-patch.sh
index 7e67c4e..574a79c 100755
--- a/git-format-patch.sh
+++ b/git-format-patch.sh
@@ -77,7 +77,9 @@ tt)
esac
tmp=.tmp-series$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+cleanup() { rm -f $tmp-*; }
+trap cleanup 0
+trap "cleanup;trap 0;exit 1" 1 2 3 15
series=$tmp-series
commsg=$tmp-commsg
diff --git a/git-ls-remote.sh b/git-ls-remote.sh
index f699268..0259a88 100755
--- a/git-ls-remote.sh
+++ b/git-ls-remote.sh
@@ -38,7 +38,9 @@ peek_repo="$(get_remote_url "$@")"
shift
tmp=.ls-remote-$$
-trap "rm -fr $tmp-*" 0 1 2 3 15
+cleanup() { rm -rf $tmp-*; }
+trap cleanup 0
+trap "cleanup;trap 0;exit 1" 1 2 3 15
tmpdir=$tmp-d
case "$peek_repo" in
diff --git a/git-reset.sh b/git-reset.sh
index 6c9e58a..3336690 100755
--- a/git-reset.sh
+++ b/git-reset.sh
@@ -4,7 +4,9 @@ USAGE='[--mixed | --soft | --hard] [<co
. git-sh-setup
tmp=${GIT_DIR}/reset.$$
-trap 'rm -f $tmp-*' 0 1 2 3 15
+cleanup() { rm -f $tmp-*; }
+trap cleanup 0
+trap "cleanup;trap 0;exit 1" 1 2 3 15
reset_type=--mixed
case "$1" in
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-01-22 15:53 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-22 10:23 git cherry unkillable Andrey Borzenkov
[not found] ` <20060122063904.2dbefbe4.seanlkml@sympatico.ca>
2006-01-22 11:39 ` sean
[not found] ` <20060122095113.0eea7aa0.seanlkml@sympatico.ca>
2006-01-22 14:51 ` sean
2006-01-22 15:21 ` Andrey Borzenkov
[not found] ` <20060122103204.05a16683.seanlkml@sympatico.ca>
2006-01-22 15:32 ` sean
[not found] ` <20060122104850.33d07ad5.seanlkml@sympatico.ca>
2006-01-22 15:48 ` sean
2006-01-22 15:01 ` Andrey Borzenkov
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).