2011年12月5日月曜日

対話的にBazaarを使うシェルを書いた。

今の開発環境でバージョン管理ツールにBazaarを使っているので、
よく使うコマンドをざっとメモった。
また、開発スタイルは集中型。

Bazaarユーザガイド

【開発スタイル】
① 集中型
集中型の開発
集中型の場合、全員で同じブランチを使う。
コミットするとローカルではなく、
マスターブランチにコミットされる。

② 分散型
分散型の開発
分散型の場合、開発者毎に自分のブランチを持つことになる。
コミットするとローカルブランチにコミットされ、
プッシュ・マージすることにより、
マスターブランチにアップする。


【コマンドまとめ】
① 初期設定で使うコマンド
$ bzr whoami (ユーザ名)<(メールアドレス)> // ユーザ名を設定する。
$ bzr checkout bzr+ssh://(レポジトリ先)   // チェックアウトを作成する。
$ bzr bind bzr+ssh://(レポジトリ先)       // コミットが行われるマスターブランチを変更する。
$ bzr unbind bzr+ssh://(レポジトリ先)     // コミットがローカルのみで行われるようにする。


② 日々の開発で使うコマンド
$ bzr status                     
$ bzr update                     
$ bzr log --forward --line       
$ bzr diff                       
$ bzr di                         
$ bzr marge                      


③ 今の開発環境では使わないコマンド
$ bzr clone bzr+ssh://(レポジトリ先) // クローン
$ bzr push bzr+ssh://(レポジトリ先)  // プッシュ
$ bzr pull                           // プル

今の開発環境は、「集中型の開発環境」であるので、
ローカルブランチを作成するクローンとかは使わない。


【カスタマイズ】

さらによく使う組み合わせでbashで関数を作ってみた。

① 対話型コミットシェル
変更点、コミットメッセージの入力を対話的にやってみた。
コマンド打ったほうが速い気もしなくもないが。

bzrc() {
    #--- check commit
    stty intr ^\?    
  stty erase ^H    
  
  #--- check commit  
    #bzr update
    bzr di

    #--- confirm commit  
    echo -n "Do you want commit? y or n> "
    read FLG_COMMIT

    if [ $FLG_COMMIT = 'y' ]; then
        echo ""
    elif [ $FLG_COMMIT = 'n' ]; then
        echo "Thank you."
        return
    else
        echo "Please Input y or n."
        return
    fi

    #--- get commit message 
    echo -n "Please input commit message > "
    read COMMIT_MSG

    #--- execute commit
    bzr commit "-m" "$COMMIT_MSG"
}

stty ~ ktermでバックスペースが効かない!
「stty ^H」は、入力待ちの段階で、バックスペースを効かせるために必要。

② 修正ファイルのピックアップ
リビジョン番号を渡すと、そのリビジョンで
修正されたファイルをピックアップしてくれる。
まぁ、bzr diffから文字列切り出してるだけだけど。

chkfile() {
    #--- get parameter  
    REV_NUMBER=$1

    if [ "${REV_NUMBER:-null}" = "null" ]; then
        echo
        echo "chkfile revision_number"
        echo
        return
    fi

    #--- execute bzr diff -c
    echo
    echo "=== add files"
    bzr "diff" "-c" "$REV_NUMBER" |
        grep     "=== added file "    |
        sed -e "s/=== added file '\(.*\)'/\1/"
    echo
    echo "=== modified files"
    bzr "diff" "-c" "$REV_NUMBER" |
        grep     "=== modified file "    |
        sed -e "s/=== modified file '\(.*\)'/\1/"
    echo

    return
}

③ リリースブランチへのマージ
merge() {
    #--- check commit
    stty intr ^\?          
    stty erase ^H
    
    #--- get and set parameter      
    RELESE_BRANCH="/home/karino/release"    
    TRUNK_BRANCH="/home/karino/tsubasa"    
    REV_NUMBER=$1    
    CDIR=`pwd`    
    
    #--- check parameter     
    if [ "${REV_NUMBER:-null}" = "null" ]; then        
     echo       
     echo "Please input revision_number"        
     echo        
    return    
    else        
     echo    
    fi


    #--- get commit message     
    echo "relese blanch : "$RELESE_BRANCH     
    echo "trunk blanch  : "$TRUNK_BRANCH  
    echo    echo -n "Do you want relese? (y/n) > "    
    read FLG_RELESE    
    
    if [ $FLG_RELESE = "y" ]; then        
     echo         
     cd $RELESE_BRANCH        
     bzr merge "--force -c " "$REV_NUMBER"        
     cd $CDIR    
    elif [ $FLG_RELESE = "n" ]; then        
     echo         
     echo "Thank you."
        echo
        return
    else
        echo 
        echo "Please Input y or n."
        echo
        return
    fi

    #--- return 
    return
}

0 件のコメント:

コメントを投稿