(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'test git worktree move, remove, lock and unlock' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:18))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) (Token id:Id.Lit_Chars val:'\ttest_commit init &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tgit worktree add source &&\n' span_id:24) (Token id: Id.Lit_Chars val: '\tgit worktree list --porcelain | grep "^worktree" >actual &&\n' span_id: 25 ) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expected &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tworktree $(pwd)\n' span_id:27) (Token id:Id.Lit_Chars val:'\tworktree $(pwd)/source\n' span_id:28) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:29) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:30) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock main worktree' span_id:37))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:41) (Token id:Id.Lit_Chars val:'\ttest_must_fail git worktree lock .\n' span_id:42) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock linked worktree' span_id:49))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) (Token id: Id.Lit_Chars val: '\tgit worktree lock --reason hahaha source &&\n' span_id: 54 ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:55) (Token id: Id.Lit_Chars val: '\ttest_cmp expected .git/worktrees/source/locked\n' span_id: 56 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock linked worktree from another worktree' span_id:63))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) (Token id:Id.Lit_Chars val:'\trm .git/worktrees/source/locked &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit worktree add elsewhere &&\n' span_id:69) (Token id: Id.Lit_Chars val: '\tgit -C elsewhere worktree lock --reason hahaha ../source &&\n' span_id: 70 ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:71) (Token id: Id.Lit_Chars val: '\ttest_cmp expected .git/worktrees/source/locked\n' span_id: 72 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock worktree twice' span_id:79))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:83) (Token id: Id.Lit_Chars val: '\ttest_must_fail git worktree lock source &&\n' span_id: 84 ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:85) (Token id: Id.Lit_Chars val: '\ttest_cmp expected .git/worktrees/source/locked\n' span_id: 86 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'lock worktree twice (from the locked worktree)' span_id:93))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:97) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -C source worktree lock . &&\n' span_id: 98 ) (Token id:Id.Lit_Chars val:'\techo hahaha >expected &&\n' span_id:99) (Token id: Id.Lit_Chars val: '\ttest_cmp expected .git/worktrees/source/locked\n' span_id: 100 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unlock main worktree' span_id:107))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id: Id.Lit_Chars val: '\ttest_must_fail git worktree unlock .\n' span_id: 112 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unlock linked worktree' span_id:119))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:123) (Token id:Id.Lit_Chars val:'\tgit worktree unlock source &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/worktrees/source/locked\n' span_id:125) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unlock worktree twice' span_id:132))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:136) (Token id: Id.Lit_Chars val: '\ttest_must_fail git worktree unlock source &&\n' span_id: 137 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/worktrees/source/locked\n' span_id:138) ) } ) (C {(test_done)}) ] )