def __create_repo(self, repo_name, alias, parent, clone_uri=False, repo_store_location=None): """ makes repository on filesystem. It's group aware means it'll create a repository within a group, and alter the paths accordingly of group location :param repo_name: :param alias: :param parent_id: :param clone_uri: :param repo_path: """ from rhodecode.lib.utils import is_valid_repo, is_valid_repos_group from rhodecode.model.scm import ScmModel if parent: new_parent_path = os.sep.join(parent.full_path_splitted) else: new_parent_path = '' if repo_store_location: _paths = [repo_store_location] else: _paths = [self.repos_path, new_parent_path, repo_name] # we need to make it str for mercurial repo_path = os.path.join(*map(lambda x: safe_str(x), _paths)) # check if this path is not a repository if is_valid_repo(repo_path, self.repos_path): raise Exception('This path %s is a valid repository' % repo_path) # check if this path is a group if is_valid_repos_group(repo_path, self.repos_path): raise Exception('This path %s is a valid group' % repo_path) log.info( 'creating repo %s in %s @ %s' % (repo_name, safe_unicode(repo_path), obfuscate_url_pw(clone_uri))) backend = get_backend(alias) if alias == 'hg': repo = backend(repo_path, create=True, src_url=clone_uri) elif alias == 'git': repo = backend(repo_path, create=True, src_url=clone_uri, bare=True) # add rhodecode hook into this repo ScmModel().install_git_hook(repo=repo) else: raise Exception('Undefined alias %s' % alias) return repo
def init_model(engine): """ Initializes db session, bind the engine with the metadata, Call this before using any of the tables or classes in the model, preferably once in application start :param engine: engine to bind to """ engine_str = obfuscate_url_pw(str(engine.url)) log.info("initializing db for %s" % engine_str) meta.Base.metadata.bind = engine
def __create_repo(self, repo_name, alias, parent, clone_uri=False, repo_store_location=None): """ makes repository on filesystem. It's group aware means it'll create a repository within a group, and alter the paths accordingly of group location :param repo_name: :param alias: :param parent_id: :param clone_uri: :param repo_path: """ from rhodecode.lib.utils import is_valid_repo, is_valid_repos_group from rhodecode.model.scm import ScmModel if parent: new_parent_path = os.sep.join(parent.full_path_splitted) else: new_parent_path = '' if repo_store_location: _paths = [repo_store_location] else: _paths = [self.repos_path, new_parent_path, repo_name] # we need to make it str for mercurial repo_path = os.path.join(*map(lambda x: safe_str(x), _paths)) # check if this path is not a repository if is_valid_repo(repo_path, self.repos_path): raise Exception('This path %s is a valid repository' % repo_path) # check if this path is a group if is_valid_repos_group(repo_path, self.repos_path): raise Exception('This path %s is a valid group' % repo_path) log.info('creating repo %s in %s @ %s' % ( repo_name, safe_unicode(repo_path), obfuscate_url_pw(clone_uri) ) ) backend = get_backend(alias) if alias == 'hg': repo = backend(repo_path, create=True, src_url=clone_uri) elif alias == 'git': repo = backend(repo_path, create=True, src_url=clone_uri, bare=True) # add rhodecode hook into this repo ScmModel().install_git_hook(repo=repo) else: raise Exception('Undefined alias %s' % alias) return repo
def _create_filesystem_repo(self, repo_name, repo_type, repo_group, clone_uri=None, repo_store_location=None, use_global_config=False): """ makes repository on filesystem. It's group aware means it'll create a repository within a group, and alter the paths accordingly of group location :param repo_name: :param alias: :param parent: :param clone_uri: :param repo_store_location: """ from rhodecode.lib.utils import is_valid_repo, is_valid_repo_group from rhodecode.model.scm import ScmModel if Repository.NAME_SEP in repo_name: raise ValueError('repo_name must not contain groups got `%s`' % repo_name) if isinstance(repo_group, RepoGroup): new_parent_path = os.sep.join(repo_group.full_path_splitted) else: new_parent_path = repo_group or '' if repo_store_location: _paths = [repo_store_location] else: _paths = [self.repos_path, new_parent_path, repo_name] # we need to make it str for mercurial repo_path = os.path.join(*map(lambda x: safe_str(x), _paths)) # check if this path is not a repository if is_valid_repo(repo_path, self.repos_path): raise Exception('This path %s is a valid repository' % repo_path) # check if this path is a group if is_valid_repo_group(repo_path, self.repos_path): raise Exception('This path %s is a valid group' % repo_path) log.info('creating repo %s in %s from url: `%s`', repo_name, safe_unicode(repo_path), obfuscate_url_pw(clone_uri)) backend = get_backend(repo_type) config_repo = None if use_global_config else repo_name if config_repo and new_parent_path: config_repo = Repository.NAME_SEP.join( (new_parent_path, config_repo)) config = make_db_config(clear_session=False, repo=config_repo) config.set('extensions', 'largefiles', '') # patch and reset hooks section of UI config to not run any # hooks on creating remote repo config.clear_section('hooks') # TODO: johbo: Unify this, hardcoded "bare=True" does not look nice if repo_type == 'git': repo = backend(repo_path, config=config, create=True, src_url=clone_uri, bare=True) else: repo = backend(repo_path, config=config, create=True, src_url=clone_uri) ScmModel().install_hooks(repo, repo_type=repo_type) log.debug('Created repo %s with %s backend', safe_unicode(repo_name), safe_unicode(repo_type)) return repo
def test_obfuscate_url_pw(): engine = u'/home/repos/malmö' assert obfuscate_url_pw(engine)