From: Junio C Hamano Date: Fri, 22 Jul 2011 21:24:35 +0000 (-0700) Subject: Merge branch 'jl/submodule-add-relurl-wo-upstream' X-Git-Tag: v1.7.7-rc0~82 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=c56dce3b811400e73e7b68464cf229aa0edb9d8f;hp=ed16d0dbf11128e1f92b39a373a83442fa6d5051;p=git.git 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 --- diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index acb9002fe..0ec85742d 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -78,7 +78,9 @@ to exist in the superproject. If is not given, the 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. + is the relative location for the cloned submodule to exist in the superproject. If does not exist, then the diff --git a/git-submodule.sh b/git-submodule.sh index 3daa0c834..bc1d3fa66 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 b2b26b72d..5afe6ccd7 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 && (