changeset 1194:49791c40a8a5

maps: change authormap to initialize with an svnmeta object This refactoring will help us break AuthorMaps access of global options via ui.config allowing us to use svnmeta as the central store for reading and writing configuration options.
author Sean Farley <sean.michael.farley@gmail.com>
date Mon, 24 Mar 2014 11:20:46 -0500
parents a55339d35066
children a5641006e338
files hgsubversion/maps.py hgsubversion/svnmeta.py tests/test_fetch_mappings.py
diffstat 3 files changed, 26 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/hgsubversion/maps.py
+++ b/hgsubversion/maps.py
@@ -19,7 +19,7 @@ class AuthorMap(dict):
     the userid from Subversion is always compared lowercase.
     '''
 
-    def __init__(self, ui, path, defaulthost=None):
+    def __init__(self, meta):
         '''Initialise a new AuthorMap.
 
         The ui argument is used to print diagnostic messages.
@@ -27,20 +27,19 @@ class AuthorMap(dict):
         The path argument is the location of the backing store,
         typically .hg/svn/authors.
         '''
-        self.ui = ui
-        self.path = path
-        self.use_defaultauthors = self.ui.configbool('hgsubversion', 'defaultauthors', True)
-        self.caseignoreauthors = self.ui.configbool('hgsubversion', 'caseignoreauthors', False)
-        if defaulthost:
-            self.defaulthost = '@%s' % defaulthost.lstrip('@')
-        else:
-            self.defaulthost = ''
+        self.meta = meta
+        self.use_defaultauthors = self.meta.ui.configbool('hgsubversion', 'defaultauthors', True)
+        self.caseignoreauthors = self.meta.ui.configbool('hgsubversion', 'caseignoreauthors', False)
+        self.defaulthost = ''
+        if meta.defaulthost:
+            self.defaulthost = '@%s' % meta.defaulthost.lstrip('@')
+
         self.super = super(AuthorMap, self)
         self.super.__init__()
-        self.load(path)
+        self.load(self.meta.authors_file)
 
         # append authors specified from the commandline
-        clmap = util.configpath(self.ui, 'authormap')
+        clmap = util.configpath(self.meta.ui, 'authormap')
         if clmap:
             self.load(clmap)
 
@@ -52,10 +51,10 @@ class AuthorMap(dict):
             return
 
         writing = False
-        if path != self.path:
-            writing = open(self.path, 'a')
+        if path != self.meta.authors_file:
+            writing = open(self.meta.authors_file, 'a')
 
-        self.ui.debug('reading authormap from %s\n' % path)
+        self.meta.ui.debug('reading authormap from %s\n' % path)
         f = open(path, 'r')
         for number, line_org in enumerate(f):
 
@@ -67,7 +66,7 @@ class AuthorMap(dict):
                 src, dst = line.split('=', 1)
             except (IndexError, ValueError):
                 msg = 'ignoring line %i in author map %s: %s\n'
-                self.ui.status(msg % (number, path, line.rstrip()))
+                self.meta.ui.status(msg % (number, path, line.rstrip()))
                 continue
 
             src = src.strip()
@@ -78,10 +77,10 @@ class AuthorMap(dict):
 
             if writing:
                 if not src in self:
-                    self.ui.debug('adding author %s to author map\n' % src)
+                    self.meta.ui.debug('adding author %s to author map\n' % src)
                 elif dst != self[src]:
                     msg = 'overriding author: "%s" to "%s" (%s)\n'
-                    self.ui.status(msg % (self[src], dst, src))
+                    self.meta.ui.status(msg % (self[src], dst, src))
                 writing.write(line_org)
 
             self[src] = dst
@@ -107,11 +106,11 @@ class AuthorMap(dict):
         elif self.use_defaultauthors:
             self[author] = result = '%s%s' % (author, self.defaulthost)
             msg = 'substituting author "%s" for default "%s"\n'
-            self.ui.debug(msg % (author, result))
+            self.meta.ui.debug(msg % (author, result))
         else:
             msg = 'author %s has no entry in the author map!'
             raise hgutil.Abort(msg % author)
-        self.ui.debug('mapping author "%s" to "%s"\n' % (author, result))
+        self.meta.ui.debug('mapping author "%s" to "%s"\n' % (author, result))
         return result
 
     def reverselookup(self, author):
--- a/hgsubversion/svnmeta.py
+++ b/hgsubversion/svnmeta.py
@@ -39,7 +39,6 @@ class SVNMeta(object):
         self._gen_cachedconfig('defaulthost', self.uuid)
         self._gen_cachedconfig('usebranchnames', True)
 
-        author_host = self.ui.config('hgsubversion', 'defaulthost', uuid)
         branchmap = util.configpath(self.ui, 'branchmap')
         tagmap = util.configpath(self.ui, 'tagmap')
         filemap = util.configpath(self.ui, 'filemap')
@@ -51,8 +50,7 @@ class SVNMeta(object):
                                                        ui=self.repo.ui)
         self._layoutobj = None
 
-        self.authors = maps.AuthorMap(self.ui, self.authors_file,
-                                      defaulthost=author_host)
+        self.authors = maps.AuthorMap(self)
 
         self.branchmap = maps.BranchMap(self.ui, self.branchmap_file)
         if branchmap:
--- a/tests/test_fetch_mappings.py
+++ b/tests/test_fetch_mappings.py
@@ -84,10 +84,15 @@ class MapTests(test_util.TestBase):
     def test_author_map_no_overwrite(self):
         cwd = os.path.dirname(__file__)
         orig = os.path.join(cwd, 'fixtures', 'author-map-test.txt')
-        new = open(self.authors, 'w')
+        # create a fake hgsubversion repo
+        repopath = os.path.join(self.wc_path, '.hg')
+        repopath = os.path.join(repopath, 'svn')
+        if not os.path.isdir(repopath):
+            os.makedirs(repopath)
+        new = open(os.path.join(repopath, 'authors'), 'w')
         new.write(open(orig).read())
         new.close()
-        test = maps.AuthorMap(self.ui(), self.authors)
+        test = maps.AuthorMap(self.repo.svnmeta(skiperrorcheck=True))
         fromself = set(test)
         test.load(orig)
         all_tests = set(test)