Ejemplo n.º 1
0
def restore(wcfile, revision=""):
    if not wcfile or not is_rcs_exist(wcfile):
        return
    opts = ""
    if revision:
        # -uRev : checkout without lock revision.
        # unlock wcfile is readonly, unless no-strict mode is set.
        opts = "-u%s" % revision

    cmd = '%(cmd)s %(opts)s -q -f "%(file)s" 2>&1' % {'cmd':CMD_CO, "opts":opts, "file":wcfile }
    buff = os.popen(cmd).read().strip()
    if buff:
        raise Exception, "Command: %s\nError Message: %s\n" % (to_unicode(cmd), to_unicode(buff))
Ejemplo n.º 2
0
    def uninstall_hook(self):
        plugin_list=[]
        d = request.params
        reposname = d.get("_repos")
        self.validate_repos(reposname)
        for i in d.keys():
            if "pluginid_" in i:
                plugin_list.append(d[i])

        if plugin_list:
            log.debug("plugin_list:" + ','.join(plugin_list))
            try:
                hookobj = _hooks.Hooks(cfg.repos_root + '/' + reposname)
                for pluginname in plugin_list:
                    hookobj.plugins[pluginname].reload()
                    hookobj.plugins[pluginname].uninstall()
                    log.info("my delete plugin %s, %s" % (pluginname, hookobj.plugins[pluginname].name))
            except Exception, e:
                result = json.dumps( {
                        "type": "error",
                        "message": _("Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n%(msg)s") % {
                                "plugin": ", ".join(plugin_list),
                                "repos":reposname,
                                "msg": to_unicode(e) }
                        } )
            else:
                result = json.dumps( {
                        "type": "info",
                        "message": _("Delete plugin '%(plugin)s' on '%(repos)s' success.") % {
                                "plugin": ", ".join(plugin_list),
                                "repos":reposname }
                        } )
Ejemplo n.º 3
0
    def save_group(self):
        assert self.is_super_user
        d = request.params
        member_list = []
        msg = ""

        rolename = d.get('rolename')
        autodrop = d.get('autodrop', 'no')
        members  = d.get('members', '')
        revision  = d.get('revision', self.authz.version)

        if autodrop.lower()=='yes':
            autodrop = True
        else:
            autodrop = False

        member_list.extend(map(lambda x: x.strip(), members.split(',')))
        
        log_message = _(u"User %(user)s changed group: %(grp)s. (rev:%(rev)s)") % \
                         {'user':session.get('user'), 'grp': rolename, 'rev': revision}

        try:
            self.authz.set_group(rolename, member_list, autodrop=autodrop)
            self.authz.save(revision, comment=log_message)
        except Exception, e:
            msg = to_unicode(e)
Ejemplo n.º 4
0
 def rollback(self, id):
     assert self.is_super_user
     log_message = _("Rollback successfully to revision: %s") % id
     try:
         assert id and isinstance(id, basestring)
         self.rcslog.restore(id)
         self.rcslog.backup(comment=log_message, user=self.login_as)
     except Exception, e:
         msg = to_unicode(e)
         c.msg = _("Rollback failed: %s") % msg
Ejemplo n.º 5
0
def cat(wcfile, revision=""):
    if not wcfile or not is_rcs_exist(wcfile):
        return ""
    opts = "-p"
    if revision:
        # -pRev : cat rather then checkout
        opts = "-p%s" % revision

    cmd = '%(cmd)s %(opts)s -q "%(file)s"' % {'cmd':CMD_CO, "opts":opts, "file":wcfile }
    buff = os.popen(cmd).read().strip()
    return to_unicode(buff)
Ejemplo n.º 6
0
 def create_submit(self):
     try:
         d = request.params
         reposname = d.get("reposname")
         self.validate_repos(reposname)
         self.repos.create(reposname)
     except Exception, e:
         result = json.dumps( {
                 "type": "error",
                 "message": _("Create repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % {
                         "repos":reposname, "msg": to_unicode(e) }
                 } )
Ejemplo n.º 7
0
def differ(filename, rev1="", rev2=""):
    filename=to_utf8(filename)
    opts=""
    if rev1 and rev2:
        opts="-r%s -r%s" % (rev1, rev2)
    elif rev1 or rev2:
        opts="-r%s%s" % (rev1, rev2)
        
    cmd = '%(cmd)s %(opts)s -u -q "%(file)s"' % {'cmd':CMD_RCSDIFF, 'opts':opts, 'file':filename}
    log.debug('Command: '+cmd)
    buff = os.popen(cmd).read()
    return to_unicode(buff)
Ejemplo n.º 8
0
 def remove_submit(self):
     try:
         d = request.params
         reposname = d.get("repos_list")
         self.validate_repos(reposname)
         self.repos.delete(reposname)
         comment = _("Delete blank repos: %s.") % reposname
         if self.authz.reposlist.get(reposname) is not None:
             self.authz.del_repos(reposname, recursive=True)
             self.authz.save(revision=None, comment=comment)
     except Exception, e:
         result = json.dumps( {
                 "type": "error",
                 "message": _("Delete repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % {
                         "repos":reposname, "msg": to_unicode(e) }
                 } )
Ejemplo n.º 9
0
    def delete_alias(self):
        assert self.is_super_user
        d = request.params
        aliasname = d.get('aliasname')
        revision  = d.get('revision', self.authz.version)
        msg = ''
        
        log_message = _(u"User %(user)s delete alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \
                 {'user':session.get('user'), 'alias': aliasname, 'rev': revision, 'msg': msg}

        if aliasname:
            try:
                self.authz.del_alias(aliasname)
                self.authz.save(revision, comment=log_message)
            except Exception, e:
                msg = to_unicode(e)
Ejemplo n.º 10
0
    def save_alias(self):
        assert self.is_super_user
        d = request.params
        aliasname = d.get('aliasname')
        username = d.get('username')
        revision  = d.get('revision', self.authz.version)
        msg = ""
        
        log_message = _(u"User %(user)s changed alias: %(alias)s. (rev:%(rev)s)") % \
                     {'user':session.get('user'), 'alias': aliasname, 'rev': revision}

        try:
            self.authz.add_alias(aliasname, username)
            self.authz.save(revision, comment=log_message)
        except Exception, e:
            msg = to_unicode(e)
Ejemplo n.º 11
0
    def delete_group(self):
        assert self.is_super_user
        d = request.params
        rolename = d.get('role')
        revision  = d.get('revision', self.authz.version)
        msg = ''
        
        log_message = _(u"User %(user)s delete group: %(grp)s. (rev:%(rev)s)") % \
                         {'user':session.get('user'), 'grp': rolename, 'rev': revision}

        if rolename:
            try:
                self.authz.del_group(rolename)
                self.authz.save(revision, comment=log_message)
            except Exception, e:
                msg = to_unicode(e)
Ejemplo n.º 12
0
 def setup_hook(self):
     try:
         d = request.params
         reposname = d.get("_repos")
         self.validate_repos(reposname)
         pluginname = d.get("_plugin")
         h = _hooks.Hooks(cfg.repos_root + '/' + reposname)
         plugin = h.plugins[pluginname]
         plugin.install(d)
     except Exception, e:
         result = json.dumps( {
                 "type": "error",
                 "message": _("Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n%(msg)s") % {
                       "plugin": pluginname,
                       "repos":reposname,
                       "msg": to_unicode(e) }
                 } )
Ejemplo n.º 13
0
    def delete_authz(self):
        d = request.params
        
        member_list = []
        msg = ""

        reposname = d.get('reposname')
        path  = d.get('path')
        if path is not None and '\\' in path:
            path = path.replace('\\', '/')
        revision  = d.get('revision', self.authz.version)
        
        log_message = _(u"User %(user)s delete authz rules. (rev:%(rev)s)") % \
                         {'user':session.get('user'), 'rev': revision}
        try:
            self.authz.del_module(reposname, path);
            self.authz.save(revision, comment=log_message)
        except Exception, e:
            msg = to_unicode(e)
Ejemplo n.º 14
0
    def save_authz(self):
        d = request.params
        
        member_list = []
        msg = ""

        reposname = d.get('reposname')
        admins    = d.get('admins', '')
        path      = d.get('path')
        rules     = d.get('rules')
        revision  = d.get('revision', self.authz.version)
        if path is not None and '\\' in path:
            path = path.replace('\\', '/')
        # mode1: new or edit repository
        mode1     = d.get('mode1')
        if mode1 == "new":
            isAddRepos = True
        else:
            isAddRepos = False
        
        # mode2: new or edit module
        mode2     = d.get('mode2')
        if mode2 == "new":
            isAddModule = True
        else:
            isAddModule = False

        log_message = _(u"User %(user)s changed authz rules. (rev:%(rev)s)") % \
                 {'user':session.get('user'), 'rev': revision}

        try:
            if isAddRepos:
                assert self.is_super_user
                repos = self.authz.add_repos(reposname)
            else:
                repos = self.authz.get_repos(reposname)
                if not repos:
                    assert self.is_super_user
                    log.warning("Repos '%s' not exists. Create authz config automatically." % reposname)
                    repos = self.authz.add_repos(reposname)
                
            if not repos:
                raise Exception, _("Repository %s not exist.") % reposname
            
            if path:
                if isAddModule:
                    module = repos.add_module(path)
                else:
                    module = repos.get_module(path)
                if not module:
                    raise Exception, _("Module %s not exist.") % path
            else:
                module = None
            
            if not self.authz.is_admin(self.login_as, repos.name, admins) and \
                not (repos.name != '/' and self.authz.is_super_user(self.login_as)):
                raise Exception, _("You can not delete yourself from admin list.")
            
            self.authz.set_admin(admins, repos)

            if module:
                self.authz.set_rules(reposname, path, rules);
            self.authz.save(revision, comment=log_message)
        except Exception, e:
            msg = to_unicode(e)
Ejemplo n.º 15
0
    def get_logs(self, rev1="", rev2="", rev3=""):
        self.revs=[]
        opts=""
        if not rev1:
            if not rev2:
                opts=""
            else:
                opts="-r:%s" % rev2
        else:
            if not rev2:
                opts="-r%s:" % rev1
            else:
                opts="-r%s:%s" % (rev1, rev2)

        if rev3:
            opts="%s,%s" % (opts, rev3)

        cmd = '%(cmd)s %(opts)s -N "%(file)s"' % {'cmd':CMD_RLOG, 'opts':opts, 'file':self.__file}
        log.debug('Command: '+cmd)
        buff = os.popen(cmd).read().strip().rstrip('=').rstrip()
        
        while True:
            pos = buff.rfind('\n'+'-'*28+'\n')
            if pos==-1:
                break
            match = buff[pos+30:]
            buff=buff[:pos]

            lines=match.split('\n')
            if len(lines)<3:
                log.error("wrong rcs format: %s" % match)
                continue

            # revision 1.XX    locked by: XXX;
            m = self.p['revision'].search(lines[0])
            commit_revision = ""
            if m:
                commit_revision = m.group(1)
            else:
                log.error("not find revision in line: %s" % lines[1])
                continue
                        
            # date: YYYY/MM/DD hh:mm:ss;  author: XX;  ...
            m = self.p['date'].search(lines[1])
            commit_time = ""
            if m:
                commit_time = utc_to_local( to_unicode(m.group(1)) )
            else:
                log.error("not find date in line: %s" % lines[1])
                continue

            # date: YYYY/MM/DD hh:mm:ss;  author: XX;  ...
            m = self.p['author'].search(lines[1])
            commit_author = ""
            if m:
                commit_author = to_unicode(eval("'%s'" % m.group(1)))
            else:
                log.error("not find author in line: %s" % lines[1])
                continue
            
            # logs...
            commit_log = to_unicode('\n'.join(lines[2:]))
            
            self.revs.append({'revision':commit_revision,
                              'date':commit_time,
                              'author':commit_author,
                              'log':commit_log})
        
        return self.revs