# HG changeset patch # User Shun-ichi GOTO # Date 1260181083 -32400 # Node ID dd37f044f1fa580117711b04851624f1fc9ecad4 # Parent 5b9709f81986e58bb4fb56e0b517ff4606446d2a win32mbcs: Add configuration to specify path encoding Add win32mbcs.encoding configuration option to specify the encoding to use instead of encoding.encoding. This option is useful for the users who want to write UTF-8 log message on non UTF-8 path encoding environment. diff -r 5b9709f81986 -r dd37f044f1fa hgext/win32mbcs.py --- a/hgext/win32mbcs.py Sat Dec 12 23:03:05 2009 +0100 +++ b/hgext/win32mbcs.py Mon Dec 07 19:18:03 2009 +0900 @@ -2,7 +2,7 @@ # # Copyright (c) 2008 Shun-ichi Goto # -# Version: 0.2 +# Version: 0.3 # Author: Shun-ichi Goto # # This software may be used and distributed according to the terms of the @@ -33,22 +33,29 @@ Note that there are some limitations on using this extension: - You should use single encoding in one repository. -- You should set same encoding for the repository by locale or - HGENCODING. + + +By default, win32mbcs uses encoding.encoding decided by mercurial. +You can specify the encoding by config option. -Path encoding conversion are done between Unicode and -encoding.encoding which is decided by Mercurial from current locale -setting or HGENCODING. + ex.) + [win32mbcs] + encoding = sjis + +It is usefull for the users who want to commit with utf-8 log message. + ''' import os, sys from mercurial.i18n import _ from mercurial import util, encoding +_encoding = None # see reposetup() + def decode(arg): if isinstance(arg, str): - uarg = arg.decode(encoding.encoding) - if arg == uarg.encode(encoding.encoding): + uarg = arg.decode(_encoding) + if arg == uarg.encode(_encoding): return uarg raise UnicodeError("Not local encoding") elif isinstance(arg, tuple): @@ -62,7 +69,7 @@ def encode(arg): if isinstance(arg, unicode): - return arg.encode(encoding.encoding) + return arg.encode(_encoding) elif isinstance(arg, tuple): return tuple(map(encode, arg)) elif isinstance(arg, list): @@ -93,7 +100,7 @@ return encode(func(*decode(args), **decode(kwds))) except UnicodeError: raise util.Abort(_("[win32mbcs] filename conversion failed with" - " %s encoding\n") % (encoding.encoding)) + " %s encoding\n") % (_encoding)) def wrapperforlistdir(func, args, kwds): # Ensure 'path' argument ends with os.sep to avoids @@ -136,12 +143,14 @@ if not os.path.supports_unicode_filenames: ui.warn(_("[win32mbcs] cannot activate on this platform.\n")) return - + # determine encoding for filename + global _encoding + _encoding = ui.config('win32mbcs', 'encoding', encoding.encoding) # fake is only for relevant environment. - if encoding.encoding.lower() in problematic_encodings.split(): + if _encoding.lower() in problematic_encodings.split(): for f in funcs.split(): wrapname(f, wrapper) wrapname("mercurial.osutil.listdir", wrapperforlistdir) ui.debug("[win32mbcs] activated with encoding: %s\n" - % encoding.encoding) + % _encoding)