diff --git a/trac/versioncontrol/api.py b/trac/versioncontrol/api.py
|
a
|
b
|
|
| 55 | 55 | |
| 56 | 56 | def get_repository(repos_type, repos_dir, options): |
| 57 | 57 | """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. |
| 62 | 58 | """ |
| 63 | 59 | |
| 64 | 60 | |
| … |
… |
|
| 683 | 679 | class Repository(object): |
| 684 | 680 | """Base class for a repository provided by a version control system.""" |
| 685 | 681 | |
| 686 | | def __init__(self, reponame, id, name, authz, log): |
| | 682 | def __init__(self, name, options, authz, log): |
| 687 | 683 | """Initialize a repository. |
| 688 | 684 | |
| 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. |
| 693 | 685 | :param name: a unique name identifying the repository, usually a |
| 694 | 686 | type-specific prefix followed by the path to the |
| 695 | 687 | 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". |
| 696 | 692 | :param authz: a repository authorizer (deprecated). |
| 697 | 693 | :param log: a logger instance. |
| 698 | 694 | """ |
| 699 | | self.reponame = reponame |
| 700 | | self.id = id |
| 701 | 695 | self.name = name |
| | 696 | self.options = options |
| | 697 | self.reponame = options['name'] |
| | 698 | self.id = options['id'] |
| 702 | 699 | self.authz = authz or Authorizer() |
| 703 | 700 | self.log = log |
| 704 | 701 | |
diff --git a/trac/versioncontrol/cache.py b/trac/versioncontrol/cache.py
|
a
|
b
|
|
| 50 | 50 | + self.__class__.__name__ + '.metadata:' |
| 51 | 51 | + str(self.repos.id), self._metadata, |
| 52 | 52 | 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) |
| 55 | 54 | |
| 56 | 55 | def close(self): |
| 57 | 56 | self.repos.close() |
diff --git a/trac/versioncontrol/svn_fs.py b/trac/versioncontrol/svn_fs.py
|
a
|
b
|
|
| 278 | 278 | if not self._version: |
| 279 | 279 | self._version = self._get_version() |
| 280 | 280 | 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) |
| 286 | 283 | if type == 'direct-svnfs': |
| 287 | 284 | repos = fs_repos |
| 288 | 285 | else: |
| … |
… |
|
| 307 | 304 | class SubversionRepository(Repository): |
| 308 | 305 | """Repository implementation based on the svn.fs API.""" |
| 309 | 306 | |
| 310 | | def __init__(self, reponame, id, path, authz, log, options={}): |
| | 307 | def __init__(self, path, options, authz, log): |
| 311 | 308 | self.log = log |
| 312 | | self.options = options |
| 313 | 309 | self.pool = Pool() |
| 314 | 310 | |
| 315 | 311 | # Remove any trailing slash or else subversion might abort |
| … |
… |
|
| 338 | 334 | self.base = 'svn:%s:%s' % (self.uuid, _from_svn(root_path_utf8)) |
| 339 | 335 | name = 'svn:%s:%s' % (self.uuid, self.path) |
| 340 | 336 | |
| 341 | | Repository.__init__(self, reponame, id, name, authz, log) |
| | 337 | Repository.__init__(self, name, options, authz, log) |
| 342 | 338 | |
| 343 | 339 | # if root_path_utf8 is shorter than the path_utf8, the difference is |
| 344 | 340 | # this scope (which always starts with a '/') |
| … |
… |
|
| 425 | 421 | yield 'tags', n.path, n.created_path, n.created_rev |
| 426 | 422 | |
| 427 | 423 | def get_path_url(self, path, rev): |
| 428 | | url = self.options['url'].rstrip('/') |
| | 424 | url = self.options.get('url', '').rstrip('/') |
| 429 | 425 | if url: |
| 430 | 426 | if not path or path == '/': |
| 431 | 427 | return url |
diff --git a/trac/versioncontrol/tests/api.py b/trac/versioncontrol/tests/api.py
|
a
|
b
|
|
| 21 | 21 | class ApiTestCase(unittest.TestCase): |
| 22 | 22 | |
| 23 | 23 | 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) |
| 25 | 26 | |
| 26 | 27 | def test_raise_NotImplementedError_close(self): |
| 27 | 28 | self.failUnlessRaises(NotImplementedError, self.repo_base.close) |
diff --git a/trac/versioncontrol/tests/cache.py b/trac/versioncontrol/tests/cache.py
|
a
|
b
|
|
| 46 | 46 | def no_changeset(rev): |
| 47 | 47 | raise NoSuchChangeset(rev) |
| 48 | 48 | |
| 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, |
| 50 | 51 | get_changeset=no_changeset, |
| 51 | 52 | get_oldest_rev=lambda: 1, |
| 52 | 53 | get_youngest_rev=lambda: 0, |
| … |
… |
|
| 70 | 71 | get_changes=lambda: []), |
| 71 | 72 | Mock(Changeset, 1, 'Import', 'joe', t2, |
| 72 | 73 | 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, |
| 74 | 76 | get_changeset=lambda x: changesets[int(x)], |
| 75 | 77 | get_oldest_rev=lambda: 0, |
| 76 | 78 | get_youngest_rev=lambda: 1, |
| … |
… |
|
| 114 | 116 | changes = [('trunk/README', Node.FILE, Changeset.EDIT, 'trunk/README', 1)] |
| 115 | 117 | changeset = Mock(Changeset, 2, 'Update', 'joe', t3, |
| 116 | 118 | 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, |
| 118 | 121 | get_changeset=lambda x: changeset, |
| 119 | 122 | get_youngest_rev=lambda: 2, |
| 120 | 123 | get_oldest_rev=lambda: 0, |
| … |
… |
|
| 151 | 154 | cursor.execute("UPDATE repository SET value='1' " |
| 152 | 155 | "WHERE id=1 AND name='youngest_rev'") |
| 153 | 156 | |
| 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, |
| 155 | 159 | get_changeset=lambda x: None, |
| 156 | 160 | get_youngest_rev=lambda: 1, |
| 157 | 161 | get_oldest_rev=lambda: 0, |
diff --git a/trac/versioncontrol/tests/svn_fs.py b/trac/versioncontrol/tests/svn_fs.py
|
a
|
b
|
|
| 86 | 86 | class SubversionRepositoryTestCase(unittest.TestCase): |
| 87 | 87 | |
| 88 | 88 | 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')) |
| 91 | 92 | |
| 92 | 93 | def tearDown(self): |
| 93 | 94 | self.repos = None |
| … |
… |
|
| 508 | 509 | class ScopedSubversionRepositoryTestCase(unittest.TestCase): |
| 509 | 510 | |
| 510 | 511 | 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}, |
| 512 | 514 | None, logger_factory('test')) |
| 513 | 515 | |
| 514 | 516 | def tearDown(self): |
| … |
… |
|
| 757 | 759 | class RecentPathScopedRepositoryTestCase(unittest.TestCase): |
| 758 | 760 | |
| 759 | 761 | 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')) |
| 763 | 765 | |
| 764 | 766 | def tearDown(self): |
| 765 | 767 | self.repos = None |
| … |
… |
|
| 778 | 780 | class NonSelfContainedScopedTestCase(unittest.TestCase): |
| 779 | 781 | |
| 780 | 782 | 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}, |
| 782 | 785 | None, logger_factory('test')) |
| 783 | 786 | |
| 784 | 787 | def tearDown(self): |
| … |
… |
|
| 796 | 799 | class AnotherNonSelfContainedScopedTestCase(unittest.TestCase): |
| 797 | 800 | |
| 798 | 801 | def setUp(self): |
| 799 | | self.repos = SubversionRepository('repo', 1, REPOS_PATH + '/branches', |
| | 802 | self.repos = SubversionRepository(REPOS_PATH + '/branches', |
| | 803 | {'name': 'repo', 'id': 1}, |
| 800 | 804 | None, logger_factory('test')) |
| 801 | 805 | |
| 802 | 806 | def tearDown(self): |