手抜きgit更新スクリプト

本来の目的とは違ったりしますが、自分の書いたTextのメモやら.rstやら、PDFなどのバイナリも含めた色々な情報を複数の端末で同期するのにgitを活用していたりします。
イマドキ(cloudとか、SaaSとか?)っぽくないよねと言われるかもしれませんが、オフラインな環境や状況も多々有るわけで、やっぱり最後はローカルにデータが欲しいのですよね。
そこで、 /gitpath/hogehgoe  , /gitpath/fugafuga とか複数のディレクトリでメモを管理しているのですが、pushをするのにいちいち
$ cd ./gitpath/hogehoge
$ git add .
$ git commit
$ git push
とかやっていたりするのが難儀になったので、コマンド一発でカレントディレクトリ配下のgitをまとめて commit したり push したりする script を書いてみた。
美しくない部分が多々有るかと思いますが、そこは暖かい目で見過ごしてください (汗
#! /bin/bash

#
# Auto git update tool
#  2011/06/05 Ver:1.3 joey chen
#

#
# check depend commands
#
_dependCommands="git expect"
for _COMMAND in ${_dependCommands}; do
 if [ ! `whereis ${_COMMAND} |grep ${_COMMAND}` ]; then
  echo "ERROR!! 必要なコマンドが見つかりません : ${_COMMAND}"
  exit 1
 fi
done

#
# check args
#
if [ $# -eq 0 ]; then
  cat <<_EOF_

  Auto git pull/push Tool 

  実行中のディレクトリ配下にある複数あるgitディレクトリを一気に
  更新(commit/pull/push)するツールです。

  使い方
   sh ./updateGit.sh [commit|pull|push|status] [remote name] [branch name]
    各ディレクトリの ./*/.git を探して、有る場合に指定の git のコマンドを実行します。
    オプションは以下のいずれかを選ぶ必要があります。
    commit : add を実行してから commit します。
    status : git status 処理を実施します。
    pull   : 指定した remote からpullします。初回のみパスワード入力を促されます。
    push   : 指定した remote からpushします。初回のみパスワード入力を促されます。
    ※ branch name を指定していない場合は、自動で master で処理します。

_EOF_
  exit 1
fi

#
# check args 2nd
#
if [ \( $1 != 'pull' \) -a \( $1 != 'push' \) -a \( $1 != 'commit' \) -a \( $1 != 'status' \) ]; then
  echo "ERROR!! 正しい引数を指定してください。"
  exit 1
fi

if [ \( \( $1 = 'pull' \) -o \( $1 = 'push' \) \) -a \( $# -eq 1 \) ]; then
  echo "ERROR!! push か pull を実行する際は、第2引数(remote 識別子)を指定してください。"
  exit 1
fi

#
# Get git dirs
#
_GITDIRS=`find . -name ".git" | sed "s/\(\.\/.*\)\/.git/\1/g"`

#
# show status
#
if [ $1 == 'status' ]; then
  for _DIRS in ${_GITDIRS}; do
    echo -e "\n  -- ${_DIRS} -- ";
    cd $_DIRS;
    git status;
    cd ../
  done
fi

#
# Update Git Dirs
#

## COMMIT
if [ $1 == 'commit' ]; then
  # update dirs
  for _DIRS in ${_GITDIRS}; do
    echo -e "\n  -- ${_DIRS} -- ";
    cd $_DIRS;
     git add -u;
     git add .;
     git commit -m "auto Update by Script at `date`";
    cd ../
  done
fi

## PUSH or PULL
if [ \( $1 == 'push' \) -o \( $1 == 'pull' \) ]; then
  if [ $# -eq 2 ]; then
    _COMMAND=$1
    _REMOTE=$2
    _BRANCH="master"
  fi
  if [ $# -eq 3 ]; then
    _COMMAND=$1
    _REMOTE=$2
    _BRANCH=$3
  fi
  # get password
  stty -echo
  read -p "Password: " _PW; echo
  stty echo

  # update dirs
  for _DIRS in ${_GITDIRS}; do
    echo -e "\n  -- ${_DIRS} -- ";
    cd $_DIRS;
    expect -c "
      set timeout 10
      spawn git ${_COMMAND} ${_REMOTE} ${_BRANCH}
      expect password:\  ; send \"${_PW}\r\"
      interact
    "
    cd ../
  done
fi

 

2013/07/15 渋川氏のアドバイスで一部修正

diff --git a/updateGit.sh b/updateGit.sh
index ab53aa9..c0e2a0b 100755
--- a/updateGit.sh
+++ b/updateGit.sh
@@ -58,7 +58,7 @@ fi
 #
 # Get git dirs
 #
-_GITDIRS=`find . -type d -name ".git" | sed "s/\(\.\/.*\)\/.git/\1/g"`
+_GITDIRS=`find . -name ".git" | sed "s/\(\.\/.*\)\/.git/\1/g"`

 #
 # show status

Blog引っ越し (XPressME to WordPress3.1)

twitterばかりで、Blogをほとんど更新していなかったのですが、心機一転っていうことで、久しぶりにBlogアプリケーションまわりのメンテをしました。

古くなったBlogツール(XPressME – WordPress for XOOPS 1.07) から サーバとアプリケーションを新環境に移設します。

新Blogツールは、移行を考慮して、これまでと同系列のwordpress 3.1.2 です。

しかし、DBの構造が結構変わったので ALTER TABLE したりとなかなか難儀でした。この辺のメモは後日UPしたいと思います。(世界のどっかに同じ事を考えている人がいるかもしれないので)

ところで、新サーバ環境は sakura VPS 512 の月額980円最安環境ですが、 512M メモリで Apache , MySQL , PHP , Ruby on Rails も動作させているので、正直かなーりメモリ管理厳しいです。

デフォルトで上記のデーモンをすべて動かすとメモリ不足でmysqlがダウンしたりしました。特にRubyは想像以上にメモリを食いました。

とりあえず、512Mのメモリをなんとかやりくりしながら試行錯誤しています。(これが意外と勉強になったりする。MySQLのメモリ設定はしたことあっても、案外ApacheやPHP、Railsの設定はした事なかった)

が、サイトが落ちる事も有るかもしれません、悪しからず。

#今後は他のサーバ機能も移行したいと思っているのですが、この調子だとsakuraのプラン変更が必要そうだな…

scrren と i18n

いまさらな話題ですが ^^;

某CentOS5.5 サーバで screen(SHELL=/bin/bash) を利用した際に vi で日本語が文字化けする。
原因は、LANG=C になってしまっていることなので、export LANG=ja_JP.UTF-8 すれば良いのだが、
これを .bashrc に書くのも何だか面白くない。
そういえば .i18n ってのが有ったなと思い出し

echo “LANG=\”ja_JP.UTF-8\”” > .i18n

してみたら見事 LANG が設定されるようになった。

と、ついでに自分の .screenrc もさらしてみるか

# 利用するシェルを定義する
shell /bin/bash

# shellウィンドウタイトル
shelltitle ‘$ |bash’

# screenプロセスが落ちたときでもプロセスを生かす
# autodetach on

# beepを鳴らしたときに表示するメッセージ
# vball on の時のみ有効
vbell off
bell_msg “^G”

# 日本語文字コード指定
defkanji utf-8
defencoding utf-8
encoding utf-8 utf-8

# Scrollbackの行数
defscrollback 10000

# ホットキーをCtrl+Jjに変更
# デフォルトはCtrl+Aa
escape ^Jj
#Default is ^Aa

# 開始したときのメッセージをなくす
startup_message off
#caption always “%{= wb} %-w%{=bu dr}%n %t%{-}%+w %= %{=b wk} [%l] %{=b wb}%y/%m/%d(%D) %{=b wm}%c”

# screenのターミナルログファイルの保存場所とファイル名定義
logfile “~/screen/screenlog_%y%m%d_%c_%t.log”

# screenの画面ハードコピー保存場所
hardcopydir “~/screen”

# hardcopy.n の形式で上書きしないようにする
hardcopy_append on

# ホットキーを押した時の機能キーバインド
bind n screen
bind l windowlist

# terminalのスクロールに対応する
termcapinfo xterm* ti@:te@

# 定期的にログ表示を出力する
#logtstamp on
#logtstamp after 30
#for logfile time stamp

## 状態表示のカスタマイズ
# %0`, %1`, …: backtickのidによる出力
# %{=b cw}: ANSIエスケープコードによる書式設定例(太字 シアンの背景に白文字)
# %{=b c}のように片方の指定では前景色として指定される
# blac[k] [r]ed [g]reen [y]ellow [b]lue [m]agenta [c]yan [w]hite
# %{-}, %{–}: 書式解除
# %a: am/pm
# %A: AM/PM
# %c: 24h表記の時・分
# %C: 12h表記の時・分
# %d: 月の中の日
# %h: X端末のウィンドウタイトル(シェルからの出力部分)
# %H: ホスト名
# %l: system load
# %m: 月(01-12)
# %n: アクティブなウィンドウの番号
# %M: 月(1-12)
# %s: 秒
# %t: タイトル
# %-w: 現在アクティブなウィンドウ番号より小さいウィンドウの表示部分
# %+w: 現在アクティブなウィンドウ番号より大きいウィンドウの表示部分
# %w: 現在アクティブな番号/タイトルに「*」を付けた全ウィンドウリスト
# %y: 西暦年(2桁)
# %Y: 西暦年(4桁)
# Thanks http://d.hatena.ne.jp/kakurasan

ところで、このブログの文字のエンコード、いい加減何とかしたいな。
普段の環境がUnicodeなのに、BlogがEUCだとなにかと不便だ。

ぼけっとしていたら10月

うーん twitterを使い始めてからますますBlogを書かなくなってしまった。っていうか、自宅でPCに向く事すらずいぶんと減ってしもうた。
さて、小ネタはtwitterで流してるんで、ここでは読書報告です。

雑誌にあったオススメ本100選の中の一冊。
広島・長崎に落とされた原爆を造った科学者の一人、ノーベル賞物理学者ファイマンさんの自伝。
自分のリミッターを外し、”好き”をとことん突き詰めた常識破りな人のお話。
ただただ、すごいなーと思ってしまう。本書から僕が得られたのは、
「好きを突き詰める」=ダニエル・ピンクの「モチベーション3.0」、茂木健一郎の「リミッターを外す」に通じるかなと思う。
「社会的無責任感」=原爆という社会的に大いなる脅威を生み出した科学的達の精神的な盾。
という二つの観点。この二つを掛け合わせる事で、科学者達は大きな成果・結果をもたらした。
ファイマンさんの生き方は無論まねできないが、「好き」を持ち続ける事ぐらいは、目標にしたい。

前回投稿時にI(one)を読んで、なかなか面白かったので、II(Two)を購入してみたわけだが、やはり「ラノベの域からは出ない程度に」面白かったなぁというのが印象。まあ、今後は中古本でもし見かけたら買うかな。

マルドゥックスクランブルを読んで以来ファンになってしまった冲方丁のデビュー作を再度文庫本新刊として角川書店が発売した。
つい最近「天地明察」が本屋大賞を受賞しているので、書店でも目立つところに置かれていた。
ラノベだが、前述のGOSICKよりは、個人的にはこっちが面白かった。
ハラハラドキドキ感は間違いなくこっちが上。

理系小説と言えばこの人でしょう。工学博士を取って、さらに推理小説シリーズをたくさん書けるって言うのも、きっと「好き」だからなのだろう。

ひさしぶり

しばらく更新をさぼっていました。新婚生活は順調です☆
その後車の傷は自動車保険で無事修理され、毎日快調です☆
# イタズラによる損傷ということで、等級にも影響なく保険の適用が出来ました ^.^v

久しぶりすぎて書く事がないので、読んだ本を並べてみる。


今年の本屋大賞第1位っていうことで、見事に釣られて読んでみました。(釣られるだけの価値はありました)
この著者のSF小説も実は過去にBlogで取り上げているのですが、相変わらず面白いっす。
SF小説ほどテンプの良さはないが、主人公やその周りの登場人物のキャラクターが立っていて、丁寧に話を綴っています。
自分の興味と、周囲の影響、時代情勢が相まって暦という大事業に取り組んだお話、なんだかやる気を貰えます。


ライトノベルなのかな?アニメ化の話もあるそうだが、確かに面白い。ほかに2巻ある様なので、機会があれば読んでみたい。
久しぶりのツンデレヒロインがステキ。


お仕事関連の方からの紹介。
うーん。どうなんでしょうか。まあ、それも一つの考え方だよね。って感じ。
これが男のすべてではないけど、著者の思う”オトコたるもの”という考え方は分かる気がする。


これはイイ。MySQLを使う方、特にお仕事で、MySQLを構築・メンテする方、購入しておいて損はないです。


某MLに触発されるわけではなく、でもちょうどその話題が盛り上がり始めた時に購入した一冊。
文字コードって、奥が深いンですね @_@

ざんねんな事

結婚披露宴の翌日、ホテルの駐車場に止めてあった車を見ると、
ドア3枚分に、10円パンチの跡が・・・・
非常に残念な気分になってしまった。

助手席側がやられていて、気がついたのは嫁なので、いつやられたのかは定かではない。
考えると日ごろ使っている駐車スペースは小学校がすぐそばにあったりするので、子供の悪戯なのかもしれない。

幸せが沢山来すぎたんで、調子に乗らないようにと、神様に少しお灸を据えられたのだろうか。
それにしても、世の中、残念な人間も居るものだ。

結婚披露宴

結婚披露宴を無事開催する事が出来ました。
沢山の方々に祝福されて、すばらしいイベントになったのではないかなと思います。
関係者の皆様 まことに有り難うございます!!

参加者数の心配があった二次会も想定以上の人数が来てくださった様でなによりです。
もっと皆と語らいあいたかったのですが、楽しい時間はあっという間に終わるものですね。

披露宴準備中に思うこと

披露宴の準備をしていてホントに思うのですが、披露宴を開催してきたご夫婦の皆さんってすごい!
色々な事を考えて、悩んで、準備をして、沢山の方の暖かい協力を受けながら築き上げてきたのであろうと思う。
今やってみてわかってきたのは、自分という人間がこれまでどう歩んできたのか、なんだか一つの振り返りができるポイントなんだなと思った。
親類縁者、友人知人のことを改めて考え、その大切さを再認識する事になったと思う。
そういう意味でも、披露宴ってのは二人の新たな門出となるイベントなんだなと思いました。成功できるよう、頑張ろう!!

[Book]神様のカルテ

披露宴準備でヒーヒーしてますが、実は本を読んで現実逃避をしていたりもする今日この頃です。
タイトルに引かれて購入した「神様のカルテ」、これは泣けました。実際に医者さんが書いた小説で、地域の医療についての現状を描きつつ、とても心温まるエピソードがちりばめられています。
主人公 栗原の嫁さんが最高にステキです。(ぉぃ)