Fix 10L in r1912
とか
Fix regression in rev1549
のようなものが出てくることがあります。こういうときに、「どういうコミットだったっけ?」と確認したくてリビジョンナンバーを頼りに遡ろうとすると、結構手間がかかるんですよね、Gitって。猫科研究所のx264チェンジログとかx264.nlのビルドログを利用してリビジョンナンバーからハッシュ値を調べる必要があります。実際にGitに渡すのはリビジョンナンバーではなくハッシュ値でないといけません(タグがついていればそれも利用できますが、x264はついていないですし…)。
例えば、たまに2chのx264のスレとかで「rev1790だと大丈夫だけどrev1803以降だとおかしくなる」というようなレスがありますが、こういうときにいちいちハッシュ値を調べるのって面倒です。面倒なので、リビジョンナンバーを指定するとハッシュ値を自動で調べてgit resetやgit showやgit diffに渡す、簡単なシェルスクリプト(rev_roll.sh)を書きました。名前からして適当です(笑)x264.gitからgit cloneしたフォルダに入れて使ってください。使い方は、スクリプトの冒頭10行ちょっとを読めばすぐにわかると思います。自分に必要な最低限のオプションしか用意していませんが(苦笑)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Manage local x264.git repository by revision number, not commit hash. | |
if [ $# -lt 2 ] ; then | |
cat <<EOF | |
Options: | |
-r <rev> git reset --hard <rev> | |
-s <rev> git show <rev> | |
-d <rev1> <rev2> git diff <rev1> <rev2> | |
Examples: | |
./rev_roll.sh -r 1913 | |
./rev_roll.sh -s 1913 > 1913.patch | |
./rev_roll.sh -d 1900 1913 | |
EOF | |
exit 1 | |
fi | |
MASTER_REV=$(git rev-list origin/master --abbrev-commit | wc -l | awk '{print $1}') | |
if [ $2 -le ${MASTER_REV} ] ; then | |
REV1_HASH=$(git rev-list origin/master --reverse --abbrev-commit | sed -n -e "$2 p" -e "$2 q") | |
case "x$1" in | |
x-r) | |
if [ $# -eq 2 ] ; then | |
git reset --hard ${REV1_HASH} | |
else | |
echo "Specify ONE rev number!" | |
exit 1 | |
fi | |
;; | |
x-s) | |
if [ $# -eq 2 ] ; then | |
git show ${REV1_HASH} | |
else | |
echo "Specify ONE rev number!" | |
exit 1 | |
fi | |
;; | |
x-d) | |
if [ $# -eq 3 -a $3 -le ${MASTER_REV} ] ; then | |
REV2_HASH=$(git rev-list origin/master --reverse --abbrev-commit | sed -n -e "$3 p" -e "$3 q") | |
git diff ${REV1_HASH} ${REV2_HASH} | |
else | |
echo "Specify TWO rev numbers!" | |
exit 1 | |
fi | |
;; | |
*) | |
echo "Specify correct parameters!" | |
exit 1 | |
;; | |
esac | |
fi |
エラーメッセージとかかなり適当なスクリプトですけど、リビジョンナンバーで操作したいときにどうすればいいかのヒントにはなるかな、と。必要なら色々弄ってオプションを追加してください。あと、このスクリプトは、あくまでplainなx264.gitしか想定していないので、他の用途で使って不具合が出たときは自分で弄って修正してください。ブランチはorigin/masterで決めうちにしちゃっていますし。「もうちょっといい方法があるよ〜」って人は是非教えてくださいm(__)m
…。
実はGistを使ってみたかっただけ疑惑(ぉ