From: Mark Levedahl <mdl123@verizon.net>
To: git@vger.kernel.org
Cc: Mark Levedahl <mdl123@verizon.net>
Subject: [PATCH] git-submodule - allow a relative path as the subproject url
Date: Sat, 22 Sep 2007 16:40:04 -0400 [thread overview]
Message-ID: <11904936042891-git-send-email-mdl123@verizon.net> (raw)
This allows a subproject's location to be specified and stored as relative
to the parent project's location (e.g., ./foo, or ../foo). This url is
stored in .gitmodules as given. It is resolved into an absolute url be
appending it to the parent project's url when the information is written
to .git/config (i.e., during submodule add for the originator, and
submodule init for a downstream recipient). This allows cloning of the
project to work "as expected" if the project is hosted on a different
server than when the subprojects were added.
Signed-off-by: Mark Levedahl <mdl123@verizon.net>
---
Documentation/git-submodule.txt | 3 +++
git-submodule.sh | 34 ++++++++++++++++++++++++++++++----
2 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index 2c48936..d421677 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -21,6 +21,9 @@ add::
repository is cloned at the specified path, added to the
changeset and registered in .gitmodules. If no path is
specified, the path is deduced from the repository specification.
+ If the repository url begins with ./ or ../, it is stored as
+ given but resolved as a relative path from the main project's
+ url when cloning.
status::
Show the status of the submodules. This will print the SHA-1 of the
diff --git a/git-submodule.sh b/git-submodule.sh
index 3320998..c553e14 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -39,6 +39,19 @@ get_repo_base() {
) 2>/dev/null
}
+# Get parent project's url
+get_parent_url ()
+{
+ # need to append this on parent project's url
+ branch="$(git branch --no-color | sed -ne 's/^\* //p')"
+ test -n "$branch" || die "I do not know what branch you are on: $branch"
+ upstream="$(git config branch.$branch.remote)"
+ test -n "$upstream" || die "Cannot find upstream repo for branch $branch"
+ uprepo="$(git config remote.$upstream.url)"
+ test -n "$upstream" || die "Cannot find url for repo $uprepo"
+ echo "$uprepo"
+}
+
#
# Map submodule path to submodule name
#
@@ -105,9 +118,16 @@ module_add()
# Turn the source into an absolute path if
# it is local
- if base=$(get_repo_base "$repo"); then
- repo="$base"
- fi
+ case $repo in
+ .*)
+ realrepo="$(get_parent_url)/$repo" ;;
+ *)
+ if base=$(get_repo_base "$repo"); then
+ repo="$base"
+ realrepo=$repo
+ fi
+ ;;
+ esac
# Guess path from repo if not specified or strip trailing slashes
if test -z "$path"; then
@@ -122,7 +142,7 @@ module_add()
git ls-files --error-unmatch "$path" > /dev/null 2>&1 &&
die "'$path' already exists in the index"
- module_clone "$path" "$repo" || exit
+ module_clone "$path" "$realrepo" || exit
(unset GIT_DIR && cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
die "Unable to checkout submodule '$path'"
git add "$path" ||
@@ -153,6 +173,12 @@ modules_init()
test -z "$url" &&
die "No url found for submodule path '$path' in .gitmodules"
+ # Possibly a url relative to parent
+ case $url in
+ .*)
+ url="$(get_parent_url)/$url";;
+ esac
+
git config submodule."$name".url "$url" ||
die "Failed to register url for submodule path '$path'"
--
1.5.3.1.36.gf01e8
next reply other threads:[~2007-09-22 21:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-22 20:40 Mark Levedahl [this message]
2007-09-24 0:21 ` [PATCH] git-submodule - allow a relative path as the subproject url Michael Smith
2007-09-24 2:27 ` Mark Levedahl
2007-09-24 2:19 ` Mark Levedahl
2007-09-25 6:42 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11904936042891-git-send-email-mdl123@verizon.net \
--to=mdl123@verizon.net \
--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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.