#!/bin/bash proc add_dependency_override { var name = $1 var path = $2 if ! cat pubspec.yaml | grep "dependency_overrides:" { echo "dependency_overrides:" >> pubspec.yaml } var pubspec = $[cat pubspec.yaml | grep -v "$name: .path: ] echo $pubspec > pubspec.yaml if [[ -n "$path" ]] { echo " $name: {path: $path}" >> pubspec.yaml } } proc checkout_dependency_override_from_github { var dependency_name = $1 var org_project = $2 var branch = $3 var path = $(4:-/) var url = "https://github.com/$org_project" echo "** Checking out $dependency_name override from $url$path#$branch" : $(TMPDIR:="/tmp") var dep_dir = "$TMPDIR/dependency_overrides/$dependency_name" [[ -d `dirname $dep_dir` ]] || mkdir $[dirname $dep_dir] if [[ -d $dep_dir ]] { # Check there's no local modifications before removing existing directory. shell { cd $dep_dir if git status -s | grep . { echo "Found local modifications in $dep_dir: aborting" exit 1 } } rm -fR $dep_dir } if [[ "$path" == "/" ]] { # Checkout only the branch, with no history: git clone --depth 1 --branch $branch $url $dep_dir } else { shell { mkdir $dep_dir cd $dep_dir # Sparse-checkout only the path + branch, with no history: git init git remote add origin $url git config core.sparsecheckout true echo $path >> .git/info/sparse-checkout git pull --depth=1 origin $branch } } add_dependency_override $dependency_name $dep_dir$path } (CommandList children: [ (FuncDef name: add_dependency_override body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:name) op: Equal rhs: {($ VSub_Number "$1")} spids: [15] ) ] spids: [13] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:path) op: Equal rhs: {($ VSub_Number "$2")} spids: [21] ) ] spids: [19] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(cat)} {(pubspec.yaml)}) (C {(grep)} {(DQ ("dependency_overrides:"))}) ] negated: True ) terminator: ) ] action: [ (SimpleCommand words: [{(echo)} {(DQ ("dependency_overrides:"))}] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {(pubspec.yaml)} spids: [52] ) ] ) ] spids: [-1 43] ) ] spids: [-1 57] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:pubspec) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(cat)} {(pubspec.yaml)}) (C {(grep)} {(-v)} {(DQ ($ VSub_Name "$name") (": .path: "))}) ] negated: False ) ] ) left_token: spids: [63 78] ) } spids: [62] ) ] spids: [60] ) (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Name "$pubspec"))}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(pubspec.yaml)} spids:[87])] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_n child:{(DQ ($ VSub_Name "$path"))}) ) terminator: ) ] action: [ (SimpleCommand words: [ {(echo)} {(DQ (" ") ($ VSub_Name "$name") (": {path: ") ($ VSub_Name "$path") ("}"))} ] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {(pubspec.yaml)} spids: [118] ) ] ) ] spids: [-1 105] ) ] spids: [-1 123] ) ] spids: [10] ) spids: [4 9] ) (FuncDef name: checkout_dependency_override_from_github body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:dependency_name) op: Equal rhs: {($ VSub_Number "$1")} spids: [139] ) ] spids: [137] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:org_project) op: Equal rhs: {($ VSub_Number "$2")} spids: [145] ) ] spids: [143] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:branch) op: Equal rhs: {($ VSub_Number "$3")} spids: [151] ) ] spids: [149] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:path) op: Equal rhs: { (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(Lit_Slash /)}) spids: [158 162] ) } spids: [157] ) ] spids: [155] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:url) op: Equal rhs: {(https) (Lit_Other ":") (//github.com/) ($ VSub_Name "$org_project")} spids: [168] ) ] spids: [166] ) (C {(echo)} { (DQ ("** Checking out ") ($ VSub_Name "$dependency_name") (" override from ") ($ VSub_Name "$url") ($ VSub_Name "$path") ("#") ($ VSub_Name "$branch") ) } ) (C {(Lit_Other ":")} { (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonEquals arg_word:{(DQ (/tmp))}) spids: [192 198] ) } ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:dep_dir) op: Equal rhs: {($ VSub_Name "$TMPDIR") (/dependency_overrides/) ($ VSub_Name "$dependency_name") } spids: [203] ) ] spids: [201] ) (AndOr children: [ (DBracket expr: (BoolUnary op_id: BoolUnary_d child: { (CommandSubPart command_list: (CommandList children: [(C {(dirname)} {($ VSub_Name "$dep_dir")})] ) left_token: spids: [214 218] ) } ) ) (C {(mkdir)} { (CommandSubPart command_list: (CommandList children: [(C {(dirname)} {($ VSub_Name "$dep_dir")})] ) left_token: spids: [226 230] ) } ) ] op_id: Op_DPipe ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_d child:{($ VSub_Name "$dep_dir")}) ) terminator: ) ] action: [ (Subshell child: (CommandList children: [ (C {(cd)} {($ VSub_Name "$dep_dir")}) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(git)} {(status)} {(-s)}) (C {(grep)} {(.)})] negated: False ) terminator: ) ] action: [ (C {(echo)} { (DQ ("Found local modifications in ") ($ VSub_Name "$dep_dir") (": aborting") ) } ) (C {(exit)} {(1)}) ] spids: [-1 276] ) ] spids: [-1 293] ) ] ) spids: [252 296] ) (C {(rm)} {(-fR)} {($ VSub_Name "$dep_dir")}) ] spids: [-1 245] ) ] spids: [-1 306] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_Name "$path"))} right: {(DQ (/))} ) ) terminator: ) ] action: [ (C {(git)} {(clone)} {(--depth)} {(1)} {(--branch)} {($ VSub_Name "$branch")} {($ VSub_Name "$url")} {($ VSub_Name "$dep_dir")} ) ] spids: [-1 327] ) ] else_action: [ (Subshell child: (CommandList children: [ (C {(mkdir)} {($ VSub_Name "$dep_dir")}) (C {(cd)} {($ VSub_Name "$dep_dir")}) (C {(git)} {(init)}) (C {(git)} {(remote)} {(add)} {(origin)} {($ VSub_Name "$url")}) (C {(git)} {(config)} {(core.sparsecheckout)} {(true)}) (SimpleCommand words: [{(echo)} {($ VSub_Name "$path")}] redirects: [ (Redir op_id: Redir_DGreat fd: -1 arg_word: {(.git/info/sparse-checkout)} spids: [401] ) ] ) (C {(git)} {(pull)} {(--depth) (Lit_Other "=") (1)} {(origin)} {($ VSub_Name "$branch")} ) ] ) spids: [354 419] ) ] spids: [351 422] ) (C {(add_dependency_override)} {($ VSub_Name "$dependency_name")} {($ VSub_Name "$dep_dir") ($ VSub_Name "$path")} ) ] spids: [134] ) spids: [128 133] ) ] )