Merge branch 'km/empty-repo-is-still-a-repo'
Running "git add" on a repository created inside the current repository is an explicit indication that the user wants to add it as a submodule, but when the HEAD of the inner repository is on an unborn branch, it cannot be added as a submodule. Worse, the files in its working tree can be added as if they are a part of the outer repository, which is not what the user wants. These problems are being addressed. * km/empty-repo-is-still-a-repo: add: error appropriately on repository with no commits dir: do not traverse repositories with no commits submodule: refuse to add repository with no commits
This commit is contained in:
50
t/t3009-ls-files-others-nonsubmodule.sh
Executable file
50
t/t3009-ls-files-others-nonsubmodule.sh
Executable file
@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='test git ls-files --others with non-submodule repositories
|
||||
|
||||
This test runs git ls-files --others with the following working tree:
|
||||
|
||||
nonrepo-no-files/
|
||||
plain directory with no files
|
||||
nonrepo-untracked-file/
|
||||
plain directory with an untracked file
|
||||
repo-no-commit-no-files/
|
||||
git repository without a commit or a file
|
||||
repo-no-commit-untracked-file/
|
||||
git repository without a commit but with an untracked file
|
||||
repo-with-commit-no-files/
|
||||
git repository with a commit and no untracked files
|
||||
repo-with-commit-untracked-file/
|
||||
git repository with a commit and an untracked file
|
||||
'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'setup: directories' '
|
||||
mkdir nonrepo-no-files/ &&
|
||||
mkdir nonrepo-untracked-file &&
|
||||
: >nonrepo-untracked-file/untracked &&
|
||||
git init repo-no-commit-no-files &&
|
||||
git init repo-no-commit-untracked-file &&
|
||||
: >repo-no-commit-untracked-file/untracked &&
|
||||
git init repo-with-commit-no-files &&
|
||||
git -C repo-with-commit-no-files commit --allow-empty -mmsg &&
|
||||
git init repo-with-commit-untracked-file &&
|
||||
test_commit -C repo-with-commit-untracked-file msg &&
|
||||
: >repo-with-commit-untracked-file/untracked
|
||||
'
|
||||
|
||||
test_expect_success 'ls-files --others handles untracked git repositories' '
|
||||
git ls-files -o >output &&
|
||||
cat >expect <<-EOF &&
|
||||
nonrepo-untracked-file/untracked
|
||||
output
|
||||
repo-no-commit-no-files/
|
||||
repo-no-commit-untracked-file/
|
||||
repo-with-commit-no-files/
|
||||
repo-with-commit-untracked-file/
|
||||
EOF
|
||||
test_cmp expect output
|
||||
'
|
||||
|
||||
test_done
|
@ -296,6 +296,17 @@ test_expect_success '"git add ." in empty repo' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'error on a repository with no commits' '
|
||||
rm -fr empty &&
|
||||
git init empty &&
|
||||
test_must_fail git add empty >actual 2>&1 &&
|
||||
cat >expect <<-EOF &&
|
||||
error: '"'empty/'"' does not have a commit checked out
|
||||
fatal: adding files failed
|
||||
EOF
|
||||
test_i18ncmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'git add --dry-run of existing changed file' "
|
||||
echo new >>track-this &&
|
||||
git add --dry-run track-this >actual 2>&1 &&
|
||||
@ -396,6 +407,7 @@ test_expect_success 'no file status change if no pathspec is given in subdir' '
|
||||
'
|
||||
|
||||
test_expect_success 'all statuses changed in folder if . is given' '
|
||||
rm -fr empty &&
|
||||
git add --chmod=+x . &&
|
||||
test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 &&
|
||||
git add --chmod=-x . &&
|
||||
|
@ -46,6 +46,15 @@ test_expect_success 'submodule update aborts on missing gitmodules url' '
|
||||
test_must_fail git submodule init
|
||||
'
|
||||
|
||||
test_expect_success 'add aborts on repository with no commits' '
|
||||
cat >expect <<-\EOF &&
|
||||
'"'repo-no-commits'"' does not have a commit checked out
|
||||
EOF
|
||||
git init repo-no-commits &&
|
||||
test_must_fail git submodule add ../a ./repo-no-commits 2>actual &&
|
||||
test_i18ncmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'setup - repository in init subdirectory' '
|
||||
mkdir init &&
|
||||
(
|
||||
@ -809,7 +818,7 @@ test_expect_success '../bar/a/b/c works with relative local path - ../foo/bar.gi
|
||||
cp pristine-.git-config .git/config &&
|
||||
cp pristine-.gitmodules .gitmodules &&
|
||||
mkdir -p a/b/c &&
|
||||
(cd a/b/c && git init) &&
|
||||
(cd a/b/c && git init && test_commit msg) &&
|
||||
git config remote.origin.url ../foo/bar.git &&
|
||||
git submodule add ../bar/a/b/c ./a/b/c &&
|
||||
git submodule init &&
|
||||
|
Reference in New Issue
Block a user