submodule add: allow relative repository path even when no url is set
authorJens Lehmann <Jens.Lehmann@web.de>
Mon, 6 Jun 2011 19:58:04 +0000 (21:58 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 6 Jun 2011 20:46:36 +0000 (13:46 -0700)
Adding a submodule with a relative repository path did only succeed when
the superproject's default remote was set. But when that is unset, the
superproject is its own authoritative upstream, so lets use its working
directory as upstream instead.

This allows users to set up a new superpoject where the submodules urls
are configured relative to the superproject's upstream while its default
remote can be configured later.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-submodule.txt
git-submodule.sh
t/t7400-submodule-basic.sh

index 1a16ff60448a72bebcba2daff7dbabc5feed8a4c..f72e900d238311a68152d10003081a1963e1c2dc 100644 (file)
@@ -78,7 +78,9 @@ to exist in the superproject. If <path> is not given, the
 <repository> is the URL of the new submodule's origin repository.
 This may be either an absolute URL, or (if it begins with ./
 or ../), the location relative to the superproject's origin
-repository.
+repository. If the superproject doesn't have an origin configured
+the superproject is its own authoritative upstream and the current
+working directory is used instead.
 +
 <path> is the relative location for the cloned submodule to
 exist in the superproject. If <path> does not exist, then the
index 4361ae418cfc032f793d14af057e2b178922ca1f..0c984a898320ef495544b1d8bb7602aefe647447 100755 (executable)
@@ -34,7 +34,7 @@ resolve_relative_url ()
 {
        remote=$(get_default_remote)
        remoteurl=$(git config "remote.$remote.url") ||
-               die "remote ($remote) does not have a url defined in .git/config"
+               remoteurl=$(pwd) # the repository is its own authoritative upstream
        url="$1"
        remoteurl=${remoteurl%/}
        sep=/
index cae5fd012c3c9f9f0b020bb6d5b274e5adfe4478..9099e80e9e2bde606ca481dd4a0a9cc977c8d38e 100755 (executable)
@@ -446,10 +446,13 @@ test_expect_success 'add should fail when path is used by an existing directory'
        )
 '
 
-test_expect_success 'add should fail when path is relative but no url is set in the superproject' '
+test_expect_success 'use superproject as upstream when path is relative and no url is set there' '
        (
                cd addtest &&
-               test_must_fail git submodule add ../repo relative
+               git submodule add ../repo relative &&
+               test "$(git config -f .gitmodules submodule.relative.url)" = ../repo &&
+               git submodule sync relative &&
+               test "$(git config submodule.relative.url)" = "$submodurl/repo"
        )
 '