On Tue, 9 Aug 2005, Johannes Schindelin wrote: > > Junio remarked that Jeff's git-changes-script still uses git-rev-tree, and > therefore it should not be removed. This patch changes git-changes-script > over to git-rev-list:
It really should be totally rewritten, to take advantage of git-rev-list being able to terminate early. As it is, your conversion may work, and it may give the right results, but it will suck performance-wise for all the same reasons that git-rev-tree sucked: it will walk all the way down to the root of the tree(s). > --- git-changes-script.orig Tue Aug 9 02:21:36 2005 > +++ git-changes-script Tue Aug 9 02:20:53 2005 > @@ -85,14 +85,14 @@ > base=$(cat .git/HEAD) || exit 1 > fi > > -git-rev-tree $base | sort -rn > ${tmpfile}.base > +git-rev-list $base > ${tmpfile}.base > if [ -n "$remote" ]; then > [ -d $remote/.git ] || exit 1 > if [ -z "$tobase" ]; then > tobase=$(cat $remote/.git/HEAD) || exit 1 > fi > pushd $remote > /dev/null > - git-rev-tree $tobase | sort -rn > ${tmpfile}.remote > + git-rev-list $tobase > ${tmpfile}.remote > diff -u ${tmpfile}.base ${tmpfile}.remote | grep > "^${diffsearch}[^${diffsearch}]" | cut -c 1- > ${tmpfile}.diff > rm -f ${tmpfile}.base ${tmpfile}.remote > mv ${tmpfile}.diff ${tmpfile}.base It really should do something like # # Make sure we see objects in the remote directory # export GIT_ALTERNATE_OBJECT_DIRECTORIES=$remote/.git/objects # # Get the local SHA1 # local_ref=$(git-rev-parse --verify $base^0) || exit # # Get the remote SHA1 # remote_ref=$(GIT_DIR="$remote/.git" git-rev-parse --verify $tobase^0) || exit # # Ok, let it rip.. # git log $remote_ref..$local_ref to do a proper search of objects that are in $local but not in $remote, without having to traverse all the way down to the root for both. Linus - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html