git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Ivan Oleynikov <io@metrotek.spb.ru>
To: git@vger.kernel.org
Cc: dvh@metrotek.spb.ru, apenwarr@gmail.com
Subject: [PATCH] git-subtree: compare file names by absolute paths
Date: Fri, 12 Aug 2016 18:49:42 +0300	[thread overview]
Message-ID: <20160812154942.GA27294@metrotek.spb.ru> (raw)

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


-- 
Ivan Oleynikov
STC Metrotek
St.Petersburg

             reply	other threads:[~2016-08-12 15:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-12 15:49 Ivan Oleynikov [this message]
2016-08-12 17:47 ` [PATCH] git-subtree: compare file names by absolute paths Ivan Oleynikov
2016-08-12 18:30 ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160812154942.GA27294@metrotek.spb.ru \
    --to=io@metrotek.spb.ru \
    --cc=apenwarr@gmail.com \
    --cc=dvh@metrotek.spb.ru \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).