def add_repository(self, name): """Add a repository.""" dir = os.path.join(self.parentpath, name) if not os.path.isabs(dir): raise TracError(_("The repository directory must be absolute")) trunk = os.path.join(dir, 'trunk') branches = os.path.join(dir, 'branches') tags = os.path.join(dir, 'tags') command = '"%(svnadmin)s" create "%(dir)s"; "%(svn)s" mkdir --parents -q -m "Created Folders" "file://%(trunk)s" "file://%(branches)s" "file://%(tags)s"' % { 'svnadmin': self.admin, 'dir': dir, 'svn': self.client, 'trunk': trunk, 'branches': branches, 'tags': tags } process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (result, error) = process.communicate() if error is not None and error != "": if error.find('E165002') > -1: raise TracError(_('The repository "%(name)s" already exists.', name=name)) elif error.find('E000002') > -1 or error.find('E000013') > -1: raise TracError(_("Can't create the repository '%(name)s.' " "Make sure the parent directory '%(parentpath)s' exists " "and the web server has write permissions for it.", name=name, parentpath=self.parentpath)) else: raise TracError(error) if self.hookspath and os.path.exists(self.hookspath): hooksdir = os.path.join(dir, 'hooks/') files = os.listdir(self.hookspath) files = [self.hookspath + '/' + filename for filename in files] for file in files: shutil.copy2(file, hooksdir) rm = RepositoryManager(self.env) rm.reload_repositories()
def remove_repository(self, name): """Remove a repository.""" try: dir = os.path.join(self.parentpath, name) shutil.rmtree(dir) rm = RepositoryManager(self.env) rm.reload_repositories() except OSError, why: raise TracError(str(why))
def remove_repository(self, name): """Remove a repository.""" try: dir = os.path.join(self.parentpath, name) shutil.rmtree(dir) rm = RepositoryManager(self.env) rm.reload_repositories() except OSError, why: raise TracError(str(why))
def render_admin_panel(self, req, category, page, path_info): if not isinstance(self.env, ProductEnvironment): return super(ProductRepositoryAdminPanel, self).render_admin_panel(req, category, page, path_info) req.perm.require('VERSIONCONTROL_ADMIN') db_provider = self.env[DbRepositoryProvider] if req.method == 'POST' and db_provider: if req.args.get('remove'): repolist = req.args.get('sel') if repolist: if isinstance(repolist, basestring): repolist = [ repolist, ] for reponame in repolist: db_provider.unlink_product(reponame) elif req.args.get('addlink') is not None and db_provider: reponame = req.args.get('repository') db_provider.link_product(reponame) req.redirect(req.href.admin(category, page)) # Retrieve info for all product repositories rm_product = RepositoryManager(self.env) rm_product.reload_repositories() all_product_repos = rm_product.get_all_repositories() repositories = dict( (reponame, self._extend_info(reponame, info.copy(), True)) for (reponame, info) in all_product_repos.iteritems()) types = sorted([''] + rm_product.get_supported_types()) # construct a list of all repositores not linked to this product rm = RepositoryManager(self.env.parent) all_repos = rm.get_all_repositories() unlinked_repositories = dict([ (k, all_repos[k]) for k in sorted(set(all_repos) - set(all_product_repos)) ]) data = { 'types': types, 'default_type': rm_product.repository_type, 'repositories': repositories, 'unlinked_repositories': unlinked_repositories } return 'repository_links.html', data
def add_repository(self, name): """Add a repository.""" dir = os.path.join(self.parentpath, name) if not os.path.isabs(dir): raise TracError(_("The repository directory must be absolute")) trunk = os.path.join(dir, 'trunk') branches = os.path.join(dir, 'branches') tags = os.path.join(dir, 'tags') command = '"%(svnadmin)s" create "%(dir)s"; "%(svn)s" mkdir --parents -q -m "Created Folders" "file://%(trunk)s" "file://%(branches)s" "file://%(tags)s"' % { 'svnadmin': self.admin, 'dir': dir, 'svn': self.client, 'trunk': trunk, 'branches': branches, 'tags': tags } process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (result, error) = process.communicate() if error is not None and error != "": if error.find('E165002') > -1: raise TracError( _('The repository "%(name)s" already exists.', name=name)) elif error.find('E000002') > -1 or error.find('E000013') > -1: raise TracError( _( "Can't create the repository '%(name)s.' " "Make sure the parent directory '%(parentpath)s' exists " "and the web server has write permissions for it.", name=name, parentpath=self.parentpath)) else: raise TracError(error) if self.hookspath and os.path.exists(self.hookspath): hooksdir = os.path.join(dir, 'hooks/') files = os.listdir(self.hookspath) files = [self.hookspath + '/' + filename for filename in files] for file in files: shutil.copy2(file, hooksdir) rm = RepositoryManager(self.env) rm.reload_repositories()
def render_admin_panel(self, req, category, page, path_info): if not isinstance(self.env, ProductEnvironment): return super(ProductRepositoryAdminPanel, self).render_admin_panel( req, category, page, path_info) req.perm.require('VERSIONCONTROL_ADMIN') db_provider = self.env[DbRepositoryProvider] if req.method == 'POST' and db_provider: if req.args.get('remove'): repolist = req.args.get('sel') if repolist: if isinstance(repolist, basestring): repolist = [repolist, ] for reponame in repolist: db_provider.unlink_product(reponame) elif req.args.get('addlink') is not None and db_provider: reponame = req.args.get('repository') db_provider.link_product(reponame) req.redirect(req.href.admin(category, page)) # Retrieve info for all product repositories rm_product = RepositoryManager(self.env) rm_product.reload_repositories() all_product_repos = rm_product.get_all_repositories() repositories = dict((reponame, self._extend_info( reponame, info.copy(), True)) for (reponame, info) in all_product_repos.iteritems()) types = sorted([''] + rm_product.get_supported_types()) # construct a list of all repositores not linked to this product rm = RepositoryManager(self.env.parent) all_repos = rm.get_all_repositories() unlinked_repositories = dict([(k, all_repos[k]) for k in sorted(set(all_repos) - set(all_product_repos))]) data = {'types': types, 'default_type': rm_product.repository_type, 'repositories': repositories, 'unlinked_repositories': unlinked_repositories} return 'repository_links.html', data
def add_repository(self, name): """Add a repository.""" dir = os.path.join(self.parentpath, name) if not os.path.isabs(dir): raise TracError(_("The repository directory must be absolute")) trunk = os.path.join(dir, 'trunk') branches = os.path.join(dir, 'branches') tags = os.path.join(dir, 'tags') command = u'"{svnadmin}" create "{dir}"' if self.create_base_structure: command += '; "{svn}" mkdir --parents -q -m "Created Folders" "file://{trunk}" "file://{branches}" "file://{tags}"' if self.chmod: command += '; chmod {chmod} "{dir}"' command = command.format( svnadmin=self.svnadmin, dir=dir, svn=self.svnclient, trunk=trunk, branches=branches, tags=tags, chmod=self.chmod, ) process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (result, error) = process.communicate() if error is not None and error != "": if error.find('E165002') > -1: raise TracError(_('The repository "%(name)s" already exists.', name=name)) elif error.find('E000002') > -1 or error.find('E000013') > -1: raise TracError(_("Can't create the repository '%(name)s.' " "Make sure the parent directory '%(parentpath)s' exists " "and the web server has write permissions for it.", name=name, parentpath=self.parentpath)) else: raise TracError(error) if self.hookspath and os.path.exists(self.hookspath): hooksdir = os.path.join(dir, 'hooks/') files = os.listdir(self.hookspath) files = [os.path.join(self.hookspath, filename) for filename in files] for f in files: shutil.copy2(f, hooksdir) rm = RepositoryManager(self.env) rm.reload_repositories()