Edgewall Software

Ticket #8731: 8731-repo-options-r8673.patch

File 8731-repo-options-r8673.patch, 9.6 KB (added by rblank, 3 years ago)

Replace separate reponame and id arguments with an options dict in Repository.__init__().

  • trac/versioncontrol/api.py

    diff --git a/trac/versioncontrol/api.py b/trac/versioncontrol/api.py
    a b  
    5555 
    5656    def get_repository(repos_type, repos_dir, options): 
    5757        """Return a Repository instance for the given repository type and dir. 
    58          
    59         The `reponame` and `id` to be passed to the repository constructor are 
    60         passed in the `options` dictionary, for the keys "name" and "id", 
    61         respectively. 
    6258        """ 
    6359 
    6460 
     
    683679class Repository(object): 
    684680    """Base class for a repository provided by a version control system.""" 
    685681 
    686     def __init__(self, reponame, id, name, authz, log): 
     682    def __init__(self, name, options, authz, log): 
    687683        """Initialize a repository. 
    688684         
    689            :param reponame: the name of the repository, as it appears in the 
    690                             repository browser. 
    691            :param id: a surrogate key for the repository, used to identify the 
    692                       repository uniquely in the database tables. 
    693685           :param name: a unique name identifying the repository, usually a 
    694686                        type-specific prefix followed by the path to the 
    695687                        repository. 
     688           :param options: a `dict` of options for the repository. Contains the 
     689                           name of the repository for the key "name" and the 
     690                           surrogate key that identifies the repository in the 
     691                           database for the key "id". 
    696692           :param authz: a repository authorizer (deprecated). 
    697693           :param log: a logger instance. 
    698694        """ 
    699         self.reponame = reponame 
    700         self.id = id 
    701695        self.name = name 
     696        self.options = options 
     697        self.reponame = options['name'] 
     698        self.id = options['id'] 
    702699        self.authz = authz or Authorizer() 
    703700        self.log = log 
    704701 
  • trac/versioncontrol/cache.py

    diff --git a/trac/versioncontrol/cache.py b/trac/versioncontrol/cache.py
    a b  
    5050                                   + self.__class__.__name__ + '.metadata:' 
    5151                                   + str(self.repos.id), self._metadata, 
    5252                                   self.env) 
    53         Repository.__init__(self, repos.reponame, repos.id, repos.name, authz, 
    54                             log) 
     53        Repository.__init__(self, repos.name, repos.options, authz, log) 
    5554 
    5655    def close(self): 
    5756        self.repos.close() 
  • trac/versioncontrol/svn_fs.py

    diff --git a/trac/versioncontrol/svn_fs.py b/trac/versioncontrol/svn_fs.py
    a b  
    278278        if not self._version: 
    279279            self._version = self._get_version() 
    280280            self.env.systeminfo.append(('Subversion', self._version)) 
    281         fs_repos = SubversionRepository(options['name'], options['id'], 
    282                                         dir, None, self.log, 
    283                                         {'tags': self.tags, 
    284                                          'branches': self.branches, 
    285                                          'url': options.get('url') or ''}) 
     281        options.update(tags=self.tags, branches=self.branches) 
     282        fs_repos = SubversionRepository(dir, options, None, self.log) 
    286283        if type == 'direct-svnfs': 
    287284            repos = fs_repos 
    288285        else: 
     
    307304class SubversionRepository(Repository): 
    308305    """Repository implementation based on the svn.fs API.""" 
    309306 
    310     def __init__(self, reponame, id, path, authz, log, options={}): 
     307    def __init__(self, path, options, authz, log): 
    311308        self.log = log 
    312         self.options = options 
    313309        self.pool = Pool() 
    314310         
    315311        # Remove any trailing slash or else subversion might abort 
     
    338334        self.base = 'svn:%s:%s' % (self.uuid, _from_svn(root_path_utf8)) 
    339335        name = 'svn:%s:%s' % (self.uuid, self.path) 
    340336 
    341         Repository.__init__(self, reponame, id, name, authz, log) 
     337        Repository.__init__(self, name, options, authz, log) 
    342338 
    343339        # if root_path_utf8 is shorter than the path_utf8, the difference is 
    344340        # this scope (which always starts with a '/') 
     
    425421            yield 'tags', n.path, n.created_path, n.created_rev 
    426422 
    427423    def get_path_url(self, path, rev): 
    428         url = self.options['url'].rstrip('/') 
     424        url = self.options.get('url', '').rstrip('/') 
    429425        if url: 
    430426            if not path or path == '/': 
    431427                return url 
  • trac/versioncontrol/tests/api.py

    diff --git a/trac/versioncontrol/tests/api.py b/trac/versioncontrol/tests/api.py
    a b  
    2121class ApiTestCase(unittest.TestCase): 
    2222 
    2323    def setUp(self): 
    24         self.repo_base = Repository('testrepo', 1, 'testrepo', None, None) 
     24        self.repo_base = Repository('testrepo', {'name': 'testrepo', 'id': 1}, 
     25                                    None, None) 
    2526 
    2627    def test_raise_NotImplementedError_close(self): 
    2728        self.failUnlessRaises(NotImplementedError, self.repo_base.close) 
  • trac/versioncontrol/tests/cache.py

    diff --git a/trac/versioncontrol/tests/cache.py b/trac/versioncontrol/tests/cache.py
    a b  
    4646        def no_changeset(rev): 
    4747            raise NoSuchChangeset(rev) 
    4848             
    49         repos = Mock(Repository, 'test-repos', 1, 'test-repos', None, self.log, 
     49        repos = Mock(Repository, 'test-repos', {'name': 'test-repos', 'id': 1}, 
     50                     None, self.log, 
    5051                     get_changeset=no_changeset, 
    5152                     get_oldest_rev=lambda: 1, 
    5253                     get_youngest_rev=lambda: 0, 
     
    7071                           get_changes=lambda: []), 
    7172                      Mock(Changeset, 1, 'Import', 'joe', t2, 
    7273                           get_changes=lambda: iter(changes))] 
    73         repos = Mock(Repository, 'test-repos', 1, 'test-repos', None, self.log, 
     74        repos = Mock(Repository, 'test-repos', {'name': 'test-repos', 'id': 1}, 
     75                     None, self.log, 
    7476                     get_changeset=lambda x: changesets[int(x)], 
    7577                     get_oldest_rev=lambda: 0, 
    7678                     get_youngest_rev=lambda: 1, 
     
    114116        changes = [('trunk/README', Node.FILE, Changeset.EDIT, 'trunk/README', 1)] 
    115117        changeset = Mock(Changeset, 2, 'Update', 'joe', t3, 
    116118                         get_changes=lambda: iter(changes)) 
    117         repos = Mock(Repository, 'test-repos', 1, 'test-repos', None, self.log, 
     119        repos = Mock(Repository, 'test-repos', {'name': 'test-repos', 'id': 1}, 
     120                     None, self.log, 
    118121                     get_changeset=lambda x: changeset, 
    119122                     get_youngest_rev=lambda: 2, 
    120123                     get_oldest_rev=lambda: 0, 
     
    151154        cursor.execute("UPDATE repository SET value='1' " 
    152155                       "WHERE id=1 AND name='youngest_rev'") 
    153156 
    154         repos = Mock(Repository, 'test-repos', 1, 'test-repos', None, self.log, 
     157        repos = Mock(Repository, 'test-repos', {'name': 'test-repos', 'id': 1}, 
     158                     None, self.log, 
    155159                     get_changeset=lambda x: None, 
    156160                     get_youngest_rev=lambda: 1, 
    157161                     get_oldest_rev=lambda: 0, 
  • trac/versioncontrol/tests/svn_fs.py

    diff --git a/trac/versioncontrol/tests/svn_fs.py b/trac/versioncontrol/tests/svn_fs.py
    a b  
    8686class SubversionRepositoryTestCase(unittest.TestCase): 
    8787 
    8888    def setUp(self): 
    89         self.repos = SubversionRepository('repo', 1, REPOS_PATH, None, 
    90                                           logger_factory('test')) 
     89        self.repos = SubversionRepository(REPOS_PATH, 
     90                                          {'name': 'repo', 'id': 1}, 
     91                                          None, logger_factory('test')) 
    9192 
    9293    def tearDown(self): 
    9394        self.repos = None 
     
    508509class ScopedSubversionRepositoryTestCase(unittest.TestCase): 
    509510 
    510511    def setUp(self): 
    511         self.repos = SubversionRepository('repo', 1, REPOS_PATH + u'/tête', 
     512        self.repos = SubversionRepository(REPOS_PATH + u'/tête', 
     513                                          {'name': 'repo', 'id': 1}, 
    512514                                          None, logger_factory('test')) 
    513515 
    514516    def tearDown(self): 
     
    757759class RecentPathScopedRepositoryTestCase(unittest.TestCase): 
    758760 
    759761    def setUp(self): 
    760         self.repos = SubversionRepository('repo', 1, 
    761                                           REPOS_PATH + u'/tête/dir1', None, 
    762                                           logger_factory('test')) 
     762        self.repos = SubversionRepository(REPOS_PATH + u'/tête/dir1', 
     763                                          {'name': 'repo', 'id': 1}, 
     764                                          None, logger_factory('test')) 
    763765 
    764766    def tearDown(self): 
    765767        self.repos = None 
     
    778780class NonSelfContainedScopedTestCase(unittest.TestCase): 
    779781 
    780782    def setUp(self): 
    781         self.repos = SubversionRepository('repo', 1, REPOS_PATH + '/tags/v1', 
     783        self.repos = SubversionRepository(REPOS_PATH + '/tags/v1', 
     784                                          {'name': 'repo', 'id': 1}, 
    782785                                          None, logger_factory('test')) 
    783786 
    784787    def tearDown(self): 
     
    796799class AnotherNonSelfContainedScopedTestCase(unittest.TestCase): 
    797800 
    798801    def setUp(self): 
    799         self.repos = SubversionRepository('repo', 1, REPOS_PATH + '/branches', 
     802        self.repos = SubversionRepository(REPOS_PATH + '/branches', 
     803                                          {'name': 'repo', 'id': 1}, 
    800804                                          None, logger_factory('test')) 
    801805 
    802806    def tearDown(self):