[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