> Kyle Meyer <[email protected]> writes:
>
> [...]
>
>> diff --git a/git-submodule.sh b/git-submodule.sh
>> index 514ede2596..6c74656027 100755
>> --- a/git-submodule.sh
>> +++ b/git-submodule.sh
>> @@ -234,10 +234,18 @@ cmd_add()
>> if test -z "$force" &&
>> ! git add --dry-run --ignore-missing --no-warn-embedded-repo
>> "$sm_path" > /dev/null 2>&1
>> then
>> - eval_gettextln "The following path is ignored by one of your
>> .gitignore files:
>> + if test -d "$sm_path" &&
>> + test -z $(git -C "$sm_path" rev-parse --show-cdup
>> 2>/dev/null) &&
>> + ! git -C "$sm_path" rev-parse --verify -q HEAD
>> >/dev/null
>> + then
>> + die "$(eval_gettext "'\$sm_path' does not have any
>> commits")"
>> + else
>> + eval_gettextln "\
>> +The following path is ignored by one of your .gitignore files:
>> \$sm_path
>> Use -f if you really want to add it." >&2
>> - exit 1
>> + exit 1
>> + fi
>
> I didn't think through this check, which would have been obvious had I
> ran the added test without the rest of the patches in this series. It
> assumes that the 'git add --dry-run' call fails, but that failure
> depends on the last patch of this series. So I'd need to move this
> patch to the end or find a new place for this "no commits" check.
v2 moves the "no commits" check outside of the 'git add --dry-run'
failure condition so that the first patch doesn't depend on the final
patch in this series.
Kyle Meyer (4):
submodule: refuse to add repository with no commits
t3000: move non-submodule repo test to separate file
t3009: test that ls-files -o traverses bogus repo
dir: do not traverse repositories with no commits
dir.c | 6 ++-
git-submodule.sh | 7 ++++
t/t3000-ls-files-others.sh | 7 ----
t/t3009-ls-files-others-nonsubmodule.sh | 56 +++++++++++++++++++++++++
t/t3700-add.sh | 1 +
t/t7400-submodule-basic.sh | 11 ++++-
6 files changed, 78 insertions(+), 10 deletions(-)
create mode 100755 t/t3009-ls-files-others-nonsubmodule.sh
Range-diff against v1:
1: e0db7e3c3c ! 1: b080e2c557 submodule: refuse to add repository with no
commits
@@ -9,10 +9,9 @@
in the sub-repository are added to the current repository.
Detect if the path is a repository with no commits and abort to avoid
- getting into this state unless --force is used. Reacting to --force
- isn't very useful, especially because an upcoming commit will make
- 'git add' fail in this situation, but it allows us to use the same
- 'git add --dry-run' condition as the ignored path case.
+ getting into this state. Note that this check must come before the
+ 'git add --dry-run' check because an upcoming commit will make 'git
+ add' fail in this situation.
Signed-off-by: Kyle Meyer <[email protected]>
@@ -20,26 +19,19 @@
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@
+ die "$(eval_gettext "'\$sm_path' already exists in the index
and is not a submodule")"
+ fi
+
++ if test -d "$sm_path" &&
++ test -z $(git -C "$sm_path" rev-parse --show-cdup 2>/dev/null)
++ then
++ git -C "$sm_path" rev-parse --verify -q HEAD >/dev/null ||
++ die "$(eval_gettext "'\$sm_path' does not have any commits")"
++ fi
++
if test -z "$force" &&
! git add --dry-run --ignore-missing --no-warn-embedded-repo
"$sm_path" > /dev/null 2>&1
then
-- eval_gettextln "The following path is ignored by one of your
.gitignore files:
-+ if test -d "$sm_path" &&
-+ test -z $(git -C "$sm_path" rev-parse --show-cdup
2>/dev/null) &&
-+ ! git -C "$sm_path" rev-parse --verify -q HEAD
>/dev/null
-+ then
-+ die "$(eval_gettext "'\$sm_path' does not have any
commits")"
-+ else
-+ eval_gettextln "\
-+The following path is ignored by one of your .gitignore files:
- \$sm_path
- Use -f if you really want to add it." >&2
-- exit 1
-+ exit 1
-+ fi
- fi
-
- if test -n "$custom_name"
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
--- a/t/t7400-submodule-basic.sh
2: 6eed1f5daf = 2: c027701842 t3000: move non-submodule repo test to separate
file
3: 7ba3209762 = 3: 97f53e30c0 t3009: test that ls-files -o traverses bogus
repo
4: 2901375dc1 = 4: a926b87102 dir: do not traverse repositories with no
commits
--
2.21.0