def repo_scan(self, repos_path=None): """ Listing of repositories in given path. This path should not be a repository itself. Return a dictionary of repository objects :param repos_path: path to directory containing repositories """ if repos_path is None: repos_path = self.repos_path log.info('scanning for repositories in %s', repos_path) config = make_db_config() config.set('extensions', 'largefiles', '') repos = {} for name, path in get_filesystem_repos(repos_path, recursive=True): # name need to be decomposed and put back together using the / # since this is internal storage separator for rhodecode name = Repository.normalize_repo_name(name) try: if name in repos: raise RepositoryError('Duplicate repository name %s ' 'found in %s' % (name, path)) elif path[0] in rhodecode.BACKENDS: klass = get_backend(path[0]) repos[name] = klass(path[1], config=config) except OSError: continue log.debug('found %s paths with repositories', len(repos)) return repos
def repo_scan(self, repos_path=None): """ Listing of repositories in given path. This path should not be a repository itself. Return a dictionary of repository objects :param repos_path: path to directory containing repositories """ if repos_path is None: repos_path = self.repos_path log.info('scanning for repositories in %s' % repos_path) baseui = make_ui('db') repos = {} for name, path in get_filesystem_repos(repos_path, recursive=True): # skip removed repos if REMOVED_REPO_PAT.match(name): continue # name need to be decomposed and put back together using the / # since this is internal storage separator for rhodecode name = Repository.url_sep().join(name.split(os.sep)) try: if name in repos: raise RepositoryError('Duplicate repository name %s ' 'found in %s' % (name, path)) else: klass = get_backend(path[0]) if path[0] == 'hg' and path[0] in BACKENDS.keys(): repos[name] = klass(safe_str(path[1]), baseui=baseui) if path[0] == 'git' and path[0] in BACKENDS.keys(): repos[name] = klass(path[1]) except OSError: continue return repos
def repo_scan(self, repos_path=None): """Listing of repositories in given path. This path should not be a repository itself. Return a dictionary of repository objects :param repos_path: path to directory containing repositories """ log.info('scanning for repositories in %s', repos_path) if repos_path is None: repos_path = self.repos_path baseui = make_ui('db') repos_list = {} for name, path in get_filesystem_repos(repos_path, recursive=True): try: if name in repos_list: raise RepositoryError('Duplicate repository name %s ' 'found in %s' % (name, path)) else: klass = get_backend(path[0]) if path[0] == 'hg' and path[0] in BACKENDS.keys(): # for mercurial we need to have an str path repos_list[name] = klass(safe_str(path[1]), baseui=baseui) if path[0] == 'git' and path[0] in BACKENDS.keys(): repos_list[name] = klass(path[1]) except OSError: continue return repos_list
def test_get_filesystem_repos_skips_files(tmpdir): tmpdir.ensure('test-file') repos = list(utils.get_filesystem_repos(str(tmpdir))) assert repos == []
def test_get_filesystem_repos_skips_removed_repositories(tmpdir): removed_repo_name = 'rm__00000000_000000_000000__.stub' assert utils.REMOVED_REPO_PAT.match(removed_repo_name) _stub_git_repo(tmpdir.ensure(removed_repo_name, dir=True)) repos = list(utils.get_filesystem_repos(str(tmpdir))) assert repos == []
def test_get_filesystem_repos_skips_names_starting_with_dot(tmpdir): _stub_git_repo(tmpdir.ensure('.repo', dir=True)) repos = list(utils.get_filesystem_repos(str(tmpdir))) assert repos == []
def test_get_filesystem_repos_finds_repos_in_subdirectories(tmpdir, pylonsapp): _stub_git_repo(tmpdir.ensure('subdir/repo', dir=True)) repos = list(utils.get_filesystem_repos(str(tmpdir), recursive=True)) assert repos == [('subdir/repo', ('git', tmpdir.join('subdir', 'repo')))]
def test_get_filesystem_repos_skips_directories_with_repos(tmpdir, pylonsapp): _stub_git_repo(tmpdir.ensure('subdir/repo', dir=True)) repos = list(utils.get_filesystem_repos(str(tmpdir))) assert repos == []
def test_get_filesystem_repos_skips_directories(tmpdir, pylonsapp): tmpdir.ensure('not-a-repo', dir=True) repos = list(utils.get_filesystem_repos(str(tmpdir))) assert repos == []
def test_get_filesystem_repos_finds_repos(tmpdir, pylonsapp): _stub_git_repo(tmpdir.ensure('repo', dir=True)) repos = list(utils.get_filesystem_repos(str(tmpdir))) assert repos == [('repo', ('git', tmpdir.join('repo')))]