From 0fad7e130c6a79cbe21bdb99f7c3852920ab85a0 Mon Sep 17 00:00:00 2001 From: Erik Osheim Date: Thu, 14 May 2009 19:48:40 -0400 Subject: [PATCH] abstract class HgBase introduced; methods updated --HG-- branch : pmacs2 --- method/hg.py | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/method/hg.py b/method/hg.py index fae433d..0399c2f 100644 --- a/method/hg.py +++ b/method/hg.py @@ -10,7 +10,23 @@ try: except ImportError: has_hg = False -class HgBlame(VcBlame): +class HgBase(object): + def _hg_check(self, w): + if not has_hg: + w.set_error("Mercurial is not installed") + return False + elif not hasattr(w.buffer, 'path'): + w.set_error("Buffer has no corresponding file") + return False + else: + return True + def _hg_init(self): + ui_imp = ui.ui(verbose=True) + ui_imp.pushbuffer() + repo = hg.repository(ui=ui_imp, path='.') + return ui_imp, repo + +class HgBlame(VcBlame, HgBase): """Show buffer annotated with hg metadata""" line_re = re.compile(r'^ *(?P[^ ]+) (?P\d+) (?P\d{4}-\d{2}-\d{2}): (?P.*)\n$') prefix_fmt = '[b:d:*]%(rev)-5s [c:d:*]%(user)-10s [b:d:*]%(date)10s[d:d:*]' @@ -19,23 +35,32 @@ class HgBlame(VcBlame): cmd = ("hg", 'blame', '-nudq', w.buffer.path) return Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) -class HgLog(Method): +class HgBlame2(Method, HgBase): + def _execute(self, w, **vargs): + if not self._hg_check(w): + return + ui_imp, repo = self._hg_init() + hgc.identify(ui_imp, repo, w.buffer.path) + hgc.annotate(ui_imp, repo, w.buffer.path, user=None, date=None, rev=None) + s = ''.join(ui_imp.popbuffer()) + w.application.data_buffer('*Blame*', s, switch_to=True) + +class HgLog(Method, HgBase): """Show hg log for this buffer""" def _execute(self, w, **vargs): - w.set_error("unimplemented") + if not self._hg_check(w): + return + ui_imp, repo = self._hg_init() + hgc.log(ui_imp, repo, user=None, rev=None, date=None) + s = ''.join(ui_imp.popbuffer()) + w.application.data_buffer('*Log*', s, switch_to=True) -class HgDiff(Method): +class HgDiff(Method, HgBase): """Diff the current file with the version in Mercurial""" def _execute(self, w, **vargs): - if not has_hg: - w.set_error("Mercurial is not installed") + if not self._hg_check(w): return - elif not hasattr(w.buffer, 'path'): - w.set_error("Buffer has no corresponding file") - return - ui_imp = ui.ui(verbose=True) - ui_imp.pushbuffer() - repo = hg.repository(ui=ui_imp, path='.') + ui_imp, repo = self._hg_init() hgc.diff(ui_imp, repo, w.buffer.path) s = ''.join(ui_imp.popbuffer()) w.application.data_buffer("*Diff*", s, switch_to=True, modename='diff')