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>
Fri, 23 Nov 2012 15:56:42 +0000 (10:56 -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..a42741150ab113559e666f58497bfaea4648382e 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
+       upstream 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 3a1954035990dace0bd05911c9651a62cb94c852..3c3bb3f0e7e5bf6e0e5e033fe07878e036d173e7 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 829d3778504444be5e8e474108cd81879d1ae7b2..f1160ebc9fd2bf280cfa232a3879b561995f3416 100755 (executable)
@@ -236,6 +236,24 @@ test_expect_success 'submodule add --follow-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