# HG changeset patch # User Brendan Cully # Date 1183319888 25200 # Node ID 20ec5cc02f1878e6dbb52d2c49b7ad39029a7a3b # Parent a72dd3bfce4112bb86cab4c2b5f7ef22a38f9d0c convert: ove recode method into converter_source diff --git a/hgext/convert/common.py b/hgext/convert/common.py --- a/hgext/convert/common.py +++ b/hgext/convert/common.py @@ -44,6 +44,18 @@ class converter_source(object): """Return the tags as a dictionary of name: revision""" raise NotImplementedError() + def recode(self, s, encoding=None): + if not encoding: + encoding = hasattr(self, 'encoding') and self.encoding or 'utf-8' + + try: + return s.decode(encoding).encode("utf-8") + except: + try: + return s.decode("latin-1").encode("utf-8") + except: + return s.decode(encoding, "replace").encode("utf-8") + class converter_sink(object): """Conversion sink (target) interface""" diff --git a/hgext/convert/cvs.py b/hgext/convert/cvs.py --- a/hgext/convert/cvs.py +++ b/hgext/convert/cvs.py @@ -235,9 +235,6 @@ class convert_cvs(converter_source): cl.sort() return cl - def recode(self, text): - return text.decode(self.encoding, "replace").encode("utf-8") - def getcommit(self, rev): return self.changeset[rev] diff --git a/hgext/convert/git.py b/hgext/convert/git.py --- a/hgext/convert/git.py +++ b/hgext/convert/git.py @@ -4,23 +4,16 @@ import os from common import NoRepo, commit, converter_source -def recode(s): - try: - return s.decode("utf-8").encode("utf-8") - except: - try: - return s.decode("latin-1").encode("utf-8") - except: - return s.decode("utf-8", "replace").encode("utf-8") - class convert_git(converter_source): def __init__(self, ui, path): if os.path.isdir(path + "/.git"): path += "/.git" + if not os.path.exists(path + "/objects"): + raise NoRepo("couldn't open GIT repo %s" % path) + self.path = path self.ui = ui - if not os.path.exists(path + "/objects"): - raise NoRepo("couldn't open GIT repo %s" % path) + self.encoding = 'utf-8' def getheads(self): fh = os.popen("GIT_DIR=%s git-rev-parse --verify HEAD" % self.path) @@ -58,7 +51,7 @@ class convert_git(converter_source): c = self.catfile(version, "commit") # read the commit hash end = c.find("\n\n") message = c[end+2:] - message = recode(message) + message = self.recode(message) l = c[:end].splitlines() manifest = l[0].split()[1] parents = [] @@ -69,13 +62,13 @@ class convert_git(converter_source): tm, tz = p[-2:] author = " ".join(p[:-2]) if author[0] == "<": author = author[1:-1] - author = recode(author) + author = self.recode(author) if n == "committer": p = v.split() tm, tz = p[-2:] committer = " ".join(p[:-2]) if committer[0] == "<": committer = committer[1:-1] - committer = recode(committer) + committer = self.recode(committer) message += "\ncommitter: %s\n" % committer if n == "parent": parents.append(v)