summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-07-22 21:24:35 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-07-22 21:24:35 (GMT)
commitc56dce3b811400e73e7b68464cf229aa0edb9d8f (patch)
treeda27f15acf73ca6f932c32d2e71a40e73c853e30
parented16d0dbf11128e1f92b39a373a83442fa6d5051 (diff)
parentf22a17e8da25a043950a13f11035930922bb86e7 (diff)
downloadgit-c56dce3b811400e73e7b68464cf229aa0edb9d8f.zip
git-c56dce3b811400e73e7b68464cf229aa0edb9d8f.tar.gz
git-c56dce3b811400e73e7b68464cf229aa0edb9d8f.tar.bz2
Merge branch 'jl/submodule-add-relurl-wo-upstream'
* jl/submodule-add-relurl-wo-upstream: submodule add: clean up duplicated code submodule add: allow relative repository path even when no url is set submodule add: test failure when url is not configured in superproject Conflicts: git-submodule.sh
-rw-r--r--Documentation/git-submodule.txt4
-rwxr-xr-xgit-submodule.sh12
-rwxr-xr-xt/t7400-submodule-basic.sh10
3 files changed, 15 insertions, 11 deletions
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index acb9002..0ec8574 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -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
diff --git a/git-submodule.sh b/git-submodule.sh
index 3daa0c8..bc1d3fa 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -35,7 +35,7 @@ resolve_relative_url ()
{
remote=$(get_default_remote)
remoteurl=$(git config "remote.$remote.url") ||
- die "$(eval_gettext "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=/
@@ -242,14 +242,6 @@ Use -f if you really want to add it." &&
die "$(eval_gettext "'\$path' already exists and is not a valid git repo")"
fi
- case "$repo" in
- ./*|../*)
- url=$(resolve_relative_url "$repo") || exit
- ;;
- *)
- url="$repo"
- ;;
- esac
else
module_clone "$path" "$realrepo" "$reference" || exit
@@ -263,7 +255,7 @@ Use -f if you really want to add it." &&
esac
) || die "$(eval_gettext "Unable to checkout submodule '\$path'")"
fi
- git config submodule."$path".url "$url"
+ git config submodule."$path".url "$realrepo"
git add $force "$path" ||
die "$(eval_gettext "Failed to add submodule '\$path'")"
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index b2b26b7..5afe6cc 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -446,6 +446,16 @@ test_expect_success 'add should fail when path is used by an existing directory'
)
'
+test_expect_success 'use superproject as upstream when path is relative and no url is set there' '
+ (
+ cd addtest &&
+ 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"
+ )
+'
+
test_expect_success 'set up for relative path tests' '
mkdir reltest &&
(