Merge branch 'jc/check-attr-honor-working-tree'

"git check-attr" when (trying to) work on a repository with a
working tree did not work well when the working tree was specified
via --work-tree (and obviously with --git-dir).

The command also works in a bare repository but it reads from the
(possibly stale, irrelevant and/or nonexistent) index, which may
need to be fixed to read from HEAD, but that is a completely
separate issue.  As a related tangent to this separate issue, we
may want to also fix "check-ignore", which refuses to work in a
bare repository, to also operate in a bare one.

* jc/check-attr-honor-working-tree:
  check-attr: move to the top of working tree when in non-bare repository
  t0003: do not chdir the whole test process
This commit is contained in:
Junio C Hamano 2014-03-14 14:05:59 -07:00
commit 28b68216de
2 changed files with 43 additions and 22 deletions

View File

@ -102,6 +102,9 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix)
struct git_attr_check *check; struct git_attr_check *check;
int cnt, i, doubledash, filei; int cnt, i, doubledash, filei;
if (!is_bare_repository())
setup_work_tree();
git_config(git_default_config, NULL); git_config(git_default_config, NULL);
argc = parse_options(argc, argv, prefix, check_attr_options, argc = parse_options(argc, argv, prefix, check_attr_options,

View File

@ -243,40 +243,58 @@ EOF
test_line_count = 0 err test_line_count = 0 err
' '
test_expect_success 'using --git-dir and --work-tree' '
mkdir unreal real &&
git init real &&
echo "file test=in-real" >real/.gitattributes &&
(
cd unreal &&
attr_check file in-real "--git-dir ../real/.git --work-tree ../real"
)
'
test_expect_success 'setup bare' ' test_expect_success 'setup bare' '
git clone --bare . bare.git && git clone --bare . bare.git
cd bare.git
' '
test_expect_success 'bare repository: check that .gitattribute is ignored' ' test_expect_success 'bare repository: check that .gitattribute is ignored' '
( (
echo "f test=f" cd bare.git &&
echo "a/i test=a/i" (
) >.gitattributes && echo "f test=f"
attr_check f unspecified && echo "a/i test=a/i"
attr_check a/f unspecified && ) >.gitattributes &&
attr_check a/c/f unspecified && attr_check f unspecified &&
attr_check a/i unspecified && attr_check a/f unspecified &&
attr_check subdir/a/i unspecified attr_check a/c/f unspecified &&
attr_check a/i unspecified &&
attr_check subdir/a/i unspecified
)
' '
test_expect_success 'bare repository: check that --cached honors index' ' test_expect_success 'bare repository: check that --cached honors index' '
GIT_INDEX_FILE=../.git/index \ (
git check-attr --cached --stdin --all <../stdin-all | cd bare.git &&
sort >actual && GIT_INDEX_FILE=../.git/index \
test_cmp ../specified-all actual git check-attr --cached --stdin --all <../stdin-all |
sort >actual &&
test_cmp ../specified-all actual
)
' '
test_expect_success 'bare repository: test info/attributes' ' test_expect_success 'bare repository: test info/attributes' '
( (
echo "f test=f" cd bare.git &&
echo "a/i test=a/i" (
) >info/attributes && echo "f test=f"
attr_check f f && echo "a/i test=a/i"
attr_check a/f f && ) >info/attributes &&
attr_check a/c/f f && attr_check f f &&
attr_check a/i a/i && attr_check a/f f &&
attr_check subdir/a/i unspecified attr_check a/c/f f &&
attr_check a/i a/i &&
attr_check subdir/a/i unspecified
)
' '
test_done test_done