git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Stefan Beller <sbeller@google.com>
Cc: unlisted-recipients:; (no To-header on input)
	git@vger.kernel.org, sandals@crustytoothpaste.net,
	jrnieder@gmail.com, bmwill@google.com
Subject: Re: [PATCH 03/15] lib-submodule-update.sh: define tests for recursing into submodules
Date: Thu, 16 Feb 2017 12:39:47 -0800	[thread overview]
Message-ID: <xmqqlgt5x430.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20170216003811.18273-4-sbeller@google.com> (Stefan Beller's message of "Wed, 15 Feb 2017 16:37:59 -0800")

Stefan Beller <sbeller@google.com> writes:

> Currently lib-submodule-update.sh provides 2 functions
> test_submodule_switch and test_submodule_forced_switch that are used by a
> variety of tests to ensure that submodules behave as expected. The current
> expected behavior is that submodules are not touched at all (see
> 42639d2317a for the exact setup).
>
> In the future we want to teach all these commands to properly recurse
> into submodules. To do that, we'll add two testing functions to
> submodule-update-lib.sh test_submodule_switch_recursing and
> test_submodule_forced_switch_recursing.

I'd remove "properly" and insert a colon after "add two ... to
submodule-update-lib.sh" before the names of two functions.

> +reset_work_tree_to_interested () {
> +	reset_work_tree_to $1 &&
> +	# indicate we are interested in the submodule:
> +	git -C submodule_update config submodule.sub1.url "bogus" &&
> +	# also have it available:
> +	if ! test -d submodule_update/.git/modules/sub1
> +	then
> +		mkdir submodule_update/.git/modules &&

Would we want "mkdir -p" here to be safe?

> +		cp -r submodule_update_repo/.git/modules/sub1 submodule_update/.git/modules/sub1

... ahh, wouldn't matter that much, we checked that modules/sub1
does not exist, and as long as nobody creates modules/ or modules/somethingelse
we are OK.

> +	fi
> +}
> +

> @@ -695,3 +736,443 @@ test_submodule_forced_switch () {
>  		)
>  	'
>  }
> +
> +# Test that submodule contents are correctly updated when switching
> +# between commits that change a submodule.
> +# Test that the following transitions are correctly handled:
> +# (These tests are also above in the case where we expect no change
> +#  in the submodule)
> +# - Updated submodule
> +# - New submodule
> +# - Removed submodule
> +# - Directory containing tracked files replaced by submodule
> +# - Submodule replaced by tracked files in directory
> +# - Submodule replaced by tracked file with the same name
> +# - tracked file replaced by submodule

These should work without trouble only when the paths involved in
the operation in the working tree are clean, right?  Just double
checking.  If they are dirty we should expect a failure, instead of
silent loss of information.

> +# New test cases
> +# - Removing a submodule with a git directory absorbs the submodules
> +#   git directory first into the superproject.
> +
> +test_submodule_switch_recursing () {
> +	command="$1"

The dq-pair is not strictly needed on the RHS of the assignment, but
it is a good way to signal that we considered that we might receive
an argument with $IFS in it...

> +	######################### Appearing submodule #########################
> +	# Switching to a commit letting a submodule appear checks it out ...
> +	test_expect_success "$command: added submodule is checked out" '
> +		prolog &&
> +		reset_work_tree_to_interested no_submodule &&
> +		(
> +			cd submodule_update &&
> +			git branch -t add_sub1 origin/add_sub1 &&
> +			$command add_sub1 &&

... and after doing so, not quoting $command here signals that we
expect command line splitting to happen.  Am I reading it correctly?
Without an actual caller appearing in this step, it is rather hard
to judge.

> +			test_superproject_content origin/add_sub1 &&
> +			test_submodule_content sub1 origin/add_sub1
> +		)
> ...
> +	# ... but an ignored file is fine.
> +	test_expect_success "$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 &&
> +		(
> +			cd submodule_update &&
> +			git branch -t add_sub1 origin/add_sub1 &&
> +			: >sub1 &&
> +			echo sub1 > .git/info/exclude

    ">.git/info/exclude"

> +			$command add_sub1 &&
> +			test_superproject_content origin/add_sub1 &&
> +			test_submodule_content sub1 origin/add_sub1
> +		)
> +	'


  reply	other threads:[~2017-02-16 20:39 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-15  0:34 [RFCv3 PATCH 00/14] Checkout aware of Submodules! Stefan Beller
2017-02-15  0:34 ` [PATCH 01/14] lib-submodule-update.sh: reorder create_lib_submodule_repo Stefan Beller
2017-02-15  1:44   ` brian m. carlson
2017-02-15  0:34 ` [PATCH 02/14] lib-submodule-update.sh: define tests for recursing into submodules Stefan Beller
2017-02-15 16:51   ` Brandon Williams
2017-02-15 18:52     ` Stefan Beller
2017-02-15  0:34 ` [PATCH 03/14] make is_submodule_populated gently Stefan Beller
2017-02-15 18:10   ` Junio C Hamano
2017-02-15 22:42     ` Stefan Beller
2017-02-15  0:34 ` [PATCH 04/14] connect_work_tree_and_git_dir: safely create leading directories Stefan Beller
2017-02-15 18:22   ` Junio C Hamano
2017-02-15 22:52     ` Stefan Beller
2017-02-15 23:19       ` Junio C Hamano
2017-02-15  0:34 ` [PATCH 05/14] update submodules: add submodule config parsing Stefan Beller
2017-02-15 18:29   ` Junio C Hamano
2017-02-15  0:34 ` [PATCH 06/14] update submodules: add a config option to determine if submodules are updated Stefan Beller
2017-02-15  0:34 ` [PATCH 07/14] update submodules: introduce is_interesting_submodule Stefan Beller
2017-02-15 17:04   ` Brandon Williams
2017-02-15 18:46     ` Stefan Beller
2017-02-15  0:34 ` [PATCH 08/14] update submodules: move up prepare_submodule_repo_env Stefan Beller
2017-02-15  0:34 ` [PATCH 09/14] update submodules: add submodule_go_from_to Stefan Beller
2017-02-15  2:06   ` brian m. carlson
2017-02-15  0:34 ` [PATCH 10/14] unpack-trees: pass old oid to verify_clean_submodule Stefan Beller
2017-02-15  0:34 ` [PATCH 11/14] unpack-trees: check if we can perform the operation for submodules Stefan Beller
2017-02-15  0:34 ` [PATCH 12/14] read-cache: remove_marked_cache_entries to wipe selected submodules Stefan Beller
2017-02-15  0:34 ` [PATCH 13/14] entry.c: update submodules when interesting Stefan Beller
2017-02-15  0:34 ` [PATCH 14/14] builtin/checkout: add --recurse-submodules switch Stefan Beller
2017-02-15  2:08   ` brian m. carlson
2017-02-16  0:33     ` Stefan Beller
2017-02-15  2:13 ` [RFCv3 PATCH 00/14] Checkout aware of Submodules! brian m. carlson
2017-02-15 18:34 ` Junio C Hamano
2017-02-16  0:37   ` [RFCv4 " Stefan Beller
2017-02-16  0:37     ` [PATCH 01/15] lib-submodule-update.sh: reorder create_lib_submodule_repo Stefan Beller
2017-02-16  0:37     ` [PATCH 02/15] lib-submodule-update.sh: do not use ./. as submodule remote Stefan Beller
2017-02-16  0:37     ` [PATCH 03/15] lib-submodule-update.sh: define tests for recursing into submodules Stefan Beller
2017-02-16 20:39       ` Junio C Hamano [this message]
2017-02-22 18:43         ` Stefan Beller
2017-02-16  0:38     ` [PATCH 04/15] make is_submodule_populated gently Stefan Beller
2017-02-16  0:38     ` [PATCH 05/15] connect_work_tree_and_git_dir: safely create leading directories Stefan Beller
2017-02-16 20:54       ` Junio C Hamano
2017-02-16 21:16         ` Stefan Beller
2017-02-16 21:25           ` Junio C Hamano
2017-02-16  0:38     ` [PATCH 06/15] update submodules: add submodule config parsing Stefan Beller
2017-02-17 18:24       ` Jacob Keller
2017-02-21 19:42         ` Stefan Beller
2017-02-21 20:48           ` Jacob Keller
2017-02-16  0:38     ` [PATCH 07/15] update submodules: add a config option to determine if submodules are updated Stefan Beller
2017-02-16  0:38     ` [PATCH 08/15] submodules: introduce check to see whether to touch a submodule Stefan Beller
2017-02-16 21:02       ` Junio C Hamano
2017-02-16 22:34       ` Jacob Keller
2017-02-17 18:36       ` Jacob Keller
2017-02-21 20:56         ` Stefan Beller
2017-02-16  0:38     ` [PATCH 09/15] update submodules: move up prepare_submodule_repo_env Stefan Beller
2017-02-16  0:38     ` [PATCH 10/15] update submodules: add submodule_go_from_to Stefan Beller
2017-02-16 21:15       ` Junio C Hamano
2017-02-16 21:33         ` Stefan Beller
2017-02-16  0:38     ` [PATCH 11/15] unpack-trees: pass old oid to verify_clean_submodule Stefan Beller
2017-02-16 21:19       ` Junio C Hamano
2017-02-16  0:38     ` [PATCH 12/15] unpack-trees: check if we can perform the operation for submodules Stefan Beller
2017-02-16 18:01       ` Brandon Williams
2017-02-16 21:23       ` Junio C Hamano
2017-02-17 18:42       ` Jacob Keller
2017-02-21 22:16         ` Stefan Beller
2017-02-21 23:35           ` Jacob Keller
2017-02-21 23:44             ` Stefan Beller
2017-02-22  0:31               ` Jacob Keller
2017-02-16  0:38     ` [PATCH 13/15] read-cache: remove_marked_cache_entries to wipe selected submodules Stefan Beller
2017-02-16 21:32       ` Junio C Hamano
2017-02-16  0:38     ` [PATCH 14/15] entry.c: update submodules when interesting Stefan Beller
2017-02-16  0:38     ` [PATCH 15/15] builtin/checkout: add --recurse-submodules switch Stefan Beller
2017-02-16 22:00     ` [RFCv4 PATCH 00/14] Checkout aware of Submodules! Junio C Hamano
2017-02-16 22:54       ` Jacob Keller
2017-02-16 22:56         ` Stefan Beller
2017-02-16 23:27           ` Jacob Keller
2017-02-23 22:57       ` [RFCv5 " Stefan Beller
2017-02-23 22:57         ` [PATCH 01/15] lib-submodule-update.sh: reorder create_lib_submodule_repo Stefan Beller
2017-02-23 22:57         ` [PATCH 02/15] lib-submodule-update.sh: do not use ./. as submodule remote Stefan Beller
2017-02-23 22:57         ` [PATCH 03/15] lib-submodule-update.sh: define tests for recursing into submodules Stefan Beller
2017-02-23 22:57         ` [PATCH 04/15] make is_submodule_populated gently Stefan Beller
2017-02-23 22:57         ` [PATCH 05/15] connect_work_tree_and_git_dir: safely create leading directories Stefan Beller
2017-02-23 22:57         ` [PATCH 06/15] update submodules: add submodule config parsing Stefan Beller
2017-02-23 22:57         ` [PATCH 07/15] update submodules: add a config option to determine if submodules are updated Stefan Beller
2017-02-23 22:57         ` [PATCH 08/15] submodules: introduce check to see whether to touch a submodule Stefan Beller
2017-02-23 22:57         ` [PATCH 09/15] update submodules: move up prepare_submodule_repo_env Stefan Beller
2017-02-23 22:57         ` [PATCH 10/15] update submodules: add submodule_move_head Stefan Beller
2017-02-24  1:21           ` Ramsay Jones
2017-02-24 19:08             ` Stefan Beller
2017-02-23 22:57         ` [PATCH 11/15] unpack-trees: pass old oid to verify_clean_submodule Stefan Beller
2017-02-23 22:57         ` [PATCH 12/15] unpack-trees: check if we can perform the operation for submodules Stefan Beller
2017-02-23 22:57         ` [PATCH 13/15] read-cache, remove_marked_cache_entries: wipe selected submodules Stefan Beller
2017-02-23 22:57         ` [PATCH 14/15] entry.c: update submodules when interesting Stefan Beller
2017-02-23 22:57         ` [PATCH 15/15] builtin/checkout: add --recurse-submodules switch Stefan Beller
2017-02-24  1:25           ` Ramsay Jones
2017-02-24 19:20             ` 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=xmqqlgt5x430.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox.com \
    --cc=sbeller@google.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).