[Pysvnmanager-svn] SF.net SVN: pysvnmanager:[44] trunk
Status: Alpha
Brought to you by:
jiangx
From: <ji...@us...> - 2008-08-25 10:27:06
|
Revision: 44 http://pysvnmanager.svn.sourceforge.net/pysvnmanager/?rev=44&view=rev Author: jiangx Date: 2008-08-25 10:27:15 +0000 (Mon, 25 Aug 2008) Log Message: ----------- add controller/view for svn repos add/remove management. Modified Paths: -------------- trunk/README.txt trunk/development.ini trunk/pysvnmanager/controllers/repos.py trunk/pysvnmanager/model/repos.py trunk/pysvnmanager/templates/repos/hooks.mako trunk/setup.py Added Paths: ----------- trunk/pysvnmanager/templates/repos/create.mako trunk/pysvnmanager/templates/repos/remove.mako Modified: trunk/README.txt =================================================================== --- trunk/README.txt 2008-08-25 10:25:09 UTC (rev 43) +++ trunk/README.txt 2008-08-25 10:27:15 UTC (rev 44) @@ -17,3 +17,26 @@ paster setup-app config.ini Then you are ready to go. + +Installation from Source code +============================= + +Check source code from sourceforge.net:: + + svn co https://sourceforge.net/projects/pysvnmanager/trunk pysvnmanager + +Make a config file as follows:: + + cd pysvnmanager/config + make + +Compile l18n messages:: + + cd pysvnmanager + python setup.py compile_catalog + +Start web service:: + + paster serve --reload develogment.ini + + Modified: trunk/development.ini =================================================================== --- trunk/development.ini 2008-08-25 10:25:09 UTC (rev 43) +++ trunk/development.ini 2008-08-25 10:27:15 UTC (rev 44) @@ -77,7 +77,7 @@ [logger_pysvnmanager] level = DEBUG -handlers = +handlers = console qualname = pysvnmanager [handler_console] Modified: trunk/pysvnmanager/controllers/repos.py =================================================================== --- trunk/pysvnmanager/controllers/repos.py 2008-08-25 10:25:09 UTC (rev 43) +++ trunk/pysvnmanager/controllers/repos.py 2008-08-25 10:27:15 UTC (rev 44) @@ -6,7 +6,6 @@ from pysvnmanager.model import repos as _repos from pysvnmanager.model import hooks as _hooks - log = logging.getLogger(__name__) class ReposController(BaseController): @@ -32,6 +31,7 @@ return render('/repos/hooks.mako') def init_repos_list(self): + filter = request.params.get('filter') total = 0; msg = '' @@ -40,15 +40,16 @@ msg += 'name[0]="%s";\n' % _("Please choose...") total += 1; for reposname in self.repos_list: + if filter=='blank' and not self.repos.is_blank_svn_repos(reposname): + continue msg += 'id[%d]="%s";' % (total, reposname) msg += 'name[%d]="%s";\n' % (total, reposname) total += 1; msg += 'total=%d;\n' % total - msg += 'revision="%s";\n' % self.authz.version return msg def get_plugin_list(self): - reposname = request.params.get('select') + reposname = request.params.get('select') h = _hooks.Hooks(self.repos_root + reposname) total = 0; msg = '' @@ -66,11 +67,11 @@ return msg def get_remove_hook_form_content(self): - reposname = request.params.get('select') + reposname = request.params.get('select') h = _hooks.Hooks(self.repos_root + reposname) msg = '' if len(h.applied_plugins) > 0: - msg += "Installed hooks:" + msg += _("Installed hooks:") msg += "<br>\n" num = 0 @@ -84,7 +85,7 @@ if detail and detail != desc: msg += ' - %(detail)s' % { 'detail': detail, } msg += '<br>\n' - msg += '<input type="submit" name="remove_hook" value="Remove selected hooks">\n' + msg += '<input type="submit" name="remove_hook" value="%s">\n' % _("Remove selected hooks") return msg @@ -104,10 +105,10 @@ plugin = h.plugins[pluginname] plugin.set_plugin(d) except Exception, e: - result = "Apply plugin '%(plugin)s on '%(repos)s' Failed. Error message:<br>\n%(msg)s" % { + result = _("Apply plugin '%(plugin)s on '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { "plugin": pluginname, "repos":reposname, "msg": e} else: - result = "Apply plugin '%(plugin)s on '%(repos)s' success." % { + result = _("Apply plugin '%(plugin)s on '%(repos)s' success.") % { "plugin": pluginname, "repos":reposname} return result @@ -122,15 +123,40 @@ plugin = h.plugins[pluginname] plugin.delete_plugin() except Exception, e: - result = "Delete plugin '%(plugin)s on '%(repos)s' Failed. Error message:<br>\n%(msg)s" % { + result = _("Delete plugin '%(plugin)s on '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { "plugin": pluginname, "repos":reposname, "msg": e} else: - result = "Delete plugin '%(plugin)s on '%(repos)s' success." % { + result = _("Delete plugin '%(plugin)s on '%(repos)s' success.") % { "plugin": pluginname, "repos":reposname} return result - + + def create_submit(self): + try: + d = request.params + reposname = d.get("reposname") + self.repos.create(reposname) + except Exception, e: + result = _("Create repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { + "repos":reposname, "msg": e} + else: + result = _("Create repository '%(repos)s' success.") % {"repos":reposname} + return result + def create(self): return render('/repos/create.mako') + + def remove_submit(self): + try: + d = request.params + reposname = d.get("repos_list") + self.repos.delete(reposname) + except Exception, e: + result = _("Delete repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { + "repos":reposname, "msg": e} + else: + result = _("Delete blank repository '%(repos)s' success.") % {"repos":reposname} + return result + def remove(self): return render('/repos/remove.mako') Modified: trunk/pysvnmanager/model/repos.py =================================================================== --- trunk/pysvnmanager/model/repos.py 2008-08-25 10:25:09 UTC (rev 43) +++ trunk/pysvnmanager/model/repos.py 2008-08-25 10:27:15 UTC (rev 44) @@ -59,6 +59,9 @@ repos_list = property(__get_repos_list) def create(self, repos_name): + repos_name = repos_name.strip() + assert repos_name != "" + repos_path = "%(root)s/%(entry)s" % { "root": self.repos_root, "entry": repos_name} if os.path.exists(repos_path): raise Exception, _("Repos %s already exists.") % repos_name @@ -121,14 +124,17 @@ return False def delete(self, repos_name): + repos_name = repos_name.strip() + assert repos_name != "" repos_path = "%(root)s/%(entry)s" % { "root": self.repos_root, "entry": repos_name} if os.path.exists(repos_path): if self.is_blank_svn_repos(repos_name): from svn import repos as _repos - _repos.delete(repos_path) - else: - raise Exception, _("Repos %s is not a blank repository.") % repos_name + return _repos.delete(repos_path) + raise Exception, _("Repos %s is not a blank repository.") % repos_name + + if __name__ == '__main__': import doctest Added: trunk/pysvnmanager/templates/repos/create.mako =================================================================== --- trunk/pysvnmanager/templates/repos/create.mako (rev 0) +++ trunk/pysvnmanager/templates/repos/create.mako 2008-08-25 10:27:15 UTC (rev 44) @@ -0,0 +1,27 @@ +## -*- coding: utf-8 -*- +<%inherit file="/base.mako" /> + +<%def name="head_tags()"> + <title>${_("Create repository")}</title> +</%def> + +<h2>${_("Create repository")}</h2> + +##<form name="main_form" method="post" action="${h.url_for(action="create_submit")}"> +<% + context.write( + h.form_remote_tag( + html={'id':'main_form'}, + url=h.url(action='create_submit'), + update="message", + method='post', before='showNoticesPopup()', + complete='hideNoticesPopup();switch_message_box();', + ) + ) +%> +${_("Repository name:")} + <input type="text" name="reposname" value=""> + <br> + <input type="submit" name="submit" value="${_("Create repository")}"> + +</form> Modified: trunk/pysvnmanager/templates/repos/hooks.mako =================================================================== --- trunk/pysvnmanager/templates/repos/hooks.mako 2008-08-25 10:25:09 UTC (rev 43) +++ trunk/pysvnmanager/templates/repos/hooks.mako 2008-08-25 10:27:15 UTC (rev 44) @@ -43,7 +43,6 @@ var id = new Array(); var name = new Array(); var total = 0; - var revision = ''; repos_list = document.main_form.repos_list; repos_list.options.length = 0; @@ -54,7 +53,6 @@ { repos_list.options[i] = new Option(name[i], id[i]); } - document.main_form.revision.value = revision; } catch(exception) { alert(exception); @@ -67,7 +65,6 @@ { var name = document.main_form.repos_list.value; var params = {select:name}; - var revision = ''; if (name=='...'||name=='') { @@ -192,15 +189,16 @@ <h2>${_("Repos management")}</h2> <form name="main_form" method="post"> -<input type="hidden" name="revision" value="${c.revision}"> <DIV style="position:relative;" class=gainlayout> <DIV id="repos_list_box" class=gainlayout> ${_("Repository:")} <select name="repos_list" size="1" onChange='repos_changed()'> </select> -<a href="#" onclick='#'>[+${_("Add repository")}]</a> -<a href="#" onclick='#'>[-${_("Remove repository")}]</a> +${h.link_to(_("Add repository"), h.url(action="create"))} +${h.link_to(_("Remove repository"), h.url(action="remove"))} +##<a href="#" onclick='#'>[+${_("Add repository")}]</a> +##<a href="#" onclick='#'>[-${_("Remove repository")}]</a> </DIV> <DIV id="new_hook_list_box" class=gainlayout style="visibility:hidden;position:absolute"> @@ -217,7 +215,7 @@ h.form_remote_tag( html={'id':'apply_new_hook_form'}, url=h.url(action='apply_new_hook'), - update=dict(success="message", failure="message"), + update="message", method='post', before='apply_new_hook_form_submit(this); showNoticesPopup()', complete='hideNoticesPopup();switch_message_box();repos_changed()', ) @@ -240,7 +238,7 @@ h.form_remote_tag( html={'id':'remove_hook_form'}, url=h.url(action='remove_hook'), - update=dict(success="message", failure="message"), + update="message", method='post', before='remove_hook_form_submit(this); showNoticesPopup()', complete='hideNoticesPopup();switch_message_box();repos_changed()', ) Added: trunk/pysvnmanager/templates/repos/remove.mako =================================================================== --- trunk/pysvnmanager/templates/repos/remove.mako (rev 0) +++ trunk/pysvnmanager/templates/repos/remove.mako 2008-08-25 10:27:15 UTC (rev 44) @@ -0,0 +1,69 @@ +## -*- coding: utf-8 -*- +<%inherit file="/base.mako" /> + +<%def name="head_tags()"> + <title>${_("Remove repository")}</title> +</%def> + +<%def name="body_params()"> onload="init_repos_list()" </%def> + +<SCRIPT LANGUAGE="JavaScript"> + +function init_repos_list() +{ + showNoticesPopup(); + var params = {filter:'blank'}; + new Ajax.Request( + '${h.url_for(controller="repos", action="init_repos_list")}', + {asynchronous:true, evalScripts:true, method:'post', + onComplete: + function(request) + {hideNoticesPopup();ajax_init_repos_list(request.responseText);}, + parameters:params + }); +} + +function ajax_init_repos_list(code) +{ + var id = new Array(); + var name = new Array(); + var total = 0; + + repos_list = document.getElementById('repos_list'); + repos_list.options.length = 0; + + try { + eval(code); + for (var i=0; i < total; i++) + { + repos_list.options[i] = new Option(name[i], id[i]); + } + } + catch(exception) { + alert(exception); + } +} + +</SCRIPT> + +<h2>${_("Remove repository")}</h2> + +##<form name="main_form" method="post" action="${h.url_for(action="remove_submit")}"> +<% + context.write( + h.form_remote_tag( + html={'id':'main_form'}, + url=h.url(action='remove_submit'), + update="message", + method='post', before='showNoticesPopup()', + complete='hideNoticesPopup();switch_message_box();init_repos_list();', + ) + ) +%> +${_("Repository name:")} + <select id="repos_list" name="repos_list" size="1"> + </select> + <br> + <input type="submit" name="submit" value="${_("Remove repository")}"> + +</form> Modified: trunk/setup.py =================================================================== --- trunk/setup.py 2008-08-25 10:25:09 UTC (rev 43) +++ trunk/setup.py 2008-08-25 10:27:15 UTC (rev 44) @@ -7,7 +7,7 @@ setup( name='pySvnManager', - version="0.1.3", + version="0.2.0", description='SVN authz web management tools.', author='Jiang Xin', author_email='jia...@os...', This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |