Re: [PATCH 1/2] git-svn: fix dcommit clobbering when committing a series of diffs
On Mon, Nov 05, 2007 at 03:21:47AM -0800, Eric Wong wrote:
Show 23 quoted lines
> Our revision number sent to SVN is set to the last revision we
> committed if we've made any previous commits in a dcommit
> invocation.
>
> Although our SVN Editor code uses the delta of two (old) trees
> to generate information to send upstream, it'll still send
> complete resultant files upstream; even if the tree they're
> based against is out-of-date.
>
> The combination of sending a file that does not include the
> latest changes, but set with a revision number of a commit we
> just made will cause SVN to accept the resultant file even if it
> was generated against an old tree.
>
> More trouble was caused when fixing this because we were
> rebasing uncessarily at times. We used git-diff-tree to check
> the imported SVN revision against our HEAD, not the last tree we
> committed to SVN. The unnecessary rebasing caused merge commits
> upstream to SVN to fail.
>
> Signed-off-by: Eric Wong <normalperson@yhbt.net>
> ---
>
Show 37 quoted lines
> diff --git a/t/t9106-git-svn-dcommit-clobber-series.sh b/t/t9106-git-svn-dcommit-clobber-series.sh
> new file mode 100755
> index 0000000..4216a88
> --- /dev/null
> +++ b/t/t9106-git-svn-dcommit-clobber-series.sh
> @@ -0,0 +1,56 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2007 Eric Wong
> +test_description='git-svn dcommit clobber series'
> +. ./lib-git-svn.sh
> +
> +test_expect_success 'initialize repo' "
> + mkdir import &&
> + cd import &&
> + awk 'BEGIN { for (i = 1; i < 64; i++) { print i } }' > file
> + svn import -m 'initial' . $svnrepo &&
> + cd .. &&
> + git svn init $svnrepo &&
> + git svn fetch &&
> + test -e file
> + "
> +
> +test_expect_success '(supposedly) non-conflicting change from SVN' "
> + test x\"\`sed -n -e 58p < file\`\" = x58 &&
> + test x\"\`sed -n -e 61p < file\`\" = x61 &&
> + svn co $svnrepo tmp &&
> + cd tmp &&
> + perl -i -p -e 's/^58\$/5588/' file &&
> + perl -i -p -e 's/^61\$/6611/' file &&
> + test x\"\`sed -n -e 58p < file\`\" = x5588 &&
> + test x\"\`sed -n -e 61p < file\`\" = x6611 &&
> + svn commit -m '58 => 5588, 61 => 6611' &&
> + cd ..
> + "
> +
> +test_expect_success 'unrelated some unrelated changes to git' "The first unrelated seems odd here.
-Peter
Show 7 quoted lines
> + echo hi > life &&
> + git update-index --add life &&
> + git commit -m hi-life &&
> + echo bye >> life &&
> + git commit -m bye-life life
> + "
> +