git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 03/15] lib-submodule-update.sh: define tests for recursing into submodules

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 16, 2017, 20:39 UTC
Message-ID
<xmqqlgt5x430.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20170216003811.18273-4-sbeller@google.com>
Stefan Beller <sbeller@google.com> writes:
Show 10 quoted lines
> 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.

Show 8 quoted lines
> +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
> +}
> +
Show 17 quoted lines
> @@ -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.

Show 6 quoted lines
> +# 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...

Show 9 quoted lines
> +	######################### 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.

Show 14 quoted lines
> +			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"
Show 5 quoted lines
> +			$command add_sub1 &&
> +			test_superproject_content origin/add_sub1 &&
> +			test_submodule_content sub1 origin/add_sub1
> +		)
> +	'
Previous: Stefan BellerNext: Stefan Beller
Message 39 of 94 in “Checkout aware of Submodules!”
  1. 00/14 Checkout aware of Submodules!Stefan Beller, Feb 15, 2017
  2. 01/14 lib-submodule-update.sh: reorder create_lib_submodule_repoStefan Beller, Feb 15, 2017
  3. brian m. carlsonFeb 15, 2017
  4. 02/14 lib-submodule-update.sh: define tests for recursing into submodulesStefan Beller, Feb 15, 2017
  5. Brandon WilliamsFeb 15, 2017
  6. Stefan BellerFeb 15, 2017
  7. 07/14 update submodules: introduce is_interesting_submoduleStefan Beller, Feb 15, 2017
  8. Brandon WilliamsFeb 15, 2017
  9. Stefan BellerFeb 15, 2017
  10. 06/14 update submodules: add a config option to determine if submodules are updatedStefan Beller, Feb 15, 2017
  11. 05/14 update submodules: add submodule config parsingStefan Beller, Feb 15, 2017
  12. Junio C HamanoFeb 15, 2017
  13. 11/14 unpack-trees: check if we can perform the operation for submodulesStefan Beller, Feb 15, 2017
  14. 10/14 unpack-trees: pass old oid to verify_clean_submoduleStefan Beller, Feb 15, 2017
  15. 09/14 update submodules: add submodule_go_from_toStefan Beller, Feb 15, 2017
  16. brian m. carlsonFeb 15, 2017
  17. 04/14 connect_work_tree_and_git_dir: safely create leading directoriesStefan Beller, Feb 15, 2017
  18. Junio C HamanoFeb 15, 2017
  19. Stefan BellerFeb 15, 2017
  20. Junio C HamanoFeb 15, 2017
  21. 13/14 entry.c: update submodules when interestingStefan Beller, Feb 15, 2017
  22. 14/14 builtin/checkout: add --recurse-submodules switchStefan Beller, Feb 15, 2017
  23. brian m. carlsonFeb 15, 2017
  24. Stefan BellerFeb 16, 2017
  25. 12/14 read-cache: remove_marked_cache_entries to wipe selected submodules.Stefan Beller, Feb 15, 2017
  26. 03/14 make is_submodule_populated gentlyStefan Beller, Feb 15, 2017
  27. Junio C HamanoFeb 15, 2017
  28. Stefan BellerFeb 15, 2017
  29. 08/14 update submodules: move up prepare_submodule_repo_envStefan Beller, Feb 15, 2017
  30. brian m. carlsonFeb 15, 2017
  31. Junio C HamanoFeb 15, 2017
  32. 00/14 Checkout aware of Submodules!Stefan Beller, Feb 16, 2017
  33. 05/15 connect_work_tree_and_git_dir: safely create leading directoriesStefan Beller, Feb 16, 2017
  34. Junio C HamanoFeb 16, 2017
  35. Stefan BellerFeb 16, 2017
  36. Junio C HamanoFeb 16, 2017
  37. 07/15 update submodules: add a config option to determine if submodules are updatedStefan Beller, Feb 16, 2017
  38. 03/15 lib-submodule-update.sh: define tests for recursing into submodulesStefan Beller, Feb 16, 2017
  39. Junio C HamanoFeb 16, 2017
  40. Stefan BellerFeb 22, 2017
  41. 02/15 lib-submodule-update.sh: do not use ./. as submodule remoteStefan Beller, Feb 16, 2017
  42. 08/15 submodules: introduce check to see whether to touch a submoduleStefan Beller, Feb 16, 2017
  43. Junio C HamanoFeb 16, 2017
  44. Jacob KellerFeb 16, 2017
  45. Jacob KellerFeb 17, 2017
  46. Stefan BellerFeb 21, 2017
  47. 04/15 make is_submodule_populated gentlyStefan Beller, Feb 16, 2017
  48. 09/15 update submodules: move up prepare_submodule_repo_envStefan Beller, Feb 16, 2017
  49. 10/15 update submodules: add submodule_go_from_toStefan Beller, Feb 16, 2017
  50. Junio C HamanoFeb 16, 2017
  51. Stefan BellerFeb 16, 2017
  52. 06/15 update submodules: add submodule config parsingStefan Beller, Feb 16, 2017
  53. Jacob KellerFeb 17, 2017
  54. Stefan BellerFeb 21, 2017
  55. Jacob KellerFeb 21, 2017
  56. 13/15 read-cache: remove_marked_cache_entries to wipe selected submodules.Stefan Beller, Feb 16, 2017
  57. Junio C HamanoFeb 16, 2017
  58. 15/15 builtin/checkout: add --recurse-submodules switchStefan Beller, Feb 16, 2017
  59. 11/15 unpack-trees: pass old oid to verify_clean_submoduleStefan Beller, Feb 16, 2017
  60. Junio C HamanoFeb 16, 2017
  61. 12/15 unpack-trees: check if we can perform the operation for submodulesStefan Beller, Feb 16, 2017
  62. Brandon WilliamsFeb 16, 2017
  63. Junio C HamanoFeb 16, 2017
  64. Jacob KellerFeb 17, 2017
  65. Stefan BellerFeb 21, 2017
  66. Jacob KellerFeb 21, 2017
  67. Stefan BellerFeb 21, 2017
  68. Jacob KellerFeb 22, 2017
  69. 14/15 entry.c: update submodules when interestingStefan Beller, Feb 16, 2017
  70. 01/15 lib-submodule-update.sh: reorder create_lib_submodule_repoStefan Beller, Feb 16, 2017
  71. Junio C HamanoFeb 16, 2017
  72. Jacob KellerFeb 16, 2017
  73. Stefan BellerFeb 16, 2017
  74. Jacob KellerFeb 16, 2017
  75. 00/14 Checkout aware of Submodules!Stefan Beller, Feb 23, 2017
  76. 08/15 submodules: introduce check to see whether to touch a submoduleStefan Beller, Feb 23, 2017
  77. 09/15 update submodules: move up prepare_submodule_repo_envStefan Beller, Feb 23, 2017
  78. 01/15 lib-submodule-update.sh: reorder create_lib_submodule_repoStefan Beller, Feb 23, 2017
  79. 04/15 make is_submodule_populated gentlyStefan Beller, Feb 23, 2017
  80. 03/15 lib-submodule-update.sh: define tests for recursing into submodulesStefan Beller, Feb 23, 2017
  81. 11/15 unpack-trees: pass old oid to verify_clean_submoduleStefan Beller, Feb 23, 2017
  82. 02/15 lib-submodule-update.sh: do not use ./. as submodule remoteStefan Beller, Feb 23, 2017
  83. 06/15 update submodules: add submodule config parsingStefan Beller, Feb 23, 2017
  84. 14/15 entry.c: update submodules when interestingStefan Beller, Feb 23, 2017
  85. 12/15 unpack-trees: check if we can perform the operation for submodulesStefan Beller, Feb 23, 2017
  86. 05/15 connect_work_tree_and_git_dir: safely create leading directoriesStefan Beller, Feb 23, 2017
  87. 07/15 update submodules: add a config option to determine if submodules are updatedStefan Beller, Feb 23, 2017
  88. 10/15 update submodules: add submodule_move_headStefan Beller, Feb 23, 2017
  89. Ramsay JonesFeb 24, 2017
  90. Stefan BellerFeb 24, 2017
  91. 13/15 read-cache, remove_marked_cache_entries: wipe selected submodules.Stefan Beller, Feb 23, 2017
  92. 15/15 builtin/checkout: add --recurse-submodules switchStefan Beller, Feb 23, 2017
  93. Ramsay JonesFeb 24, 2017
  94. Stefan BellerFeb 24, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.