ざらっと見た感じではcommand lineで打つコマンドや引数をpython objectにしたかんじ。
tagやHEADオブジェクトがある模様。commitへのsha1アクセスはdictかな?
validなpropertyになれないだろうから。
git.HEADとかできるらしい。
class TestHead(object):
def setup(self):
self.repo = Repo(GIT_REPO)
@patch(Git, '_call_process')
def test_repr(self, git):
git.return_value = fixture('for_each_ref')
head = self.repo.heads[0]
assert_equal('' % head.name, repr(head))
assert_true(git.called)
assert_equal(git.call_args, (('for_each_ref', 'refs/heads'), {'sort': 'committerdate', 'format': '%(refname)%(objectname)'}))
今回用がありそうなのはこの辺かな?
def test_archive_tar(self):
self.repo.archive_tar
def test_archive_tar_gz(self):
self.repo.archive_tar_gz
class Repoには、archive_tarメソッドとarchive_tar_gzメソッドがある。
def archive_tar(self, treeish = 'master', prefix = None):
"""
Archive the given treeish
``treeish``
is the treeish name/id (default 'master')
``prefix``
is the optional prefix
Examples::
>>> repo.archive_tar
>>> repo.archive_tar('a87ff14')
>>> repo.archive_tar('master', 'myproject/')
Returns
str (containing tar archive)
"""
options = {}
if prefix:
options['prefix'] = prefix
return self.git.archive(treeish, **options)
class Gitにこんなメソッドがある。
def __getattr__(self, name):
if name[:1] == '_':
raise AttributeError(name)
return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
これは参考になりますね。__getattr__でlambdaをつかった無名関数を返す。
関数が第一級objectであることとは何ぞや?ということですな。
そして_call_process
_kwargs = {}
for kwarg in execute_kwargs:
try:
_kwargs[kwarg] = kwargs.pop(kwarg)
except KeyError:
pass
# Prepare the argument list
opt_args = self.transform_kwargs(**kwargs)
ext_args = map(str, args)
args = opt_args + ext_args
call = ["git", dashify(method)]
call.extend(args)
return self.execute(call, **_kwargs)
ん~~エレガント。
0 件のコメント:
コメントを投稿