[PATCH 2 of 8] convert-extension: move recode function to common

Edouard Gomez ed.gomez at free.fr
Sun Jul 1 17:12:09 CDT 2007


# HG changeset patch
# User Edouard Gomez <ed.gomez at free.fr>
# Date 1183302954 -7200
# Node ID 70af5cf0138fbd871085449c586dd99379567ce8
# Parent  33e5ead8d98b1d72ea27f27c748c5aa727f80051
convert-extension: move recode function to common

Each source module will need some recoding method, so let's factor
this one to common so every module can use it as a base method

diff -r 33e5ead8d98b -r 70af5cf0138f hgext/convert/common.py
--- a/hgext/convert/common.py	Sun Jul 01 17:15:54 2007 +0200
+++ b/hgext/convert/common.py	Sun Jul 01 17:15:54 2007 +0200
@@ -8,6 +8,15 @@ class commit(object):
             if not x in parts:
                 raise util.Abort("commit missing field %s" % x)
         self.__dict__.update(parts)
+
+def recode(encoding, s):
+    try:
+        return s.decode("utf-8").encode("utf-8")
+    except:
+        try:
+            return s.decode(encoding).encode("utf-8")
+        except:
+            return s.decode("utf-8", "replace").encode("utf-8")
 
 class converter_source(object):
     """Conversion source interface"""
diff -r 33e5ead8d98b -r 70af5cf0138f hgext/convert/cvs.py
--- a/hgext/convert/cvs.py	Sun Jul 01 17:15:54 2007 +0200
+++ b/hgext/convert/cvs.py	Sun Jul 01 17:15:54 2007 +0200
@@ -3,7 +3,7 @@ import os, locale, re, socket
 import os, locale, re, socket
 from mercurial import util
 
-from common import NoRepo, commit, converter_source
+from common import NoRepo, commit, converter_source, recode
 
 class convert_cvs(converter_source):
     def __init__(self, ui, path):
@@ -236,7 +236,7 @@ class convert_cvs(converter_source):
         return cl
 
     def recode(self, text):
-        return text.decode(self.encoding, "replace").encode("utf-8")
+        return recode(self.encoding, s)
 
     def getcommit(self, rev):
         return self.changeset[rev]
diff -r 33e5ead8d98b -r 70af5cf0138f hgext/convert/git.py
--- a/hgext/convert/git.py	Sun Jul 01 17:15:54 2007 +0200
+++ b/hgext/convert/git.py	Sun Jul 01 17:15:54 2007 +0200
@@ -1,17 +1,8 @@
 # git support for the convert extension
 
-import os
+import os, locale
 
-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")
+from common import NoRepo, commit, converter_source, recode
 
 class convert_git(converter_source):
     def __init__(self, ui, path):
@@ -19,6 +10,7 @@ class convert_git(converter_source):
             path += "/.git"
         self.path = path
         self.ui = ui
+        self.encoding = locale.getpreferredencoding()
         if not os.path.exists(path + "/objects"):
             raise NoRepo("couldn't open GIT repo %s" % path)
 
@@ -58,7 +50,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 +61,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)
 
@@ -102,3 +94,6 @@ class convert_git(converter_source):
             tags[tag] = node
 
         return tags
+
+    def recode(self, s):
+        return recode(self.encoding, s)


More information about the Mercurial-devel mailing list