import git
repo = git.Repo('.')
repo.commits(max_count=1)[0].id
とかすればHEADのidが取れる。あとはsetup.pyで埋め込み作業をするscriptを書けばいい。
commitからpathを取り出すにはtreeをvisitする必要があるらしい。
In [72]: x.tree.values()[1]
Out[72]: <git.Tree "4aadc5ae113b32e77b531d6854f1a2c13f9b6e63">
In [73]: x.tree.values()[1]
Out[73]: <git.Tree "4aadc5ae113b32e77b531d6854f1a2c13f9b6e63">
In [74]: x.tree.values()[1].values()
Out[74]:
[<git.Tree "5e8a390852602cec130d67e247c559a9723bfb4f">,
<git.Tree "878a888769dd62d505d841b7895f49bde8c4dbca">,
<git.Tree "7ee2b27fa1f0495016811fc447e4691af94c80e0">,
<git.Tree "0e524c2147893adf6497bcf3d069a8d666c52f07">,
<git.Tree "876089c38a02f1a00a7da44df3763360dbf97bbd">,
<git.Blob "82f6b1bf3630c66755a1aab3613547a2b180193f">,
<git.Tree "488f70c7fc0df9ee7428f4cfb003edf873222e7f">,
<git.Tree "9a88b0832766d9330577c59e584fd93691b1285f">,
<git.Tree "b354bd3049e868b59dbc261fa3083eeae1ae7b5a">]
In [75]: x.tree.values()[1].values()[0].values()
Out[75]:
[<git.Blob "44876c571d4a9b2381e04cae6f3b05d7cd0513a7">,
<git.Blob "82f6b1bf3630c66755a1aab3613547a2b180193f">]
In [76]: x.tree.values()[1].values()[0].values()[0]
Out[76]: <git.Blob "44876c571d4a9b2381e04cae6f3b05d7cd0513a7">
In [77]: x.tree.values()[1].values()[0].values()[0].basename
Out[77]: 'rating.py'
values()よりitems()を使ったほうがいい。
In [91]: t.items()
Out[91]:
[('stat', <git.Tree "5e8a390852602cec130d67e247c559a9723bfb4f">),
('protocol', <git.Tree "878a888769dd62d505d841b7895f49bde8c4dbca">),
('encoding', <git.Tree "7ee2b27fa1f0495016811fc447e4691af94c80e0">),
('doc', <git.Tree "0e524c2147893adf6497bcf3d069a8d666c52f07">),
('gui', <git.Tree "876089c38a02f1a00a7da44df3763360dbf97bbd">),
('__init__.py', <git.Blob "82f6b1bf3630c66755a1aab3613547a2b180193f">),
('model', <git.Tree "488f70c7fc0df9ee7428f4cfb003edf873222e7f">),
('depot', <git.Tree "9a88b0832766d9330577c59e584fd93691b1285f">),
('image', <git.Tree "b354bd3049e868b59dbc261fa3083eeae1ae7b5a">)]
あとはcommit objectのstatsからpathを取り出すか。
In [117]: cx = repo.commits()
In [129]: c = cx[9]
In [130]: s = c.stats
In [131]: s.files
Out[131]: {'src/encoding/gnubgid.py': {'deletions': 4, 'lines': 8, 'insertions': 4}}
うーん、これだとcommitに関してiterateしてstatsのpathをmatchするかぁ・・・。だるいなぁ。
git-blameですね。
[nori@asama]~/Desktop/work/bglib/git% git blame VERSION
58850f89 (Noriyuki Hosaka 2009-04-09 02:49:06 +0900 1) 0.0.4
しかしGitPythonからだとうまく動かない。なにが悪いのだろう?interfaceとしてcommitの指定が必須なんですけど?!
In [193]: git.Blob.blame?
Type: instancemethod
Base Class: <type 'instancemethod'>
String Form: <bound method type.blame of <class 'git.blob.Blob'>>
Namespace: Interactive
File: /usr/lib/python2.4/site-packages/git/blob.py
Definition: git.Blob.blame(cls, repo, commit, file)
Docstring:
The blame information for the given file at the given commit
Returns
list: [git.Commit, list: [<line>]]
ああ、勘違い。commitを決めないと、fileを指定できないじゃないか・・・。
0 件のコメント:
コメントを投稿