Re: [PATCH] git-subtree: compare file names by absolute paths
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 12, 2016, 18:30 UTC
- Message-ID
- <xmqqwpjlx2ks.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20160812154942.GA27294@metrotek.spb.ru>
Ivan Oleynikov <io@metrotek.spb.ru> writes:
> Cc: git@vger.kernel.org, dvh@metrotek.spb.ru, apenwarr@gmail.com
I think Avery no longer actively works on this script; Dave Greene has been helping it move forward by reviewing, so let's ask him to lend his eyes.
Show 82 quoted lines
> This commit removes false positive assertion fails of `git subtree split` when > the --prefix argument is not in a particular form produced by `git ls-tree`. > > For example, typical usage of the command could be: > > git subtree split -b split --prefix=some/relative/path > > But > > git subtree split -b split --prefix=./some/relative/path > > Would fail with multiple assertion errors. This commit makes the latter command > work without errors. > > Signed-off-by: Ivan Oleynikov <io@metrotek.spb.ru> > --- > > Notes: > The bug fixed by this commit can be reproduced like this: > > $ git init > Initialized empty Git repository in /tmp/test/.git/ > $ mkdir a b > $ touch a/file b/file > $ git add a > $ git commit -m a > [master (root-commit) b42584a] a > 1 file changed, 0 insertions($), 0 deletions(-) > create mode 100644 a/file > $ git add b > $ git commit -m b > [master 5114301] b > 1 file changed, 0 insertions($), 0 deletions(-) > create mode 100644 b/file > $ git subtree split -b split_a --prefix=a > Created branch 'split_a' > e9f5d81efacb33ab6cf67fe9ff376b33a483a92f > $ git subtree split -b split_b --prefix=./b > assertion failed: [ b = ./b ] > No new revisions were found > > When the commit is applied `git subtree split` works as expected: > > $ git init > Initialized empty Git repository in /tmp/test/.git/ > $ mkdir a b > $ touch a/file b/file > $ git add a > $ git commit -m a > [master (root-commit) bc80f36] a > 1 file changed, 0 insertions($), 0 deletions(-) > create mode 100644 a/file > $ git add b > $ git commit -m b > [master e59c446] b > 1 file changed, 0 insertions($), 0 deletions(-) > create mode 100644 b/file > $ git subtree split -b split_a --prefix=a > Created branch 'split_a' > d542e9cd2de5956dd7ca77b169dba1c8418fa03a > $ git subtree split -b split_b --prefix=./b > Created branch 'split_b' > 3ae7854c0c395413c807b2bc4e75b651adc63f8c > > contrib/subtree/git-subtree.sh | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh > index b567eae..d9351b9 100755 > --- a/contrib/subtree/git-subtree.sh > +++ b/contrib/subtree/git-subtree.sh > @@ -411,7 +411,7 @@ subtree_for_commit() > dir="$2" > git ls-tree "$commit" -- "$dir" | > while read mode type tree name; do > - assert [ "$name" = "$dir" ] > + assert [ "$(readlink -f $name)" = "$(readlink -f $dir)" ] > assert [ "$type" = "tree" -o "$type" = "commit" ] > [ "$type" = "commit" ] && continue # ignore submodules > echo $tree > -- > 2.1.4