(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description) op: assign_op.Equal rhs: {(SQ <'test git-specific bash prompt functions'>)} spids: [13] ) ] redirects: [] ) (C {<.>} {<'./lib-bash.sh'>}) (C {<.>} {(DQ ($ Id.VSub_DollarName GIT_BUILD_DIR) <'/contrib/completion/git-prompt.sh'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'actual='> name:actual) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName TRASH_DIRECTORY) <'/actual'>)} spids: [32] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'c_red='> name:c_red) op: assign_op.Equal rhs: {(SQ <'\\\\[\\\\e[31m\\\\]'>)} spids: [38] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'c_green='> name:c_green) op: assign_op.Equal rhs: {(SQ <'\\\\[\\\\e[32m\\\\]'>)} spids: [43] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'c_lblue='> name:c_lblue) op: assign_op.Equal rhs: {(SQ <'\\\\[\\\\e[1;34m\\\\]'>)} spids: [48] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'c_clear='> name:c_clear) op: assign_op.Equal rhs: {(SQ <'\\\\[\\\\e[0m\\\\]'>)} spids: [53] ) ] redirects: [] ) (C {<test_expect_success>} {(SQ <'setup for prompt tests'>)} { (SQ <'\n'> <'\tgit init otherrepo &&\n'> <'\techo 1 >file &&\n'> <'\tgit add file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m initial &&\n'> <'\tgit tag -a -m msg1 t1 &&\n'> <'\tgit checkout -b b1 &&\n'> <'\techo 2 >file &&\n'> <'\tgit commit -m "second b1" file &&\n'> <'\techo 3 >file &&\n'> <'\tgit commit -m "third b1" file &&\n'> <'\tgit tag -a -m msg2 t2 &&\n'> <'\tgit checkout -b b2 master &&\n'> <'\techo 0 >file &&\n'> <'\tgit commit -m "second b2" file &&\n'> <'\techo 00 >file &&\n'> <'\tgit commit -m "another b2" file &&\n'> <'\techo 000 >file &&\n'> <'\tgit commit -m "yet another b2" file &&\n'> <'\tmkdir ignored_dir &&\n'> <'\techo "ignored_dir/" >>.gitignore &&\n'> <'\tgit checkout master\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - branch name'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'prompt - branch name - symlink symref'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_config core.preferSymlinkRefs true &&\n'> <'\tgit checkout master &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - unborn branch'>)} { (SQ <'\n'> <'\tprintf " (unborn)" >expected &&\n'> <'\tgit checkout --orphan unborn &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'repo_with_newline='> name:repo_with_newline) op: assign_op.Equal rhs: {(SQ <'repo\n'> <'with\n'> <newline>)} spids: [141] ) ] redirects: [] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test_have_prereq>} {<Id.KW_Bang '!'> <MINGW>}) (command.Simple words: [{<mkdir>} {(DQ ($ Id.VSub_DollarName repo_with_newline))}] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] more_env: [] do_fork: T ) ] ) ] ) action: [(C {<test_set_prereq>} {<FUNNYNAMES>})] spids: [149 167] ) ] else_action: [(C {<say>} {(SQ <'Your filesystem does not allow newlines in filenames.'>)})] redirects: [] ) (C {<test_expect_success>} {<FUNNYNAMES>} {(SQ <'prompt - with newline in path'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\tgit init "$repo_with_newline" &&\n'> <'\ttest_when_finished "rm -rf \\"$repo_with_newline\\"" &&\n'> <'\tmkdir "$repo_with_newline"/subdir &&\n'> <'\t(\n'> <'\t\tcd "$repo_with_newline/subdir" &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - detached head'>)} { (SQ <'\n'> <'\tprintf " ((%s...))" $(git log -1 --format="%h" --abbrev=13 b1^) >expected &&\n'> <'\ttest_config core.abbrev 13 &&\n'> <'\tgit checkout b1^ &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - describe detached head - contains'>)} { (SQ <'\n'> <'\tprintf " ((t2~1))" >expected &&\n'> <'\tgit checkout b1^ &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_DESCRIBE_STYLE=contains &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - describe detached head - branch'>)} { (SQ <'\n'> <'\tprintf " ((tags/t2~1))" >expected &&\n'> <'\tgit checkout b1^ &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_DESCRIBE_STYLE=branch &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - describe detached head - describe'>)} { (SQ <'\n'> <'\tprintf " ((t1-1-g%s))" $(git log -1 --format="%h" b1^) >expected &&\n'> <'\tgit checkout b1^ &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_DESCRIBE_STYLE=describe &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - describe detached head - default'>)} { (SQ <'\n'> <'\tprintf " ((t2))" >expected &&\n'> <'\tgit checkout --detach b1 &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - inside .git directory'>)} { (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - deep inside .git directory'>)} { (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> <'\t\tcd .git/refs/heads &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - inside bare repository'>)} { (SQ <'\n'> <'\tprintf " (BARE:master)" >expected &&\n'> <'\tgit init --bare bare.git &&\n'> <'\ttest_when_finished "rm -rf bare.git" &&\n'> <'\t(\n'> <'\t\tcd bare.git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - interactive rebase'>)} { (SQ <'\n'> <'\tprintf " (b1|REBASE-i 2/3)" >expected &&\n'> <'\twrite_script fake_editor.sh <<-\\EOF &&\n'> <'\t\techo "exec echo" >"$1"\n'> <'\t\techo "edit $(git log -1 --format="%h")" >>"$1"\n'> <'\t\techo "exec echo" >>"$1"\n'> <'\tEOF\n'> <'\ttest_when_finished "rm -f fake_editor.sh" &&\n'> <'\ttest_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&\n'> <'\tgit checkout b1 &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\tgit rebase -i HEAD^ &&\n'> <'\ttest_when_finished "git rebase --abort" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - rebase merge'>)} { (SQ <'\n'> <'\tprintf " (b2|REBASE-m 1/3)" >expected &&\n'> <'\tgit checkout b2 &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_must_fail git rebase --merge b1 b2 &&\n'> <'\ttest_when_finished "git rebase --abort" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - rebase'>)} { (SQ <'\n'> <'\tprintf " (b2|REBASE 1/3)" >expected &&\n'> <'\tgit checkout b2 &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_must_fail git rebase b1 b2 &&\n'> <'\ttest_when_finished "git rebase --abort" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - merge'>)} { (SQ <'\n'> <'\tprintf " (b1|MERGING)" >expected &&\n'> <'\tgit checkout b1 &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_must_fail git merge b2 &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - cherry-pick'>)} { (SQ <'\n'> <'\tprintf " (master|CHERRY-PICKING)" >expected &&\n'> <'\ttest_must_fail git cherry-pick b1 &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bisect'>)} { (SQ <'\n'> <'\tprintf " (master|BISECTING)" >expected &&\n'> <'\tgit bisect start &&\n'> <'\ttest_when_finished "git bisect reset" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - clean'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - dirty worktree'>)} { (SQ <'\n'> <'\tprintf " (master *)" >expected &&\n'> <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - dirty index'>)} { (SQ <'\n'> <'\tprintf " (master +)" >expected &&\n'> <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\tgit add -u &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - dirty index and worktree'>)} { (SQ <'\n'> <'\tprintf " (master *+)" >expected &&\n'> <'\techo "dirty index" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\tgit add -u &&\n'> <'\techo "dirty worktree" >file &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - orphan branch - clean'>)} { (SQ <'\n'> <'\tprintf " (orphan #)" >expected &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\tgit checkout --orphan orphan &&\n'> <'\tgit reset --hard &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - orphan branch - dirty index'>)} { (SQ <'\n'> <'\tprintf " (orphan +)" >expected &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\tgit checkout --orphan orphan &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - orphan branch - dirty index and worktree'>)} { (SQ <'\n'> <'\tprintf " (orphan *+)" >expected &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\tgit checkout --orphan orphan &&\n'> <'\t>file &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - shell variable unset with config disabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState false &&\n'> <'\t(\n'> <'\t\tsane_unset GIT_PS1_SHOWDIRTYSTATE &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - shell variable unset with config enabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState true &&\n'> <'\t(\n'> <'\t\tsane_unset GIT_PS1_SHOWDIRTYSTATE &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - shell variable set with config disabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState false &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - shell variable set with config enabled'>)} { (SQ <'\n'> <'\tprintf " (master *)" >expected &&\n'> <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState true &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - not shown inside .git directory'>)} { (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - stash status indicator - no stash'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - stash status indicator - stash'>)} { (SQ <'\n'> <'\tprintf " (master $)" >expected &&\n'> <'\techo 2 >file &&\n'> <'\tgit stash &&\n'> <'\ttest_when_finished "git stash drop" &&\n'> <'\tgit pack-refs --all &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - stash status indicator - not shown inside .git directory'>)} { (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\techo 2 >file &&\n'> <'\tgit stash &&\n'> <'\ttest_when_finished "git stash drop" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - no untracked files'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tcd otherrepo &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - untracked files'>)} { (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - empty untracked dir'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\tmkdir otherrepo/untracked-dir &&\n'> <'\ttest_when_finished "rm -rf otherrepo/untracked-dir" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tcd otherrepo &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - non-empty untracked dir'>)} { (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> <'\tmkdir otherrepo/untracked-dir &&\n'> <'\ttest_when_finished "rm -rf otherrepo/untracked-dir" &&\n'> <'\t>otherrepo/untracked-dir/untracked-file &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tcd otherrepo &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - untracked files outside cwd'>)} { (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> <'\t(\n'> <'\t\tmkdir -p ignored_dir &&\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - shell variable unset with config disabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\ttest_config bash.showUntrackedFiles false &&\n'> <'\t(\n'> <'\t\tsane_unset GIT_PS1_SHOWUNTRACKEDFILES &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - shell variable unset with config enabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\ttest_config bash.showUntrackedFiles true &&\n'> <'\t(\n'> <'\t\tsane_unset GIT_PS1_SHOWUNTRACKEDFILES &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - shell variable set with config disabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\ttest_config bash.showUntrackedFiles false &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - shell variable set with config enabled'>)} { (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> <'\ttest_config bash.showUntrackedFiles true &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - not shown inside .git directory'>)} { (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - format string starting with dash'>)} { (SQ <'\n'> <'\tprintf -- "-master" >expected &&\n'> <'\t__git_ps1 "-%s" >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - pc mode'>)} { (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER\\\\nmaster" >expected &&\n'> <'\tprintf "" >expected_output &&\n'> <'\t(\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" >"$actual" &&\n'> <'\t\ttest_cmp expected_output "$actual" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - branch name'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear}):AFTER\\\\nmaster" >expected &&\n' > <'\t(\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" >"$actual"\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - detached head'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_red}\\${__git_ps1_branch_name}${c_clear}):AFTER\\\\n(%s...)" $(git log -1 --format="%h" b1^) >expected &&\n' > <'\tgit checkout b1^ &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - dirty status indicator - dirty worktree'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_clear}):AFTER\\\\nmaster" >expected &&\n' > <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - dirty status indicator - dirty index'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_green}+${c_clear}):AFTER\\\\nmaster" >expected &&\n' > <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\tgit add -u &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - dirty status indicator - dirty index and worktree'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_green}+${c_clear}):AFTER\\\\nmaster" >expected &&\n' > <'\techo "dirty index" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\tgit add -u &&\n'> <'\techo "dirty worktree" >file &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - dirty status indicator - before root commit'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_green}#${c_clear}):AFTER\\\\nmaster" >expected &&\n' > <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\tcd otherrepo &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - inside .git directory'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear}):AFTER\\\\nGIT_DIR!" >expected &&\n' > <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - stash status indicator'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_lblue}\\$${c_clear}):AFTER\\\\nmaster" >expected &&\n' > <'\techo 2 >file &&\n'> <'\tgit stash &&\n'> <'\ttest_when_finished "git stash drop" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - untracked files status indicator'>)} { (SQ <'\n'> < '\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_red}%%${c_clear}):AFTER\\\\nmaster" >expected &&\n' > <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - zsh color pc mode'>)} { (SQ <'\n'> <'\tprintf "BEFORE: (%%F{green}master%%f):AFTER" >expected &&\n'> <'\t(\n'> <'\t\tZSH_VERSION=5.0.0 &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var unset, config disabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var unset, config disabled, pc mode'>)} { (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER" >expected &&\n'> <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var unset, config unset'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var unset, config unset, pc mode'>)} { (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER" >expected &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var set, config disabled'>)} { (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var set, config disabled, pc mode'>)} { (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER" >expected &&\n'> <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var set, config unset'>)} { (SQ <'\n'> <'\tprintf "" >expected &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var set, config unset, pc mode'>)} { (SQ <'\n'> <'\tprintf "BEFORE::AFTER" >expected &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - inside gitdir (stdout)'>)} { (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual" 2>/dev/null\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - inside gitdir (stderr)'>)} { (SQ <'\n'> <'\tprintf "" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >/dev/null 2>"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'> ) } ) (C {<test_done>}) ] )