git-submodule init: Record submodule.<name>.branch in repository config.
authorW. Trevor King <wking@tremily.us>
Fri, 23 Nov 2012 15:47:43 +0000 (10:47 -0500)
committerW. Trevor King <wking@tremily.us>
Mon, 26 Nov 2012 18:53:44 +0000 (13:53 -0500)
This allows users to override the .gitmodules value with a
per-repository value.

Signed-off-by: W. Trevor King <wking@tremily.us>
Documentation/config.txt
git-submodule.sh
t/t7400-submodule-basic.sh

index 11f320b96267e7bd11f23f13842ca9f92cac6f7f..1304499a62a9b47d7fc039768866627d1f1fd4bb 100644 (file)
@@ -1994,10 +1994,11 @@ status.submodulesummary::
 submodule.<name>.path::
 submodule.<name>.url::
 submodule.<name>.update::
-       The path within this project, URL, and the updating strategy
-       for a submodule.  These variables are initially populated
-       by 'git submodule init'; edit them to override the
-       URL and other values found in the `.gitmodules` file.  See
+submodule.<name>.branch::
+       The path within this project, URL, the updating strategy, and the
+       local branch name for a submodule.  These variables are initially
+       populated by 'git submodule init'; edit them to override the URL and
+       other values found in the `.gitmodules` file.  See
        linkgit:git-submodule[1] and linkgit:gitmodules[5] for details.
 
 submodule.<name>.fetchRecurseSubmodules::
index 6eed008f2f7a39513f289c91e1a5626f292d6d3c..c51b6aeb18ab701408b14c13acd7c7d9995c2fa0 100755 (executable)
@@ -505,6 +505,13 @@ cmd_init()
                test -n "$(git config submodule."$name".update)" ||
                git config submodule."$name".update "$upd" ||
                die "$(eval_gettext "Failed to register update mode for submodule path '\$sm_path'")"
+
+               # Copy "branch" setting when it is not set yet
+               branch="$(git config -f .gitmodules submodule."$name".branch)"
+               test -z "$branch" ||
+               test -n "$(git config submodule."$name".branch)" ||
+               git config submodule."$name".branch "$branch" ||
+               die "$(eval_gettext "Failed to register branch for submodule path '\$sm_path'")"
        done
 }
 
index fc08647bfa330a377cf8c9e04c0d2e03f4902b54..3dc82379dcf78a1c6a92578a1860423cffee74a8 100755 (executable)
@@ -236,6 +236,24 @@ test_expect_success 'submodule add --local-branch=<name> --branch' '
        )
 '
 
+test_expect_success 'init should register submodule branch in .git/config' '
+       (
+               cd addtest &&
+               git submodule init &&
+               test "$(git config submodule.submod-follow.branch)" = "final"
+       )
+'
+
+test_expect_success 'local config should override .gitmodules branch' '
+       (
+               cd addtest &&
+               rm -fr submod-follow &&
+               git config submodule.submod-follow.branch initial
+               git submodule init &&
+               test "$(git config submodule.submod-follow.branch)" = "initial"
+       )
+'
+
 test_expect_success 'setup - add an example entry to .gitmodules' '
        GIT_CONFIG=.gitmodules \
        git config submodule.example.url git://example.com/init.git