Jeff King wrote: > On Tue, Jan 19, 2016 at 04:59:28PM -0500, Jeff King wrote: >> We could get away "git diff --exit-code $1 $2" to do a single process >> invocation (rather than two rev-parses), but I don't know if it is worth >> the complexity. > > And here's that patch. > > I'm actually a little iffy on it because it switches to "diff-tree" from > a raw-sha1 comparison. For a well-formed repo, that shouldn't matter. > But what if you had a commit that was replacing a malformed tree object, > but not otherwise changing the diff? We might drop it as "empty", even > though you'd prefer to keep it. Mph. We could get the best of both worlds by introducing a "git rev-parse --compare <a> <b>" that compares object ids. Actually... How about something like this? Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- git-filter-branch.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 86b2ff1..06f4e0f 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -44,7 +44,15 @@ skip_commit() # it will skip commits that leave the tree untouched, commit the other. git_commit_non_empty_tree() { - if test $# = 3 && test "$1" = $(git rev-parse "$3^{tree}"); then + if + test $# = 3 && + git rev-parse "$1" "$3^{tree}" | + { + read a + read b + test "$a" = "$b" + } + then map "$3" else git commit-tree "$@" @@ -404,7 +412,7 @@ while read commit parents; do then tree=$(git write-tree) else - tree=$(git rev-parse "$commit^{tree}") + tree="$commit^{tree}" fi workdir=$workdir @SHELL_PATH@ -c "$filter_commit" "git commit-tree" \ "$tree" $parentstr < ../message > ../map/$commit || -- 2.7.0 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html