summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBert Wesarg <bert.wesarg@googlemail.com>2009-11-25 20:10:39 +0100
committerAndreas Gruenbacher <agruen@suse.de>2009-11-25 20:37:33 +0100
commitae6cfa74e5517bfbc2588401ce5e6e1ffaba2f4c (patch)
tree0a48e476b6435f7d37c8cdc6b6e2582d2e70762d
parentbf5b0691c32e4937df2651b1bc2acd8b6672ebd8 (diff)
downloadquilt-ae6cfa74e5517bfbc2588401ce5e6e1ffaba2f4c.tar.gz
fix pager if you press ^C
This adopts more pager clean-up handling from git. Which traps also for some common signals. Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
-rw-r--r--quilt/scripts/patchfns.in23
1 files changed, 21 insertions, 2 deletions
diff --git a/quilt/scripts/patchfns.in b/quilt/scripts/patchfns.in
index eabeef7..6a2b885 100644
--- a/quilt/scripts/patchfns.in
+++ b/quilt/scripts/patchfns.in
@@ -989,6 +989,23 @@ quilt_command()
QUILT_COMMAND="" bash $BASH_OPTS -c "${SUBDIR:+cd $SUBDIR;} . $QUILT_DIR/$command" "quilt $command" "$@"
}
+declare pager_fifo pager_fifo_dir pager_pid
+
+wait_for_pager()
+{
+ exec >&-
+ wait $pager_pid
+ rm $pager_fifo 2>/dev/null
+ rmdir $pager_fifo_dir 2>/dev/null
+}
+
+wait_for_pager_signal()
+{
+ remove_exit_handler wait_for_pager
+ wait_for_pager
+ trap - INT HUP TERM QUIT PIPE
+}
+
# Spawn pager process and redirect the rest of our output to it
setup_pager()
{
@@ -1007,13 +1024,15 @@ setup_pager()
# need temporary files here. Alternatively, in recent versions of
# bash, a coprocess could be used instead.
- local pager_fifo_dir pager_fifo
pager_fifo_dir="$(gen_tempfile -d)"
pager_fifo="$pager_fifo_dir/0"
mkfifo -m 600 "$pager_fifo"
$QUILT_PAGER < "$pager_fifo" &
+ pager_pid=$!
exec > "$pager_fifo"
- add_exit_handler "exec >&-; rm $pager_fifo; rmdir $pager_fifo_dir; wait"
+
+ trap wait_for_pager_signal INT HUP TERM QUIT PIPE
+ add_exit_handler wait_for_pager
}
#