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))
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 } } )
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)
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
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)
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) } } )
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)
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) } } )
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)
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)
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)
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) } } )
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)
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)
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