Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
 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))
Exemplo n.º 3
0
 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))
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 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()
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
 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()