localrepo: use path expansion API via vfs
As a part of migration to vfs, this patch moves path expansion API
invocations in the constructor of "localrepository" to the constructor
of "opener", because the root path to the repository is very important
to handle paths using non-ASCII characters correctly.
This patch also rearrange initialization order of "wvfs" field,
because it is required to initialize "self.root".
--- a/mercurial/localrepo.py Fri Jul 06 18:45:26 2012 +0900
+++ b/mercurial/localrepo.py Fri Jul 06 18:45:27 2012 +0900
@@ -37,14 +37,14 @@
def __init__(self, baseui, path=None, create=False):
repo.repository.__init__(self)
- self.root = os.path.realpath(util.expandpath(path))
+ self.wopener = scmutil.opener(path, expand=True)
+ self.wvfs = self.wopener
+ self.root = self.wvfs.base
self.path = os.path.join(self.root, ".hg")
self.origroot = path
self.auditor = scmutil.pathauditor(self.root, self._checknested)
self.opener = scmutil.opener(self.path)
self.vfs = self.opener
- self.wopener = scmutil.opener(self.root)
- self.wvfs = self.wopener
self.baseui = baseui
self.ui = baseui.copy()
# A list of callback to shape the phase if no data were found.
--- a/mercurial/scmutil.py Fri Jul 06 18:45:26 2012 +0900
+++ b/mercurial/scmutil.py Fri Jul 06 18:45:27 2012 +0900
@@ -196,7 +196,9 @@
This class is used to hide the details of COW semantics and
remote file access from higher level code.
'''
- def __init__(self, base, audit=True):
+ def __init__(self, base, audit=True, expand=False):
+ if expand:
+ base = os.path.realpath(util.expandpath(base))
self.base = base
self._audit = audit
if audit: