[PATCH] git-subtree: compare file names by absolute paths
From: Ivan Oleynikov <hidden>
Date: 2016-08-12 15:56:31
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 <redacted>
---
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
--
Ivan Oleynikov
STC Metrotek
St.Petersburg