On Tue, Nov 22, 2016 at 12:24:15PM -0800, Junio C Hamano wrote: > > Do you want to do another round of -rc3? Ship with the > > minor regressions and fix them up in v2.11.1? > > I am leaning towards the former (though we may also end up doing the > latter). I think I'd lead towards -rc3, as well. Our schedule is somewhat arbitrary anyway, and one week is less important than somebody picking up the new release and trying to puzzle out a regression that we already have a fix for. > Here is an initial attempt. It turns out that write_archive() must > be callable outside a repository to respond to "git archive --list", > which happens in parse_archive_args(), and the "have-repository?" > check cannot be moved before that to the caller. Right, that makes sense. t5000 already tests git-archive outside of a repo, although it does it in a funny way (it sets GIT_DIR rather than relying on GIT_CEILING_DIRECTORIES). We should cover that and make sure that --remote works outside of a repo. Those work now, but we want to make sure we don't regress them. And then we want to test that --remote can read a configured remote name. And then post-v2.11, we'd want to check that --remote=foo outside of a repo produces a sane error instead of looking for a bogus $GIT_DIR/remotes/foo. Something like this, which does all but the last (and that should probably happen separately post-release). --- diff --git a/t/t5000-tar-tree.sh b/t/t5000-tar-tree.sh index 80b238734..09df7f045 100755 --- a/t/t5000-tar-tree.sh +++ b/t/t5000-tar-tree.sh @@ -94,6 +94,20 @@ check_tar() { ' } +# run "$@" inside a non-git directory +nongit () { + test -d non-repo || + mkdir non-repo || + return 1 + + ( + GIT_CEILING_DIRECTORIES=$(pwd) && + export GIT_CEILING_DIRECTORIES && + cd non-repo && + "$@" + ) +} + test_expect_success \ 'populate workdir' \ 'mkdir a && @@ -179,6 +193,12 @@ test_expect_success 'git archive --remote' \ 'git archive --remote=. HEAD >b5.tar && test_cmp_bin b.tar b5.tar' +test_expect_success 'git archive --remote with configured remote' ' + git config remote.foo.url . && + git archive --remote=foo HEAD >b5-nick.tar && + test_cmp_bin b.tar b5-nick.tar +' + test_expect_success \ 'validate file modification time' \ 'mkdir extract && @@ -197,9 +217,15 @@ test_expect_success 'git archive with --output, override inferred format' ' test_cmp_bin b.tar d4.zip ' -test_expect_success \ - 'git archive --list outside of a git repo' \ - 'GIT_DIR=some/non-existing/directory git archive --list' +test_expect_success 'git archive --list outside of a git repo' ' + nongit git archive --list +' + +test_expect_success 'git archive --remote outside of a git repo' ' + git archive HEAD >expect.tar && + nongit git archive --remote="$PWD" HEAD >actual.tar && + test_cmp_bin expect.tar actual.tar +' test_expect_success 'clients cannot access unreachable commits' ' test_commit unreachable &&