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

Reply via email to