#!/bin/sh global test_description := ''git reset in a bare repository'' source ./test-lib.sh test_expect_success 'setup non-bare' ' echo one >file && git add file && git commit -m one && echo two >file && git commit -a -m two ' test_expect_success '"hard" reset requires a worktree' ' (cd .git && test_must_fail git reset --hard) ' test_expect_success '"merge" reset requires a worktree' ' (cd .git && test_must_fail git reset --merge) ' test_expect_success '"keep" reset requires a worktree' ' (cd .git && test_must_fail git reset --keep) ' test_expect_success '"mixed" reset is ok' ' (cd .git && git reset) ' test_expect_success '"soft" reset is ok' ' (cd .git && git reset --soft) ' test_expect_success 'hard reset works with GIT_WORK_TREE' ' mkdir worktree && GIT_WORK_TREE=$PWD/worktree GIT_DIR=$PWD/.git git reset --hard && test_cmp file worktree/file ' test_expect_success 'setup bare' ' git clone --bare . bare.git && cd bare.git ' test_expect_success '"hard" reset is not allowed in bare' ' test_must_fail git reset --hard HEAD^ ' test_expect_success '"merge" reset is not allowed in bare' ' test_must_fail git reset --merge HEAD^ ' test_expect_success '"keep" reset is not allowed in bare' ' test_must_fail git reset --keep HEAD^ ' test_expect_success '"mixed" reset is not allowed in bare' ' test_must_fail git reset --mixed HEAD^ ' test_expect_success '"soft" reset is allowed in bare' ' git reset --soft HEAD^ && test "$(git show --pretty=format:%s | head -n 1)" = "one" ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git reset in a bare repository">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <"setup non-bare">)} { (SQ <"\n"> <"\techo one >file &&\n"> <"\tgit add file &&\n"> <"\tgit commit -m one &&\n"> <"\techo two >file &&\n"> <"\tgit commit -a -m two\n"> ) } ) (C {(test_expect_success)} {(SQ <"\"hard\" reset requires a worktree">)} {(SQ <"\n"> <"\t(cd .git &&\n"> <"\t test_must_fail git reset --hard)\n">)} ) (C {(test_expect_success)} {(SQ <"\"merge\" reset requires a worktree">)} {(SQ <"\n"> <"\t(cd .git &&\n"> <"\t test_must_fail git reset --merge)\n">)} ) (C {(test_expect_success)} {(SQ <"\"keep\" reset requires a worktree">)} {(SQ <"\n"> <"\t(cd .git &&\n"> <"\t test_must_fail git reset --keep)\n">)} ) (C {(test_expect_success)} {(SQ <"\"mixed\" reset is ok">)} {(SQ <"\n"> <"\t(cd .git && git reset)\n">)} ) (C {(test_expect_success)} {(SQ <"\"soft\" reset is ok">)} {(SQ <"\n"> <"\t(cd .git && git reset --soft)\n">)} ) (C {(test_expect_success)} {(SQ <"hard reset works with GIT_WORK_TREE">)} { (SQ <"\n"> <"\tmkdir worktree &&\n"> <"\tGIT_WORK_TREE=$PWD/worktree GIT_DIR=$PWD/.git git reset --hard &&\n"> <"\ttest_cmp file worktree/file\n"> ) } ) (C {(test_expect_success)} {(SQ <"setup bare">)} {(SQ <"\n"> <"\tgit clone --bare . bare.git &&\n"> <"\tcd bare.git\n">)} ) (C {(test_expect_success)} {(SQ <"\"hard\" reset is not allowed in bare">)} {(SQ <"\n"> <"\ttest_must_fail git reset --hard HEAD^\n">)} ) (C {(test_expect_success)} {(SQ <"\"merge\" reset is not allowed in bare">)} {(SQ <"\n"> <"\ttest_must_fail git reset --merge HEAD^\n">)} ) (C {(test_expect_success)} {(SQ <"\"keep\" reset is not allowed in bare">)} {(SQ <"\n"> <"\ttest_must_fail git reset --keep HEAD^\n">)} ) (C {(test_expect_success)} {(SQ <"\"mixed\" reset is not allowed in bare">)} {(SQ <"\n"> <"\ttest_must_fail git reset --mixed HEAD^\n">)} ) (C {(test_expect_success)} {(SQ <"\"soft\" reset is allowed in bare">)} { (SQ <"\n"> <"\tgit reset --soft HEAD^ &&\n"> <"\ttest \"$(git show --pretty=format:%s | head -n 1)\" = \"one\"\n"> ) } ) (C {(test_done)}) ] )