From: Sven Verdoolaege <skimo@kotnet.org>
To: git@vger.kernel.org, Lars Hjemli <hjemli@gmail.com>,
Junio C Hamano <gitster@pobox.com>
Cc: skimo@liacs.nl
Subject: [PATCH] git-submodule: provide easy way of adding new submodules
Date: Sun, 17 Jun 2007 17:23:16 +0200 [thread overview]
Message-ID: <20070617152315.GA3916MdfPADPa@greensroom.kotnet.org> (raw)
To make a submodule effectively usable, the path and
a URL where the submodule can be cloned need to be stored
in .gitmodules. This subcommand takes care of setting
this information after cloning the new submodule.
Only the index is updated, so, if needed, the user may still
change the URL or switch to a different branch of the submodule
before committing.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
---
Documentation/git-submodule.txt | 8 +++++
git-submodule.sh | 65 +++++++++++++++++++++++++++++++++++---
2 files changed, 67 insertions(+), 6 deletions(-)
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index f8fb80f..bf9cbf9 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -8,11 +8,19 @@ git-submodule - Initialize, update or inspect submodules
SYNOPSIS
--------
+'git-submodule' [--quiet] add <repository> [<path>]
'git-submodule' [--quiet] [--cached] [status|init|update] [--] [<path>...]
COMMANDS
--------
+add::
+ Add the given repository as a submodule at the given path
+ to the changeset to be committed next. In particular, the
+ 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.
+
status::
Show the status of the submodules. This will print the SHA-1 of the
currently checked out commit for each submodule, along with the
diff --git a/git-submodule.sh b/git-submodule.sh
index 89a3885..85ae275 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -1,13 +1,14 @@
#!/bin/sh
#
-# git-submodules.sh: init, update or list git submodules
+# git-submodules.sh: add, init, update or list git submodules
#
# Copyright (c) 2007 Lars Hjemli
-USAGE='[--quiet] [--cached] [status|init|update] [--] [<path>...]'
+USAGE='[--quiet] [--cached] [add <repo>|status|init|update] [--] [<path>...]'
. git-sh-setup
require_work_tree
+add=
init=
update=
status=
@@ -25,6 +26,17 @@ say()
fi
}
+get_repo_base() {
+ (
+ cd "`/bin/pwd`" &&
+ cd "$1" || cd "$1.git" &&
+ {
+ cd .git
+ pwd
+ }
+ ) 2>/dev/null
+}
+
#
# Map submodule path to submodule name
#
@@ -66,6 +78,41 @@ module_clone()
}
#
+# Add a new submodule to the working tree, .gitmodules and the index
+#
+# $@ = repo [path]
+#
+module_add()
+{
+ repo=$1
+ path=$2
+
+ # Turn the source into an absolute path if
+ # it is local
+ if base=$(get_repo_base "$repo"); then
+ repo="$base"
+ fi
+
+ # Guess path from repo if not specified or strip trailing slashes
+ if test -z "$path"; then
+ path=$(echo "$repo" | sed -e 's|/*$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
+ else
+ path=$(echo "$path" | sed -e 's|/*$||')
+ fi
+
+ module_clone "$path" "$repo" || exit
+ (unset GIT_DIR && cd "$path" && git checkout -q) ||
+ die "Unable to checkout submodule '$path'"
+ git add "$path" ||
+ die "Failed to add submodule '$path'"
+
+ GIT_CONFIG=.gitmodules git config submodule."$path".path "$path" &&
+ GIT_CONFIG=.gitmodules git config submodule."$path".url "$repo" &&
+ git add .gitmodules ||
+ die "Failed to register submodule '$path'"
+}
+
+#
# Register submodules in .git/config
#
# $@ = requested paths (default to all)
@@ -173,6 +220,9 @@ modules_list()
while case "$#" in 0) break ;; esac
do
case "$1" in
+ add)
+ add=1
+ ;;
init)
init=1
;;
@@ -201,14 +251,17 @@ do
shift
done
-case "$init,$update,$status,$cached" in
-1,,,)
+case "$add,$init,$update,$status,$cached" in
+1,,,,)
+ module_add "$@"
+ ;;
+,1,,,)
modules_init "$@"
;;
-,1,,)
+,,1,,)
modules_update "$@"
;;
-,,*,*)
+,,,*,*)
modules_list "$@"
;;
*)
--
1.5.2.1.1088.ge05f4-dirty
next reply other threads:[~2007-06-17 15:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-17 15:23 Sven Verdoolaege [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-06-21 9:53 [PATCH][RESEND] git-submodule: provide easy way of adding new submodules Sven Verdoolaege
2007-06-23 19:58 ` Junio C Hamano
2007-06-24 15:17 ` Sven Verdoolaege
2007-06-24 17:50 ` Junio C Hamano
2007-06-24 21:06 ` [PATCH] " Sven Verdoolaege
2007-06-25 7:09 ` Junio C Hamano
2007-07-03 15:47 ` Sven Verdoolaege
2007-07-04 5:10 ` 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=20070617152315.GA3916MdfPADPa@greensroom.kotnet.org \
--to=skimo@kotnet.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hjemli@gmail.com \
--cc=skimo@liacs.nl \
/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).