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

[PATCH] filter-branch.sh: remove temporary directory on failure

From
Brandon Casey <casey@nrlssc.navy.mil>
Date
Jan 28, 2008, 21:16 UTC
Message-ID
<479E4612.6030006@nrlssc.navy.mil>
From: Brandon Casey <casey@nrlssc.navy.mil>

One of the first things filter-branch does is to create a temporary directory. This directory is eventually removed by the script during normal operation, but is not removed if the script encounters an error.

Set a trap to remove it when the script terminates for any reason.
Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
---

Even though this directory may be useful for debugging when you encounter a problem, I wonder if the normal "error" will be _user_ error. In which case the user will adjust the command line parameters and try to rerun. Currently the user would then receive the message

     "$tempdir already exists, please remove it"
Then, rm -rf the tempdir, then rerun.

Is this necessary? Maybe anyone with the know-how to debug would also have the know-how to comment out the 'trap' in the script (or direct someone asking for help on the mailing list to do so).

If we really want to leave this temporary directory around on failure, maybe we can at least remove it for some simple errors like:

    line 198: die "Namespace $orig_namespace not empty"
    line 217: die "Which ref do you want to rewrite?"
    etc.
by moving the 'trap - 0' higher up.
-brandon
 git-filter-branch.sh |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index ebf05ca..75970a9 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -189,6 +189,9 @@ cd "$tempdir/t" &&
 workdir="$(pwd)" ||
 die ""
 
+# Remove tempdir on exit
+trap 'cd ../..; rm -rf "$tempdir"' 0
+
 # Make sure refs/original is empty
 git for-each-ref > "$tempdir"/backup-refs
 while read sha1 type name
@@ -406,6 +409,8 @@ fi
 cd ../..
 rm -rf "$tempdir"
 
+trap - 0
+
 unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE
 test -z "$ORIG_GIT_DIR" || GIT_DIR="$ORIG_GIT_DIR" && export GIT_DIR
 test -z "$ORIG_GIT_WORK_TREE" || GIT_WORK_TREE="$ORIG_GIT_WORK_TREE" &&
-- 
1.5.4.rc5.2.g9a6d-dirty
Next: Junio C Hamano
Message 1 of 3 in “filter-branch.sh: remove temporary directory on failure”
  1. filter-branch.sh: remove temporary directory on failureBrandon Casey, Jan 28, 2008
  2. Junio C HamanoJan 30, 2008
  3. Johannes SchindelinJan 30, 2008

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.