(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git commit --reset-author">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: author_header body: (BraceGroup children: [ (Pipeline children: [ (C {(git)} {(cat-file)} {(commit)} {(DQ ($ VSub_Number "$1"))}) (C {(sed)} {(-n)} {(-e)} {(SQ <"/^$/q">)} {(-e)} {(SQ <"/^author /p">)}) ] negated: False ) ] spids: [29] ) spids: [24 28] ) (FuncDef name: message_body body: (BraceGroup children: [ (Pipeline children: [ (C {(git)} {(cat-file)} {(commit)} {(DQ ($ VSub_Number "$1"))}) (C {(sed)} {(-e)} {(SQ <"1,/^$/d">)}) ] negated: False ) ] spids: [69] ) spids: [64 68] ) (C {(test_expect_success)} {(SQ <"-C option copies authorship and message">)} { (SQ <"\n"> <"\techo \"Initial\" >foo &&\n"> <"\tgit add foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m \"Initial Commit\" --author Frigate\\ \\<flying@over.world\\> &&\n"> <"\tgit tag Initial &&\n"> <"\techo \"Test 1\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -a -C Initial &&\n"> <"\tauthor_header Initial >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\n"> <"\tmessage_body Initial >expect &&\n"> <"\tmessage_body HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"-C option copies only the message with --reset-author">)} { (SQ <"\n"> <"\techo \"Test 2\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -a -C Initial --reset-author &&\n"> <"\techo \"author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE\" >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\n"> <"\tmessage_body Initial >expect &&\n"> <"\tmessage_body HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"-c option copies authorship and message">)} { (SQ <"\n"> <"\techo \"Test 3\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tEDITOR=: VISUAL=: git commit -a -c Initial &&\n"> <"\tauthor_header Initial >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"-c option copies only the message with --reset-author">)} { (SQ <"\n"> <"\techo \"Test 4\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tEDITOR=: VISUAL=: git commit -a -c Initial --reset-author &&\n"> <"\techo \"author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE\" >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\n"> <"\tmessage_body Initial >expect &&\n"> <"\tmessage_body HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--amend option copies authorship">)} { (SQ <"\n"> <"\tgit checkout Initial &&\n"> <"\techo \"Test 5\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -a --amend -m \"amend test\" &&\n"> <"\tauthor_header Initial >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\n"> <"\techo \"amend test\" >expect &&\n"> <"\tmessage_body HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (FuncDef name: sha1_file body: (BraceGroup children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Star "$*"))}) (C {(sed)} {(DQ ("s#..#.git/objects/&/#"))}) ] negated: False ) ] spids: [207] ) spids: [203 206] ) (FuncDef name: remove_object body: (BraceGroup children: [ (C {(rm)} {(-f)} { (CommandSubPart command_list: (CommandList children:[(C {(sha1_file)} {(DQ ($ VSub_Star "$*"))})]) left_token: <Left_CommandSub "$("> spids: [237 243] ) } ) ] spids: [230] ) spids: [226 229] ) (C {(test_expect_success)} {(SQ <"--amend option with empty author">)} { (SQ <"\n"> <"\tgit cat-file commit Initial >tmp &&\n"> <"\tsed \"s/author [^<]* </author </\" tmp >empty-author &&\n"> <"\tsha=$(git hash-object -t commit -w empty-author) &&\n"> <"\ttest_when_finished \"remove_object $sha\" &&\n"> <"\tgit checkout $sha &&\n"> <"\ttest_when_finished \"git checkout Initial\" &&\n"> <"\techo \"Empty author test\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\ttest_must_fail git commit -a -m \"empty author\" --amend 2>err &&\n"> <"\tgrep \"empty ident\" err\n"> ) } ) (C {(test_expect_success)} {(SQ <"--amend option with missing author">)} { (SQ <"\n"> <"\tgit cat-file commit Initial >tmp &&\n"> <"\tsed \"s/author [^<]* </author </\" tmp >malformed &&\n"> <"\tsha=$(git hash-object -t commit -w malformed) &&\n"> <"\ttest_when_finished \"remove_object $sha\" &&\n"> <"\tgit checkout $sha &&\n"> <"\ttest_when_finished \"git checkout Initial\" &&\n"> <"\techo \"Missing author test\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\ttest_must_fail git commit -a -m \"malformed author\" --amend 2>err &&\n"> <"\tgrep \"empty ident\" err\n"> ) } ) (C {(test_expect_success)} {(SQ <"--reset-author makes the commit ours even with --amend option">)} { (SQ <"\n"> <"\tgit checkout Initial &&\n"> <"\techo \"Test 6\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -a --reset-author -m \"Changed again\" --amend &&\n"> <"\techo \"author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE\" >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\n"> <"\techo \"Changed again\" >expect &&\n"> <"\tmessage_body HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--reset-author and --author are mutually exclusive">)} { (SQ <"\n"> <"\tgit checkout Initial &&\n"> <"\techo \"Test 7\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\ttest_must_fail git commit -a --reset-author --author=\"Xyzzy <frotz@nitfol.xz>\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"--reset-author should be rejected without -c/-C/--amend">)} { (SQ <"\n"> <"\tgit checkout Initial &&\n"> <"\techo \"Test 7\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\ttest_must_fail git commit -a --reset-author -m done\n"> ) } ) (C {(test_expect_success)} {(SQ <"commit respects CHERRY_PICK_HEAD and MERGE_MSG">)} { (SQ <"\n"> <"\techo \"cherry-pick 1a\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -am \"cherry-pick 1\" --author=\"Cherry <cherry@pick.er>\" &&\n"> <"\tgit tag cherry-pick-head &&\n"> <"\tgit rev-parse cherry-pick-head >.git/CHERRY_PICK_HEAD &&\n"> <"\techo \"This is a MERGE_MSG\" >.git/MERGE_MSG &&\n"> <"\techo \"cherry-pick 1b\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -a &&\n"> <"\tauthor_header cherry-pick-head >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\n"> <"\techo \"This is a MERGE_MSG\" >expect &&\n"> <"\tmessage_body HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--reset-author with CHERRY_PICK_HEAD">)} { (SQ <"\n"> <"\tgit rev-parse cherry-pick-head >.git/CHERRY_PICK_HEAD &&\n"> <"\techo \"cherry-pick 2\" >>foo &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -am \"cherry-pick 2\" --reset-author &&\n"> <"\techo \"author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE\" >expect &&\n"> <"\tauthor_header HEAD >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_done)}) ] )