[PATCH 2/7] submodule add: label submodules if asked to
From: Stefan Beller <hidden>
Date: 2016-06-16 02:19:18
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
When adding new submodules, you can specify the labels the submodule belongs to by giving one or more --label arguments. This will record each label in the .gitmodules file as a value of the key "submodule.$NAME.label". Signed-off-by: Stefan Beller <redacted> --- Documentation/git-submodule.txt | 4 +++- git-submodule.sh | 16 ++++++++++++++- t/t7400-submodule-basic.sh | 44 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index 13adebf..9ba8895 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt@@ -9,7 +9,7 @@ git-submodule - Initialize, update or inspect submodules SYNOPSIS -------- [verse] -'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>] +'git submodule' [--quiet] add [-b <branch>] [-f|--force] [-l|--label <label>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>] 'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...] 'git submodule' [--quiet] init [--] [<path>...]
@@ -101,6 +101,8 @@ is the superproject and submodule repositories will be kept together in the same relative location, and only the superproject's URL needs to be provided: git-submodule will correctly locate the submodule using the relative URL in .gitmodules. ++ +All labels are recorded in the .gitmodules file in the label fields. 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 82e95a9..c1213d8 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh@@ -5,7 +5,7 @@ # Copyright (c) 2007 Lars Hjemli dashless=$(basename "$0" | sed -e 's/-/ /') -USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>] +USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [-l|--label <label>][--] <repository> [<path>] or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...] or: $dashless [--quiet] init [--] [<path>...] or: $dashless [--quiet] deinit [-f|--force] [--] <path>...
@@ -130,6 +130,7 @@ cmd_add() { # parse $args after "submodule ... add". reference_path= + labels= while test $# -ne 0 do case "$1" in
@@ -165,6 +166,15 @@ cmd_add() --depth=*) depth=$1 ;; + -l|--label) + git submodule--helper valid-label-name "$2" || exit + labels="${labels} $2" + shift + ;; + --label=*) + git submodule--helper valid-label-name "${1#--label=}" || exit + labels="${labels} ${1#--label=}" + ;; --) shift break
@@ -292,6 +302,10 @@ Use -f if you really want to add it." >&2 git config -f .gitmodules submodule."$sm_name".path "$sm_path" && git config -f .gitmodules submodule."$sm_name".url "$repo" && + for label in $labels + do + git config --add -f .gitmodules submodule."$sm_name".label "$label" + done && if test -n "$branch" then git config -f .gitmodules submodule."$sm_name".branch "$branch"
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 814ee63..0adc4e4 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh@@ -1056,6 +1056,7 @@ test_expect_success 'submodule with UTF-8 name' ' ' test_expect_success 'submodule add clone shallow submodule' ' + test_when_finished "rm -rf super" && mkdir super && pwd=$(pwd) && (
@@ -1094,5 +1095,48 @@ test_expect_success 'submodule helper list is not confused by common prefixes' ' test_cmp expect actual ' +test_expect_success 'submodule add records a label' ' + test_when_finished "rm -rf super" && + mkdir super && + pwd=$(pwd) && + ( + cd super && + git init && + git submodule add --label labelA file://"$pwd"/example2 submodule && + git config -f .gitmodules submodule."submodule".label >../actual && + echo labelA >../expect + ) && + test_cmp expect actual +' + +cat >expect <<-EOF +labelA +labelB +EOF + +test_expect_success 'submodule add records multiple labels' ' + test_when_finished "rm -rf super" && + mkdir super && + pwd=$(pwd) && + ( + cd super && + git init && + git submodule add --label=labelA -l labelB file://"$pwd"/example2 submodule && + git config --get-all -f .gitmodules submodule."submodule".label >../actual + ) && + test_cmp expect actual +' + +test_expect_success 'submodule add recording wrong labels reports an error' ' + test_when_finished "rm -rf super" && + mkdir super && + pwd=$(pwd) && + ( + cd super && + git init && + test_must_fail git submodule add --label="labelA labelB" file://"$pwd"/example2 submodule 2>../actual + ) && + test_i18ngrep alphanumeric actual +' test_done
--
2.8.0.35.g58985d9.dirty