CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Subversionリポジトリのコード変更量を集計する

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

Subversionリポジトリのソースコードのコード変更量、コミット数を月別、人別に集計するスクリプトを書いた。

ためしに、Subversion本家のリポジトリの 9月〜10月(本日、14日)の期間で実行した結果で載せてみる。

$ ./svn-chg.pl -r "HEAD:{2012-09-01}" http://svn.apache.org/repos/asf/subversion/trunk
1397967|   stefan2|2012-10-14|  18|   0
1397871|   stefan2|2012-10-14|  23|  22
1397866|   stefan2|2012-10-14|  51|  55
...
1380056|    rdonch|2012-09-03|   5|  49
1379689|     brane|2012-09-01|  37|  28
1379474|     brane|2012-08-31|  66|   0

 month      | commits | add    | del    | delta 
 -----------+---------+--------+--------+-------
 2012-10    |     163 |  +8396 |  -2276 | +6120
 2012-09    |     240 | +16969 |  -2759 | +14210
 2012-08    |       1 |    +66 |     +0 |   +66

 author     | commits | add    | del    | delta 
 -----------+---------+--------+--------+-------
 brane      |      16 |  +1200 |   -309 |  +891
 breser     |      40 |  +1510 |   -162 | +1348
 cmpilato   |      39 |   +500 |    -88 |  +412
 danielsh   |      40 |   +231 |   -112 |  +119
 gmcdonald  |       1 |     +2 |     -2 |    +0
 hwright    |      13 |    +28 |    -43 |   -15
 ivan       |       1 |    +38 |    -15 |   +23
 julianfoad |      27 |   +487 |   -237 |  +250
 lgo        |       4 |    +34 |    -27 |    +7
 pburba     |       1 |  +5428 |   -378 | +5050
 philip     |       9 |    +18 |    -65 |   -47
 rdonch     |      16 |   +266 |   -164 |  +102
 rhuijben   |      27 |   +375 |   -997 |  -622
 stefan2    |      76 | +13165 |  -1320 | +11845
 steveking  |       1 |   +150 |    -15 |  +135
 stsp       |      93 |  +1999 |  -1101 |  +898

add/del/deltaは、コードの追加/削除/差分の行数。

この結果を見て、どうだというのは正直ない。だって、Subversion本家の開発の様子を知らないし、調べた期間も短いし。
でも、これを自分が開発してる Subversionリポジトリで測ってみると面白い。先月は会議ばっかりで変更量少なかったなぁとか、あいつはコミット数が桁違いに多いなとか、作業の振り返りに使える。

ただし、えげつないデータなので、ご利用は計画的にという事で。

このスクリプトは github に置いた。perlで書いてあって、svnとdiffコマンドがあれば動く。オプションの -r は svn log の -r にそのまま渡すので、詳しくは svn help log をご参照ください。

svn-util/svn-chg.pl at master · yukioc/svn-util · GitHub


実用 Subversion 第2版実用 Subversion 第2版
(2009/07/27)
C. Michael Pilato、Ben Collins-Sussman 他

商品詳細を見る

Perlデータマンジング―データ加工のテクニック集Perlデータマンジング―データ加工のテクニック集
(2003/01)
デイビッド クロス

商品詳細を見る

Programming PerlProgramming Perl
(2012/03/06)
Tom Christiansen、Brian D. Foy 他

商品詳細を見る

Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
(2011/11/11)
佐藤 聖規、和田 貴久 他

商品詳細を見る
スポンサーサイト

svnserve をちょっと使ってみる

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

svnserveを使ってみた。Subversionリポジトリをちょっといじりたいときに、面倒な設定なしで行うのに丁度よさそうだったので。

環境は OSX 10.8.1 Mountain Lion。
svn は xcode についてたやつだったかな。1.6系で最新ではなく安定板ってとこかな。

$ svn --version
svn, version 1.6.18 (r1303927)
   compiled Jun 15 2012, 19:07:58
...

では、svnリポジトリを作成する。これは1行。

$ svnadmin create sample.svn

svnリポジトリにアクセスしてみる。file://のほうで。

$ svn info file://$PWD/sample.svn
Path: sample.svn
URL: file:///path/to/repos/sample.svn
Repository Root: file:///path/to/repos/sample.svn
Repository UUID: 3cb042f2-8d83-434c-bc21-ada7f8441fee
Revision: 0
Node Kind: directory
Last Changed Rev: 0
Last Changed Date: 2012-09-26 23:19:54 +0900 (水, 26  9 2012)

これを svnserve でもやってみる。
svnserve の立ち上げは、daemon と inetd が選択できるらしいが、簡単そうな daemon にする。あと、面倒を避けるため予めファイアーウォールを開けとく。
「システム環境設定」→「ファイアーウォール」から「ファイアーウォールを切にする」を選ぶ。

$ svnserve -d --foreground -r test.svn

-d はdaemon、あと、--foreground 付けといて用が済んだら Ctrl-C で終われるようにする。

さてと、svnserve にアクセスしてみる。

$ svn info svn://localhost/
Path: localhost
URL: svn://localhost
Repository Root: svn://localhost
Repository UUID: 3cb042f2-8d83-434c-bc21-ada7f8441fee
Revision: 0
Node Kind: directory
Last Changed Rev: 0
Last Changed Date: 2012-09-26 23:19:54 +0900 (水, 26  9 2012)

アクセスできた。内容は URLは違うくらいで file:// と同じ。

あと、hook-script も試してみよう。

$ cd sample.svn/hooks/
$ cp post-commit.tmpl post-commit
$ chmod u+x post-commit

post-commit に以下の行を追加する。

echo "$REPOS $REV" > post-commit.log

あと、conf/svnserve.conf  の [general] 節に下記行を追加する。

anon-access = write

svnserve で動作確認してみる。

$ svn co http://localhost/ sample-svnserve
$ cd sample-svnserve
$ echo 'hello' > hello
$ svn add hello
A         hello
$ svn ci -m '1st'
Adding         hello
Transmitting file data .
Committed revision 1.
$ cat ../post-commit.log
/path/to/repository/sample.svn 1

これを file:// のほうでも試してみる。post-commit 動くのかな...

$ svn co file://$PWD/sample.svn sample-file
A    sample-file/hello
Checked out revision 1.
$ cd sample-file
$ echo 'world' > hello
$ svn ci -m '2nd'
Sending        hello
Transmitting file data .
Committed revision 2.
$ cat post-commit.log 
/path/to/repository/sample.svn 2

post-commit は、svnserve でも file:// でも動いた。
file://の方で動くのは意外だった。これなら hook のテストはわざわざ svnserve にするまでもなく、file:// の方でいいな。

あと、post-commit の出力先が面白い。file:// の方はコミット時のディレクトリ、post-commit は daemonの起動ディレクトリに出力されてたので、実行時のディレクトリがワーキングディレクトリなのだろう。注意せねば。


gitでファイル一覧を見る方法

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

コマンドラインで git管理されたファイルをどうやってみるの?
というのを調べて、便利なaliasを作った。

gitkとか、TortoiseGitを使えば良いのだけど、
コマンドラインでさくっと見たいときに便利だし、
加工しやすいしね。

svnでいうと、'svn ls'とか'svn status -v'とかのイメージ。
gitだと、ls-files があるので、試してみる。
ちなみにリポジトリは git のソースコード。

$ git ls-files
.gitattributes
.gitignore
.mailmap
COPYING
Documentation/.gitattributes
Documentation/.gitignore
Documentation/CodingGuidelines
Documentation/Makefile
Documentation/RelNotes/1.5.0.1.txt
Documentation/RelNotes/1.5.0.2.txt

...(中略)

xdiff/xinclude.h
xdiff/xmacros.h
xdiff/xmerge.c
xdiff/xpatience.c
xdiff/xprepare.c
xdiff/xprepare.h
xdiff/xtypes.h
xdiff/xutils.c
xdiff/xutils.h
zlib.c

とりあえず出てくるのはいいけど、
下位のディレクトリのファイルがわんさかでてきてしまう。
下位のディレクトリはいらないな...
対応するオプションが無いので、自前で加工。

$ git ls-files|perl -pe 's/\/.*/\//'|uniq
.gitattributes
.gitignore
.mailmap
COPYING
Documentation/
GIT-VERSION-GEN
INSTALL
Makefile
README
RelNotes

...(中略)

wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c
wt-status.c
wt-status.h
xdiff-interface.c
xdiff-interface.h
xdiff/
zlib.c

ls -F 風で満足。こういうのは aliasしとこう!

$ git config --global alias.ls '!'"git ls-files -t|perl -pe 's/\/.*/\//'|uniq -c"
$ git config --global alias.ll '!'"git ls-files -cdmokt|perl -pe 's/\/.*/\//'|grep -v '/'"
$ git config --global alias.la "ls-files -cdmokt"

ついでにいろいろやってみた。

  • git ls : カレントディレクトリのgit管理されたファイル一覧で、 サブディレクトリのファイル数のおまけ付き。
  • git ll : ファイルを状態付きで一覧。
  • git la : サブディレクト含めて全ファイルを出すとき。

こんだけあればいいだろう~。

ls-filesのオプションの-dmoktは、

  • -dmok : カレントディレクトリの全ファイル
  • -tが状態を表示する。状態は、
    • H : cached
    • S : skip-worktree
    • M : unmerged
    • R : removed/deleted
    • C : modified/changed
    • K : to be killed
    • ? : other
$ touch aaa # added other file
$ git ls |head
      1 H .gitattributes
      1 H .gitignore
      1 H .mailmap
      1 H COPYING
    374 H Documentation/
      1 H GIT-VERSION-GEN
      1 H INSTALL
      1 H Makefile
      1 H README
      1 H RelNotes

$ git ll |head
? aaa
H .gitattributes
H .gitignore
H .mailmap
H COPYING
H GIT-VERSION-GEN
H INSTALL
H Makefile
H README
H RelNotes

$ git la |head
? aaa
H .gitattributes
H .gitignore
H .mailmap
H COPYING
H Documentation/.gitattributes
H Documentation/.gitignore
H Documentation/CodingGuidelines
H Documentation/Makefile
H Documentation/RelNotes/1.5.0.1.txt

満足、満足。

おまけ:
git本は、Gitメンテナ著作の「入門Git」がオススメ。


入門Git入門Git
(2009/09/19)
濱野 純(Junio C Hamano)

商品詳細を見る
Gitメンテナ著作。Gitの使い方だけでなく、オープンソースをソースコード共有という視点での話はなかなか興味深い。

あと、たまにはこの手のコマンド一覧をざざっと眺めておくと、
git la とかで出力したテキストの加工をさらっとできて、
にんまりできる。


【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)
(2009/04/08)
沓名 亮典、平山 智恵 他

商品詳細を見る

Pro GitのMarkdownをHTMLで1ファイル化した。pandocは使わない方向で。

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

Pro Gitという英語の書籍があるけど、ドキュメントがWebページで公開されていて、日本語訳も全部ではないもののある。

これを印刷して読もうかなと思ったんだけど、たくさんページがあるので wgetあたりでざっくり拾って印刷...と思ったけど、たぶん余白がたくさんでてしまう。

ところで、Pro Gitは GitHubでも公開されていて、翻訳を有志の方ベースで進行しているみたい。

ドキュメントは Markdown で書かれているので印刷はしやすそう。でも図をインライン展開できない。makepdfというスクリプトで Markdown->TeX->PDF する手が用意されてるけど、使用する pandocとxelatexはインストールがめんどくさそう...という人向けに

で PDFが公開されてた。あ、これいいな...と思ったんだけど、なんとなく自分で Markdown→html、更に 1ファイルに繋げてみたいなと思ったのでやってみた。

$ git clone --depth=0 git://github.com/progit/progit.git progit
$ cd progit
$ mkdir tmp
$ cp -r en/* tmp/
$ cp -fr ja/* tmp/
$ cat tmp/*/* | perl -ne 'use Text::Markdown markdown; s/Insert\s+(\w+)\.png/![$1.png](figures\/$1-tn.png)/g; print markdown($_);' > hoge.html

TeX化、PDF化もできそうだけど、個人的に読む分にはこれで十分じゃないかな。加工もしやすいし。


入門Git入門Git
(2009/09/19)
濱野 純(Junio C Hamano)

商品詳細を見る

git logで、gitk --all くらい情報ほしい

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

git log でリビジョンのツリーと、branchの情報が欲しいなーと。

やっとできた。。

git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d'

--graph: ツリー表示が付く
--all: 全てのログ。カレントのブランチだけに限らず。
--color: 色
--pretty: ログのフォーマット。%dが branch。

早速、alias 登録。

git config --global alias.log-all "log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'"

こんな感じ。

$ git log-all
*       99255c5 yukiocc  modify to first commit  (master)
| *     e802d11 yukiocc  issue-xxx: add xxx function.  (issue-xxx)
|/  
*       abfdaec yukiocc  first commit

issue-xxxは、rebaseしてから masterにマージしよう...という感じかな?

gitk --all だと別ウィンドウになってしまうけど、これならパッと確認できていい感じ。これで git コマンドだけで満足できるようになったかも。

(9/25 加筆)

'--prety'の最後に%Cresetを追加。環境によっては赤が次行に続いてしまうため。

(9/29 変更)

'--prety'で表示するハッシュをparent(%p)でなく、コミット(%h)に変更


入門Git入門Git
(2009/09/19)
濱野 純(Junio C Hamano)

商品詳細を見る

 | HOME |  »

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。