LoginSignup
2
2

More than 5 years have passed since last update.

rebarのdepsを更新するスクリプト

Last updated at Posted at 2015-03-02

rebarのdepsを更新するスクリプト

単純な場合はrebar update-depsとかで更新できる. だが, rebarはそこまで賢くないので上手くいかない場合もある.

update-depsがうまくいかない場合

- App A
   - App B
      - App C (version 2)
   - App C (version 1)

といった, 親と子で同じアプリケーションを使用する場合に上手くいかない.
なので, git限定で最新のものを参照するスクリプトを書いた

スクリプト

update-deps
# !/bin/bash

# rebarのパスを設定
REBAR=./rebar

# for inで改行単位でループを回す
IFS=$'\n'
APP=""
COMMIT=""

git_check() {
    cd deps/$1
    # commit時刻を比較して新しい方を取る
    if [ `git show $2 --quiet --pretty=format:%at | tail -n 1` -ge `git show $3 --quiet --pretty=format:%at | tail -n 1` ]; then
        COMMIT=$2
    else
        COMMIT=$3
    fi
    cd ../../
}

# 依存ライブラリの一覧をソートして同じライブラリの参照が連続するようにする. 
# 最後に余分に1回ループを回す為に" "をつけている.
for l in `$REBAR list-deps | grep -v "==>" | sort` " "
do
    # Application名 TAG バージョンタグ git://.... のようになっているので, その1番目と3番目を取得
    APP2=`echo $l | cut -d " " -f 1`
    COMMIT2=`echo $l | cut -d " " -f 3`

    # 前回と同じであればどちらが新しいかを比較
    if [ "$APP" == "$APP2" ]; then
        git_check $APP $COMMIT $COMMIT2
    else
        # 前回と違うアプリケーションになったら, その前のアプリケーションのバージョンは確定するので, checkout
        if [ "$COMMIT" != "" ]; then
            cd deps/$APP
            git checkout $COMMIT
            cd ../../
        fi
        cd deps/$APP2
        git fetch
        cd ../../

        APP=$APP2
        COMMIT=$COMMIT2
    fi
done

まぁ, 大分汚いですが勘弁してください^^;

使用しているコマンド

rebar.configに記載されている依存ライブラリとそのバージョンの一覧を取得する.

依存ライブラリの依存ライブラリも取得できます.
但し, 不要な情報も存在する為, 上記スクリプトではgrepでそれを取り除いています.

$ rebar list-deps

gitの指定したコミットのコミット時間を取得する

signatureが入っているcommitやtagに関しては他の情報も出力される為, 最後の1行だけを取っています
(よいやり方があれば...)

$ git show $2 --quiet --pretty=format:%at | tail -n 1

注意点

  • commitの新しさはcommit時刻を参照するので, 必ずしも正しくならない場合があります
  • deps以下に依存ライブラリを配置している前提でのスクリプトです. 状況に応じて好きに修正してください

rebarがもう少し賢ければなぁ...

2
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2