#!/bin/sh test_description='check random commands outside repo' . ./test-lib.sh test_expect_success 'set up a non-repo directory and test file' ' GIT_CEILING_DIRECTORIES=$(pwd) && export GIT_CEILING_DIRECTORIES && mkdir non-repo && ( cd non-repo && # confirm that git does not find a repo test_must_fail git rev-parse --git-dir ) && test_write_lines one two three four >nums && git add nums && cp nums nums.old && test_write_lines five >>nums && git diff >sample.patch ' test_expect_success 'compute a patch-id outside repository (uses SHA-1)' ' nongit env GIT_DEFAULT_HASH=sha1 \ git patch-id patch-id.expect && nongit \ git patch-id patch-id.actual && test_cmp patch-id.expect patch-id.actual ' test_expect_success 'hash-object outside repository (uses SHA-1)' ' nongit env GIT_DEFAULT_HASH=sha1 \ git hash-object --stdin hash.expect && nongit \ git hash-object --stdin hash.actual && test_cmp hash.expect hash.actual ' test_expect_success 'apply a patch outside repository' ' ( cd non-repo && cp ../nums.old nums && git apply ../sample.patch ) && test_cmp nums non-repo/nums ' test_expect_success 'grep outside repository' ' git grep --cached two >expect && ( cd non-repo && cp ../nums.old nums && git grep --no-index two >../actual ) && test_cmp expect actual ' test_expect_success 'imap-send outside repository' ' test_config_global imap.host imaps://localhost && test_config_global imap.folder Drafts && echo nothing to send >expect && test_must_fail git imap-send -v actual && test_cmp expect actual && ( cd non-repo && test_must_fail git imap-send -v ../actual ) && test_cmp expect actual ' test_expect_success 'check-ref-format outside repository' ' git check-ref-format --branch refs/heads/xyzzy >expect && nongit git check-ref-format --branch refs/heads/xyzzy >actual && test_cmp expect actual ' test_expect_success 'diff outside repository' ' echo one >one && echo two >two && test_must_fail git diff --no-index one two >expect.raw && ( cd non-repo && cp ../one . && cp ../two . && test_must_fail git diff one two >../actual.raw ) && # outside repository diff falls back to SHA-1 but # GIT_DEFAULT_HASH may be set to sha256 on the in-repo side. sed -e "/^index /d" expect.raw >expect && sed -e "/^index /d" actual.raw >actual && test_cmp expect actual ' test_expect_success 'stripspace outside repository' ' nongit git stripspace -s actual && test_grep "^error: remote-curl" actual && ( cd non-repo && test_must_fail git remote-http 2>../actual ) && test_grep "^error: remote-curl" actual ' for cmd in $(git --list-cmds=main) do cmd=${cmd%.*} # strip .sh, .perl, etc. case "$cmd" in archimport | citool | credential-netrc | credential-libsecret | \ credential-osxkeychain | cvsexportcommit | cvsimport | cvsserver | \ daemon | \ difftool--helper | filter-branch | fsck-objects | get-tar-commit-id | \ gui | gui--askpass | \ http-backend | http-fetch | http-push | init-db | \ merge-octopus | merge-one-file | merge-resolve | mergetool | \ mktag | p4 | p4.py | pickaxe | remote-ftp | remote-ftps | \ remote-http | remote-https | replay | send-email | \ sh-i18n--envsubst | shell | show | stage | submodule | svn | \ upload-archive--writer | upload-pack | web--browse | whatchanged) expect_outcome=expect_failure ;; *) expect_outcome=expect_success ;; esac case "$cmd" in instaweb) prereq=PERL ;; *) prereq= ;; esac test_$expect_outcome $prereq "'git $cmd -h' outside a repository" ' test_expect_code 129 nongit git $cmd -h >usage && test_grep "[Uu]sage: git $cmd " usage ' test_$expect_outcome $prereq "'git $cmd --help-all' outside a repository" ' test_expect_code 129 nongit git $cmd --help-all >usage && test_grep "[Uu]sage: git $cmd " usage ' done test_expect_success 'fmt-merge-msg does not crash with -h' ' test_expect_code 129 git fmt-merge-msg -h >usage && test_grep "[Uu]sage: git fmt-merge-msg " usage && test_expect_code 129 nongit git fmt-merge-msg -h >usage && test_grep "[Uu]sage: git fmt-merge-msg " usage ' test_done