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

[PATCH v4 0/4] t: replace incorrect test_must_fail usage (part 5)

From
Denton Liu <liu.denton@gmail.com>
Date
Jun 18, 2020, 08:49 UTC
Message-ID
<cover.1592470068.git.liu.denton@gmail.com>
In-Reply-To
<cover.1591897173.git.liu.denton@gmail.com>
Hi all,

This revision of the series just improves on some of the documentation and add addresses one of Junio's comments. Aside from that, the code remains the same.

The overall scope of these patches is to replace inappropriate uses of test_must_fail. IOW, we should only allow test_must_fail to run on `git` and `test-tool`. Ultimately, we will conclude by making test_must_fail error out on non-git commands. An advance view of the final series can be found here[1].

This is the fifth part. It focuses on lib-submodule-update.sh and tests that make use of it.

The first part can be found here[2]. The second part can be found here[3]. The third part can be found here[4]. The fourth part can be found here[5].

Changes since v1.2:
* In "lib-submodule-update: pass OVERWRITING_FAIL", use if-then return
  to reduce the amount of code churn
Changes since v2:
* Replace the OVERWRITING_FAIL approach with callback functions as
  suggested by Peff[6]
Changes since v3:
* Simply handling of empty $before and $after
* Add more comments on the usage of the helper functions

[1]: (may be rebased at any time) https://github.com/Denton-L/git/tree/ready/cleanup-test-must-fail2 [2]: https://lore.kernel.org/git/cover.1576583819.git.liu.denton@gmail.com/ [3]: https://lore.kernel.org/git/cover.1577454401.git.liu.denton@gmail.com/ [4]: https://lore.kernel.org/git/cover.1585209554.git.liu.denton@gmail.com/ [5]: https://lore.kernel.org/git/cover.1587372771.git.liu.denton@gmail.com/ [6]: https://lore.kernel.org/git/20200521182928.GA1308647@coredump.intra.peff.net/

Denton Liu (4):
  lib-submodule-update: add space after function name
  lib-submodule-update: consolidate --recurse-submodules
  lib-submodule-update: prepend "git" to $command
  lib-submodule-update: use callbacks in test_submodule_switch_common()
 t/lib-submodule-update.sh        | 135 +++++++++++++++++++++++--------
 t/t1013-read-tree-submodule.sh   |   4 +-
 t/t2013-checkout-submodule.sh    |   4 +-
 t/t3426-rebase-submodule.sh      |  10 +--
 t/t3512-cherry-pick-submodule.sh |   2 +-
 t/t3513-revert-submodule.sh      |  10 ++-
 t/t3906-stash-submodule.sh       |  10 ++-
 t/t4137-apply-submodule.sh       |  12 +--
 t/t4255-am-submodule.sh          |  12 +--
 t/t5572-pull-submodule.sh        |  28 +------
 t/t6041-bisect-submodule.sh      |  10 ++-
 t/t7112-reset-submodule.sh       |   6 +-
 t/t7613-merge-submodule.sh       |   8 +-
 13 files changed, 148 insertions(+), 103 deletions(-)
Range-diff against v3:
1:  ba2f642e0f = 1:  ba2f642e0f lib-submodule-update: add space after function name
2:  16d0a3eb9a = 2:  16d0a3eb9a lib-submodule-update: consolidate --recurse-submodules
3:  09446be5b9 = 3:  09446be5b9 lib-submodule-update: prepend "git" to $command
4:  74e6086da4 ! 4:  35d07117e6 lib-submodule-update: use callbacks in test_submodule_switch_common()
    @@ Commit message
         If the command requires a filename argument, specify it as `\$arg` since
         that variable will be set and the whole $command string will be eval'd.
         Unfortunately, there is no way to get rid of the eval as some of the
    -    commands are passed (such as the `git pull` tests) require that no
    +    commands that are passed (such as the `git pull` tests) require that no
         additional arguments are passed so we must have some mechanism for the
         caller to specify whether or not it wants the filename argument.
     
    @@ Commit message
         Finally, as an added bonus, `test_must_fail` will only run on $command
         which is guaranteed to be a git command.
     
    -    An alternate design was considered where the $OVERWRITING_FAIL is set
    -    from the test_submodule_switch_common() function and passed to the
    -    helper function. This approach was considered too difficult to
    -    understand due to the fact that using a signalling magic environment
    -    variable might be too indirect.
    +    An alternate design was considered where $OVERWRITING_FAIL is set from
    +    test_submodule_switch_common() and exposed to the helper function. This
    +    approach was considered too difficult to understand due to the fact that
    +    using a signalling magic environment variable might be too indirect.
     
      ## t/lib-submodule-update.sh ##
     @@ t/lib-submodule-update.sh: test_submodule_content () {
    + # Removing a submodule containing a .git directory must fail even when forced
    + # to protect the history!
    + #
    ++# $1: The git command to be eval'd and tested. The submodule being operated on
    ++# will be available as $arg.
    ++#
    ++# $2: The function that will run before the git command. It will be passed the
    ++# submodule being operated on as the only argument. This argument is optional.
    ++#
    ++# $3: The function that will run after $1. It will be passed the submodule
    ++# being operated on as the only argument. This argument is optional. It will
    ++# not be run when testing a case where the git command is expected to fail.
    + 
      # Internal function; use test_submodule_switch_func(), test_submodule_switch(),
      # or test_submodule_forced_switch() instead.
      test_submodule_switch_common () {
     -	command="$1"
    -+	command="$1" # should be a git command
    -+	before="$2"
    -+	after="$3"
    -+
    -+	if test -z "$before"
    -+	then
    -+		before=true
    -+	fi
    -+
    -+	if test -z "$after"
    -+	then
    -+		after=true
    -+	fi
    ++	command="$1" before="${2:-true}" after="${3:-true}"
     +
      	######################### Appearing submodule #########################
      	# Switching to a commit letting a submodule appear creates empty dir ...
    @@ t/lib-submodule-update.sh: test_submodule_switch_common () {
      			test_dir_is_empty sub1 &&
      			git submodule update --init --recursive &&
     @@ t/lib-submodule-update.sh: test_submodule_switch_common () {
    + # conditions, set the appropriate KNOWN_FAILURE_* variable used in the tests
    + # below to 1.
    + #
    +-# Use as follows:
    ++# $1: The git command to be eval'd and tested. The submodule being operated on
    ++# will be available as $arg. Do not include the leading "git".
    + #
    +-# my_func () {
    ++# $2: The function that will run before the git command. It will be passed the
    ++# submodule being operated on as the only argument. This argument is optional.
    ++#
    ++# $3: The function that will run after $1. It will be passed the submodule
    ++# being operated on as the only argument. This argument is optional. It will
    ++# not be run when testing a case where the git command is expected to fail.
    ++#
    ++# The following example uses `git some-command` as an example command to be
    ++# tested. It updates the worktree and index to match a target, but not any
    ++# submodule directories.
    ++#
    ++# my_func_before () {
    + #   target=$1
    +-#   # Do something here that updates the worktree and index to match target,
    +-#   # but not any submodule directories.
    ++#   # Prepare for git some-command to be run
      # }
    - # test_submodule_switch_func "my_func"
    +-# test_submodule_switch_func "my_func"
    ++# my_func_after () {
    ++#   target=$1
    ++#   # Check the state after git some-command is run
    ++# }
    ++# test_submodule_switch_func "some-command \$arg" "my_func_before" "my_func_after"
      test_submodule_switch_func () {
     -	command="$1"
     -	test_submodule_switch_common "$command"
-- 
2.27.0.132.g321788e831
Previous: Junio C HamanoNext: Denton Liu
Message 47 of 64 in “t: replace incorrect test_must_fail usage (part 5)”
  1. 0/4 t: replace incorrect test_must_fail usage (part 5)Denton Liu, Apr 29, 2020
  2. 1/4 lib-submodule-update: add space after function nameDenton Liu, Apr 29, 2020
  3. 3/4 lib-submodule-update: prepend "git" to $commandDenton Liu, Apr 29, 2020
  4. 2/4 lib-submodule-update: consolidate --recurse-submodulesDenton Liu, Apr 29, 2020
  5. Junio C HamanoApr 29, 2020
  6. 4/4 lib-submodule-update: pass OVERWRITING_FAILDenton Liu, Apr 29, 2020
  7. Junio C HamanoApr 29, 2020
  8. Denton LiuApr 30, 2020
  9. Junio C HamanoApr 30, 2020
  10. Denton LiuApr 30, 2020
  11. lib-submodule-update: pass OVERWRITING_FAILDenton Liu, Apr 30, 2020
  12. Junio C HamanoApr 30, 2020
  13. Denton LiuMay 1, 2020
  14. Junio C HamanoMay 1, 2020
  15. lib-submodule-update: pass OVERWRITING_FAILDenton Liu, May 5, 2020
  16. Taylor BlauApr 29, 2020
  17. Johannes SixtApr 29, 2020
  18. Re* [PATCH 0/4] t: replace incorrect test_must_fail usage (part 5)Junio C Hamano, Apr 29, 2020
  19. Taylor BlauApr 29, 2020
  20. Junio C HamanoApr 29, 2020
  21. Taylor BlauApr 29, 2020
  22. Junio C HamanoApr 29, 2020
  23. Taylor BlauApr 29, 2020
  24. Eric SunshineApr 29, 2020
  25. Junio C HamanoApr 29, 2020
  26. 0/4 t: replace incorrect test_must_fail usage (part 5)Denton Liu, May 21, 2020
  27. 1/4 lib-submodule-update: add space after function nameDenton Liu, May 21, 2020
  28. 2/4 lib-submodule-update: consolidate --recurse-submodulesDenton Liu, May 21, 2020
  29. 3/4 lib-submodule-update: prepend "git" to $commandDenton Liu, May 21, 2020
  30. Philip OakleyMay 21, 2020
  31. Denton LiuMay 21, 2020
  32. 4/4 lib-submodule-update: pass OVERWRITING_FAILDenton Liu, May 21, 2020
  33. Jeff KingMay 21, 2020
  34. Denton LiuMay 21, 2020
  35. Junio C HamanoMay 21, 2020
  36. Jeff KingMay 21, 2020
  37. Jeff KingMay 21, 2020
  38. Junio C HamanoMay 21, 2020
  39. Jeff KingMay 21, 2020
  40. 0/4 t: replace incorrect test_must_fail usage (part 5)Denton Liu, Jun 11, 2020
  41. 1/4 lib-submodule-update: add space after function nameDenton Liu, Jun 11, 2020
  42. 2/4 lib-submodule-update: consolidate --recurse-submodulesDenton Liu, Jun 11, 2020
  43. 3/4 lib-submodule-update: prepend "git" to $commandDenton Liu, Jun 11, 2020
  44. 4/4 lib-submodule-update: use callbacks in test_submodule_switch_common()Denton Liu, Jun 11, 2020
  45. Junio C HamanoJun 12, 2020
  46. Junio C HamanoJun 18, 2020
  47. 0/4 t: replace incorrect test_must_fail usage (part 5)Denton Liu, Jun 18, 2020
  48. 1/4 lib-submodule-update: add space after function nameDenton Liu, Jun 18, 2020
  49. 2/4 lib-submodule-update: consolidate --recurse-submodulesDenton Liu, Jun 18, 2020
  50. 3/4 lib-submodule-update: prepend "git" to $commandDenton Liu, Jun 18, 2020
  51. 4/4 lib-submodule-update: use callbacks in test_submodule_switch_common()Denton Liu, Jun 18, 2020
  52. Jeff KingJun 18, 2020
  53. 0/4 t: replace incorrect test_must_fail usage (part 5)Denton Liu, Jun 23, 2020
  54. 1/4 lib-submodule-update: add space after function nameDenton Liu, Jun 23, 2020
  55. 2/4 lib-submodule-update: consolidate --recurse-submodulesDenton Liu, Jun 23, 2020
  56. 4/4 lib-submodule-update: use callbacks in test_submodule_switch_common()Denton Liu, Jun 23, 2020
  57. 3/4 lib-submodule-update: prepend "git" to $commandDenton Liu, Jun 23, 2020
  58. Jeff KingJun 23, 2020
  59. lib-submodule-update: pass 'test_must_fail' as an argumentDenton Liu, Jun 23, 2020
  60. lib-submodule-update: pass 'test_must_fail' as an argumentDenton Liu, Jun 23, 2020
  61. Junio C HamanoJun 23, 2020
  62. Đoàn Trần Công DanhJun 24, 2020
  63. lib-submodule-update: pass 'test_must_fail' as an argumentDenton Liu, Jun 24, 2020
  64. Junio C HamanoJun 24, 2020

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.