| #!/bin/bash | |
| function add_dependency_override() { | |
| local name=$1 | |
| local path=$2 | |
| if ! cat pubspec.yaml | grep "dependency_overrides:" ; then | |
| echo "dependency_overrides:" >> pubspec.yaml | |
| fi | |
| local pubspec=`cat pubspec.yaml | grep -v "$name: .path: "` | |
| echo "$pubspec" > pubspec.yaml | |
| if [[ -n "$path" ]]; then | |
| echo " $name: {path: $path}" >> pubspec.yaml | |
| fi | |
| } | |
| function checkout_dependency_override_from_github() { | |
| local dependency_name=$1 | |
| local org_project=$2 | |
| local branch=$3 | |
| local path=${4:-/} | |
| local url=https://github.com/$org_project | |
| echo "** Checking out $dependency_name override from $url$path#$branch" | |
| : ${TMPDIR:="/tmp"} | |
| local dep_dir=$TMPDIR/dependency_overrides/$dependency_name | |
| [[ -d `dirname $dep_dir` ]] || mkdir `dirname $dep_dir` | |
| if [[ -d $dep_dir ]]; then | |
| # Check there's no local modifications before removing existing directory. | |
| ( | |
| cd $dep_dir | |
| if git status -s | grep . ; then | |
| echo "Found local modifications in $dep_dir: aborting" | |
| exit 1 | |
| fi | |
| ) | |
| rm -fR $dep_dir | |
| fi | |
| if [[ "$path" == "/" ]]; then | |
| # Checkout only the branch, with no history: | |
| git clone --depth 1 --branch $branch $url $dep_dir | |
| else | |
| ( | |
| 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 | |
| ) | |
| fi | |
| add_dependency_override $dependency_name $dep_dir$path | |
| } |