(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'git patch-id'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <setup>)} { (SQ <'\n'> <'\tas="a a a a a a a a" && # eight a\n'> <'\ttest_write_lines $as >foo &&\n'> <'\ttest_write_lines $as >bar &&\n'> <'\tgit add foo bar &&\n'> <'\tgit commit -a -m initial &&\n'> <'\ttest_write_lines $as b >foo &&\n'> <'\ttest_write_lines $as b >bar &&\n'> <'\tgit commit -a -m first &&\n'> <'\tgit checkout -b same master &&\n'> <'\tgit commit --amend -m same-msg &&\n'> <'\tgit checkout -b notsame master &&\n'> <'\techo c >foo &&\n'> <'\techo c >bar &&\n'> <'\tgit commit --amend -a -m notsame-msg &&\n'> <'\ttest_write_lines bar foo >bar-then-foo &&\n'> <'\ttest_write_lines foo bar >foo-then-bar\n'> ) } ) (C {(test_expect_success)} {(SQ <'patch-id output is well-formed'>)} { (SQ <'\n'> <'\tgit log -p -1 | git patch-id >output &&\n'> <'\tgrep "^[a-f0-9]\\{40\\} $(git rev-parse HEAD)$" output\n'> ) } ) (FuncDef name: calc_patch_id body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:patch_name) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [66] ) ] spids: [66] ) (C {(shift)}) (AndOr children: [ (Pipeline children: [ (C {(git)} {(patch-id)} {(DQ ($ VSub_At '$@'))}) (SimpleCommand words: [{(sed)} {(DQ ('s/ .*//'))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(patch-id_) (DQ ($ VSub_Name '$patch_name'))} spids: [92] ) ] ) ] negated: False ) (C {(test_line_count)} {(-gt)} {(0)} {(patch-id_) (DQ ($ VSub_Name '$patch_name'))}) ] op_id: Op_DAmp ) ] spids: [63] ) spids: [58 62] ) (FuncDef name: get_top_diff body: (BraceGroup children: [ (C {(git)} {(log)} {(-p)} {(-1)} {(DQ ($ VSub_At '$@'))} {(-O)} {(bar-then-foo)} {(--)}) ] spids: [120] ) spids: [115 119] ) (FuncDef name: get_patch_id body: (BraceGroup children: [ (Pipeline children: [ (C {(get_top_diff)} {(DQ ($ VSub_Number '$1'))}) (C {(calc_patch_id)} {(DQ ($ VSub_At '$@'))}) ] negated: False ) ] spids: [149] ) spids: [144 148] ) (C {(test_expect_success)} {(SQ <'patch-id detects equality'>)} { (SQ <'\n'> <'\tget_patch_id master &&\n'> <'\tget_patch_id same &&\n'> <'\ttest_cmp patch-id_master patch-id_same\n'> ) } ) (C {(test_expect_success)} {(SQ <'patch-id detects inequality'>)} { (SQ <'\n'> <'\tget_patch_id master &&\n'> <'\tget_patch_id notsame &&\n'> <'\t! test_cmp patch-id_master patch-id_notsame\n'> ) } ) (C {(test_expect_success)} {(SQ <'patch-id supports git-format-patch output'>)} { (SQ <'\n'> <'\tget_patch_id master &&\n'> <'\tgit checkout same &&\n'> <'\tgit format-patch -1 --stdout | calc_patch_id same &&\n'> <'\ttest_cmp patch-id_master patch-id_same &&\n'> <'\tset $(git format-patch -1 --stdout | git patch-id) &&\n'> <'\ttest "$2" = $(git rev-parse HEAD)\n'> ) } ) (C {(test_expect_success)} {(SQ <'whitespace is irrelevant in footer'>)} { (SQ <'\n'> <'\tget_patch_id master &&\n'> <'\tgit checkout same &&\n'> <'\tgit format-patch -1 --stdout | sed "s/ \\$//" | calc_patch_id same &&\n'> <'\ttest_cmp patch-id_master patch-id_same\n'> ) } ) (FuncDef name: cmp_patch_id body: (BraceGroup children: [ (If arms: [ (if_arm cond: [(C {(test)} {(DQ ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (relevant))})] action: [ (Pipeline children: [ (C {(test_cmp)} {(patch-id_) (DQ ($ VSub_Number '$2'))} {(patch-id_) (DQ ($ VSub_Number '$3'))} ) ] negated: True ) ] spids: [16777215 253] ) ] else_action: [ (C {(test_cmp)} {(patch-id_) (DQ ($ VSub_Number '$2'))} {(patch-id_) (DQ ($ VSub_Number '$3'))} ) ] spids: [271 287] ) ] spids: [234] ) spids: [229 233] ) (FuncDef name: test_patch_id_file_order body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:relevant) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [300] ) ] spids: [300] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:name) op: Equal rhs: {(DQ (order-) (${ VSub_Number 1) (-) ($ VSub_Name '$relevant'))} spids: [309] ) ] spids: [309] ) (C {(shift)}) (AndOr children: [ (Pipeline children: [ (C {(get_top_diff)} {(DQ (master))}) (C {(calc_patch_id)} {(DQ ($ VSub_Name '$name'))} {(DQ ($ VSub_At '$@'))}) ] negated: False ) (AndOr children: [ (C {(git)} {(checkout)} {(same)}) (AndOr children: [ (Pipeline children: [ (C {(git)} {(format-patch)} {(-1)} {(--stdout)} {(-O)} {(foo-then-bar)}) (C {(calc_patch_id)} {(DQ (ordered-) ($ VSub_Name '$name'))} {(DQ ($ VSub_At '$@'))} ) ] negated: False ) (C {(cmp_patch_id)} {($ VSub_Name '$relevant')} {(DQ ($ VSub_Name '$name'))} {(DQ (ordered-) ($ VSub_Name '$name'))} ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [297] ) spids: [292 296] ) (FuncDef name: test_patch_id body: (BraceGroup children: [(C {(test_patch_id_file_order)} {(DQ ($ VSub_At '$@'))})] spids: [410] ) spids: [405 409] ) (C {(test_expect_success)} {(SQ <'file order is irrelevant with --stable'>)} {(SQ <'\n'> <'\ttest_patch_id_file_order irrelevant --stable --stable\n'>)} ) (C {(test_expect_success)} {(SQ <'file order is relevant with --unstable'>)} {(SQ <'\n'> <'\ttest_patch_id_file_order relevant --unstable --unstable\n'>)} ) (C {(test_expect_success)} {(SQ <'default is unstable'>)} {(SQ <'\n'> <'\ttest_patch_id relevant default\n'>)} ) (C {(test_expect_success)} {(SQ <'patchid.stable = true is stable'>)} { (SQ <'\n'> <'\ttest_config patchid.stable true &&\n'> <'\ttest_patch_id irrelevant patchid.stable=true\n'> ) } ) (C {(test_expect_success)} {(SQ <'patchid.stable = false is unstable'>)} { (SQ <'\n'> <'\ttest_config patchid.stable false &&\n'> <'\ttest_patch_id relevant patchid.stable=false\n'> ) } ) (C {(test_expect_success)} {(SQ <'--unstable overrides patchid.stable = true'>)} { (SQ <'\n'> <'\ttest_config patchid.stable true &&\n'> <'\ttest_patch_id relevant patchid.stable=true--unstable --unstable\n'> ) } ) (C {(test_expect_success)} {(SQ <'--stable overrides patchid.stable = false'>)} { (SQ <'\n'> <'\ttest_config patchid.stable false &&\n'> <'\ttest_patch_id irrelevant patchid.stable=false--stable --stable\n'> ) } ) (C {(test_expect_success)} {(SQ <'patch-id supports git-format-patch MIME output'>)} { (SQ <'\n'> <'\tget_patch_id master &&\n'> <'\tgit checkout same &&\n'> <'\tgit format-patch -1 --attach --stdout | calc_patch_id same &&\n'> <'\ttest_cmp patch-id_master patch-id_same\n'> ) } ) (C {(test_expect_success)} {(SQ <'patch-id respects config from subdir'>)} { (SQ <'\n'> <'\ttest_config patchid.stable true &&\n'> <'\tmkdir subdir &&\n'> <'\n'> <'\t# copy these because test_patch_id() looks for them in\n'> <'\t# the current directory\n'> <'\tcp bar-then-foo foo-then-bar subdir &&\n'> <'\n'> <'\t(\n'> <'\t\tcd subdir &&\n'> <'\t\ttest_patch_id irrelevant patchid.stable=true\n'> <'\t)\n'> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:16777215 arg_word:{(nonl)} spids:[555]) (HereDoc op_id: Redir_DLess fd: 16777215 body: {('diff --git i/a w/a\n') ('index e69de29..2e65efe 100644\n') ('--- i/a\n') ('+++ w/a\n') ('@@ -0,0 +1 @@\n') ('+a\n') ('\\ No newline at end of file\n') ('diff --git i/b w/b\n') ('index e69de29..6178079 100644\n') ('--- i/b\n') ('+++ w/b\n') ('@@ -0,0 +1 @@\n') ('+b\n') } do_expansion: False here_end: EOF was_filled: True spids: [558] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:16777215 arg_word:{(withnl)} spids:[565]) (HereDoc op_id: Redir_DLess fd: 16777215 body: {('diff --git i/a w/a\n') ('index e69de29..7898192 100644\n') ('--- i/a\n') ('+++ w/a\n') ('@@ -0,0 +1 @@\n') ('+a\n') ('diff --git i/b w/b\n') ('index e69de29..6178079 100644\n') ('--- i/b\n') ('+++ w/b\n') ('@@ -0,0 +1 @@\n') ('+b\n') } do_expansion: False here_end: EOF was_filled: True spids: [568] ) ] ) (C {(test_expect_success)} {(SQ <'patch-id handles no-nl-at-eof markers'>)} { (SQ <'\n'> <'\tcat nonl | calc_patch_id nonl &&\n'> <'\tcat withnl | calc_patch_id withnl &&\n'> <'\ttest_cmp patch-id_nonl patch-id_withnl\n'> ) } ) (C {(test_done)}) ] )