メモ。Mercurialのバージョンは1.6。
PythonからMercurialのリポジトリの状態を取得したりちょっと操作したり。軽くラッパーを書いて使ってみてる。
hgwrapper.py
import os from mercurial import cmdutil from mercurial import commands from mercurial.hg import repository from mercurial.ui import ui from mercurial.match import match class MercurialWrapper(object): def __init__(self, path, encoding='utf-8'): self.path = os.path.normpath(path) self.ui = ui() self.repository = repository(self.ui, self.path) self.encoding = encoding def get_modified(self): return self.repository.status()[0] def get_added(self): return self.repository.status()[1] def get_removed(self): return self.repository.status()[2] def get_deleted(self): return self.repository.status()[3] def get_unknown(self): return self.repository.status(unknown=True)[4] def add(self, files): self.repository[None].add(files) def commit(self, files, commit_message): self.repository.commit( text=commit_message.encode(self.encoding), match=match(self.repository.root, self.repository.root, None, include=files) ) def revert(self, files, no_backup=True): opts = { 'no_backup': no_backup, 'date': '', 'rev': '', } commands.revert(self.ui, self.repository, *[os.path.join(self.path, fn) for fn in files], **opts) def remove(self, files): self.repository[None].remove(files)
使う場合。
>>> from hgwrapper import MercurialWrapper >>> repo = MercurialWrapper('/home/tokibito/_work/repo_test/') >>> repo.get_modified() ['fuga.txt'] >>> repo.get_added() ['piyo.txt'] >>> repo.get_unknown() ['example/foo.txt'] >>> repo.get_removed() ['example/bar.txt']
ノードとコンテキストの使い方をまだ理解してない。