(command.CommandList children: [ (command.ShFunction name: copy_to_nonexistent_with_opts body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (C {<atf_check>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<testf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad copy'>)})] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} {<copyf.bak>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'no backup expected'>)}) ] ) ] ) ) (C {<atf_test_case>} {<copy_to_nonexistent>}) (command.ShFunction name: copy_to_nonexistent_body body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>})]) ) (C {<atf_test_case>} {<copy_to_nonexistent_safe>}) (command.ShFunction name: copy_to_nonexistent_safe_body body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-S>})]) ) (C {<atf_test_case>} {<copy_to_nonexistent_comparing>}) (command.ShFunction name: copy_to_nonexistent_comparing_body body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-C>})]) ) (C {<atf_test_case>} {<copy_to_nonexistent_safe_comparing>}) (command.ShFunction name: copy_to_nonexistent_safe_comparing_body body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-S>} {<-C>})]) ) (C {<atf_test_case>} {<copy_to_nonexistent_backup>}) (command.ShFunction name: copy_to_nonexistent_backup_body body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-b>} {<-B.bak>})]) ) (C {<atf_test_case>} {<copy_to_nonexistent_backup_safe>}) (command.ShFunction name: copy_to_nonexistent_backup_safe_body body: (BraceGroup children:[(C {<copy_to_nonexistent_with_opts>} {<-b>} {<-B.bak>} {<-S>})]) ) (C {<atf_test_case>} {<copy_to_nonexistent_preserving>}) (command.ShFunction name: copy_to_nonexistent_preserving_body body: (BraceGroup children: [ (C {<copy_to_nonexistent_with_opts>} {<-p>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-ot>} {<copyf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp 2'>)}) ] ) ] ) ) (command.ShFunction name: copy_self_with_opts body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf2>})] do_fork: T ) (C {<atf_check>} {<-s>} {<not-exit> <Id.Lit_Colon ':'> <0>} {<-o>} {<empty>} {<-e>} {<match> <Id.Lit_Colon ':'> <.>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<testf>} ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cmp>} {<testf>} {<testf2>}) (C {<atf_fail>} {(DQ <'file changed after self-copy attempt'>)}) ] ) ] ) ) (C {<atf_test_case>} {<copy_self>}) (command.ShFunction name: copy_self_body body: (BraceGroup children:[(C {<copy_self_with_opts>})]) ) (C {<atf_test_case>} {<copy_self_safe>}) (command.ShFunction name: copy_self_safe_body body: (BraceGroup children:[(C {<copy_self_with_opts>} {<-S>})]) ) (C {<atf_test_case>} {<copy_self_comparing>}) (command.ShFunction name: copy_self_comparing_body body: (BraceGroup children:[(C {<copy_self_with_opts>} {<-C>})]) ) (C {<atf_test_case>} {<copy_self_safe_comparing>}) (command.ShFunction name: copy_self_safe_comparing_body body: (BraceGroup children:[(C {<copy_self_with_opts>} {<-S>} {<-C>})]) ) (command.ShFunction name: overwrite_with_opts body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})] do_fork: T ) (C {<atf_check>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<otherf>}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<testf>} {<otherf>}) (C {<atf_fail>} {(DQ <'bad overwrite'>)})] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<otherf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) ] ) ) (C {<atf_test_case>} {<overwrite>}) (command.ShFunction name: overwrite_body body: (BraceGroup children:[(C {<overwrite_with_opts>})]) ) (C {<atf_test_case>} {<overwrite_safe>}) (command.ShFunction name: overwrite_safe_body body: (BraceGroup children:[(C {<overwrite_with_opts>} {<-S>})]) ) (C {<atf_test_case>} {<overwrite_comparing>}) (command.ShFunction name: overwrite_comparing_body body: (BraceGroup children:[(C {<overwrite_with_opts>} {<-C>})]) ) (C {<atf_test_case>} {<overwrite_safe_comparing>}) (command.ShFunction name: overwrite_safe_comparing_body body: (BraceGroup children:[(C {<overwrite_with_opts>} {<-S>} {<-C>})]) ) (command.ShFunction name: overwrite_eq_with_opts body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})] do_fork: T ) (C {<atf_check>} {<install>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<otherf>}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<testf>} {<otherf>}) (C {<atf_fail>} {(DQ <'bad overwrite'>)})] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<otherf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) ] ) ) (C {<atf_test_case>} {<overwrite_eq>}) (command.ShFunction name: overwrite_eq_body body: (BraceGroup children:[(C {<overwrite_eq_with_opts>})]) ) (C {<atf_test_case>} {<overwrite_eq_safe>}) (command.ShFunction name: overwrite_eq_safe_body body: (BraceGroup children:[(C {<overwrite_eq_with_opts>} {<-S>})]) ) (C {<atf_test_case>} {<overwrite_eq_comparing>}) (command.ShFunction name: overwrite_eq_comparing_body body: (BraceGroup children:[(C {<overwrite_eq_with_opts>} {<-C>})]) ) (C {<atf_test_case>} {<overwrite_eq_safe_comparing>}) (command.ShFunction name: overwrite_eq_safe_comparing_body body: (BraceGroup children:[(C {<overwrite_eq_with_opts>} {<-S>} {<-C>})]) ) (command.ShFunction name: overwrite_backup_with_opts body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf2>})] do_fork: T ) (C {<atf_check>} {<install>} {<-b>} {<-B.bak>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<otherf>}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<testf>} {<otherf>}) (C {<atf_fail>} {(DQ <'bad overwrite'>)})] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<otherf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<otherf.bak>} {<otherf2>}) (C {<atf_fail>} {(DQ <'bad backup'>)})] ) ] ) ) (C {<atf_test_case>} {<overwrite_backup>}) (command.ShFunction name: overwrite_backup_body body: (BraceGroup children:[(C {<overwrite_backup_with_opts>})]) ) (C {<atf_test_case>} {<overwrite_backup_safe>}) (command.ShFunction name: overwrite_backup_safe_body body: (BraceGroup children:[(C {<overwrite_backup_with_opts>} {<-S>})]) ) (C {<atf_test_case>} {<overwrite_backup_comparing>}) (command.ShFunction name: overwrite_backup_comparing_body body: (BraceGroup children:[(C {<overwrite_backup_with_opts>} {<-C>})]) ) (C {<atf_test_case>} {<overwrite_backup_safe_comparing>}) (command.ShFunction name: overwrite_backup_safe_comparing_body body: (BraceGroup children:[(C {<overwrite_backup_with_opts>} {<-S>} {<-C>})]) ) (command.ShFunction name: setup_stripbin body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\S'>) <TRIPBIN>} here_end_span_id: 964 stdin_parts: [ <'#!/bin/sh\n'> <'tr z @ <"$1" >"$1.new" && mv -- "$1.new" "$1"\n'> ] ) ) (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<stripbin>} ) ] do_fork: T ) (C {<chmod>} {<755>} {<stripbin>}) (C {<export>} {<Id.Lit_VarLike 'STRIPBIN='> (DQ ($ Id.VSub_DollarName '$PWD') <'/stripbin'>)} ) ] ) ) (command.ShFunction name: strip_changing_with_opts body: (BraceGroup children: [ (C {<setup_stripbin>}) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-s>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})] do_fork: T ) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})] ) ] ) ) (C {<atf_test_case>} {<strip_changing>}) (command.ShFunction name: strip_changing_body body: (BraceGroup children:[(C {<strip_changing_with_opts>})]) ) (C {<atf_test_case>} {<strip_changing_comparing>}) (command.ShFunction name: strip_changing_comparing_body body: (BraceGroup children:[(C {<strip_changing_with_opts>} {<-C>})]) ) (command.ShFunction name: strip_changing_overwrite_with_opts body: (BraceGroup children: [ (C {<setup_stripbin>}) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0w'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<copyf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-s>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})] do_fork: T ) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})] ) ] ) ) (C {<atf_test_case>} {<strip_changing_overwrite>}) (command.ShFunction name: strip_changing_overwrite_body body: (BraceGroup children:[(C {<strip_changing_overwrite_with_opts>})]) ) (C {<atf_test_case>} {<strip_changing_overwrite_comparing>}) (command.ShFunction name: strip_changing_overwrite_comparing_body body: (BraceGroup children:[(C {<strip_changing_overwrite_with_opts>} {<-C>})]) ) (command.ShFunction name: strip_changing_overwrite_eq_with_opts body: (BraceGroup children: [ (C {<setup_stripbin>}) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<copyf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-s>} {(DQ ($ Id.VSub_At '$@'))} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0@'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})] do_fork: T ) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})] ) ] ) ) (C {<atf_test_case>} {<strip_changing_overwrite_eq>}) (command.ShFunction name: strip_changing_overwrite_eq_body body: (BraceGroup children:[(C {<strip_changing_overwrite_eq_with_opts>})]) ) (C {<atf_test_case>} {<strip_changing_overwrite_eq_comparing>}) (command.ShFunction name: strip_changing_overwrite_eq_comparing_body body: (BraceGroup children:[(C {<strip_changing_overwrite_eq_with_opts>} {<-C>})]) ) (C {<atf_test_case>} {<strip_noop>}) (command.ShFunction name: strip_noop_body body: (BraceGroup children: [ (C {<export>} {<Id.Lit_VarLike 'STRIPBIN='> <true>}) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-s>} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<testf>} {<-nt>} {<copyf>} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'bad timestamp'>)}) ] ) (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<otherf>})] do_fork: T ) (command.AndOr ops: [Id.Op_DPipe] children: [(C {<cmp>} {<otherf>} {<copyf>}) (C {<atf_fail>} {(DQ <'bad stripped copy'>)})] ) ] ) ) (C {<atf_test_case>} {<hard_link>}) (command.ShFunction name: hard_link_body body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-l>} {<h>} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'not same file'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'copy is symlink'>)}) ] ) ] ) ) (C {<atf_test_case>} {<symbolic_link>}) (command.ShFunction name: symbolic_link_body body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-l>} {<s>} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'not same file'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'copy is not symlink'>)}) ] ) ] ) ) (C {<atf_test_case>} {<symbolic_link_absolute>}) (command.ShFunction name: symbolic_link_absolute_body body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-l>} {<sa>} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'not same file'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'copy is not symlink'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:copyf_path) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {<copyf>}) ) } spids: [1657] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:testf_path) op: assign_op.Equal rhs: { (DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>} {<-P>})) <'/testf'> ) } spids: [1665] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$copyf_path'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$testf_path'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<atf_fail>} { (DQ <'unexpected symlink contents (\''> ($ Id.VSub_DollarName '$copyf_path') <'\' != \''> ($ Id.VSub_DollarName '$testf_path') <'\')'> ) } ) ] spids: [1676 1694] ) ] ) ] ) ) (C {<atf_test_case>} {<symbolic_link_relative>}) (command.ShFunction name: symbolic_link_relative_body body: (BraceGroup children: [ (command.Simple words: [{<printf>} {(SQ <'test\\n123\\r456\\r\\n789\\0z'>)}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<testf>})] do_fork: T ) (C {<atf_check>} {<install>} {<-l>} {<sr>} {<testf>} {<copyf>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<testf>} {<-ef>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'not same file'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {<copyf>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'copy is not symlink'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:copyf_path) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {<copyf>}) ) } spids: [1783] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:testf_path) op: assign_op.Equal rhs: {(DQ <testf>)} spids: [1791] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$copyf_path'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$testf_path'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<atf_fail>} { (DQ <'unexpected symlink contents (\''> ($ Id.VSub_DollarName '$copyf_path') <'\' != \''> ($ Id.VSub_DollarName '$testf_path') <'\')'> ) } ) ] spids: [1797 1815] ) ] ) ] ) ) (C {<atf_test_case>} {<symbolic_link_relative_absolute_source_and_dest1>}) (command.ShFunction name: symbolic_link_relative_absolute_source_and_dest1_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} {(DQ <'Verify -l rs with absolute paths (.../copyf -> .../a/b/c/testf)'>)} ) ] ) ) (command.ShFunction name: symbolic_link_relative_absolute_source_and_dest1_body body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path) op: assign_op.Equal rhs: {<'a/b/c/testf'>} spids: [1864] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path_prefixed) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD') <'/'> ($ Id.VSub_DollarName '$src_path')} spids: [1868] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dest_path) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD') <'/copyf'>} spids: [1874] ) ] ) (C {<atf_check>} {<mkdir>} {<-p>} {<'a/b/c'>}) (C {<atf_check>} {<touch>} {($ Id.VSub_DollarName '$src_path')}) (C {<atf_check>} {<install>} {<-l>} {<sr>} {($ Id.VSub_DollarName '$src_path_prefixed')} {($ Id.VSub_DollarName '$dest_path')} ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$src_path_prefixed')} {<-ef>} {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'not same file'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'copy is not symlink'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dest_path_relative) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {($ Id.VSub_DollarName '$dest_path')}) ) } spids: [1945] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path_relative) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$src_path'))} spids: [1953] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$src_path_relative'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$dest_path_relative'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<atf_fail>} { (DQ <'unexpected symlink contents (\''> ($ Id.VSub_DollarName '$src_path_relative') <'\' != \''> ($ Id.VSub_DollarName '$dest_path_relative') <'\')'> ) } ) ] spids: [1959 1977] ) ] ) ] ) ) (C {<atf_test_case>} {<symbolic_link_relative_absolute_source_and_dest1_double_slash>}) (command.ShFunction name: symbolic_link_relative_absolute_source_and_dest1_double_slash_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} { (DQ < 'Verify -l rs with absolute paths (.../copyf -> .../a/b/c/testf), using double-slashes' > ) } ) ] ) ) (command.ShFunction name: symbolic_link_relative_absolute_source_and_dest1_double_slash_body body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path) op: assign_op.Equal rhs: {<'a//b//c//testf'>} spids: [2026] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path_prefixed) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD') <'/'> ($ Id.VSub_DollarName '$src_path')} spids: [2030] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dest_path) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD') <'/copyf'>} spids: [2036] ) ] ) (C {<atf_check>} {<mkdir>} {<-p>} {<'a/b/c'>}) (C {<atf_check>} {<touch>} {($ Id.VSub_DollarName '$src_path')}) (C {<atf_check>} {<install>} {<-l>} {<sr>} {($ Id.VSub_DollarName '$src_path_prefixed')} {($ Id.VSub_DollarName '$dest_path')} ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$src_path_prefixed')} {<-ef>} {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'not same file'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'copy is not symlink'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dest_path_relative) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {($ Id.VSub_DollarName '$dest_path')}) ) } spids: [2107] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path_relative) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_DollarName '$src_path')}) (C {<sed>} {<-e>} {(SQ <'s,//,/,g'>)}) ] negated: F ) ) ) } spids: [2115] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$src_path_relative'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$dest_path_relative'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<atf_fail>} { (DQ <'unexpected symlink contents (\''> ($ Id.VSub_DollarName '$src_path_relative') <'\' != \''> ($ Id.VSub_DollarName '$dest_path_relative') <'\')'> ) } ) ] spids: [2135 2153] ) ] ) ] ) ) (C {<atf_test_case>} {<symbolic_link_relative_absolute_source_and_dest2>}) (command.ShFunction name: symbolic_link_relative_absolute_source_and_dest2_head body: (BraceGroup children: [ (C {<atf_set>} {(DQ <descr>)} {(DQ <'Verify -l rs with absolute paths (.../a/b/c/copyf -> .../testf)'>)} ) ] ) ) (command.ShFunction name: symbolic_link_relative_absolute_source_and_dest2_body body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path) op: assign_op.Equal rhs: {<testf>} spids: [2202] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path_prefixed) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD') <'/'> ($ Id.VSub_DollarName '$src_path')} spids: [2206] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dest_path) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD') <'/a/b/c/copyf'>} spids: [2212] ) ] ) (C {<atf_check>} {<mkdir>} {<-p>} {<'a/b/c'>}) (C {<atf_check>} {<touch>} {($ Id.VSub_DollarName '$src_path')}) (C {<atf_check>} {<install>} {<-l>} {<sr>} {($ Id.VSub_DollarName '$src_path_prefixed')} {($ Id.VSub_DollarName '$dest_path')} ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$src_path_prefixed')} {<-ef>} {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'not same file'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$dest_path')} {<Id.Lit_RBracket ']'>} ) (C {<atf_fail>} {(DQ <'copy is not symlink'>)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dest_path_relative) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {($ Id.VSub_DollarName '$dest_path')}) ) } spids: [2283] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:src_path_relative) op: assign_op.Equal rhs: {(DQ <'../../../'> ($ Id.VSub_DollarName '$src_path'))} spids: [2291] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$src_path_relative'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$dest_path_relative'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<atf_fail>} { (DQ <'unexpected symlink contents (\''> ($ Id.VSub_DollarName '$src_path_relative') <'\' != \''> ($ Id.VSub_DollarName '$dest_path_relative') <'\')'> ) } ) ] spids: [2298 2316] ) ] ) ] ) ) (C {<atf_test_case>} {<mkdir_simple>}) (command.ShFunction name: mkdir_simple_body body: (BraceGroup children: [ (C {<atf_check>} {<install>} {<-d>} {<'dir1/dir2'>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-d>} {<dir1>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'dir1 missing'>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-d>} {<'dir1/dir2'>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'dir2 missing'>)}) ] ) (C {<atf_check>} {<install>} {<-d>} {<'dir1/dir2/dir3'>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-d>} {<'dir1/dir2/dir3'>} {<Id.Lit_RBracket ']'>}) (C {<atf_fail>} {(DQ <'dir3 missing'>)}) ] ) (C {<atf_check>} {<install>} {<-d>} {<dir1>}) (C {<atf_check>} {<install>} {<-d>} {<'dir1/dir2/dir3'>}) ] ) ) (command.ShFunction name: atf_init_test_cases body: (BraceGroup children: [ (C {<atf_add_test_case>} {<copy_to_nonexistent>}) (C {<atf_add_test_case>} {<copy_to_nonexistent_safe>}) (C {<atf_add_test_case>} {<copy_to_nonexistent_comparing>}) (C {<atf_add_test_case>} {<copy_to_nonexistent_safe_comparing>}) (C {<atf_add_test_case>} {<copy_to_nonexistent_backup>}) (C {<atf_add_test_case>} {<copy_to_nonexistent_backup_safe>}) (C {<atf_add_test_case>} {<copy_to_nonexistent_preserving>}) (C {<atf_add_test_case>} {<copy_self>}) (C {<atf_add_test_case>} {<copy_self_safe>}) (C {<atf_add_test_case>} {<copy_self_comparing>}) (C {<atf_add_test_case>} {<copy_self_safe_comparing>}) (C {<atf_add_test_case>} {<overwrite>}) (C {<atf_add_test_case>} {<overwrite_safe>}) (C {<atf_add_test_case>} {<overwrite_comparing>}) (C {<atf_add_test_case>} {<overwrite_safe_comparing>}) (C {<atf_add_test_case>} {<overwrite_eq>}) (C {<atf_add_test_case>} {<overwrite_eq_safe>}) (C {<atf_add_test_case>} {<overwrite_eq_comparing>}) (C {<atf_add_test_case>} {<overwrite_eq_safe_comparing>}) (C {<atf_add_test_case>} {<overwrite_backup>}) (C {<atf_add_test_case>} {<overwrite_backup_safe>}) (C {<atf_add_test_case>} {<overwrite_backup_comparing>}) (C {<atf_add_test_case>} {<overwrite_backup_safe_comparing>}) (C {<atf_add_test_case>} {<strip_changing>}) (C {<atf_add_test_case>} {<strip_changing_comparing>}) (C {<atf_add_test_case>} {<strip_changing_overwrite>}) (C {<atf_add_test_case>} {<strip_changing_overwrite_comparing>}) (C {<atf_add_test_case>} {<strip_changing_overwrite_eq>}) (C {<atf_add_test_case>} {<strip_changing_overwrite_eq_comparing>}) (C {<atf_add_test_case>} {<strip_noop>}) (C {<atf_add_test_case>} {<hard_link>}) (C {<atf_add_test_case>} {<symbolic_link>}) (C {<atf_add_test_case>} {<symbolic_link_absolute>}) (C {<atf_add_test_case>} {<symbolic_link_relative>}) (C {<atf_add_test_case>} {<symbolic_link_relative_absolute_source_and_dest1>}) (C {<atf_add_test_case>} {<symbolic_link_relative_absolute_source_and_dest1_double_slash>}) (C {<atf_add_test_case>} {<symbolic_link_relative_absolute_source_and_dest2>}) (C {<atf_add_test_case>} {<mkdir_simple>}) ] ) ) ] )