| #!/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 |
| } |