(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'revert can handle submodules'>)} spids: [4] ) ] ) (C {<.>} {<'./test-lib.sh'>}) (C {<.>} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) <'/lib-submodule-update.sh'>}) (command.ShFunction name: git_revert body: (BraceGroup children: [ (command.AndOr ops: [ Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp ] children: [ (command.Simple words: [{<git>} {<status>} {<-su>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})] do_fork: T ) (command.Simple words: [{<ls>} {<-1pR>} {<Id.Lit_Star '*'>}] redirects: [(redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})] do_fork: T ) (C {<tar>} {<cf>} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/tmp.tar'>)} {<Id.Lit_Star '*'>} ) (C {<git>} {<checkout>} {(DQ ($ Id.VSub_Number '$1'))}) (C {<git>} {<revert>} {<HEAD>}) (C {<rm>} {<-rf>} {<Id.Lit_Star '*'>}) (C {<tar>} {<xf>} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/tmp.tar'>)}) (command.Simple words: [{<git>} {<status>} {<-su>}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<actual>})] do_fork: T ) (command.Simple words: [{<ls>} {<-1pR>} {<Id.Lit_Star '*'>}] redirects: [(redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<actual>})] do_fork: T ) (C {<test_cmp>} {<expect>} {<actual>}) (C {<git>} {<revert>} {<HEAD>}) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT) op: assign_op.Equal rhs: {<1>} spids: [169] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR) op: assign_op.Equal rhs: {<1>} spids: [172] ) ] ) (C {<test_submodule_switch>} {(DQ <git_revert>)}) (C {<test_done>}) ] )