git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git cherry unkillable

From
sean <seanlkml@sympatico.ca>
Date
Jan 22, 2006, 11:39 UTC
Message-ID
<BAYC1-PASMTP10435A067270A659801A48AE110@CEZ.ICE>
In-Reply-To
<200601221323.33377.arvidjaar@mail.ru>

On Sun, 22 Jan 2006 13:23:26 +0300 Andrey Borzenkov <arvidjaar@mail.ru> wrote:

Show 21 quoted lines
> 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
Previous: Andrey BorzenkovNext: sean
Message 2 of 7 in “git cherry unkillable”
  1. Andrey BorzenkovJan 22, 2006
  2. seanJan 22, 2006
  3. seanJan 22, 2006
  4. Andrey BorzenkovJan 22, 2006
  5. seanJan 22, 2006
  6. seanJan 22, 2006
  7. Andrey BorzenkovJan 22, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.