by shigemk2

当面は技術的なことしか書かない

都合よくREADME.mdを作成してくれるシェルスクリプトを作ってみた

GitHubでリポジトリを作成しましたらバッジをREADME.mdにはっつけてるんですけども、
毎回この作業をブラウザでやるのがいい加減面倒になってきましたので、
この作業を一括でぶるわっとやってくれるシェルスクリプトを作りました。

#!/bin/zsh
CURRENT_REPOSITORY () {
	ref=$(git symbolic-ref HEAD 2> /dev/null)  || ref=$(git rev-parse --short HEAD 2> /dev/null)  || return
	echo $(git remote -v | cut -d':' -f 2)
}
 
CURRENT_REPOSITORY_USER_NAME () {
	echo ${$(CURRENT_REPOSITORY | awk '{print $1}')%.git}
}
 
CURRENT_REPOSITORY_DIRECTORY=`git rev-parse --show-toplevel`
CURRENT_REPOSITORY_NAME=$(basename $CURRENT_REPOSITORY_DIRECTORY)
rm README.md
 
touch README.md
cat << EOT >> README.md
${CURRENT_REPOSITORY_NAME}
===============
 
[![Build Status](https://travis-ci.org/$(CURRENT_REPOSITORY_USER_NAME).png)](https://travis-ci.org/$(CURRENT_REPOSITORY_USER_NAME))
[![Dependency Status](https://gemnasium.com/$(CURRENT_REPOSITORY_USER_NAME).png)](https://gemnasium.com/$(CURRENT_REPOSITORY_USER_NAME))
 
EOT

1. username/repository.git を取得する
oh-my-zshのgitプラグインから拾ってきました。

CURRENT_REPOSITORY () {
	ref=$(git symbolic-ref HEAD 2> /dev/null)  || ref=$(git rev-parse --short HEAD 2> /dev/null)  || return
	echo $(git remote -v | cut -d':' -f 2)
}

2. 1から username/repository を取得する

CURRENT_REPOSITORY_USER_NAME () {
	echo ${$(CURRENT_REPOSITORY | awk '{print $1}')%.git}
}

awkでごにょごにょして%でいらない文字列を削除しております。

3. repository を取得

CURRENT_REPOSITORY_DIRECTORY=`git rev-parse --show-toplevel`
CURRENT_REPOSITORY_NAME=$(basename $CURRENT_REPOSITORY_DIRECTORY)

basenameの出力結果を変数に格納するのは微妙に骨だったと記憶しております。

Basename and dirname 'permission denied' - Dev Shed

4. README.md 作成

なんか前にも同じようなことをやったので、それの応用です。
.travis.ymlを作成するシェルスクリプトを書いてみた - by shigemk2

touch README.md
cat << EOT >> README.md
${CURRENT_REPOSITORY_NAME}
===============

[![Build Status](https://travis-ci.org/$(CURRENT_REPOSITORY_USER_NAME).png)](https://travis-ci.org/$(CURRENT_REPOSITORY_USER_NAME))
[![Dependency Status](https://gemnasium.com/$(CURRENT_REPOSITORY_USER_NAME).png)](https://gemnasium.com/$(CURRENT_REPOSITORY_USER_NAME))

EOT

なぜこういうことが出来るのかというと、TravisCIやgemnasiumのバッジのマークダウンは基本的に構造が同じだからで、username/repositoryの部分だけ
変えたら問題ないからです。

そして完成品がこちらです。

なお、gistにもソースを公開しました。
Making README.md with TravisCI and gemnasium badges