(List
  (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]}  )
  (Com {[LIT_CHARS unset]} {[LIT_CHARS CVS_SERVER]}  )
  (If
    (Pipeline!
      (Com {[LIT_CHARS type]} {[LIT_CHARS cvs]}
        <
        (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} <REDIR_GREAT ">"> 1),
        (DescriptorRedirectNode target={[LIT_CHARS 1]} <REDIR_GREATAND "2>&"> 2),
        >
      )
    )
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "skipping cvsimport tests, cvs not found">]})])
      (Com {[LIT_CHARS test_done]}      )
    )
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('CVS', {[DQ [LIT_CHARS "cvs -f"]]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[{[LIT_CHARS CVS]}] bindings=[])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('cvsps_version', {[ComSub (Pipeline (Com redirects=[(DescriptorRedirectNode target={[LIT_CHARS 1]} <REDIR_GREATAND "2>&"> 2)]{[LIT_CHARS cvsps]} {[LIT_CHARS -h]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -ne]} {[SQ <LIT_CHARS "s/cvsps version //p">]}) )]})])
  (Case to_match={[DQ [VarSub cvsps_version]]}, pat_word_list=[[{[LIT_CHARS 2.1]}, {[LIT_CHARS 2.2] [LIT_OTHER "*"]}], [{[SQ ]}], [{[LIT_OTHER "*"]}]]
    (ElseTrue)
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "skipping cvsimport tests, cvsps not found">]})])
      (Com {[LIT_CHARS test_done]}      )
    )
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('skip_all', {[SQ <LIT_CHARS "skipping cvsimport tests, unsupported cvsps version">]})])
      (Com {[LIT_CHARS test_done]}      )
    )
  )
  (FunctionDef setup_cvs_test_repository []
    (AndOr OP_AND_IF
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('CVSROOT', {[DQ [ComSub (Com {[LIT_CHARS pwd]})][LIT_CHARS /.cvsroot]]})])
      (AndOr OP_AND_IF
        (Com {[LIT_CHARS cp]} {[LIT_CHARS -r]} {[DQ [VarSub TEST_DIRECTORY][LIT_CHARS /][VarSub 1][LIT_CHARS /cvsroot]]} {[DQ [VarSub CVSROOT]]}        )
        (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[{[LIT_CHARS CVSROOT]}] bindings=[])
      )
    )
  )
  (FunctionDef test_cvs_co []
    (List
      (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS module-cvs-] [DQ [VarSub 1]]}      )
      (If
        (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS master]]} {[LIT_DBRACKET_LIKE "]"]}        )
        (Com {[VarSub CVS]} {[LIT_CHARS co]} {[LIT_CHARS -P]} {[LIT_CHARS -d]} {[LIT_CHARS module-cvs-] [DQ [VarSub 1]]} {[LIT_CHARS -A]} {[LIT_CHARS module]}        )
        (ElseTrue)
        (Com {[VarSub CVS]} {[LIT_CHARS co]} {[LIT_CHARS -P]} {[LIT_CHARS -d]} {[LIT_CHARS module-cvs-] [DQ [VarSub 1]]} {[LIT_CHARS -r]} {[DQ [VarSub 1]]} {[LIT_CHARS module]}        )
      )
    )
  )
  (FunctionDef test_git_co []
    (Subshell
      (AndOr OP_AND_IF
        (Com {[LIT_CHARS cd]} {[LIT_CHARS module-git]}        )
        (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[DQ [VarSub 1]]}        )
      )
    )
  )
  (FunctionDef test_cmp_branch_file []
    (Com {[LIT_CHARS test_cmp]} {[LIT_CHARS module-cvs-] [DQ [VarSub 1]] [LIT_CHARS /] [DQ [VarSub 2]]} {[LIT_CHARS module-git/] [DQ [VarSub 2]]}    )
  )
  (FunctionDef test_cmp_branch_tree []
    (AndOr OP_AND_IF
      (Com {[LIT_CHARS test_cvs_co]} {[DQ [VarSub 1]]}      )
      (AndOr OP_AND_IF
        (Com {[LIT_CHARS test_git_co]} {[DQ [VarSub 1]]}        )
        (AndOr OP_AND_IF
          (Pipeline
            (Subshell
              (List
                (Com {[LIT_CHARS cd]} {[LIT_CHARS module-cvs-] [DQ [VarSub 1]]}                )
                (Com {[LIT_CHARS find]} {[LIT_CHARS .]} {[LIT_CHARS -type]} {[LIT_CHARS d]} {[LIT_CHARS -name]} {[LIT_CHARS CVS]} {[LIT_CHARS -prune]} {[LIT_CHARS -o]} {[LIT_CHARS -type]} {[LIT_CHARS f]} {[LIT_CHARS -print]}                )
              )
            )
            (Com {[LIT_CHARS sort]}
              <
              (FilenameRedirectNode filename={[LIT_CHARS module-cvs-] [DQ [VarSub 1]] [LIT_CHARS .list]} <REDIR_GREAT ">"> 1),
              >
            )
          )
          (AndOr OP_AND_IF
            (Pipeline
              (Subshell
                (List
                  (Com {[LIT_CHARS cd]} {[LIT_CHARS module-git]}                  )
                  (Com {[LIT_CHARS find]} {[LIT_CHARS .]} {[LIT_CHARS -type]} {[LIT_CHARS d]} {[LIT_CHARS -name]} {[LIT_CHARS .git]} {[LIT_CHARS -prune]} {[LIT_CHARS -o]} {[LIT_CHARS -type]} {[LIT_CHARS f]} {[LIT_CHARS -print]}                  )
                )
              )
              (Com {[LIT_CHARS sort]}
                <
                (FilenameRedirectNode filename={[LIT_CHARS module-git-] [DQ [VarSub 1]] [LIT_CHARS .list]} <REDIR_GREAT ">"> 1),
                >
              )
            )
            (AndOr OP_AND_IF
              (Com {[LIT_CHARS test_cmp]} {[LIT_CHARS module-cvs-] [DQ [VarSub 1]] [LIT_CHARS .list]} {[LIT_CHARS module-git-] [DQ [VarSub 1]] [LIT_CHARS .list]}              )
              (Pipeline
                (Com {[LIT_CHARS cat]} {[LIT_CHARS module-cvs-] [DQ [VarSub 1]] [LIT_CHARS .list]}                )
                (While
                  (Com {[LIT_CHARS read]} {[LIT_CHARS f]}                  )
                  (AndOr OP_OR_IF
                    (Com {[LIT_CHARS test_cmp_branch_file]} {[DQ [VarSub 1]]} {[DQ [VarSub f]]}                    )
                    (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)