Mercurial > kallithea
changeset 877:bc9a73adc216 beta
Added recursive scanning for repositories in directory
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 22 Dec 2010 03:39:32 +0100 |
parents | 92bc5ddbda06 |
children | 859bc9e7a15d |
files | rhodecode/lib/utils.py rhodecode/model/scm.py |
diffstat | 2 files changed, 26 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/lib/utils.py Wed Dec 22 01:53:56 2010 +0100 +++ b/rhodecode/lib/utils.py Wed Dec 22 03:39:32 2010 +0100 @@ -110,31 +110,38 @@ log.error(traceback.format_exc()) sa.rollback() -def get_repos(path, recursive=False, initial=False): +def get_repos(path, recursive=False): """ Scans given path for repos and return (name,(type,path)) tuple - :param prefix: - :param path: - :param recursive: - :param initial: + :param path: path to scann for repositories + :param recursive: recursive search and return names with subdirs in front """ from vcs.utils.helpers import get_scm from vcs.exceptions import VCSError - try: - scm = get_scm(path) - except: - pass - else: - raise Exception('The given path %s should not be a repository got %s', - path, scm) + if path.endswith('/'): + #add ending slash for better results + path = path[:-1] - for dirpath in os.listdir(path): - try: - yield dirpath, get_scm(os.path.join(path, dirpath)) - except VCSError: - pass + def _get_repos(p): + for dirpath in os.listdir(p): + if os.path.isfile(os.path.join(p, dirpath)): + continue + cur_path = os.path.join(p, dirpath) + try: + scm_info = get_scm(cur_path) + yield scm_info[1].split(path)[-1].lstrip('/'), scm_info + except VCSError: + if not recursive: + continue + #check if this dir containts other repos for recursive scan + rec_path = os.path.join(p, dirpath) + if os.path.isdir(rec_path): + for inner_scm in _get_repos(rec_path): + yield inner_scm + + return _get_repos(path) def check_repo_fast(repo_name, base_path): """
--- a/rhodecode/model/scm.py Wed Dec 22 01:53:56 2010 +0100 +++ b/rhodecode/model/scm.py Wed Dec 22 03:39:32 2010 +0100 @@ -41,7 +41,7 @@ from rhodecode import BACKENDS from rhodecode.lib import helpers as h from rhodecode.lib.auth import HasRepoPermissionAny -from rhodecode.lib.utils import get_repos, make_ui, action_logger +from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, action_logger from rhodecode.model import BaseModel from rhodecode.model.user import UserModel @@ -90,7 +90,7 @@ baseui = make_ui('db') repos_list = {} - for name, path in get_repos(repos_path): + for name, path in get_filesystem_repos(repos_path, recursive=True): try: if repos_list.has_key(name): raise RepositoryError('Duplicate repository name %s '