From: Stefan Beller <sbeller@google.com>
To: gitster@pobox.com, Jens.Lehmann@web.de
Cc: git@vger.kernel.org, Stefan Beller <sbeller@google.com>
Subject: [PATCH 1/2] submodule update: add `--init-default-path` switch
Date: Fri, 20 May 2016 17:28:10 -0700 [thread overview]
Message-ID: <20160521002811.24656-2-sbeller@google.com> (raw)
In-Reply-To: <20160521002811.24656-1-sbeller@google.com>
The new switch `--init-default-path` initializes the submodules which are
configured in `submodule.defaultUpdatePath` instead of those given as
command line arguments before updating. In the first implementation this
is made incompatible with further command line arguments as it is
unclear what the user means by
git submodule update --init --init-default-path <paths>
This new switch allows to record more complex patterns as it saves
retyping them whenever you invoke update.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
Documentation/config.txt | 5 ++++
Documentation/git-submodule.txt | 11 ++++++++-
git-submodule.sh | 21 +++++++++++++---
t/t7400-submodule-basic.sh | 53 +++++++++++++++++++++++++++++++++++++++++
4 files changed, 86 insertions(+), 4 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index e4cd291..121b236 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -2786,6 +2786,11 @@ submodule.fetchJobs::
in parallel. A value of 0 will give some reasonable default.
If unset, it defaults to 1.
+submodule.defaultUpdatePath::
+ Specifies a set of submodules to initialize when calling
+ `git submodule --init-default-group` by using the pathspec
+ syntax.
+
tag.forceSignAnnotated::
A boolean to specify whether annotated tags created should be GPG signed.
If `--annotate` is specified on the command line, it takes
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index 9226c43..000231e 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -14,7 +14,7 @@ SYNOPSIS
'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...]
'git submodule' [--quiet] init [--] [<path>...]
'git submodule' [--quiet] deinit [-f|--force] (--all|[--] <path>...)
-'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
+'git submodule' [--quiet] update [--init[-default-path]] [--remote] [-N|--no-fetch]
[-f|--force] [--rebase|--merge] [--reference <repository>]
[--depth <depth>] [--recursive] [--jobs <n>] [--] [<path>...]
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
@@ -193,6 +193,10 @@ If the submodule is not yet initialized, and you just want to use the
setting as stored in .gitmodules, you can automatically initialize the
submodule with the `--init` option.
+You can configure a set of submodules using pathspec syntax in
+submodule.defaultUpdatePath you can use `--init-default-path` to initialize
+those before updating.
+
If `--recursive` is specified, this command will recurse into the
registered submodules, and update any nested submodules within.
--
@@ -360,6 +364,11 @@ the submodule itself.
Initialize all submodules for which "git submodule init" has not been
called so far before updating.
+--init-default-path::
+ This option is only valid for the update command.
+ Initialize all submodules configured in "`submodule.defaultUpdatePath`"
+ that have not been updated before.
+
--name::
This option is only valid for the add command. It sets the submodule's
name to the given string instead of defaulting to its path. The name
diff --git a/git-submodule.sh b/git-submodule.sh
index 5a4dec0..3d12145 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -9,7 +9,7 @@ USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <re
or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
or: $dashless [--quiet] init [--] [<path>...]
or: $dashless [--quiet] deinit [-f|--force] (--all| [--] <path>...)
- or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--reference <repository>] [--recursive] [--] [<path>...]
+ or: $dashless [--quiet] update [--init[-default-path]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--reference <repository>] [--recursive] [--] [<path>...]
or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
or: $dashless [--quiet] foreach [--recursive] <command>
or: $dashless [--quiet] sync [--recursive] [--] [<path>...]"
@@ -528,7 +528,12 @@ cmd_update()
GIT_QUIET=1
;;
-i|--init)
- init=1
+ test -z $init || test $init = by_args || die "$(gettext "Only one of --init or --init-default-path may be used.")"
+ init=by_args
+ ;;
+ --init-default-path)
+ test -z $init || test $init = by_config || die "$(gettext "Only one of --init or --init-default-path may be used.")"
+ init=by_config
;;
--remote)
remote=1
@@ -591,7 +596,17 @@ cmd_update()
if test -n "$init"
then
- cmd_init "--" "$@" || return
+ if test "$init" = "by_config"
+ then
+ if test $# -gt 0
+ then
+ die "$(gettext "path arguments are incompatible with --init-default-path")"
+ fi
+ cmd_init "--" $(git config --get-all submodule.defaultUpdatePath) || return
+ else
+ cmd_init "--" "$@" || return
+ fi
+
fi
{
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 3570f7b..4173c72 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -1116,5 +1116,58 @@ test_expect_success 'submodule helper list is not confused by common prefixes' '
test_cmp expect actual
'
+test_expect_success 'setup superproject with submodules' '
+ mkdir sub1 &&
+ (
+ cd sub1 &&
+ git init &&
+ test_commit test
+ test_commit test2
+ ) &&
+ mkdir multisuper &&
+ (
+ cd multisuper &&
+ git init &&
+ git submodule add ../sub1 sub0 &&
+ git submodule add ../sub1 sub1 &&
+ git submodule add ../sub1 sub2 &&
+ git submodule add ../sub1 sub3 &&
+ git commit -m "add some submodules"
+ )
+'
+
+cat >expect <<-EOF
+-sub0
+ sub1 (test2)
+ sub2 (test2)
+ sub3 (test2)
+EOF
+
+test_expect_success 'submodule update --init with a specification' '
+ test_when_finished "rm -rf multisuper_clone" &&
+ pwd=$(pwd) &&
+ git clone file://"$pwd"/multisuper multisuper_clone &&
+ (
+ cd multisuper_clone &&
+ git submodule update --init . ":(exclude)sub0" &&
+ git submodule status |cut -c 1,43- >../actual
+ ) &&
+ test_cmp expect actual
+'
+
+test_expect_success 'submodule update --init-default-path' '
+ test_when_finished "rm -rf multisuper_clone" &&
+ pwd=$(pwd) &&
+ git clone file://"$pwd"/multisuper multisuper_clone &&
+ (
+ cd multisuper_clone &&
+ git config submodule.defaultUpdatePath "." &&
+ git config --add submodule.defaultUpdatePath ":(exclude)sub0" &&
+ git submodule update --init-default-path &&
+ git submodule status |cut -c 1,43- >../actual &&
+ test_must_fail git submodule update --init-default-path sub0
+ ) &&
+ test_cmp expect actual
+'
test_done
--
2.8.3.395.ga2acc22.dirty
next prev parent reply other threads:[~2016-05-21 0:28 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-21 0:28 [PATCH 0/2] Persistent submodule pathspec specification Stefan Beller
2016-05-21 0:28 ` Stefan Beller [this message]
2016-05-21 0:28 ` [PATCH 2/2] clone: add --init-submodule=<pathspec> switch Stefan Beller
-- strict thread matches above, loose matches on Subject: below --
2016-05-24 2:24 [PATCHv2 0/2] Persistent submodule pathspec specification Stefan Beller
2016-05-24 2:24 ` [PATCH 1/2] submodule update: add `--init-default-path` switch Stefan Beller
2016-05-26 20:47 [PATCHv3 0/2] Persistent submodule pathspec specification Stefan Beller
2016-05-26 20:47 ` [PATCH 1/2] submodule update: add `--init-default-path` switch Stefan Beller
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160521002811.24656-2-sbeller@google.com \
--to=sbeller@google.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).