git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).