(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:USAGE) op: Equal rhs: {(DQ ("[-a] [-r] [-m] [-t] [-n] [-b <newname>] <name>"))} spids: [4] ) ] spids: [4] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LONG_USAGE) op: Equal rhs: { (DQ ("git-resurrect attempts to find traces of a branch tip\n") ("called <name>, and tries to resurrect it. Currently, the reflog is\n") ("searched for checkout messages, and with -r also merge messages. With\n") ("-m and -t, the history of all refs is scanned for Merge <name> into\n") ("other/Merge <other> into <name> (respectively) commit subjects, which\n") ("is rather slow but allows you to resurrect other people's topic\n") (branches.) ) } spids: [9] ) ] spids: [9] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:OPTIONS_KEEPDASHDASH) op:Equal rhs:{(SQ )} spids:[21])] spids: [21] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:OPTIONS_STUCKLONG) op:Equal rhs:{(SQ )} spids:[23])] spids: [23] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:OPTIONS_SPEC) op: Equal rhs: { (DQ ("git resurrect ") ($ VSub_Name "$USAGE") ("\n") ("--\n") ("b,branch= save branch as <newname> instead of <name>\n") ("a,all same as -l -r -m -t\n") ("k,keep-going full rev-list scan (instead of first match)\n") ("l,reflog scan reflog for checkouts (enabled by default)\n") ("r,reflog-merges scan for merges recorded in reflog\n") ("m,merges scan for merges into other branches (slow)\n") ("t,merge-targets scan for merges of other branches into <name>\n") ("n,dry-run don't recreate the branch") ) } spids: [25] ) ] spids: [25] ) (C {(.)} {(git-sh-setup)}) (FuncDef name: search_reflog body: (BraceGroup children: [ (SimpleCommand words: [ {(sed)} {(-ne)} {(SQ <"s~^\\([^ ]*\\) .*\\tcheckout: moving from ">) (DQ ($ VSub_Number "$1")) (SQ <" .*~\\1~p">) } ] redirects: [ (Redir op_id: Redir_Less fd: -1 arg_word: {(DQ ($ VSub_Name "$GIT_DIR")) (/logs/HEAD)} spids: [72] ) ] ) ] spids: [53] ) spids: [48 52] ) (FuncDef name: search_reflog_merges body: (BraceGroup children: [ (C {(git)} {(rev-parse)} { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [ {(sed)} {(-ne)} {(SQ <"s~^[^ ]* \\([^ ]*\\) .*\\tmerge ">) (DQ ($ VSub_Number "$1")) (SQ <":.*~\\1^2~p">) } ] redirects: [ (Redir op_id: Redir_Less fd: -1 arg_word: {(DQ ($ VSub_Name "$GIT_DIR")) (/logs/HEAD)} spids: [113] ) ] ) ] ) left_token: <Left_CommandSub "$("> spids: [94 121] ) } ) ] spids: [87] ) spids: [82 86] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_x40) op: Equal rhs: {(DQ ("[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]"))} spids: [126] ) ] spids: [126] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_x40) op: Equal rhs: { (DQ ($ VSub_Name "$_x40") ($ VSub_Name "$_x40") ($ VSub_Name "$_x40") ($ VSub_Name "$_x40") ($ VSub_Name "$_x40") ($ VSub_Name "$_x40") ($ VSub_Name "$_x40") ($ VSub_Name "$_x40") ) } spids: [131] ) ] spids: [131] ) (FuncDef name: search_merges body: (BraceGroup children: [ (Pipeline children: [ (C {(git)} {(rev-list)} {(--all)} {(--grep) (Lit_Other "=") (DQ ("Merge branch '") ($ VSub_Number "$1") ("'"))} {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (DQ ("%P %s"))} ) (C {(sed)} {(-ne)} { (DQ ("/^") ($ VSub_Name "$_x40") (" ") (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) ($ VSub_Name "$_x40") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (" Merge .*/ {s//") (EscapedLiteralPart token:<Lit_EscapedChar "\\1">) ("/p;") ($ VSub_Name "$early_exit") ("}") ) } ) ] negated: False ) ] spids: [149] ) spids: [144 148] ) (FuncDef name: search_merge_targets body: (BraceGroup children: [ (Pipeline children: [ (C {(git)} {(rev-list)} {(--all)} {(--grep) (Lit_Other "=") (DQ ("Merge branch '[^']*' into ") ($ VSub_Name "$branch") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ) } {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (DQ ("%H %s"))} {(--all)} ) (C {(sed)} {(-ne)} { (DQ ("/^") (EscapedLiteralPart token:<Lit_EscapedChar "\\(">) ($ VSub_Name "$_x40") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (" Merge .*/ {s//") (EscapedLiteralPart token:<Lit_EscapedChar "\\1">) ("/p;") ($ VSub_Name "$early_exit") ("} ") ) } ) ] negated: False ) ] spids: [205] ) spids: [200 204] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:dry_run) op:Equal rhs:{(SQ )} spids:[256])] spids: [256] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:early_exit) op:Equal rhs:{(q)} spids:[258])] spids: [258] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:scan_reflog) op:Equal rhs:{(t)} spids:[261])] spids: [261] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:scan_reflog_merges) op:Equal rhs:{(SQ )} spids:[264])] spids: [264] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:scan_merges) op:Equal rhs:{(SQ )} spids:[266])] spids: [266] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:scan_merge_targets) op:Equal rhs:{(SQ )} spids:[268])] spids: [268] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:new_name) op:Equal rhs:{(SQ )} spids:[270])] spids: [270] ) (While cond: [ (Sentence child: (C {(test)} {(DQ ($ VSub_Pound "$#"))} {(KW_Bang "!") (Lit_Other "=")} {(0)}) terminator: <Op_Semi ";"> ) ] body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Number "$1"))} arms: [ (case_arm pat_list: [{(-b)} {(--branch)}] action: [ (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:new_name) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [308] ) ] spids: [308] ) ] spids: [299 302 314 -1] ) (case_arm pat_list: [{(-n)} {(--dry-run)}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:dry_run) op:Equal rhs:{(t)} spids:[323])] spids: [323] ) ] spids: [317 320 327 -1] ) (case_arm pat_list: [{(--no-dry-run)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:dry_run) op: Equal rhs: {(SQ )} spids: [334] ) ] spids: [334] ) ] spids: [330 331 337 -1] ) (case_arm pat_list: [{(-k)} {(--keep-going)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:early_exit) op: Equal rhs: {(SQ )} spids: [346] ) ] spids: [346] ) ] spids: [340 343 349 -1] ) (case_arm pat_list: [{(--no-keep-going)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:early_exit) op: Equal rhs: {(q)} spids: [356] ) ] spids: [356] ) ] spids: [352 353 360 -1] ) (case_arm pat_list: [{(-m)} {(--merges)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_merges) op: Equal rhs: {(t)} spids: [369] ) ] spids: [369] ) ] spids: [363 366 373 -1] ) (case_arm pat_list: [{(--no-merges)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_merges) op: Equal rhs: {(SQ )} spids: [380] ) ] spids: [380] ) ] spids: [376 377 383 -1] ) (case_arm pat_list: [{(-l)} {(--reflog)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_reflog) op: Equal rhs: {(t)} spids: [392] ) ] spids: [392] ) ] spids: [386 389 396 -1] ) (case_arm pat_list: [{(--no-reflog)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_reflog) op: Equal rhs: {(SQ )} spids: [403] ) ] spids: [403] ) ] spids: [399 400 406 -1] ) (case_arm pat_list: [{(-r)} {(--reflog_merges)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_reflog_merges) op: Equal rhs: {(t)} spids: [415] ) ] spids: [415] ) ] spids: [409 412 419 -1] ) (case_arm pat_list: [{(--no-reflog_merges)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_reflog_merges) op: Equal rhs: {(SQ )} spids: [426] ) ] spids: [426] ) ] spids: [422 423 429 -1] ) (case_arm pat_list: [{(-t)} {(--merge-targets)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_merge_targets) op: Equal rhs: {(t)} spids: [438] ) ] spids: [438] ) ] spids: [432 435 442 -1] ) (case_arm pat_list: [{(--no-merge-targets)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_merge_targets) op: Equal rhs: {(SQ )} spids: [449] ) ] spids: [449] ) ] spids: [445 446 452 -1] ) (case_arm pat_list: [{(-a)} {(--all)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_reflog) op: Equal rhs: {(t)} spids: [461] ) ] spids: [461] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_reflog_merges) op: Equal rhs: {(t)} spids: [465] ) ] spids: [465] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_merges) op: Equal rhs: {(t)} spids: [469] ) ] spids: [469] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:scan_merge_targets) op: Equal rhs: {(t)} spids: [473] ) ] spids: [473] ) ] spids: [455 458 477 -1] ) (case_arm pat_list: [{(--)}] action: [(C {(shift)}) (ControlFlow token:<ControlFlow_Break break>)] spids: [480 481 490 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [(C {(usage)})] spids: [493 494 500 -1] ) ] spids: [290 296 503] ) (C {(shift)}) ] spids: [287 508] ) ) (AndOr children: [(C {(test)} {(DQ ($ VSub_Pound "$#"))} {(Lit_Other "=")} {(1)}) (C {(usage)})] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:all_strategies) op: Equal rhs: { (DQ ($ VSub_Name "$scan_reflog") ($ VSub_Name "$scan_reflog_merges") ($ VSub_Name "$scan_merges") ($ VSub_Name "$scan_merge_targets") ) } spids: [526] ) ] spids: [526] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(-z)} {(DQ ($ VSub_Name "$all_strategies"))}) terminator: <Op_Semi ";"> ) ] action: [(C {(die)} {(DQ ("must enable at least one of -lrmt"))})] spids: [-1 545] ) ] spids: [-1 554] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:branch) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [557] ) ] spids: [557] ) (AndOr children: [ (C {(test)} {(-z)} {(DQ ($ VSub_Name "$new_name"))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:new_name) op: Equal rhs: {(DQ ($ VSub_Name "$branch"))} spids: [572] ) ] spids: [572] ) ] op_id: Op_DAmp ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$scan_reflog"))}) terminator: <Op_Semi ";"> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(-r)} {(DQ ($ VSub_Name "$GIT_DIR")) (/logs/HEAD)}) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:candidates) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(search_reflog)} {($ VSub_Name "$branch")})] ) left_token: <Left_CommandSub "$("> spids: [611 615] ) ) } spids: [609] ) ] spids: [609] ) ] spids: [-1 606] ) ] else_action: [ (C {(die)} {(SQ <"reflog scanning requested, but">)} {(SQ <"$GIT_DIR/logs/HEAD not readable">)} ) ] spids: [619 635] ) ] spids: [-1 591] ) ] spids: [-1 637] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$scan_reflog_merges"))}) terminator: <Op_Semi ";"> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(-r)} {(DQ ($ VSub_Name "$GIT_DIR")) (/logs/HEAD)}) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:candidates) op: Equal rhs: { (DQ ($ VSub_Name "$candidates") (" ") (CommandSubPart command_list: (CommandList children: [(C {(search_reflog_merges)} {($ VSub_Name "$branch")})] ) left_token: <Left_CommandSub "$("> spids: [674 678] ) ) } spids: [670] ) ] spids: [670] ) ] spids: [-1 667] ) ] else_action: [ (C {(die)} {(SQ <"reflog scanning requested, but">)} {(SQ <"$GIT_DIR/logs/HEAD not readable">)} ) ] spids: [682 698] ) ] spids: [-1 652] ) ] spids: [-1 700] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$scan_merges"))}) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:candidates) op: Equal rhs: { (DQ ($ VSub_Name "$candidates") (" ") (CommandSubPart command_list: (CommandList children: [(C {(search_merges)} {($ VSub_Name "$branch")})] ) left_token: <Left_CommandSub "$("> spids: [722 726] ) ) } spids: [718] ) ] spids: [718] ) ] spids: [-1 715] ) ] spids: [-1 729] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$scan_merge_targets"))}) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:candidates) op: Equal rhs: { (DQ ($ VSub_Name "$candidates") (" ") (CommandSubPart command_list: (CommandList children: [(C {(search_merge_targets)} {($ VSub_Name "$branch")})] ) left_token: <Left_CommandSub "$("> spids: [751 755] ) ) } spids: [747] ) ] spids: [747] ) ] spids: [-1 744] ) ] spids: [-1 758] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:candidates) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(git)} {(rev-parse)} {($ VSub_Name "$candidates")}) (C {(sort)} {(-u)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [763 775] ) ) } spids: [761] ) ] spids: [761] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(-z)} {(DQ ($ VSub_Name "$candidates"))}) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:hint) op:Equal rhs:{(SQ )} spids:[793])] spids: [793] ) (AndOr children: [ (C {(test)} {(DQ (z) ($ VSub_Name "$all_strategies"))} {(KW_Bang "!") (Lit_Other "=")} {(DQ (ztttt))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:hint) op: Equal rhs: {(DQ (" (maybe try again with -a)"))} spids: [814] ) ] spids: [814] ) ] op_id: Op_DAmp ) (C {(die)} {(DQ ("no candidates for ") ($ VSub_Name "$branch") (" found") ($ VSub_Name "$hint"))} ) ] spids: [-1 790] ) ] spids: [-1 829] ) (C {(echo)} {(DQ ("** Candidates for ") ($ VSub_Name "$branch") (" **"))}) (Pipeline children: [ (ForEach iter_name: cmt iter_words: [{($ VSub_Name "$candidates")}] do_arg_iter: False body: (DoGroup children: [ (C {(git)} {(--no-pager)} {(log)} {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (DQ ("%ct:%h [%cr] %s"))} {(--abbrev-commit)} {(-1)} {($ VSub_Name "$cmt")} ) ] spids: [849 872] ) spids: [845 847] ) (C {(sort)} {(-n)}) (C {(cut)} {(-d) (Lit_Other ":")} {(-f2-)}) ] negated: False ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:newest) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(git)} {(rev-list)} {(-1)} {($ VSub_Name "$candidates")})] ) left_token: <Left_CommandSub "$("> spids: [893 901] ) ) } spids: [891] ) ] spids: [891] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(test)} {(KW_Bang "!")} {(-z)} {(DQ ($ VSub_Name "$dry_run"))}) terminator: <Op_Semi ";"> ) ] action: [ (C {(printf)} {(DQ ("** Most recent: "))}) (C {(git)} {(--no-pager)} {(log)} {(-1)} {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (DQ ("%h %s"))} {($ VSub_Name "$newest")} ) ] spids: [-1 917] ) (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [{(git)} {(rev-parse)} {(--verify)} {(--quiet)} {($ VSub_Name "$new_name")}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[959])] ) ] negated: True ) terminator: <Op_Semi ";"> ) ] action: [ (C {(printf)} {(DQ ("** Restoring ") ($ VSub_Name "$new_name") (" to "))}) (C {(git)} {(--no-pager)} {(log)} {(-1)} {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (DQ ("%h %s"))} {($ VSub_Name "$newest")} ) (C {(git)} {(branch)} {($ VSub_Name "$new_name")} {($ VSub_Name "$newest")}) ] spids: [945 963] ) ] else_action: [ (C {(printf)} {(DQ ("Most recent: "))}) (C {(git)} {(--no-pager)} {(log)} {(-1)} {(--pretty) (Lit_Other "=") (tformat) (Lit_Other ":") (DQ ("%h %s"))} {($ VSub_Name "$newest")} ) (C {(echo)} {(DQ ("** ") ($ VSub_Name "$new_name") (" already exists, doing nothing"))}) ] spids: [1002 1039] ) ] )