From: Eric Kidd <git@randomhacks.net>
To: git@vger.kernel.org
Cc: Eric Kidd <git@randomhacks.net>
Subject: [PATCH] git-filter-branch: Add more error-handling
Date: Wed, 11 Feb 2009 09:09:25 -0500 [thread overview]
Message-ID: <1234361365-63711-1-git-send-email-git@randomhacks.net> (raw)
In commit 9273b56278e64dd47b1a96a705ddf46aeaf6afe3, I fixed an error
that had slipped by the test suites because of a missing check on 'git
read-tree -u -m HEAD'.
I mentioned to Johannes Schindelin that there were several bugs of this
type in git-filter-branch, and he suggested that I send a patch.
I've tested this patch using t/t7003-filter-branch.sh, and it passes all
the existing tests. But it's entirely possible that this patch contains
errors, and I would love input from people who have more experience with
sh and who know more about git-filter-branch.
In particular, the following hunk may change the public UI to
git-filter-branch, although I'm not sure whether the change is for
better or for worse. As I understand it, this hunk would allow
$filter_commit to abort the rewriting process by returning a non-0 exit
status:
@SHELL_PATH@ -c "$filter_commit" "git commit-tree" \
- $(git write-tree) $parentstr < ../message > ../map/$commit
+ $(git write-tree) $parentstr < ../message > ../map/$commit ||
+ die "could not write rewritten commit"
done <../revs
I'd be happy to add a test case for what happens when $filter_commit
returns a non-0 exit status. Is the old behavior preferable?
---
git-filter-branch.sh | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
I'm trying to do the constructive thing, and send patches instead of bug
reports. :-) -Eric
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 86eef56..9d50978 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -221,7 +221,7 @@ die ""
trap 'cd ../..; rm -rf "$tempdir"' 0
# Make sure refs/original is empty
-git for-each-ref > "$tempdir"/backup-refs
+git for-each-ref > "$tempdir"/backup-refs || die "Can't back up refs"
while read sha1 type name
do
case "$force,$name" in
@@ -242,7 +242,7 @@ export GIT_DIR GIT_WORK_TREE
# The refs should be updated if their heads were rewritten
git rev-parse --no-flags --revs-only --symbolic-full-name --default HEAD "$@" |
-sed -e '/^^/d' >"$tempdir"/heads
+sed -e '/^^/d' >"$tempdir"/heads || die "Can't make list of original refs"
test -s "$tempdir"/heads ||
die "Which ref do you want to rewrite?"
@@ -315,10 +315,11 @@ while read commit parents; do
die "tree filter failed: $filter_tree"
(
- git diff-index -r --name-only $commit
+ git diff-index -r --name-only $commit &&
git ls-files --others
) |
- git update-index --add --replace --remove --stdin
+ git update-index --add --replace --remove --stdin ||
+ die "unable to update index with results of tree filter"
fi
eval "$filter_index" < /dev/null ||
@@ -339,7 +340,8 @@ while read commit parents; do
eval "$filter_msg" > ../message ||
die "msg filter failed: $filter_msg"
@SHELL_PATH@ -c "$filter_commit" "git commit-tree" \
- $(git write-tree) $parentstr < ../message > ../map/$commit
+ $(git write-tree) $parentstr < ../message > ../map/$commit ||
+ die "could not write rewritten commit"
done <../revs
# In case of a subdirectory filter, it is possible that a specified head
@@ -407,7 +409,8 @@ do
die "Could not rewrite $ref"
;;
esac
- git update-ref -m "filter-branch: backup" "$orig_namespace$ref" $sha1
+ git update-ref -m "filter-branch: backup" "$orig_namespace$ref" $sha1 ||
+ die "Could not back up branch ref"
done < "$tempdir"/heads
# TODO: This should possibly go, with the semantics that all positive given
@@ -483,7 +486,7 @@ test -z "$ORIG_GIT_INDEX_FILE" || {
}
if [ "$(is_bare_repository)" = false ]; then
- git read-tree -u -m HEAD
+ git read-tree -u -m HEAD || die "Unable to checkout rewritten tree"
fi
exit $ret
--
1.6.0.4
next reply other threads:[~2009-02-11 14:11 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-11 14:09 Eric Kidd [this message]
2009-02-11 14:58 ` [PATCH] git-filter-branch: Add more error-handling Johannes Sixt
2009-02-11 15:36 ` Johannes Sixt
2009-02-11 15:24 ` Johannes Schindelin
2009-02-11 17:15 ` [PATCH v2] filter-branch: " Eric Kidd
2009-02-11 19:03 ` Junio C Hamano
2009-02-11 19:34 ` Eric Kidd
2009-02-11 20:03 ` [PATCHv3] " Eric Kidd
2009-02-11 20:48 ` Johannes Schindelin
2009-02-11 21:00 ` Eric Kidd
2009-02-11 21:10 ` [PATCHv4] " Eric Kidd
2009-02-11 21:30 ` [PATCH v2] " Nanako Shiraishi
2009-02-11 22:28 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1234361365-63711-1-git-send-email-git@randomhacks.net \
--to=git@randomhacks.net \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).