コード例 #1
0
ファイル: project.py プロジェクト: juhamust/multiproject
    def get_repository_url(self, relative=False):
        # TODO: Find way to fix this
        """
        WARNING: Expensive call due conf.getVersionControlType
        """
        params = {'domain': conf.domain_name,
                  'project': self.env_name,
                  'path': conf.getVersionControlType(self.env_name),
                  'scheme': conf.default_http_scheme}

        if relative:
            return "%(path)s/%(project)s/" % params
        else:
            return "%(scheme)s://%(domain)s/%(path)s/%(project)s/" % params
コード例 #2
0
    def get_repository_url(self, relative=False):
        # TODO: Find way to fix this
        """
        WARNING: Expensive call due conf.getVersionControlType
        """
        params = {
            'domain': conf.domain_name,
            'project': self.env_name,
            'path': conf.getVersionControlType(self.env_name),
            'scheme': conf.default_http_scheme
        }

        if relative:
            return "%(path)s/%(project)s/" % params
        else:
            return "%(scheme)s://%(domain)s/%(path)s/%(project)s/" % params
コード例 #3
0
ファイル: xmlrpc.py プロジェクト: juhamust/multiproject
    def get_scm_repository_url(self, env_name):
        """
        .. WARNING:: Expensive call due conf.getVersionControlType
        """

        vcs = conf.getVersionControlType(env_name)

        if vcs == "git":
            extension = ".git"
        else:
            extension = ""

        params = {'domain': conf.domain_name,
                  'project': env_name,
                  'scm_type': vcs,
                  'scheme': conf.default_http_scheme,
                  'ext': extension}

        return "versioncontrol|%(scm_type)s|%(scheme)s://%(domain)s/%(scm_type)s/%(project)s%(ext)s" % params
コード例 #4
0
    def get_scm_repository_url(self, env_name):
        """
        .. WARNING:: Expensive call due conf.getVersionControlType
        """

        vcs = conf.getVersionControlType(env_name)

        if vcs == "git":
            extension = ".git"
        else:
            extension = ""

        params = {'domain': conf.domain_name,
                  'project': env_name,
                  'scm_type': vcs,
                  'scheme': conf.default_http_scheme,
                  'ext': extension}

        return "versioncontrol|%(scm_type)s|%(scheme)s://%(domain)s/%(scm_type)s/%(project)s%(ext)s" % params
コード例 #5
0
ファイル: storages.py プロジェクト: juhamust/multiproject
    def render_admin_panel(self, req, cat, page, path_info):
        """ Renders storage admin panel page
        """
        req.perm.require("TRAC_ADMIN")

        project = Project.get(self.env)
        vcs_type = conf.getVersionControlType(self.env.project_identifier)  # TODO: deprecate / heavy call!
        vcs_url = project.get_repository_url()

        data = {
            "vcs_name": conf.getVersionControlName(vcs_type),
            "vcs_type": vcs_type,
            "vcs_url": vcs_url,
            "dav_url": project.get_dav_url(),
            "vcs_cmd": "clone",
        }

        if vcs_type == "svn":
            data["vcs_cmd"] = "checkout"

        return "storages.html", data
コード例 #6
0
ファイル: projects.py プロジェクト: alvabai/trac-multiproject
    def remove_project(self, project):
        """
        Removes existing project.

        :arg project: :class:`Project` to be removed.
        """
        vcs_type = conf.getVersionControlType(project.env_name)
        vcs_name = ""

        # Remove project from db
        cmd = commands.ListUpProject(project)
        cmd.success = True
        cmd.undo()

        # Remove configuration
        cmd = commands.ConfigureTrac(project, {'vcs_type': vcs_type})
        cmd.success = True
        cmd.undo()

        # Remove trac environment
        cmd = commands.CreateTracEnvironment(project, {'vcs_type': vcs_type, 'vcs_name': vcs_name})
        cmd.success = True
        cmd.undo()

        cmd = commands.CreateTracVersionControl(project, {'vcs_type': vcs_type, 'vcs_name': vcs_name})
        cmd.success = True
        cmd.undo()

        # Remove database
        cmd = commands.CreateTracDatabase(project)
        cmd.success = True
        cmd.undo()

        cmd = commands.CreateDav(project)
        cmd.undo()

        cmd = commands.CreateDownloads(project)
        cmd.undo()

        return True
コード例 #7
0
ファイル: actions.py プロジェクト: alvabai/trac-multiproject
    def create_project(self, req):
        """ Handler for creating project request
        """
        req.perm.require("PROJECT_CREATE")
        if req.method != 'POST':
            return self.create_failure(req, 'POST request needed when creating a new project')
        author = get_context(req)['author']
        # If agreement needed but not getting it, show failure
        if conf.project_requires_agreed_terms and not self._is_active_user(req):
            return self.create_failure(req, 'You need to approve legal text to create a project!')

        # Read and transform some variables
        vcs_type = req.args.get('vcstype')
        vcs_name = req.args.get('vcs_name')
        if not self.validate_repository_name(vcs_name):
            return self.create_failure(req, 'Check repository name.')

        parent_project = None
        if "_project_" in req.args:
            parent_project = Project.get(env_name=req.args.get('_project_'))
            self.__require_permissions_for_cloning(req.authname, parent_project)
            vcs_type = conf.getVersionControlType(parent_project.env_name) # TODO: expensive call, probably needed

        # Read settings
        settings = {}
        if vcs_type:
            settings['vcs_type'] = vcs_type
        if vcs_name:
            settings['vcs_name'] = vcs_name

        identifier = req.args.get('prj_short_name')
        name = req.args.get('prj_long_name')
        project_visibility = 'prj_is_public' in req.args

        public = False
        published = None
        if project_visibility:
            public = True
            published = datetime.now()

        # Create project object
        project = Project(
            id = None,
            env_name = identifier,
            project_name = name,
            description = req.args.get('prj_description'),
            author_id = author.id,
            created = None, # Use default which is now()
            public = public,
            published = published
        )

        # Create project environment
        projects = Projects()
        try:
            projects.create_project(project, settings)
        except ProjectValidationException as exc:
            self.log.warning('Project creation failed due the validation: {0}'.format(exc.value))
            return self.create_failure(req, exc.value)
        except:
            self.log.exception('Project creation failed')
            return self.create_failure(req, _("Creating project failed. Try again later."))

        if public:
            projects.add_public_project_visibility(project.id)

        #Add author to follow project
        watch_store = CQDEWatchlistStore()
        watch_store.watch_project(author.id, project.id)

        #Change project trac.ini to support multiple repositories
        project_env_path = conf.getEnvironmentSysPath(project.env_name)
        repo_env_path = conf.getEnvironmentVcsPath(project.env_name, vcs_type, vcs_name)
        os.rename(project_env_path + '/conf/trac.ini', project_env_path + '/conf/trac.ini.bak')
        oldfile = open(project_env_path + '/conf/trac.ini.bak', 'r')
        newfile = open(project_env_path + '/conf/trac.ini', 'w')
        lines = oldfile.readlines()
        for line in lines:
            newfile.write(line)
            if line.startswith('database ='):
                break
        newfile.write('repository_dir =\nrepository_type = svn\n\n[repositories]\n')
        newfile.write('%s.dir = %s\n' % (vcs_name, repo_env_path))
        newfile.write('%s.type = %s\n' % (vcs_name, vcs_type))
        newfile.close()
        oldfile.close()
        os.remove(project_env_path + '/conf/trac.ini.bak')

        # Notify listeners. The project object still exists, but database does not
        for listener in self.project_change_listeners:
            try:
                listener.project_created(project)
                listener.project_watchers(project)
                if public:
                    listener.project_set_public(project)
            except:
                pass


        return self.create_success(req, project)
コード例 #8
0
ファイル: actions.py プロジェクト: juhamust/multiproject
    def create_project(self, req):
        """ Handler for creating project request
        """
        req.perm.require("PROJECT_CREATE")
        if req.method != 'POST':
            return self.create_failure(req, 'POST request needed when creating a new project')

        author = get_context(req)['author']

        # If agreement needed but not getting it, show failure
        if conf.project_requires_agreed_terms and not self._is_active_user(req):
            return self.create_failure(req, 'You need to approve legal text to create a project!')

        # Read and transform some variables
        vcs_type = req.args.get('vcstype')
        parent_project = None
        if "_project_" in req.args:
            parent_project = Project.get(env_name=req.args.get('_project_'))
            self.__require_permissions_for_cloning(req.authname, parent_project)
            vcs_type = conf.getVersionControlType(parent_project.env_name) # TODO: expensive call, probably needed

        # Read settings
        settings = {}
        if vcs_type:
            settings['vcs_type'] = vcs_type

        identifier = req.args.get('prj_short_name')
        name = req.args.get('prj_long_name')
        public = 'prj_is_public' in req.args

        published = None
        if public:
            published = datetime.now()

        # Create project object
        project = Project(
            id = None,
            env_name = identifier,
            project_name = name,
            description = req.args.get('prj_description'),
            author_id = author.id,
            created = None, # Use default which is now()
            published = published
        )

        # Create project environment
        projects = Projects()
        try:
            projects.create_project(project, settings)
        except ProjectValidationException as exc:
            self.log.warning('Project creation failed due the validation: {0}'.format(exc.value))
            return self.create_failure(req, exc.value)
        except:
            self.log.exception('Project creation failed')
            return self.create_failure(req, _("Creating project failed. Try again later."))

        if public:
            projects.add_public_project_visibility(project.id)

        # Notify listeners. The project object still exists, but database does not
        for listener in self.project_change_listeners:
            listener.project_created(project)
            if public:
                listener.project_set_public(project)

        return self.create_success(req, project)
コード例 #9
0
    def create_project(self, req):
        """ Handler for creating project request
        """
        req.perm.require("PROJECT_CREATE")
        if req.method != 'POST':
            return self.create_failure(
                req, 'POST request needed when creating a new project')
        author = get_context(req)['author']
        # If agreement needed but not getting it, show failure
        if conf.project_requires_agreed_terms and not self._is_active_user(
                req):
            return self.create_failure(
                req, 'You need to approve legal text to create a project!')

        # Read and transform some variables
        vcs_type = req.args.get('vcstype')
        vcs_name = req.args.get('vcs_name')
        if not self.validate_repository_name(vcs_name):
            return self.create_failure(req, 'Check repository name.')

        parent_project = None
        if "_project_" in req.args:
            parent_project = Project.get(env_name=req.args.get('_project_'))
            self.__require_permissions_for_cloning(req.authname,
                                                   parent_project)
            vcs_type = conf.getVersionControlType(
                parent_project.env_name
            )  # TODO: expensive call, probably needed

        # Read settings
        settings = {}
        if vcs_type:
            settings['vcs_type'] = vcs_type
        if vcs_name:
            settings['vcs_name'] = vcs_name

        identifier = req.args.get('prj_short_name')
        name = req.args.get('prj_long_name')
        project_visibility = 'prj_is_public' in req.args

        public = False
        published = None
        if project_visibility:
            public = True
            published = datetime.now()

        # Create project object
        project = Project(
            id=None,
            env_name=identifier,
            project_name=name,
            description=req.args.get('prj_description'),
            author_id=author.id,
            created=None,  # Use default which is now()
            public=public,
            published=published)

        # Create project environment
        projects = Projects()
        try:
            projects.create_project(project, settings)
        except ProjectValidationException as exc:
            self.log.warning(
                'Project creation failed due the validation: {0}'.format(
                    exc.value))
            return self.create_failure(req, exc.value)
        except:
            self.log.exception('Project creation failed')
            return self.create_failure(
                req, _("Creating project failed. Try again later."))

        if public:
            projects.add_public_project_visibility(project.id)

        #Add author to follow project
        watch_store = CQDEWatchlistStore()
        watch_store.watch_project(author.id, project.id)

        #Change project trac.ini to support multiple repositories
        project_env_path = conf.getEnvironmentSysPath(project.env_name)
        repo_env_path = conf.getEnvironmentVcsPath(project.env_name, vcs_type,
                                                   vcs_name)
        os.rename(project_env_path + '/conf/trac.ini',
                  project_env_path + '/conf/trac.ini.bak')
        oldfile = open(project_env_path + '/conf/trac.ini.bak', 'r')
        newfile = open(project_env_path + '/conf/trac.ini', 'w')
        lines = oldfile.readlines()
        for line in lines:
            newfile.write(line)
            if line.startswith('database ='):
                break
        newfile.write(
            'repository_dir =\nrepository_type = svn\n\n[repositories]\n')
        newfile.write('%s.dir = %s\n' % (vcs_name, repo_env_path))
        newfile.write('%s.type = %s\n' % (vcs_name, vcs_type))
        newfile.close()
        oldfile.close()
        os.remove(project_env_path + '/conf/trac.ini.bak')

        # Notify listeners. The project object still exists, but database does not
        for listener in self.project_change_listeners:
            try:
                listener.project_created(project)
                listener.project_watchers(project)
                if public:
                    listener.project_set_public(project)
            except:
                pass

        return self.create_success(req, project)