Hina-Mode

とある呑んだくれエンジニアの気が向いた時に書く戯言

git logをJIRAに貼り付けられるように整形してみた

今流行のアトラシアン社のチケット管理ツールJIRA。
私も使うことが多いのですが、Gitを使っている時に、
「これリリースしますね」っていうログをJIRAにコメントや本文で貼っつけるのに整形が面倒だったので、予め整形しておいて.bashrcなどのファイルにaliasを入れておくことにしました。

alias gitlog='git log --date=short --no-merges --pretty=format:"|%h|%an|%ad|%s|"'

誰が何時、どのコミットを入れたのかがだいたい分かるので重宝してます。
これを入れておけば

$ gitlog master..develop > log_diff

とかしてあげればmasterブランチからdevelopブランチの差分が一気に取得できます。

【未熟】Linuxの実行中の負荷監視と終了時の負荷平均の自動計算を行なうshellScript

これもずいぶん前に必要に駆られたのでやっつけで作ってみたんですが、
監視を抜けるためにqをpressしたら終了、にしたら
ttyが変になってしまって終了後のcli入力が見れない(一応入力自体はできてる)事に。
というなんともポンコツなスクリプトなのですが、
どなたか何がイケないのか教えていただければすごく助かります。

一応監視内容はmpstatの数値を追っているだけです。
実行後、qキーを押すとスクリプト終了となり、
抜けた後にはawkで自動計算を走らせ、平均値を算出させます。

if [ -t 0 ]; then stty -echo -icanon time 0 min 0; fi
keypress=''
result=''
echo "time	load	%user	%nice	%sys	%iowait"
while :
do
	tl=`uptime | sed -e "s/ \([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).\+load average:/\1/g" | sed -e "s/ \+/ /g" | cut -d" " -f1,2 | sed -e "s/,//g" | xargs echo -n`
	tl=$tl`echo -n " "`
	tl=$tl`mpstat 1 1 | grep Average | sed -e "s/ \+/ /g" | cut -d" " -f3,4,5,6`
	echo $tl | sed -e "s/ /\t/g" 
	result="$result\n$tl"
	read keypress
	if [ "$keypress" = "q" ]; then
		break
	fi
done

# calc average
echo "check finished."
echo -n "load average: "
echo -e $result | grep -v "time" | awk '{ sum += $2; num++}; END { print sum/num }'
echo -n "user cpu usage: "
echo -e $result | grep -v "time" | awk '{ sum += $3; num++}; END { print sum/num"%" }'
echo -n "iowait average: "
echo -e $result | grep -v "time" | awk '{ sum += $6; num++}; END { print sum/num"%" }'

IPを直接叩かれてアクセスされたくないからmod_writeで防衛した

諸事情ありましてIPで直接サイトを閲覧されると色々面倒だったので、
.htaccessでアクセスを防止することにしました。

apache側に書かなかった理由としては、サーバにこの仕様を書いてしまうと、
rewriteルールが変更になる際に複数サーバで書き直さないといけないので至極面倒だったからです。

その点、.htaccessであれば修正→デプロイで一括なのでとても簡単!capistranoちゃん大好き!

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
  RewriteRule ^(.*) http://www.mydomain.com/$1 [R=301,L]
</IfModule>

ちなみにmod_rewrite私書くの苦手で、確認もあんまり出来なくて困っていたんですが、
http://htaccess.madewithlove.be/
こんなサイトが在るみたいなので今回はとても助けられました。

【Git】masterにmergeしたbranch群を一括で削除するshellScript

仕事でbranchを管理するのが面倒だったので、「リリースするときに古いブランチ消せば解決じゃね?」って思ったのが始まり。
指定したタグより前のブランチを全て削るようにしています。

判定的には指定したタグにブランチのコミットが全部入っていれば削除、
何かコミットが残っていれば残し、という感じ。

かなり適当に作ってあるので改善したい方はご自由にどうぞ持って行ってください。
Gist?なにそれ美味しいの?

■前提

  • ファイル名はcheck_branch.sh
  • 初期gitディレクトリパスは~/git/src/php (オプションで変更可能)
  • gitコマンドにパスが通っている
  • パスワード入力なしでgit pushが可能(ssh-keygenとかして。)
#!/bin/sh
#-------------------------------------------------
# check old branch and delete script
#-------------------------------------------------
result=""
dirpath="~/git/src/php"
tag=""
execDel=""

while getopts t:g:s OPT
do
    case $OPT in
        "t" ) tag="$OPTARG";;
        "g" ) dirpath="$OPTARG";;
        "s" ) execDel="n";;
        * ) echo "option list:"
            echo "  -t ... tag name (required)"
            echo "  -g ... git repository directory"
            echo "  -s ... only show branch (dont delete)"
            exit
    esac
done

if [ "$tag" == "" ]; then
    echo "command failed."
    echo "   --usage"
    echo "   check_branch.sh [options]"
    exit
fi

cd $dirpath
# update all branches
git fetch --prune
conf=`git tag --list | grep -E "${tag}"`
if [ "$conf" != "$tag" ]; then
    echo "tag not exists."
    exit
fi

echo "Display deletable tag list."
for i in `git branch --remotes | grep -v HEAD | grep -v master | grep -v devel | grep -v release`
do
    tmp=`git log --pretty=format:"|%h|%an|%s|" --no-merges remotes/origin/devel..remotes/$i | wc -w`
    tmp2=`git log --pretty=format:"|%h|%an|%s|" --no-merges remotes/origin/master..remotes/$i | wc -w`
    tmp3=`git log --pretty=format:"|%h|%an|%s|" --no-merges $tag..remotes/$i | wc -w`
    if [ `expr $tmp + $tmp2 + $tmp3` == 0 ]; then
        line=`echo $i | sed -e "s/^origin\///g"`
        result="$result $line"
        echo $i

    fi
done

if [ "$result" == "" ]; then
    echo "there are no deletable branch. script done."
    exit
fi

if [ "$execDel" != "n" ]; then
    echo ""
    echo "do you want delete them? [y/n]"
    read YN
    if [ "$YN" == "y" ]; then
        for j in $result
        do
            git branch -D $j
            git push origin :$j
        done
    fi
fi