From: Stefan Beller <sbeller@google.com>
To: sbeller@google.com, gitster@pobox.com
Cc: git@vger.kernel.org, bmwill@google.com, novalis@novalis.org,
sandals@crustytoothpaste.net, hvoigt@hvoigt.net,
jrnieder@gmail.com, ramsay@ramsayjones.plus.com
Subject: [PATCH 19/19] builtin/read-tree: add --recurse-submodules switch
Date: Tue, 14 Mar 2017 14:46:42 -0700 [thread overview]
Message-ID: <20170314214642.7701-20-sbeller@google.com> (raw)
In-Reply-To: <20170314214642.7701-1-sbeller@google.com>
A new known failure mode is introduced[1], which is actually not
a failure but a feature in read-tree. Unlike checkout for which
the recursive submodule tests were originally written, read-tree does
warn about ignored untracked files that would be overwritten.
For the sake of keeping the test library for submodules generic, just
mark the test as a failure.
[1] KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED
Signed-off-by: Stefan Beller <sbeller@google.com>
---
Documentation/git-read-tree.txt | 6 ++++++
builtin/read-tree.c | 29 +++++++++++++++++++++++++++++
t/lib-submodule-update.sh | 7 ++++++-
t/t1013-read-tree-submodule.sh | 8 ++++++++
4 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-read-tree.txt b/Documentation/git-read-tree.txt
index fa1d557e5b..ed9d63ef4a 100644
--- a/Documentation/git-read-tree.txt
+++ b/Documentation/git-read-tree.txt
@@ -115,6 +115,12 @@ OPTIONS
directories the index file and index output file are
located in.
+--[no-]recurse-submodules::
+ Using --recurse-submodules will update the content of all initialized
+ submodules according to the commit recorded in the superproject by
+ calling read-tree recursively, also setting the submodules HEAD to be
+ detached at that commit.
+
--no-sparse-checkout::
Disable sparse checkout support even if `core.sparseCheckout`
is true.
diff --git a/builtin/read-tree.c b/builtin/read-tree.c
index 8ba64bc785..23e212ee8c 100644
--- a/builtin/read-tree.c
+++ b/builtin/read-tree.c
@@ -15,10 +15,13 @@
#include "builtin.h"
#include "parse-options.h"
#include "resolve-undo.h"
+#include "submodule.h"
+#include "submodule-config.h"
static int nr_trees;
static int read_empty;
static struct tree *trees[MAX_UNPACK_TREES];
+static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
static int list_tree(unsigned char *sha1)
{
@@ -96,6 +99,23 @@ static int debug_merge(const struct cache_entry * const *stages,
return 0;
}
+static int option_parse_recurse_submodules(const struct option *opt,
+ const char *arg, int unset)
+{
+ if (unset) {
+ recurse_submodules = RECURSE_SUBMODULES_OFF;
+ return 0;
+ }
+ if (arg)
+ recurse_submodules =
+ parse_update_recurse_submodules_arg(opt->long_name,
+ arg);
+ else
+ recurse_submodules = RECURSE_SUBMODULES_ON;
+
+ return 0;
+}
+
static struct lock_file lock_file;
int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
@@ -137,6 +157,9 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
N_("skip applying sparse checkout filter")),
OPT_BOOL(0, "debug-unpack", &opts.debug_unpack,
N_("debug unpack-trees")),
+ { OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules,
+ "checkout", "control recursive updating of submodules",
+ PARSE_OPT_OPTARG, option_parse_recurse_submodules },
OPT_END()
};
@@ -152,6 +175,12 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
+ if (recurse_submodules != RECURSE_SUBMODULES_DEFAULT) {
+ gitmodules_config();
+ git_config(submodule_config, NULL);
+ set_config_update_recurse_submodules(RECURSE_SUBMODULES_ON);
+ }
+
prefix_set = opts.prefix ? 1 : 0;
if (1 < opts.merge + opts.reset + prefix_set)
die("Which one? -m, --reset, or --prefix?");
diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh
index 4e775a38b6..fb4f7b014e 100755
--- a/t/lib-submodule-update.sh
+++ b/t/lib-submodule-update.sh
@@ -792,6 +792,11 @@ test_submodule_switch_recursing () {
then
RESULTR=failure
fi
+ RESULTOI=success
+ if test "$KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED" = 1
+ then
+ RESULTOI=failure
+ fi
######################### Appearing submodule #########################
# Switching to a commit letting a submodule appear checks it out ...
test_expect_success "$command: added submodule is checked out" '
@@ -832,7 +837,7 @@ test_submodule_switch_recursing () {
)
'
# ... but an ignored file is fine.
- test_expect_success "$command: added submodule removes an untracked ignored file" '
+ test_expect_$RESULTOI "$command: added submodule removes an untracked ignored file" '
test_when_finished "rm submodule_update/.git/info/exclude" &&
prolog &&
reset_work_tree_to_interested no_submodule &&
diff --git a/t/t1013-read-tree-submodule.sh b/t/t1013-read-tree-submodule.sh
index 20526aed34..de1ba02dc5 100755
--- a/t/t1013-read-tree-submodule.sh
+++ b/t/t1013-read-tree-submodule.sh
@@ -5,6 +5,14 @@ test_description='read-tree can handle submodules'
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-submodule-update.sh
+KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED=1
+KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1
+KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED=1
+
+test_submodule_switch_recursing "git read-tree --recurse-submodules -u -m"
+
+test_submodule_forced_switch_recursing "git read-tree --recurse-submodules -u --reset"
+
test_submodule_switch "git read-tree -u -m"
test_submodule_forced_switch "git read-tree -u --reset"
--
2.12.0.rc1.49.g0cfd38c5f6.dirty
next prev parent reply other threads:[~2017-03-14 21:47 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20170223225735.10994-1-sbeller@google.com/>
2017-03-02 0:47 ` [RFCv6 PATCH 00/18] Checkout aware of Submodules! Stefan Beller
2017-03-02 0:47 ` [PATCH 01/18] lib-submodule-update.sh: reorder create_lib_submodule_repo Stefan Beller
2017-03-02 0:47 ` [PATCH 02/18] lib-submodule-update.sh: do not use ./. as submodule remote Stefan Beller
2017-03-02 0:47 ` [PATCH 03/18] lib-submodule-update: teach test_submodule_content the -C <dir> flag Stefan Beller
2017-03-02 2:11 ` Eric Wong
2017-03-06 20:30 ` Stefan Beller
2017-03-06 20:35 ` Stefan Beller
2017-03-02 0:47 ` [PATCH 04/18] lib-submodule-update.sh: replace sha1 by hash Stefan Beller
2017-03-02 0:47 ` [PATCH 05/18] lib-submodule-update.sh: define tests for recursing into submodules Stefan Beller
2017-03-02 0:47 ` [PATCH 06/18] make is_submodule_populated gently Stefan Beller
2017-03-02 0:47 ` [PATCH 07/18] connect_work_tree_and_git_dir: safely create leading directories Stefan Beller
2017-03-02 0:47 ` [PATCH 08/18] update submodules: add submodule config parsing Stefan Beller
2017-03-02 0:47 ` [PATCH 09/18] update submodules: add a config option to determine if submodules are updated Stefan Beller
2017-03-02 0:47 ` [PATCH 10/18] submodules: introduce check to see whether to touch a submodule Stefan Beller
2017-03-02 0:47 ` [PATCH 11/18] update submodules: move up prepare_submodule_repo_env Stefan Beller
2017-03-02 0:47 ` [PATCH 12/18] update submodules: add submodule_move_head Stefan Beller
2017-03-02 0:47 ` [PATCH 13/18] unpack-trees: pass old oid to verify_clean_submodule Stefan Beller
2017-03-02 0:47 ` [PATCH 14/18] unpack-trees: check if we can perform the operation for submodules Stefan Beller
2017-03-02 0:47 ` [PATCH 15/18] read-cache, remove_marked_cache_entries: wipe selected submodules Stefan Beller
2017-03-02 0:47 ` [PATCH 16/18] entry.c: update submodules when interesting Stefan Beller
2017-03-02 0:47 ` [PATCH 17/18] builtin/checkout: add --recurse-submodules switch Stefan Beller
2017-03-02 0:47 ` [PATCH 18/18] builtin/read-tree: " Stefan Beller
2017-03-06 20:59 ` [RFCv7 PATCH 00/18] Checkout aware of Submodules! Stefan Beller
2017-03-06 20:59 ` [PATCH 01/18] lib-submodule-update.sh: reorder create_lib_submodule_repo Stefan Beller
2017-03-06 20:59 ` [PATCH 02/18] lib-submodule-update.sh: do not use ./. as submodule remote Stefan Beller
2017-03-06 20:59 ` [PATCH 03/18] lib-submodule-update: teach test_submodule_content the -C <dir> flag Stefan Beller
2017-03-06 22:21 ` Junio C Hamano
2017-03-06 20:59 ` [PATCH 04/18] lib-submodule-update.sh: replace sha1 by hash Stefan Beller
2017-03-06 20:59 ` [PATCH 05/18] lib-submodule-update.sh: define tests for recursing into submodules Stefan Beller
2017-03-07 22:26 ` Junio C Hamano
2017-03-06 20:59 ` [PATCH 06/18] make is_submodule_populated gently Stefan Beller
2017-03-06 20:59 ` [PATCH 07/18] connect_work_tree_and_git_dir: safely create leading directories Stefan Beller
2017-03-06 20:59 ` [PATCH 08/18] update submodules: add submodule config parsing Stefan Beller
2017-03-06 20:59 ` [PATCH 09/18] update submodules: add a config option to determine if submodules are updated Stefan Beller
2017-03-06 20:59 ` [PATCH 10/18] submodules: introduce check to see whether to touch a submodule Stefan Beller
2017-03-06 20:59 ` [PATCH 11/18] update submodules: move up prepare_submodule_repo_env Stefan Beller
2017-03-06 20:59 ` [PATCH 12/18] update submodules: add submodule_move_head Stefan Beller
2017-03-06 20:59 ` [PATCH 13/18] unpack-trees: pass old oid to verify_clean_submodule Stefan Beller
2017-03-06 20:59 ` [PATCH 14/18] unpack-trees: check if we can perform the operation for submodules Stefan Beller
2017-03-06 20:59 ` [PATCH 15/18] read-cache, remove_marked_cache_entries: wipe selected submodules Stefan Beller
2017-03-07 22:42 ` Junio C Hamano
2017-03-07 23:37 ` Stefan Beller
2017-03-08 1:14 ` Junio C Hamano
2017-03-08 22:39 ` Stefan Beller
2017-03-08 23:37 ` Junio C Hamano
2017-03-06 20:59 ` [PATCH 16/18] entry.c: update submodules when interesting Stefan Beller
2017-03-07 22:42 ` Junio C Hamano
2017-03-07 23:04 ` Junio C Hamano
2017-03-07 23:08 ` Stefan Beller
2017-03-08 1:08 ` Junio C Hamano
2017-03-06 20:59 ` [PATCH 17/18] builtin/checkout: add --recurse-submodules switch Stefan Beller
2017-03-06 20:59 ` [PATCH 18/18] builtin/read-tree: " Stefan Beller
2017-03-07 22:42 ` Junio C Hamano
2017-03-09 22:15 ` [RFCv8 PATCH 00/17] Checkout aware of Submodules! Stefan Beller
2017-03-09 22:15 ` [PATCH 01/17] lib-submodule-update.sh: reorder create_lib_submodule_repo Stefan Beller
2017-03-09 22:15 ` [PATCH 02/17] lib-submodule-update.sh: do not use ./. as submodule remote Stefan Beller
2017-03-09 22:15 ` [PATCH 03/17] lib-submodule-update: teach test_submodule_content the -C <dir> flag Stefan Beller
2017-03-09 22:15 ` [PATCH 04/17] lib-submodule-update.sh: replace sha1 by hash Stefan Beller
2017-03-09 22:15 ` [PATCH 05/17] lib-submodule-update.sh: define tests for recursing into submodules Stefan Beller
2017-03-09 22:15 ` [PATCH 06/17] make is_submodule_populated gently Stefan Beller
2017-03-09 22:15 ` [PATCH 07/17] connect_work_tree_and_git_dir: safely create leading directories Stefan Beller
2017-03-09 23:29 ` Brandon Williams
2017-03-12 7:06 ` Junio C Hamano
2017-03-09 22:15 ` [PATCH 08/17] update submodules: add submodule config parsing Stefan Beller
2017-03-09 22:15 ` [PATCH 09/17] update submodules: add a config option to determine if submodules are updated Stefan Beller
2017-03-09 22:15 ` [PATCH 10/17] submodules: introduce check to see whether to touch a submodule Stefan Beller
2017-03-09 22:15 ` [PATCH 11/17] update submodules: move up prepare_submodule_repo_env Stefan Beller
2017-03-09 22:15 ` [PATCH 12/17] update submodules: add submodule_move_head Stefan Beller
2017-03-09 23:37 ` Brandon Williams
2017-03-12 7:09 ` Junio C Hamano
2017-03-13 17:24 ` Brandon Williams
2017-03-13 20:50 ` Stefan Beller
2017-03-09 23:40 ` Brandon Williams
2017-03-09 23:43 ` Brandon Williams
2017-03-09 22:15 ` [PATCH 13/17] unpack-trees: pass old oid to verify_clean_submodule Stefan Beller
2017-03-09 22:15 ` [PATCH 14/17] unpack-trees: check if we can perform the operation for submodules Stefan Beller
2017-03-09 22:15 ` [PATCH 15/17] entry.c: create submodules when interesting Stefan Beller
2017-03-09 22:15 ` [PATCH 16/17] builtin/checkout: add --recurse-submodules switch Stefan Beller
2017-03-09 22:15 ` [PATCH 17/17] builtin/read-tree: " Stefan Beller
2017-03-14 21:46 ` [PATCHv9 00/19] Checkout aware of Submodules! Stefan Beller
2017-03-14 21:46 ` [PATCH 01/19] connect_work_tree_and_git_dir: safely create leading directories Stefan Beller
2017-03-14 21:46 ` [PATCH 02/19] submodule--helper.c: remove duplicate code Stefan Beller
2017-03-14 21:46 ` [PATCH 03/19] lib-submodule-update.sh: reorder create_lib_submodule_repo Stefan Beller
2017-03-14 21:46 ` [PATCH 04/19] lib-submodule-update.sh: do not use ./. as submodule remote Stefan Beller
2017-03-14 21:46 ` [PATCH 05/19] lib-submodule-update: teach test_submodule_content the -C <dir> flag Stefan Beller
2017-03-14 21:46 ` [PATCH 06/19] lib-submodule-update.sh: replace sha1 by hash Stefan Beller
2017-03-14 21:46 ` [PATCH 07/19] lib-submodule-update.sh: define tests for recursing into submodules Stefan Beller
2017-03-14 21:46 ` [PATCH 08/19] make is_submodule_populated gently Stefan Beller
2017-03-14 21:46 ` [PATCH 09/19] update submodules: add submodule config parsing Stefan Beller
2017-03-14 21:46 ` [PATCH 10/19] update submodules: add a config option to determine if submodules are updated Stefan Beller
2017-03-14 21:46 ` [PATCH 11/19] submodules: introduce check to see whether to touch a submodule Stefan Beller
2017-03-14 21:46 ` [PATCH 12/19] update submodules: move up prepare_submodule_repo_env Stefan Beller
2017-03-14 21:46 ` [PATCH 13/19] submodule.c: get_super_prefix_or_empty Stefan Beller
2017-03-14 21:46 ` [PATCH 14/19] update submodules: add submodule_move_head Stefan Beller
2017-03-14 21:46 ` [PATCH 15/19] unpack-trees: pass old oid to verify_clean_submodule Stefan Beller
2017-03-14 21:46 ` [PATCH 16/19] unpack-trees: check if we can perform the operation for submodules Stefan Beller
2017-03-14 21:46 ` [PATCH 17/19] entry.c: create submodules when interesting Stefan Beller
2017-03-14 21:46 ` [PATCH 18/19] builtin/checkout: add --recurse-submodules switch Stefan Beller
2017-03-14 21:46 ` Stefan Beller [this message]
2017-03-15 0:41 ` [PATCHv9 00/19] Checkout aware of Submodules! Brandon Williams
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=20170314214642.7701-20-sbeller@google.com \
--to=sbeller@google.com \
--cc=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hvoigt@hvoigt.net \
--cc=jrnieder@gmail.com \
--cc=novalis@novalis.org \
--cc=ramsay@ramsayjones.plus.com \
--cc=sandals@crustytoothpaste.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.