git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jon Seymour <jon.seymour@gmail.com>
To: git@vger.kernel.org
Cc: Jens.Lehmann@web.de, gitster@pobox.com, phil.hord@gmail.com,
	ramsay@ramsay1.demon.co.uk, Jon Seymour <jon.seymour@gmail.com>
Subject: [PATCH v6 8/9] submodule: fix handling of denormalized superproject origin URLs
Date: Sun, 27 May 2012 23:43:29 +1000	[thread overview]
Message-ID: <1338126210-11517-9-git-send-email-jon.seymour@gmail.com> (raw)
In-Reply-To: <1338126210-11517-1-git-send-email-jon.seymour@gmail.com>

Currently git calculates the submodule origin URL incorrectly in
the case that the superproject origin URL is denormalized.

So, we normalize the path part of the superproject URL before iterating
over the leading ../ parts of the submodule URL.

A remaining problem related to the handling of consecutive repeated ./'s
in the superproject origin URL is deferred to a subsequent commit.

This change also fixes a subtle error in the setup of t7403 which was
masked by the denormalization issue. Previous behaviour was
relying on submodule add to clone trash/submodule into super/submodule,
however from the perspective of super's origin (i.e. trash), the origin
submodule is actually located at ./submodule not ../submodule. However,
because the origin URL of super was denormalized (it had a trailing /.)
the incorrect handling of denormalized super URLs actually produced
the correct result - a case of two errors cancelling out each other's
effects.

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
---
 git-submodule.sh           |  1 +
 t/t7400-submodule-basic.sh | 10 +++++-----
 t/t7403-submodule-sync.sh  |  1 +
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 9ca2ffe..1f0983c 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -76,6 +76,7 @@ resolve_relative_url ()
 		;;
 	esac
 	invariant="${remoteurl%$variant}"
+	variant="$(normalize_path "$variant")"
 
 	while test -n "$url"
 	do
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index a94c5e9..b01f479 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -521,7 +521,7 @@ test_expect_failure 'relative path works with URL - ssh://hostname/path/detour/.
 	)
 '
 
-test_expect_failure 'relative path works with URL - ssh://hostname/path/repo/.' '
+test_expect_success 'relative path works with URL - ssh://hostname/path/repo/.' '
 	(
 		cd reltest &&
 		cp pristine-.git-config .git/config &&
@@ -663,7 +663,7 @@ test_expect_success '../subrepo works with scp-style URL - user@host:path/to/rep
 	)
 '
 
-test_expect_failure 'relative path works with user@host:path/to/repo/.' '
+test_expect_success 'relative path works with user@host:path/to/repo/.' '
 	(
 		cd reltest &&
 		cp pristine-.git-config .git/config &&
@@ -674,7 +674,7 @@ test_expect_failure 'relative path works with user@host:path/to/repo/.' '
 	)
 '
 
-test_expect_failure 'relative path works with user@host:path/to/./repo' '
+test_expect_success 'relative path works with user@host:path/to/./repo' '
 	(
 		cd reltest &&
 		cp pristine-.git-config .git/config &&
@@ -696,7 +696,7 @@ test_expect_failure 'relative path works with user@host:path/to/././repo' '
 	)
 '
 
-test_expect_failure 'relative path works with user@host:path/to/detour/../repo' '
+test_expect_success 'relative path works with user@host:path/to/detour/../repo' '
 	(
 		cd reltest &&
 		cp pristine-.git-config .git/config &&
@@ -773,7 +773,7 @@ test_expect_success '../subrepo works with relative local path - ../foo/bar' '
 	)
 '
 
-test_expect_failure 'relative path works with ../foo/./bar' '
+test_expect_success 'relative path works with ../foo/./bar' '
 	(
 		cd reltest &&
 		cp pristine-.git-config .git/config &&
diff --git a/t/t7403-submodule-sync.sh b/t/t7403-submodule-sync.sh
index b7466ba..0152969 100755
--- a/t/t7403-submodule-sync.sh
+++ b/t/t7403-submodule-sync.sh
@@ -18,6 +18,7 @@ test_expect_success setup '
 	git clone . super &&
 	git clone super submodule &&
 	(cd super &&
+	 git clone ../submodule submodule &&
 	 git submodule add ../submodule submodule &&
 	 test_tick &&
 	 git commit -m "submodule"
-- 
1.7.10.2.656.gb5a46db

  parent reply	other threads:[~2012-05-27 13:44 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-27 13:43 [PATCH v6 0/9] submodule: improve robustness of path handling Jon Seymour
2012-05-27 13:43 ` [PATCH v6 1/9] submodule: additional regression tests for relative URLs Jon Seymour
2012-05-27 13:43 ` [PATCH v6 2/9] submodule: document failure to detect invalid submodule URLs Jon Seymour
2012-05-27 13:43 ` [PATCH v6 3/9] submodule: document failure to handle relative superproject origin URLs Jon Seymour
2012-05-27 13:43 ` [PATCH v6 4/9] submodule: document failure to handle improperly normalized remote " Jon Seymour
2012-05-27 13:43 ` [PATCH v6 5/9] submodule: extract normalize_path into standalone function Jon Seymour
2012-05-27 13:43 ` [PATCH v6 6/9] submodule: fix detection of invalid submodule URL Jon Seymour
2012-05-27 13:43 ` [PATCH v6 7/9] submodule: fix sync handling of relative superproject origin URLs Jon Seymour
2012-05-27 13:55   ` Jon Seymour
2012-05-27 13:43 ` Jon Seymour [this message]
2012-05-27 14:38   ` [PATCH v6 8/9] submodule: fix handling of denormalized " Jon Seymour
2012-05-27 13:43 ` [PATCH v6 9/9] submodule: fix normalization to handle repeated ./ Jon Seymour

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

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

  git send-email \
    --in-reply-to=1338126210-11517-9-git-send-email-jon.seymour@gmail.com \
    --to=jon.seymour@gmail.com \
    --cc=Jens.Lehmann@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=phil.hord@gmail.com \
    --cc=ramsay@ramsay1.demon.co.uk \
    /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.
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 NNTP newsgroup(s).