Changeset 45
- Timestamp:
- 2008年08月27日 00时18分33秒 (4 years ago)
- Location:
- trunk
- Files:
-
- 9 added
- 27 modified
-
config/Makefile (modified) (2 diffs)
-
development.ini (modified) (2 diffs)
-
pySvnManager.egg-info/paste_deploy_config.ini_tmpl (modified) (3 diffs)
-
pysvnmanager/controllers/authz.py (modified) (8 diffs)
-
pysvnmanager/controllers/check.py (modified) (2 diffs)
-
pysvnmanager/controllers/logs.py (modified) (1 diff)
-
pysvnmanager/controllers/repos.py (modified) (7 diffs)
-
pysvnmanager/controllers/role.py (modified) (4 diffs)
-
pysvnmanager/hooks/plugins/CaseInsensitive.py (modified) (1 diff)
-
pysvnmanager/hooks/plugins/EolStyleCheck.py (modified) (1 diff)
-
pysvnmanager/hooks/plugins/__init__.py (modified) (2 diffs)
-
pysvnmanager/i18n/en/LC_MESSAGES/pysvnmanager.po (modified) (12 diffs)
-
pysvnmanager/i18n/pysvnmanager.pot (modified) (12 diffs)
-
pysvnmanager/i18n/zh/LC_MESSAGES/pysvnmanager.po (modified) (11 diffs)
-
pysvnmanager/model/hooks.py (modified) (2 diffs)
-
pysvnmanager/model/repos.py (modified) (2 diffs)
-
pysvnmanager/model/svnauthz.py (modified) (3 diffs)
-
pysvnmanager/public/css (added)
-
pysvnmanager/public/css/common.css (added)
-
pysvnmanager/public/img (added)
-
pysvnmanager/public/img/alert.png (added)
-
pysvnmanager/public/img/attention.png (added)
-
pysvnmanager/public/img/icon-error.png (added)
-
pysvnmanager/public/img/icon-info.png (added)
-
pysvnmanager/templates/authz/index.mako (modified) (5 diffs)
-
pysvnmanager/templates/base.mako (modified) (4 diffs)
-
pysvnmanager/templates/check/index.mako (modified) (1 diff)
-
pysvnmanager/templates/repos/hooks.mako (modified) (2 diffs)
-
pysvnmanager/templates/role/index.mako (modified) (4 diffs)
-
pysvnmanager/tests/data (added)
-
pysvnmanager/tests/data/svnroot.tar.bz2 (added)
-
pysvnmanager/tests/functional/test_authz.py (modified) (4 diffs)
-
pysvnmanager/tests/functional/test_check.py (modified) (1 diff)
-
pysvnmanager/tests/functional/test_repos.py (modified) (2 diffs)
-
pysvnmanager/tests/test_repos.py (modified) (8 diffs)
-
test.ini (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/config/Makefile
r38 r45 3 3 CONFFILE=localconfig.py svn.access svn.passwd svn.access.test svn.passwd.test 4 4 5 all: $(CONFFILE) 5 all: $(CONFFILE) ../svnroot.test 6 6 7 7 clean: … … 16 16 cp $< $@ 17 17 18 ../svnroot.test: ../pysvnmanager/tests/data/svnroot.tar.bz2 19 @if [ ! -d $@ ]; then \ 20 tar -C .. -jxvf $< ; \ 21 fi 18 22 19 23 .PHONY : all clean -
trunk/development.ini
r44 r45 56 56 57 57 # svn repository root path 58 repos_root = %(here)s/svnroot /58 repos_root = %(here)s/svnroot 59 59 60 60 #[filter:proxy-prefix] … … 78 78 [logger_pysvnmanager] 79 79 level = DEBUG 80 handlers = console80 handlers = 81 81 qualname = pysvnmanager 82 82 -
trunk/pySvnManager.egg-info/paste_deploy_config.ini_tmpl
r4 r45 50 50 authz_file = %(here)s/config/svn.access 51 51 52 # svn repository root path 53 repos_root = %(here)s/svnroot 52 54 53 55 #[filter:proxy-prefix] … … 57 59 # Logging configuration 58 60 [loggers] 59 keys = root 61 keys = root, pysvnmanager 60 62 61 63 [handlers] … … 69 71 handlers = console 70 72 73 [logger_pysvnmanager] 74 level = DEBUG 75 handlers = 76 qualname = pysvnmanager 77 71 78 [handler_console] 72 79 class = StreamHandler -
trunk/pysvnmanager/controllers/authz.py
r32 r45 4 4 from pysvnmanager.lib.base import * 5 5 from pysvnmanager.model.svnauthz import * 6 from pysvnmanager.model import repos as _repos 6 7 7 8 log = logging.getLogger(__name__) … … 15 16 # Used as checked in user to rcs file. 16 17 self.authz.login_as = self.login_as 17 self.reposlist = self.authz.get_manageable_repos_list(self.login_as) 18 18 self.reposlist = set(self.authz.get_manageable_repos_list(self.login_as)) 19 20 # self.reposlist_new is what in ReposRoot directory. 21 self.reposlist_real = set(_repos.Repos(cfg.repos_root).repos_list) 22 self.reposlist_real.add('/') 23 24 self.reposlist_set = self.reposlist & self.reposlist_real 25 self.reposlist_unexist = self.reposlist - self.reposlist_real 26 27 if self.authz.is_super_user(self.login_as): 28 self.reposlist_unset = self.reposlist_real - self.reposlist 29 else: 30 self.reposlist_unset = set() 31 19 32 def __before__(self, action): 20 33 super(AuthzController, self).__before__(action) … … 24 37 def index(self): 25 38 c.revision = self.authz.version 39 # used for functional test. 26 40 c.reposlist = self.reposlist 27 41 … … 54 68 msg += 'name[0]="%s";\n' % _("Please choose...") 55 69 total += 1; 56 for reposname in s elf.reposlist:70 for reposname in sorted(self.reposlist_set): 57 71 msg += 'id[%d]="%s";' % (total, reposname) 58 72 msg += 'name[%d]="%s";\n' % (total, reposname) 73 total += 1; 74 for reposname in sorted(self.reposlist_unexist): 75 msg += 'id[%d]="%s";' % (total, reposname) 76 msg += 'name[%d]="%s";\n' % (total, reposname+' (?)') 77 total += 1; 78 for reposname in sorted(self.reposlist_unset): 79 msg += 'id[%d]="%s";' % (total, reposname) 80 msg += 'name[%d]="%s";\n' % (total, reposname+' (!)') 59 81 total += 1; 60 82 msg += 'total=%d;\n' % total … … 68 90 select = d.get('select') 69 91 repos = self.authz.get_repos(select) 92 if not repos: 93 log.warning("Repos '%s' not exists. Create authz config automatically." % select) 94 repos = self.authz.add_repos(select) 70 95 71 96 if repos: … … 141 166 else: 142 167 repos = self.authz.get_repos(reposname) 168 if not repos: 169 log.warning("Repos '%s' not exists. Create authz config automatically." % reposname) 170 repos = self.authz.add_repos(reposname) 171 143 172 if not repos: 144 173 raise Exception, _("Repository %s not exist.") % reposname … … 164 193 self.authz.save(revision, comment=log_message) 165 194 except Exception, e: 166 msg = get_unicode(e [0])195 msg = get_unicode(e.message) 167 196 168 197 log.info(log_message) … … 187 216 self.authz.save(revision, comment=log_message) 188 217 except Exception, e: 189 msg = get_unicode(e [0])218 msg = get_unicode(e.message) 190 219 191 220 log.info(log_message) -
trunk/pysvnmanager/controllers/check.py
r32 r45 4 4 from pysvnmanager.lib.base import * 5 5 from pysvnmanager.model.svnauthz import * 6 from pysvnmanager.model import repos as _repos 6 7 7 8 log = logging.getLogger(__name__) … … 16 17 self.authz.login_as = self.login_as 17 18 self.reposlist = self.authz.get_manageable_repos_list(self.login_as) 19 if self.authz.is_super_user(self.login_as): 20 for i in _repos.Repos(cfg.repos_root).repos_list: 21 if i not in self.reposlist: 22 self.reposlist.append(i) 23 self.reposlist = sorted(self.reposlist) 18 24 19 25 def __before__(self, action): -
trunk/pysvnmanager/controllers/logs.py
r39 r45 156 156 self.rcslog.backup(comment=log_message, user=self.login_as) 157 157 except Exception, e: 158 msg = "%s" %e158 msg = e.message 159 159 if isinstance(msg, str): 160 160 msg = unicode(msg, 'utf-8') -
trunk/pysvnmanager/controllers/repos.py
r44 r45 51 51 def get_plugin_list(self): 52 52 reposname = request.params.get('select') 53 h = _hooks.Hooks(self.repos_root + reposname)53 h = _hooks.Hooks(self.repos_root + '/' + reposname) 54 54 total = 0; 55 55 msg = '' … … 69 69 def get_remove_hook_form_content(self): 70 70 reposname = request.params.get('select') 71 h = _hooks.Hooks(self.repos_root + reposname)71 h = _hooks.Hooks(self.repos_root + '/' + reposname) 72 72 msg = '' 73 73 if len(h.applied_plugins) > 0: … … 75 75 msg += "<br>\n" 76 76 num = 0 77 77 78 msg += "<table class='hidden'>\n" 79 msg += "<tr><th align='left'></th>" + \ 80 "<th align='left'>" + _("Id") + "</th>" + \ 81 "<th align='left'>" + _("Plugin name") + "</th>" + \ 82 "<th align='left'>" + _("Type") + "</th>" + \ 83 "</tr>\n" 78 84 for name in h.applied_plugins.keys(): 85 msg += "<tr><td width='1' rolspan='2'>" 79 86 msg += '<input type="checkbox" name="pluginid_%(num)d" value="%(plugin)s">' % { 80 87 'num': num, 'plugin': name, } 81 desc = h.plugins[name].description 82 detail = h.plugins[name].detail 83 msg += '%(plugin)s - %(desc)s' % { 84 'plugin': name, 'name': h.plugins[name].name, 'desc': desc, } 85 if detail and detail != desc: 86 msg += ' - %(detail)s' % { 'detail': detail, } 87 msg += '<br>\n' 88 msg += "</td>\n" 89 msg += "<td>" + name + "</td>\n" 90 msg += "<td>" + h.plugins[name].name + "</td>\n" 91 msg += "<td>" + h.plugins[name].get_type() + "</td>\n" 92 msg += "</tr>\n" 93 msg += "<tr><td></td><td colspan='3'>" + h.plugins[name].detail + "</td></tr>\n" 94 num += 1 95 msg += "</table>\n" 88 96 msg += '<input type="submit" name="remove_hook" value="%s">\n' % _("Remove selected hooks") 89 97 … … 93 101 reposname = request.params.get('repos') 94 102 pluginname = request.params.get('plugin') 95 h = _hooks.Hooks(self.repos_root + reposname)103 h = _hooks.Hooks(self.repos_root + '/' + reposname) 96 104 97 return h.plugins[pluginname]. show_form()105 return h.plugins[pluginname].install_config_form() 98 106 99 107 def apply_new_hook(self): … … 102 110 reposname = d.get("_repos") 103 111 pluginname = d.get("_plugin") 104 h = _hooks.Hooks(self.repos_root + reposname)112 h = _hooks.Hooks(self.repos_root + '/' + reposname) 105 113 plugin = h.plugins[pluginname] 106 plugin. set_plugin(d)114 plugin.install(d) 107 115 except Exception, e: 108 result = _("Apply plugin '%(plugin)son '%(repos)s' Failed. Error message:<br>\n%(msg)s") % {109 "plugin": pluginname, "repos":reposname, "msg": e }116 result = "<div class='error'>" + _("Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { 117 "plugin": pluginname, "repos":reposname, "msg": e.message} + "</div>" 110 118 else: 111 result = _("Apply plugin '%(plugin)son '%(repos)s' success.") % {112 "plugin": pluginname, "repos":reposname} 119 result = "<div class='info'>" + _("Apply plugin '%(plugin)s' on '%(repos)s' success.") % { 120 "plugin": pluginname, "repos":reposname} + "</div>" 113 121 return result 114 122 115 123 def remove_hook(self): 116 try: 117 d = request.params 118 reposname = d.get("_repos") 119 h = _hooks.Hooks(self.repos_root + reposname) 120 for i in d.keys(): 121 if "pluginid_" in i: 122 pluginname = d[i] 123 plugin = h.plugins[pluginname] 124 plugin.delete_plugin() 125 except Exception, e: 126 result = _("Delete plugin '%(plugin)s on '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { 127 "plugin": pluginname, "repos":reposname, "msg": e} 124 plugin_list=[] 125 d = request.params 126 reposname = d.get("_repos") 127 for i in d.keys(): 128 if "pluginid_" in i: 129 plugin_list.append(d[i]) 130 131 if plugin_list: 132 log.debug("plugin_list:" + ','.join(plugin_list)) 133 try: 134 hookobj = _hooks.Hooks(self.repos_root + '/' + reposname) 135 for pluginname in plugin_list: 136 hookobj.plugins[pluginname].reload() 137 hookobj.plugins[pluginname].uninstall() 138 log.info("my delete plugin %s, %s" % (pluginname, hookobj.plugins[pluginname].name)) 139 except Exception, e: 140 result = "<div class='error'>" + _("Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { 141 "plugin": ", ".join(plugin_list), "repos":reposname, "msg": e.message} + "</div>" 142 else: 143 result = "<div class='info'>" + _("Delete plugin '%(plugin)s' on '%(repos)s' success.") % { 144 "plugin": ", ".join(plugin_list), "repos":reposname} + "</div>" 128 145 else: 129 result = _("Delete plugin '%(plugin)s on '%(repos)s' success.") % { 130 "plugin": pluginname, "repos":reposname} 146 result = "<div class='error'>" + _("No plugin has been deleted for '%(repos)s'.") % {"repos":reposname} + "</div>" 131 147 return result 132 148 … … 137 153 self.repos.create(reposname) 138 154 except Exception, e: 139 result = _("Create repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % {140 "repos":reposname, "msg": e }155 result = "<div class='error'>" + _("Create repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { 156 "repos":reposname, "msg": e.message} + "</div>" 141 157 else: 142 result = _("Create repository '%(repos)s' success.") % {"repos":reposname}158 result = "<div class='info'>" + _("Create repository '%(repos)s' success.") % {"repos":reposname} + "</div>" 143 159 return result 144 160 … … 153 169 self.repos.delete(reposname) 154 170 except Exception, e: 155 result = _("Delete repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % {156 "repos":reposname, "msg": e }171 result = "<div class='error'>" + _("Delete repository '%(repos)s' Failed. Error message:<br>\n%(msg)s") % { 172 "repos":reposname, "msg": e.message} + "</div>" 157 173 else: 158 result = _("Delete blank repository '%(repos)s' success.") % {"repos":reposname}174 result = "<div class='info'>" + _("Delete blank repository '%(repos)s' success.") % {"repos":reposname} + "</div>" 159 175 return result 160 176 -
trunk/pysvnmanager/controllers/role.py
r32 r45 108 108 self.authz.save(revision, comment=log_message) 109 109 except Exception, e: 110 msg = get_unicode(e [0])110 msg = get_unicode(e.message) 111 111 112 112 log.info(log_message) … … 129 129 self.authz.save(revision, comment=log_message) 130 130 except Exception, e: 131 msg = get_unicode(e [0])131 msg = get_unicode(e.message) 132 132 133 133 log.info(log_message) … … 150 150 self.authz.save(revision, comment=log_message) 151 151 except Exception, e: 152 msg = get_unicode(e [0])152 msg = get_unicode(e.message) 153 153 154 154 log.info(log_message) … … 171 171 self.authz.save(revision, comment=log_message) 172 172 except Exception, e: 173 msg = get_unicode(e [0])173 msg = get_unicode(e.message) 174 174 175 175 log.info(log_message) -
trunk/pysvnmanager/hooks/plugins/CaseInsensitive.py
r42 r45 2 2 # -*- coding: utf-8 -*- 3 3 4 from pysvnmanager.hooks.plugins import PluginBase 4 from pysvnmanager.hooks.plugins import * 5 from pysvnmanager.hooks.plugins import _ 5 6 6 7 class CaseInsensitive(PluginBase): 7 name = "check case insensitive" 8 description = "A pre-commit hook to detect case-insensitive filename clashes." 9 option = "case_insensitive" 8 9 # Brief name for this plugin. 10 name = _("check case insensitive") 11 12 # Longer description for this plugin. 13 description = _("A pre-commit hook to detect case-insensitive filename clashes.") 14 15 # Hooks-plugin type: T_START_COMMIT, ..., T_POST_UNLOCK 16 type = T_PRE_COMMIT 17 18 # Plugin config option/value in config ini file. 19 key = "case_insensitive" 10 20 value = "yes" 11 21 12 def is_set(self): 13 return self.get_config(self.option) == self.value 22 def enabled(self): 23 """ 24 Return True, if this plugin has been setup. 25 Simply call 'has_config()'. 26 """ 27 return self.has_config() 14 28 15 def show(self): 29 def get_detail(self): 30 """ 31 Show detail informantion if plugin is already installed. 32 """ 16 33 return self.description 17 34 18 def show_form(self): 19 return self.description 35 def install_config_form(self): 36 """ 37 This method will be called to build setup configuration form. 38 If this plugin needs parameters, provides form fields here. 39 Any html and javascript are welcome. 20 40 21 def delete_plugin(self): 22 self.del_config(self.option) 23 self.write() 41 Default: just output description. 42 """ 43 return super(CaseInsensitive, self).install_config_form() 44 45 def uninstall(self): 46 """ 47 Uninstall hooks-plugin from repository. 48 Simply call 'unset_config()' and 'save()'. 49 """ 50 self.unset_config() 51 self.save() 24 52 25 def set_plugin(self, form=None): 26 self.set_config(self.option, self.value) 27 self.write() 53 def install(self, params=None): 54 """ 55 Install hooks-plugin from repository. 56 Simply call 'set_config()' and 'save()'. 57 58 Form fields in setup_config() will pass as params. 59 """ 60 self.set_config() 61 self.save() 28 62 29 63 def execute(repospath=""): -
trunk/pysvnmanager/hooks/plugins/EolStyleCheck.py
r42 r45 2 2 # -*- coding: utf-8 -*- 3 3 4 from pysvnmanager.hooks.plugins import PluginBase 4 from pysvnmanager.hooks.plugins import * 5 from pysvnmanager.hooks.plugins import _ 5 6 6 7 class EolStyleCheck(PluginBase): 7 name = "mime-type and eol-style check" 8 description = "New file must provide svn:eol-style if not binary file." 9 option = "check_eol_style" 8 9 # Brief name for this plugin. 10 name = _("mime-type and eol-style check") 11 12 # Longer description for this plugin. 13 description = _("New file must provide svn:eol-style if not binary file.") 14 15 # Hooks-plugin type: T_START_COMMIT, ..., T_POST_UNLOCK 16 type = T_PRE_COMMIT 17 18 # Plugin config option/value in config ini file. 19 key = "check_eol_style" 10 20 value = "yes" 11 21 12 def is_set(self): 13 return self.get_config(self.option) == self.value 22 def enabled(self): 23 """ 24 Return True, if this plugin has been setup. 25 Simply call 'has_config()'. 26 """ 27 return self.has_config() 14 28 15 def show(self): 29 def get_detail(self): 30 """ 31 Show detail informantion if plugin is already installed. 32 """ 16 33 return self.description 17 34 18 def show_form(self): 19 return self.description 35 def install_config_form(self): 36 """ 37 This method will be called to build setup configuration form. 38 If this plugin needs parameters, provides form fields here. 39 Any html and javascript are welcome. 20 40 21 def delete_plugin(self): 22 self.del_config(self.option) 23 self.write() 41 Default: just output description. 42 """ 43 return super(EolStyleCheck, self).install_config_form() 44 45 def uninstall(self): 46 """ 47 Uninstall hooks-plugin from repository. 48 Simply call 'unset_config()' and 'save()'. 49 """ 50 self.unset_config() 51 self.save() 24 52 25 def set_plugin(self, form=None): 26 self.set_config(self.option, self.value) 27 self.write() 53 def install(self, params=None): 54 """ 55 Install hooks-plugin from repository. 56 Simply call 'set_config()' and 'save()'. 57 58 Form fields in setup_config() will pass as params. 59 """ 60 self.set_config() 61 self.save() 28 62 29 63 def execute(repospath=""): -
trunk/pysvnmanager/hooks/plugins/__init__.py
r43 r45 1 # create a list of extension actions from the package directory 1 # -*- coding: utf-8 -*- 2 2 3 import ConfigParser 3 4 import os 5 import time 6 import logging 7 8 # i18n works only as pysvnmanager (a pylons app) model. 9 from pylons import config 10 if config.get('package') and not config.has_key('unittest'): 11 from pylons.i18n import _ 12 else: 13 _ = lambda x:x 14 15 log = logging.getLogger(__name__) 4 16 5 17 def getPackageModules(packagefile): 6 """ Return a list of modules for a package, omitting any modules 7 starting with an underscore. 18 """ 19 Return a list of modules for a package, omitting any modules 20 starting with an underscore. 8 21 """ 9 22 import os, re … … 39 52 return module 40 53 54 T_START_COMMIT = 1 55 T_PRE_COMMIT = 2 56 T_POST_COMMIT = 3 57 T_PRE_REVPROP_CHANGE = 4 58 T_POST_REVPROP_CHANGE = 5 59 T_PRE_LOCK = 6 60 T_POST_LOCK = 7 61 T_PRE_UNLOCK = 8 62 T_POST_UNLOCK = 9 41 63 42 64 class PluginBase(object): 43 65 """ Base class for hook plugins 44 66 """ 67 # Brief name for this plugin. 45 68 name = "" 69 70 # Longer description for this plugin. 46 71 description = "" 72 73 # Hooks-plugin type: T_START_COMMIT, ..., T_POST_UNLOCK 74 type = 0 75 76 # Store file timestamp as plugin revision, avoid config confliction. 77 # Not edit it manually. 78 revision = "" 47 79 48 80 def __init__(self, repospath): 81 # Test if repository is exists. 49 82 self.__repospath = repospath 50 83 if not os.path.exists(self.__repospath): 51 raise Exception, "repos '%s' not exist!" % os.path.basename(self.__repospath) 84 raise Exception, _("repos '%s' not exist!") % os.path.basename(self.__repospath) 85 86 # Read configuration from the default config ini file. 52 87 self.__configfile = "%s/conf/hooks.ini" % self.__repospath 53 self.cp = ConfigParser.ConfigParser()54 88 self.__read_config() 55 89 56 def __read_config(self): 90 def __read_config(self, force=False): 91 # only read config file if out-of-date. 92 if force or self.__is_outofdate(): 93 #log.debug("config is outofdate for '%s'." % self.name) 94 timestamp = os.path.getmtime(self.__configfile) 95 96 # ConfigParser has not cleanup method, so we initial it again. 97 self.cp = ConfigParser.ConfigParser() 98 self.cp.read(self.__configfile) 99 100 # Set timestamp as revision 101 self.revision = timestamp 102 # if config file not exist. 103 elif not self.revision: 104 self.cp = ConfigParser.ConfigParser() 105 self.cp.add_section('main') 106 self.revision = time.time() 107 108 def __is_outofdate(self): 109 """ 110 Test if timestamp of the config file is the same we load it last time. 111 """ 57 112 if os.path.exists(self.__configfile): 58 self.cp.read(self.__configfile) 59 else: 60 self.cp.add_section('main') 61 62 def write(self): 113 timestamp = os.path.getmtime(self.__configfile) 114 if not self.revision or self.revision != timestamp: 115 return True 116 # not out-of-date if config file not exist, or timestamp not changed. 117 return False 118 119 def reload(self, force=True): 120 """ 121 Reload the default config ini file, if out-of-date. 122 """ 123 self.__read_config(force) 124 125 def save(self): 126 """ 127 Save config to the default config ini file. 128 129 If the file modified time is different with the time last load, Conflict raises. 130 """ 131 # Test if timestamp of the config file is the same we load it last time. 132 if self.__is_outofdate(): 133 raise Exception(_("Conflict: plugin '%s' is modified by others.") % self.name) 134 135 # Save to file. 63 136 fp = open(self.__configfile, 'w') 64 137 self.cp.write(fp) 65 66 def get_config(self, option, default="", section='main'): 138 fp.close() 139 140 # Update revision as file timestamp. 141 self.revision = os.path.getmtime(self.__configfile) 142 143 def get_config(self, key, default="", section='main'): 144 """ 145 Get config from the default config file. 146 """ 67 147 if not self.cp.has_section(section): 68 148 self.cp.add_section(section) 69 if self.cp.has_option(section, option):70 result = self.cp.get(section, option)149 if self.cp.has_option(section, key): 150 result = self.cp.get(section, key) 71 151 else: 72 152 result = default 73 153 return result 74 154 75 def set_config(self, option, value="", section='main'): 155 def has_config(self): 156 """ 157 Test if self.key = self.value is in the default config ini file. 158 """ 159 if not hasattr(self, "key") or not hasattr(self, "value"): 160 raise Exception, _("Plugin not fully implemented.") 161 162 if hasattr(self, "section"): 163 section = self.section 164 else: 165 section = 'main' 166 167 return self.get_config(self.key, section=section) == self.value 168 169 def set_config(self): 170 """ 171 add self.key = self.value to default config ini file. 172 """ 173 if not hasattr(self, "key") or not hasattr(self, "value"): 174 raise Exception, _("Plugin not fully implemented.") 175 176 if hasattr(self, "section"): 177 section = self.section 178 else: 179 section = 'main' 180 76 181 if not self.cp.has_section(section): 77 182 self.cp.add_section(section) 78 self.cp.set(section, option, value) 79 80 def del_config(self, option, section='main'): 183 self.cp.set(section, self.key, self.value) 184 185 def unset_config(self): 186 """ 187 Remove self.key from default config ini file. 188 """ 189 if not hasattr(self, "key") or not hasattr(self, "value"): 190 raise Exception, _("Plugin not fully implemented.") 191 192 if hasattr(self, "section"): 193 section = self.section 194 else: 195 section = 'main' 196 81 197 if self.cp.has_section(section): 82 self.cp.remove_option(section, option) 198 self.cp.remove_option(section, self.key) 199 # test if section is blank after remove option. 83 200 if not self.cp.options(section): 84 201 self.cp.remove_section(section) 85 86 def is_set(self): 87 raise Exception, "Not implement." 88 89 def show(self): 90 return self.description 91 92 detail = property(show) 93 94 def show_form(self): 95 return self.description 202 203 def get_detail(self): 204 """ 205 Show detail informantion if plugin is already installed. 206 """ 207 if self.enabled(): 208 return self.description 209 else: 210 return "" 211 212 detail = property(get_detail) 213 214 def get_type(self): 215 type = "UNDEFINED" 216 if self.type == T_START_COMMIT: 217 type = "start-commit" 218 elif self.type == T_PRE_COMMIT: 219 type = "pre-commit" 220 elif self.type == T_POST_COMMIT: 221 type = "post-commit" 222 elif self.type == T_PRE_REVPROP_CHANGE: 223 type = "pre-revprop-change" 224 elif self.type == T_POST_REVPROP_CHANGE: 225 type = "post-revprop-change" 226 elif self.type == T_PRE_LOCK: 227 type = "pre-lock" 228 elif self.type == T_POST_LOCK: 229 type = "post-lock" 230 elif self.type == T_PRE_UNLOCK: 231 type = "pre-unlock" 232 elif self.type == T_POST_UNLOCK: 233 type = "post-unlock" 234 return type 235 236 def install_config_form(self): 237 """ 238 This method will be called to build setup configuration form. 239 If this plugin needs parameters, provides form fields here. 240 Any html and javascript are welcome. 241 242 Default: just output description. 243 """ 244 result = "<ul><li>" + _("Plugin name") + ": " + self.name + "\n" + \ 245 "<li>" + _("Type") + ": " + self.get_type() + "\n" + \ 246 "<li>" + _("Description") + ": " + self.description + "\n" 247 return result 248 249 def enabled(self): 250 """ 251 Return True, if this plugin has been setup. 252 Simply call 'has_config()'. 253 """ 254 raise Exception, _("Plugin not fully implemented.") 96 255 97 def delete_plugin(self): 98 raise Exception, "Not implement." 99 100 def set_plugin(self, form=None): 101 raise Exception, "Not implement." 256 def uninstall(self): 257 """ 258 Uninstall hooks-plugin from repository. 259 Simply call 'unset_config()' and 'save()'. 260 """ 261 raise Exception, _("Plugin not fully implemented.") 262 263 def install(self, params=None): 264 """ 265 Install hooks-plugin from repository. 266 Simply call 'set_config()' and 'save()'. 267 268 Form fields in setup_config() will pass as params. 269 """ 270 raise Exception, _("Plugin not fully implemented.") 102 271 103 272 -
trunk/pysvnmanager/i18n/en/LC_MESSAGES/pysvnmanager.po
r38 r45 10 10 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 11 11 "POT-Creation-Date: 2008-07-03 22:14+0800\n" 12 "PO-Revision-Date: 2008-0 7-31 09:21+0800\n"12 "PO-Revision-Date: 2008-08-27 00:06+0800\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14 14 "Language-Team: en <LL@li.org>\n" … … 19 19 "Generated-By: Babel 0.9.2\n" 20 20 21 #: pysvnmanager/controllers/authz.py: 2922 #: pysvnmanager/templates/authz/index.mako:15 921 #: pysvnmanager/controllers/authz.py:43 22 #: pysvnmanager/templates/authz/index.mako:152 23 23 #: pysvnmanager/templates/check/index.mako:10 24 24 msgid "All users(with anon)" 25 25 msgstr "" 26 26 27 #: pysvnmanager/controllers/authz.py: 3028 #: pysvnmanager/templates/authz/index.mako:1 6127 #: pysvnmanager/controllers/authz.py:44 28 #: pysvnmanager/templates/authz/index.mako:154 29 29 #: pysvnmanager/templates/check/index.mako:11 30 30 msgid "Known users" 31 31 msgstr "" 32 32 33 #: pysvnmanager/controllers/authz.py: 3134 #: pysvnmanager/templates/authz/index.mako:1 6333 #: pysvnmanager/controllers/authz.py:45 34 #: pysvnmanager/templates/authz/index.mako:156 35 35 #: pysvnmanager/templates/check/index.mako:12 36 36 msgid "Anonymous" 37 37 msgstr "" 38 38 39 #: pysvnmanager/controllers/authz.py: 36pysvnmanager/controllers/role.py:5039 #: pysvnmanager/controllers/authz.py:50 pysvnmanager/controllers/role.py:50 40 40 #: pysvnmanager/controllers/role.py:70 41 #: pysvnmanager/templates/authz/index.mako:1 5541 #: pysvnmanager/templates/authz/index.mako:148 42 42 #: pysvnmanager/templates/check/index.mako:17 43 43 #: pysvnmanager/templates/role/index.mako:18 … … 48 48 msgstr "" 49 49 50 #: pysvnmanager/controllers/authz.py: 39pysvnmanager/controllers/role.py:5550 #: pysvnmanager/controllers/authz.py:53 pysvnmanager/controllers/role.py:55 51 51 #: pysvnmanager/controllers/role.py:72 52 #: pysvnmanager/templates/authz/index.mako:15 752 #: pysvnmanager/templates/authz/index.mako:150 53 53 #: pysvnmanager/templates/check/index.mako:19 54 54 #: pysvnmanager/templates/role/index.mako:23 … … 59 59 msgstr "" 60 60 61 #: pysvnmanager/controllers/authz.py:54 pysvnmanager/controllers/authz.py:74 62 #: pysvnmanager/controllers/check.py:83 pysvnmanager/controllers/role.py:43 61 #: pysvnmanager/controllers/authz.py:68 pysvnmanager/controllers/authz.py:99 62 #: pysvnmanager/controllers/check.py:89 pysvnmanager/controllers/repos.py:40 63 #: pysvnmanager/controllers/repos.py:59 pysvnmanager/controllers/role.py:43 63 64 #: pysvnmanager/templates/check/index.mako:9 64 65 #: pysvnmanager/templates/check/index.mako:23 … … 68 69 msgstr "" 69 70 70 #: pysvnmanager/controllers/authz.py:1 3571 #: pysvnmanager/controllers/authz.py:160 71 72 #, python-format 72 73 msgid "User %(user)s changed authz rules. (rev:%(rev)s)" 73 74 msgstr "" 74 75 75 #: pysvnmanager/controllers/authz.py:1 4476 #: pysvnmanager/controllers/authz.py:173 76 77 #, python-format 77 78 msgid "Repository %s not exist." 78 79 msgstr "" 79 80 80 #: pysvnmanager/controllers/authz.py:1 5281 #: pysvnmanager/controllers/authz.py:181 81 82 #, python-format 82 83 msgid "Module %s not exist." 83 84 msgstr "" 84 85 85 #: pysvnmanager/controllers/authz.py:1 5886 #: pysvnmanager/controllers/authz.py:187 86 87 msgid "You can not delete yourself from admin list." 87 88 msgstr "" 88 89 89 #: pysvnmanager/controllers/authz.py: 18390 #: pysvnmanager/controllers/authz.py:212 90 91 #, python-format 91 92 msgid "User %(user)s delete authz rules. (rev:%(rev)s)" 92 93 msgstr "" 93 94 94 #: pysvnmanager/controllers/check.py:6 395 #: pysvnmanager/controllers/check.py:69 95 96 #: pysvnmanager/templates/auth_failed.mako:3 96 97 msgid "Permission denied." … … 125 126 msgstr "" 126 127 127 #: pysvnmanager/controllers/logs.py:1 48128 #: pysvnmanager/controllers/logs.py:152 128 129 #, python-format 129 130 msgid "Rollback successfully to revision: %s" 130 131 msgstr "" 131 132 132 #: pysvnmanager/controllers/logs.py:1 57133 #: pysvnmanager/controllers/logs.py:161 133 134 #, python-format 134 135 msgid "Rollback failed: %s" 135 136 msgstr "" 136 137 138 #: pysvnmanager/controllers/repos.py:74 139 msgid "Installed hooks:" 140 msgstr "" 141 142 #: pysvnmanager/controllers/repos.py:80 143 msgid "Id" 144 msgstr "" 145 146 #: pysvnmanager/controllers/repos.py:81 147 #: pysvnmanager/hooks/plugins/__init__.py:244 148 msgid "Plugin name" 149 msgstr "" 150 151 #: pysvnmanager/controllers/repos.py:82 152 #: pysvnmanager/hooks/plugins/__init__.py:245 153 msgid "Type" 154 msgstr "" 155 156 #: pysvnmanager/controllers/repos.py:96 157 msgid "Remove selected hooks" 158 msgstr "" 159 160 #: pysvnmanager/controllers/repos.py:116 161 #, python-format 162 msgid "" 163 "Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 164 "%(msg)s" 165 msgstr "" 166 167 #: pysvnmanager/controllers/repos.py:119 168 #, python-format 169 msgid "Apply plugin '%(plugin)s' on '%(repos)s' success." 170 msgstr "" 171 172 #: pysvnmanager/controllers/repos.py:140 173 #, python-format 174 msgid "" 175 "Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 176 "%(msg)s" 177 msgstr "" 178 179 #: pysvnmanager/controllers/repos.py:143 180 #, python-format 181 msgid "Delete plugin '%(plugin)s' on '%(repos)s' success." 182 msgstr "" 183 184 #: pysvnmanager/controllers/repos.py:146 185 #, python-format 186 msgid "No plugin has been deleted for '%(repos)s'." 187 msgstr "" 188 189 #: pysvnmanager/controllers/repos.py:155 190 #, python-format 191 msgid "" 192 "Create repository '%(repos)s' Failed. Error message:<br>\n" 193 "%(msg)s" 194 msgstr "" 195 196 #: pysvnmanager/controllers/repos.py:158 197 #, python-format 198 msgid "Create repository '%(repos)s' success." 199 msgstr "" 200 201 #: pysvnmanager/controllers/repos.py:171 202 #, python-format 203 msgid "" 204 "Delete repository '%(repos)s' Failed. Error message:<br>\n" 205 "%(msg)s" 206 msgstr "" 207 208 #: pysvnmanager/controllers/repos.py:174 209 #, python-format 210 msgid "Delete blank repository '%(repos)s' success." 211 msgstr "" 212 137 213 #: pysvnmanager/controllers/role.py:103 138 214 #, python-format … … 168 244 #, python-format 169 245 msgid "User %s logged out" 246 msgstr "" 247 248 #: pysvnmanager/hooks/plugins/CaseInsensitive.py:10 249 msgid "check case insensitive" 250 msgstr "" 251 252 #: pysvnmanager/hooks/plugins/CaseInsensitive.py:13 253 msgid "A pre-commit hook to detect case-insensitive filename clashes." 254 msgstr "" 255 256 #: pysvnmanager/hooks/plugins/EolStyleCheck.py:10 257 msgid "mime-type and eol-style check" 258 msgstr "" 259 260 #: pysvnmanager/hooks/plugins/EolStyleCheck.py:13 261 msgid "New file must provide svn:eol-style if not binary file." 262 msgstr "" 263 264 #: pysvnmanager/hooks/plugins/__init__.py:84 265 #, python-format 266 msgid "repos '%s' not exist!" 267 msgstr "" 268 269 #: pysvnmanager/hooks/plugins/__init__.py:133 270 #, python-format 271 msgid "Conflict: plugin '%s' is modified by others." 272 msgstr "" 273 274 #: pysvnmanager/hooks/plugins/__init__.py:160 275 #: pysvnmanager/hooks/plugins/__init__.py:174 276 #: pysvnmanager/hooks/plugins/__init__.py:190 277 #: pysvnmanager/hooks/plugins/__init__.py:254 278 #: pysvnmanager/hooks/plugins/__init__.py:261 279 #: pysvnmanager/hooks/plugins/__init__.py:270 280 msgid "Plugin not fully implemented." 281 msgstr "" 282 283 #: pysvnmanager/hooks/plugins/__init__.py:246 284 msgid "Description" 285 msgstr "" 286 287 #: pysvnmanager/model/repos.py:39 288 #, python-format 289 msgid "Repos root does not exist: %s" 290 msgstr "" 291 292 #: pysvnmanager/model/repos.py:68 293 #, python-format 294 msgid "Repos %s already exists." 295 msgstr "" 296 297 #: pysvnmanager/model/repos.py:137 298 #, python-format 299 msgid "Repos %s is not a blank repository." 170 300 msgstr "" 171 301 … … 223 353 msgstr "" 224 354 225 #: pysvnmanager/model/svnauthz.py:17 70355 #: pysvnmanager/model/svnauthz.py:1769 226 356 #, python-format 227 357 msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 228 358 msgstr "" 229 359 230 #: pysvnmanager/model/svnauthz.py:177 2360 #: pysvnmanager/model/svnauthz.py:1771 231 361 #, python-format 232 362 msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 233 363 msgstr "" 234 364 235 #: pysvnmanager/model/svnauthz.py:177 4365 #: pysvnmanager/model/svnauthz.py:1773 236 366 #, python-format 237 367 msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 238 368 msgstr "" 239 369 240 #: pysvnmanager/model/svnauthz.py:181 2370 #: pysvnmanager/model/svnauthz.py:1813 241 371 #, python-format 242 372 msgid "" … … 250 380 msgstr "" 251 381 252 #: pysvnmanager/model/svnauthz.py:183 1382 #: pysvnmanager/model/svnauthz.py:1832 253 383 #, python-format 254 384 msgid "" … … 268 398 msgstr "" 269 399 270 #: pysvnmanager/templates/base.mako:1 1400 #: pysvnmanager/templates/base.mako:12 271 401 msgid "Loading, please wait..." 272 402 msgstr "" 273 403 274 #: pysvnmanager/templates/base.mako:27 404 #: pysvnmanager/templates/base.mako:19 405 msgid "Clear message" 406 msgstr "" 407 408 #: pysvnmanager/templates/base.mako:33 275 409 msgid "Check permissions" 276 410 msgstr "" 277 411 278 #: pysvnmanager/templates/base.mako: 28412 #: pysvnmanager/templates/base.mako:34 279 413 msgid "Role management" 280 414 msgstr "" 281 415 282 #: pysvnmanager/templates/base.mako: 29416 #: pysvnmanager/templates/base.mako:35 283 417 #: pysvnmanager/templates/authz/index.mako:5 284 #: pysvnmanager/templates/authz/index.mako: 603418 #: pysvnmanager/templates/authz/index.mako:590 285 419 msgid "ACL management" 286 420 msgstr "" 287 421 288 #: pysvnmanager/templates/base.mako:30 289 msgid "Logs" 290 msgstr "" 291 292 #: pysvnmanager/templates/base.mako:32 422 #: pysvnmanager/templates/base.mako:36 423 #: pysvnmanager/templates/repos/hooks.mako:5 424 #: pysvnmanager/templates/repos/hooks.mako:189 425 msgid "Repos management" 426 msgstr "" 427 428 #: pysvnmanager/templates/base.mako:37 429 msgid "Change log" 430 msgstr "" 431 432 #: pysvnmanager/templates/base.mako:39 293 433 msgid "Logout" 294 434 msgstr "" 295 435 296 #: pysvnmanager/templates/authz/index.mako:1 65436 #: pysvnmanager/templates/authz/index.mako:158 297 437 msgid "User:" 298 438 msgstr "" 299 439 300 #: pysvnmanager/templates/authz/index.mako:1 74440 #: pysvnmanager/templates/authz/index.mako:167 301 441 msgid "Readonly" 302 442 msgstr "" 303 443 304 #: pysvnmanager/templates/authz/index.mako:17 8305 #: pysvnmanager/templates/authz/index.mako:6 77444 #: pysvnmanager/templates/authz/index.mako:171 445 #: pysvnmanager/templates/authz/index.mako:664 306 446 msgid "Full" 307 447 msgstr "" 308 448 309 #: pysvnmanager/templates/authz/index.mako:182 449 #: pysvnmanager/templates/authz/index.mako:175 450 #: pysvnmanager/templates/authz/index.mako:665 451 msgid "Denied" 452 msgstr "" 453 454 #: pysvnmanager/templates/authz/index.mako:373 455 msgid "No rights selected! Please check proper rights for selected users." 456 msgstr "" 457 458 #: pysvnmanager/templates/authz/index.mako:384 459 msgid "Unknown rights: " 460 msgstr "" 461 462 #: pysvnmanager/templates/authz/index.mako:472 463 msgid "Please input module path." 464 msgstr "" 465 466 #: pysvnmanager/templates/authz/index.mako:478 467 msgid "Please input repository name." 468 msgstr "" 469 470 #: pysvnmanager/templates/authz/index.mako:483 471 msgid "Save failed." 472 msgstr "" 473 474 #: pysvnmanager/templates/authz/index.mako:503 475 msgid "Update ACL failed:" 476 msgstr "" 477 478 #: pysvnmanager/templates/authz/index.mako:508 479 msgid "Update ACL successfully." 480 msgstr "" 481 482 #: pysvnmanager/templates/authz/index.mako:529 483 msgid "No path selected." 484 msgstr "" 485 486 #: pysvnmanager/templates/authz/index.mako:534 487 msgid "Are you sure to delete module:" 488 msgstr "" 489 490 #: pysvnmanager/templates/authz/index.mako:536 491 #: pysvnmanager/templates/role/index.mako:446 492 #: pysvnmanager/templates/role/index.mako:531 493 msgid "Click Ok to proceed, or click cancel" 494 msgstr "" 495 496 #: pysvnmanager/templates/authz/index.mako:557 497 msgid "Can not delete module " 498 msgstr "" 499 500 #: pysvnmanager/templates/authz/index.mako:562 501 msgid "Successfully delete module:" 502 msgstr "" 503 504 #: pysvnmanager/templates/authz/index.mako:597 505 #: pysvnmanager/templates/repos/hooks.mako:195 506 msgid "Repository:" 507 msgstr "" 508 509 #: pysvnmanager/templates/authz/index.mako:600 510 msgid "New repository" 511 msgstr "" 512 513 #: pysvnmanager/templates/authz/index.mako:604 514 msgid "Repository Name:" 515 msgstr "" 516 517 #: pysvnmanager/templates/authz/index.mako:609 518 msgid "Administrators:" 519 msgstr "" 520 521 #: pysvnmanager/templates/authz/index.mako:621 522 msgid "Module:" 523 msgstr "" 524 525 #: pysvnmanager/templates/authz/index.mako:624 526 msgid "New module" 527 msgstr "" 528 529 #: pysvnmanager/templates/authz/index.mako:630 530 msgid "Module Path:" 531 msgstr "" 532 533 #: pysvnmanager/templates/authz/index.mako:644 534 msgid "ACL" 535 msgstr "" 536 537 #: pysvnmanager/templates/authz/index.mako:649 538 msgid "Users" 539 msgstr "" 540 541 #: pysvnmanager/templates/authz/index.mako:663 542 msgid "ReadOnly" 543 msgstr "" 544 310 545 #: pysvnmanager/templates/authz/index.mako:678 311 msgid "Denied" 312 msgstr "" 313 314 #: pysvnmanager/templates/authz/index.mako:380 315 msgid "No rights selected! Please check proper rights for selected users." 316 msgstr "" 317 318 #: pysvnmanager/templates/authz/index.mako:391 319 msgid "Unknown rights: " 320 msgstr "" 321 322 #: pysvnmanager/templates/authz/index.mako:479 323 msgid "Please input module path." 324 msgstr "" 325 326 #: pysvnmanager/templates/authz/index.mako:485 327 msgid "Please input repository name." 328 msgstr "" 329 330 #: pysvnmanager/templates/authz/index.mako:490 331 msgid "Save failed." 332 msgstr "" 333 334 #: pysvnmanager/templates/authz/index.mako:510 335 msgid "Update ACL failed:" 336 msgstr "" 337 338 #: pysvnmanager/templates/authz/index.mako:517 339 msgid "Update ACL successfully." 340 msgstr "" 341 342 #: pysvnmanager/templates/authz/index.mako:539 343 msgid "No path selected." 344 msgstr "" 345 346 #: pysvnmanager/templates/authz/index.mako:544 347 msgid "Are you sure to delete module:" 348 msgstr "" 349 350 #: pysvnmanager/templates/authz/index.mako:546 351 #: pysvnmanager/templates/role/index.mako:450 352 #: pysvnmanager/templates/role/index.mako:541 353 msgid "Click Ok to proceed, or click cancel" 354 msgstr "" 355 356 #: pysvnmanager/templates/authz/index.mako:567 357 msgid "Can not delete module " 358 msgstr "" 359 360 #: pysvnmanager/templates/authz/index.mako:574 361 msgid "Successfully delete module:" 362 msgstr "" 363 364 #: pysvnmanager/templates/authz/index.mako:610 365 msgid "Repository:" 366 msgstr "" 367 368 #: pysvnmanager/templates/authz/index.mako:613 369 msgid "New repository" 370 msgstr "" 371 372 #: pysvnmanager/templates/authz/index.mako:617 373 msgid "Repository Name:" 374 msgstr "" 375 376 #: pysvnmanager/templates/authz/index.mako:622 377 msgid "Administrators:" 378 msgstr "" 379 380 #: pysvnmanager/templates/authz/index.mako:634 381 msgid "Module:" 382 msgstr "" 383 384 #: pysvnmanager/templates/authz/index.mako:637 385 msgid "New module" 386 msgstr "" 387 388 #: pysvnmanager/templates/authz/index.mako:643 389 msgid "Module Path:" 390 msgstr "" 391 392 #: pysvnmanager/templates/authz/index.mako:657 393 msgid "ACL" 394 msgstr "" 395 396 #: pysvnmanager/templates/authz/index.mako:662 397 msgid "Users" 398 msgstr "" 399 400 #: pysvnmanager/templates/authz/index.mako:676 401 msgid "ReadOnly" 402 msgstr "" 403 404 #: pysvnmanager/templates/authz/index.mako:693 405 #: pysvnmanager/templates/role/index.mako:727 546 #: pysvnmanager/templates/role/index.mako:711 406 547 msgid "Save" 407 548 msgstr "" 408 549 409 #: pysvnmanager/templates/authz/index.mako:6 94410 #: pysvnmanager/templates/role/index.mako:7 28550 #: pysvnmanager/templates/authz/index.mako:679 551 #: pysvnmanager/templates/role/index.mako:712 411 552 msgid "Delete" 412 553 msgstr "" 413 554 414 #: pysvnmanager/templates/authz/index.mako:6 95415 #: pysvnmanager/templates/role/index.mako:7 29555 #: pysvnmanager/templates/authz/index.mako:680 556 #: pysvnmanager/templates/role/index.mako:713 416 557 msgid "Cancel" 417 558 msgstr "" … … 494 635 495 636 #: pysvnmanager/templates/logs/rollback.mako:14 496 #: pysvnmanager/templates/logs/view.mako: 18637 #: pysvnmanager/templates/logs/view.mako:20 497 638 msgid "Close" 498 639 msgstr "" … … 506 647 msgstr "" 507 648 508 #: pysvnmanager/templates/logs/view.mako:1 6649 #: pysvnmanager/templates/logs/view.mako:17 509 650 msgid "Rollback to this revision" 510 651 msgstr "" 511 652 653 #: pysvnmanager/templates/repos/create.mako:5 654 #: pysvnmanager/templates/repos/create.mako:8 655 #: pysvnmanager/templates/repos/create.mako:25 656 msgid "Create repository" 657 msgstr "" 658 659 #: pysvnmanager/templates/repos/create.mako:22 660 #: pysvnmanager/templates/repos/remove.mako:63 661 msgid "Repository name:" 662 msgstr "" 663 664 #: pysvnmanager/templates/repos/hooks.mako:198 665 msgid "Add repository" 666 msgstr "" 667 668 #: pysvnmanager/templates/repos/hooks.mako:199 669 #: pysvnmanager/templates/repos/remove.mako:5 670 #: pysvnmanager/templates/repos/remove.mako:49 671 #: pysvnmanager/templates/repos/remove.mako:67 672 msgid "Remove repository" 673 msgstr "" 674 675 #: pysvnmanager/templates/repos/hooks.mako:204 676 msgid "Uninstalled hooks:" 677 msgstr "" 678 679 #: pysvnmanager/templates/repos/hooks.mako:226 680 msgid "Enable this hook" 681 msgstr "" 682 512 683 #: pysvnmanager/templates/role/index.mako:5 513 #: pysvnmanager/templates/role/index.mako:6 38684 #: pysvnmanager/templates/role/index.mako:625 514 685 msgid "Role Management" 515 686 msgstr "" 516 687 517 #: pysvnmanager/templates/role/index.mako:4 20688 #: pysvnmanager/templates/role/index.mako:418 518 689 msgid "Update group failed:" 519 690 msgstr "" 520 691 521 #: pysvnmanager/templates/role/index.mako:42 7692 #: pysvnmanager/templates/role/index.mako:424 522 693 msgid "Update group successfully." 523 694 msgstr "" 524 695 525 #: pysvnmanager/templates/role/index.mako:44 8696 #: pysvnmanager/templates/role/index.mako:444 526 697 msgid "Are you sure to delete group:" 527 698 msgstr "" 528 699 529 #: pysvnmanager/templates/role/index.mako:4 71700 #: pysvnmanager/templates/role/index.mako:467 530 701 msgid "Delete group failed:" 531 702 msgstr "" 532 703 533 #: pysvnmanager/templates/role/index.mako:47 8704 #: pysvnmanager/templates/role/index.mako:472 534 705 msgid "Delete group successfully." 535 706 msgstr "" 536 707 537 #: pysvnmanager/templates/role/index.mako:5 12708 #: pysvnmanager/templates/role/index.mako:505 538 709 msgid "Update alias failed:" 539 710 msgstr "" 540 711 541 #: pysvnmanager/templates/role/index.mako:51 9712 #: pysvnmanager/templates/role/index.mako:510 542 713 msgid "Update alias successfully." 543 714 msgstr "" 544 715 545 #: pysvnmanager/templates/role/index.mako:5 39716 #: pysvnmanager/templates/role/index.mako:529 546 717 msgid "Are you sure to delete alias:" 547 718 msgstr "" 548 719 549 #: pysvnmanager/templates/role/index.mako:5 62720 #: pysvnmanager/templates/role/index.mako:552 550 721 msgid "Delete alias failed:" 551 722 msgstr "" 552 723 553 #: pysvnmanager/templates/role/index.mako:5 69724 #: pysvnmanager/templates/role/index.mako:557 554 725 msgid "Delete alias successfully." 555 726 msgstr "" 556 727 728 #: pysvnmanager/templates/role/index.mako:632 729 msgid "Select a role name:" 730 msgstr "" 731 732 #: pysvnmanager/templates/role/index.mako:636 733 msgid "New Group" 734 msgstr "" 735 736 #: pysvnmanager/templates/role/index.mako:637 737 msgid "New Alias" 738 msgstr "" 739 740 #: pysvnmanager/templates/role/index.mako:641 741 msgid "New group name:" 742 msgstr "" 743 557 744 #: pysvnmanager/templates/role/index.mako:645 558 msgid "Select a role name:"559 msgstr ""560 561 #: pysvnmanager/templates/role/index.mako:649562 msgid "New Group"563 msgstr ""564 565 #: pysvnmanager/templates/role/index.mako:650566 msgid "New Alias"567 msgstr ""568 569 #: pysvnmanager/templates/role/index.mako:654570 msgid "New group name:"571 msgstr ""572 573 #: pysvnmanager/templates/role/index.mako:658574 745 msgid "New alias name:" 575 746 msgstr "" 576 747 577 #: pysvnmanager/templates/role/index.mako:6 70748 #: pysvnmanager/templates/role/index.mako:657 578 749 msgid "Members list" 579 750 msgstr "" 580 751 581 #: pysvnmanager/templates/role/index.mako:6 75752 #: pysvnmanager/templates/role/index.mako:662 582 753 msgid "Other users" 583 754 msgstr "" 584 755 585 #: pysvnmanager/templates/role/index.mako:6 94756 #: pysvnmanager/templates/role/index.mako:681 586 757 msgid "Ignore recursive" 587 758 msgstr "" 588 759 589 #: pysvnmanager/templates/role/index.mako: 706760 #: pysvnmanager/templates/role/index.mako:693 590 761 msgid "User name:" 591 762 msgstr "" -
trunk/pysvnmanager/i18n/pysvnmanager.pot
r38 r45 7 7 msgid "" 8 8 msgstr "" 9 "Project-Id-Version: pySvnManager 0. 1.3\n"9 "Project-Id-Version: pySvnManager 0.2.0\n" 10 10 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 11 "POT-Creation-Date: 2008-0 7-31 09:21+0800\n"11 "POT-Creation-Date: 2008-08-27 00:06+0800\n" 12 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 18 18 "Generated-By: Babel 0.9.2\n" 19 19 20 #: pysvnmanager/controllers/authz.py: 29 pysvnmanager/templates/authz/index.mako:15920 #: pysvnmanager/controllers/authz.py:43 pysvnmanager/templates/authz/index.mako:152 21 21 #: pysvnmanager/templates/check/index.mako:10 22 22 msgid "All users(with anon)" 23 23 msgstr "" 24 24 25 #: pysvnmanager/controllers/authz.py: 30 pysvnmanager/templates/authz/index.mako:16125 #: pysvnmanager/controllers/authz.py:44 pysvnmanager/templates/authz/index.mako:154 26 26 #: pysvnmanager/templates/check/index.mako:11 27 27 msgid "Known users" 28 28 msgstr "" 29 29 30 #: pysvnmanager/controllers/authz.py: 31 pysvnmanager/templates/authz/index.mako:16330 #: pysvnmanager/controllers/authz.py:45 pysvnmanager/templates/authz/index.mako:156 31 31 #: pysvnmanager/templates/check/index.mako:12 32 32 msgid "Anonymous" 33 33 msgstr "" 34 34 35 #: pysvnmanager/controllers/authz.py: 36pysvnmanager/controllers/role.py:5036 #: pysvnmanager/controllers/role.py:70 pysvnmanager/templates/authz/index.mako:1 5535 #: pysvnmanager/controllers/authz.py:50 pysvnmanager/controllers/role.py:50 36 #: pysvnmanager/controllers/role.py:70 pysvnmanager/templates/authz/index.mako:148 37 37 #: pysvnmanager/templates/check/index.mako:17 38 38 #: pysvnmanager/templates/role/index.mako:18 … … 43 43 msgstr "" 44 44 45 #: pysvnmanager/controllers/authz.py: 39pysvnmanager/controllers/role.py:5546 #: pysvnmanager/controllers/role.py:72 pysvnmanager/templates/authz/index.mako:15 745 #: pysvnmanager/controllers/authz.py:53 pysvnmanager/controllers/role.py:55 46 #: pysvnmanager/controllers/role.py:72 pysvnmanager/templates/authz/index.mako:150 47 47 #: pysvnmanager/templates/check/index.mako:19 48 48 #: pysvnmanager/templates/role/index.mako:23 … … 53 53 msgstr "" 54 54 55 #: pysvnmanager/controllers/authz.py:54 pysvnmanager/controllers/authz.py:74 56 #: pysvnmanager/controllers/check.py:83 pysvnmanager/controllers/role.py:43 55 #: pysvnmanager/controllers/authz.py:68 pysvnmanager/controllers/authz.py:99 56 #: pysvnmanager/controllers/check.py:89 pysvnmanager/controllers/repos.py:40 57 #: pysvnmanager/controllers/repos.py:59 pysvnmanager/controllers/role.py:43 57 58 #: pysvnmanager/templates/check/index.mako:9 58 59 #: pysvnmanager/templates/check/index.mako:23 … … 62 63 msgstr "" 63 64 64 #: pysvnmanager/controllers/authz.py:1 3565 #: pysvnmanager/controllers/authz.py:160 65 66 #, python-format 66 67 msgid "User %(user)s changed authz rules. (rev:%(rev)s)" 67 68 msgstr "" 68 69 69 #: pysvnmanager/controllers/authz.py:1 4470 #: pysvnmanager/controllers/authz.py:173 70 71 #, python-format 71 72 msgid "Repository %s not exist." 72 73 msgstr "" 73 74 74 #: pysvnmanager/controllers/authz.py:1 5275 #: pysvnmanager/controllers/authz.py:181 75 76 #, python-format 76 77 msgid "Module %s not exist." 77 78 msgstr "" 78 79 79 #: pysvnmanager/controllers/authz.py:1 5880 #: pysvnmanager/controllers/authz.py:187 80 81 msgid "You can not delete yourself from admin list." 81 82 msgstr "" 82 83 83 #: pysvnmanager/controllers/authz.py: 18384 #: pysvnmanager/controllers/authz.py:212 84 85 #, python-format 85 86 msgid "User %(user)s delete authz rules. (rev:%(rev)s)" 86 87 msgstr "" 87 88 88 #: pysvnmanager/controllers/check.py:6 3pysvnmanager/templates/auth_failed.mako:389 #: pysvnmanager/controllers/check.py:69 pysvnmanager/templates/auth_failed.mako:3 89 90 msgid "Permission denied." 90 91 msgstr "" … … 118 119 msgstr "" 119 120 120 #: pysvnmanager/controllers/logs.py:1 48121 #: pysvnmanager/controllers/logs.py:152 121 122 #, python-format 122 123 msgid "Rollback successfully to revision: %s" 123 124 msgstr "" 124 125 125 #: pysvnmanager/controllers/logs.py:1 57126 #: pysvnmanager/controllers/logs.py:161 126 127 #, python-format 127 128 msgid "Rollback failed: %s" 128 129 msgstr "" 129 130 131 #: pysvnmanager/controllers/repos.py:74 132 msgid "Installed hooks:" 133 msgstr "" 134 135 #: pysvnmanager/controllers/repos.py:80 136 msgid "Id" 137 msgstr "" 138 139 #: pysvnmanager/controllers/repos.py:81 pysvnmanager/hooks/plugins/__init__.py:244 140 msgid "Plugin name" 141 msgstr "" 142 143 #: pysvnmanager/controllers/repos.py:82 pysvnmanager/hooks/plugins/__init__.py:245 144 msgid "Type" 145 msgstr "" 146 147 #: pysvnmanager/controllers/repos.py:96 148 msgid "Remove selected hooks" 149 msgstr "" 150 151 #: pysvnmanager/controllers/repos.py:116 152 #, python-format 153 msgid "" 154 "Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 155 "%(msg)s" 156 msgstr "" 157 158 #: pysvnmanager/controllers/repos.py:119 159 #, python-format 160 msgid "Apply plugin '%(plugin)s' on '%(repos)s' success." 161 msgstr "" 162 163 #: pysvnmanager/controllers/repos.py:140 164 #, python-format 165 msgid "" 166 "Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 167 "%(msg)s" 168 msgstr "" 169 170 #: pysvnmanager/controllers/repos.py:143 171 #, python-format 172 msgid "Delete plugin '%(plugin)s' on '%(repos)s' success." 173 msgstr "" 174 175 #: pysvnmanager/controllers/repos.py:146 176 #, python-format 177 msgid "No plugin has been deleted for '%(repos)s'." 178 msgstr "" 179 180 #: pysvnmanager/controllers/repos.py:155 181 #, python-format 182 msgid "" 183 "Create repository '%(repos)s' Failed. Error message:<br>\n" 184 "%(msg)s" 185 msgstr "" 186 187 #: pysvnmanager/controllers/repos.py:158 188 #, python-format 189 msgid "Create repository '%(repos)s' success." 190 msgstr "" 191 192 #: pysvnmanager/controllers/repos.py:171 193 #, python-format 194 msgid "" 195 "Delete repository '%(repos)s' Failed. Error message:<br>\n" 196 "%(msg)s" 197 msgstr "" 198 199 #: pysvnmanager/controllers/repos.py:174 200 #, python-format 201 msgid "Delete blank repository '%(repos)s' success." 202 msgstr "" 203 130 204 #: pysvnmanager/controllers/role.py:103 131 205 #, python-format … … 161 235 #, python-format 162 236 msgid "User %s logged out" 237 msgstr "" 238 239 #: pysvnmanager/hooks/plugins/CaseInsensitive.py:10 240 msgid "check case insensitive" 241 msgstr "" 242 243 #: pysvnmanager/hooks/plugins/CaseInsensitive.py:13 244 msgid "A pre-commit hook to detect case-insensitive filename clashes." 245 msgstr "" 246 247 #: pysvnmanager/hooks/plugins/EolStyleCheck.py:10 248 msgid "mime-type and eol-style check" 249 msgstr "" 250 251 #: pysvnmanager/hooks/plugins/EolStyleCheck.py:13 252 msgid "New file must provide svn:eol-style if not binary file." 253 msgstr "" 254 255 #: pysvnmanager/hooks/plugins/__init__.py:84 256 #, python-format 257 msgid "repos '%s' not exist!" 258 msgstr "" 259 260 #: pysvnmanager/hooks/plugins/__init__.py:133 261 #, python-format 262 msgid "Conflict: plugin '%s' is modified by others." 263 msgstr "" 264 265 #: pysvnmanager/hooks/plugins/__init__.py:160 266 #: pysvnmanager/hooks/plugins/__init__.py:174 267 #: pysvnmanager/hooks/plugins/__init__.py:190 268 #: pysvnmanager/hooks/plugins/__init__.py:254 269 #: pysvnmanager/hooks/plugins/__init__.py:261 270 #: pysvnmanager/hooks/plugins/__init__.py:270 271 msgid "Plugin not fully implemented." 272 msgstr "" 273 274 #: pysvnmanager/hooks/plugins/__init__.py:246 275 msgid "Description" 276 msgstr "" 277 278 #: pysvnmanager/model/repos.py:39 279 #, python-format 280 msgid "Repos root does not exist: %s" 281 msgstr "" 282 283 #: pysvnmanager/model/repos.py:68 284 #, python-format 285 msgid "Repos %s already exists." 286 msgstr "" 287 288 #: pysvnmanager/model/repos.py:137 289 #, python-format 290 msgid "Repos %s is not a blank repository." 163 291 msgstr "" 164 292 … … 216 344 msgstr "" 217 345 218 #: pysvnmanager/model/svnauthz.py:17 70346 #: pysvnmanager/model/svnauthz.py:1769 219 347 #, python-format 220 348 msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 221 349 msgstr "" 222 350 223 #: pysvnmanager/model/svnauthz.py:177 2351 #: pysvnmanager/model/svnauthz.py:1771 224 352 #, python-format 225 353 msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 226 354 msgstr "" 227 355 228 #: pysvnmanager/model/svnauthz.py:177 4356 #: pysvnmanager/model/svnauthz.py:1773 229 357 #, python-format 230 358 msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 231 359 msgstr "" 232 360 233 #: pysvnmanager/model/svnauthz.py:181 2361 #: pysvnmanager/model/svnauthz.py:1813 234 362 #, python-format 235 363 msgid "" … … 243 371 msgstr "" 244 372 245 #: pysvnmanager/model/svnauthz.py:183 1373 #: pysvnmanager/model/svnauthz.py:1832 246 374 #, python-format 247 375 msgid "" … … 261 389 msgstr "" 262 390 263 #: pysvnmanager/templates/base.mako:1 1391 #: pysvnmanager/templates/base.mako:12 264 392 msgid "Loading, please wait..." 265 393 msgstr "" 266 394 267 #: pysvnmanager/templates/base.mako:27 395 #: pysvnmanager/templates/base.mako:19 396 msgid "Clear message" 397 msgstr "" 398 399 #: pysvnmanager/templates/base.mako:33 268 400 msgid "Check permissions" 269 401 msgstr "" 270 402 271 #: pysvnmanager/templates/base.mako: 28403 #: pysvnmanager/templates/base.mako:34 272 404 msgid "Role management" 273 405 msgstr "" 274 406 275 #: pysvnmanager/templates/base.mako: 29pysvnmanager/templates/authz/index.mako:5276 #: pysvnmanager/templates/authz/index.mako: 603407 #: pysvnmanager/templates/base.mako:35 pysvnmanager/templates/authz/index.mako:5 408 #: pysvnmanager/templates/authz/index.mako:590 277 409 msgid "ACL management" 278 410 msgstr "" 279 411 280 #: pysvnmanager/templates/base.mako:30 281 msgid "Logs" 282 msgstr "" 283 284 #: pysvnmanager/templates/base.mako:32 412 #: pysvnmanager/templates/base.mako:36 pysvnmanager/templates/repos/hooks.mako:5 413 #: pysvnmanager/templates/repos/hooks.mako:189 414 msgid "Repos management" 415 msgstr "" 416 417 #: pysvnmanager/templates/base.mako:37 418 msgid "Change log" 419 msgstr "" 420 421 #: pysvnmanager/templates/base.mako:39 285 422 msgid "Logout" 286 423 msgstr "" 287 424 288 #: pysvnmanager/templates/authz/index.mako:1 65425 #: pysvnmanager/templates/authz/index.mako:158 289 426 msgid "User:" 290 427 msgstr "" 291 428 292 #: pysvnmanager/templates/authz/index.mako:1 74429 #: pysvnmanager/templates/authz/index.mako:167 293 430 msgid "Readonly" 294 431 msgstr "" 295 432 296 #: pysvnmanager/templates/authz/index.mako:17 8297 #: pysvnmanager/templates/authz/index.mako:6 77433 #: pysvnmanager/templates/authz/index.mako:171 434 #: pysvnmanager/templates/authz/index.mako:664 298 435 msgid "Full" 299 436 msgstr "" 300 437 301 #: pysvnmanager/templates/authz/index.mako:182 438 #: pysvnmanager/templates/authz/index.mako:175 439 #: pysvnmanager/templates/authz/index.mako:665 440 msgid "Denied" 441 msgstr "" 442 443 #: pysvnmanager/templates/authz/index.mako:373 444 msgid "No rights selected! Please check proper rights for selected users." 445 msgstr "" 446 447 #: pysvnmanager/templates/authz/index.mako:384 448 msgid "Unknown rights: " 449 msgstr "" 450 451 #: pysvnmanager/templates/authz/index.mako:472 452 msgid "Please input module path." 453 msgstr "" 454 455 #: pysvnmanager/templates/authz/index.mako:478 456 msgid "Please input repository name." 457 msgstr "" 458 459 #: pysvnmanager/templates/authz/index.mako:483 460 msgid "Save failed." 461 msgstr "" 462 463 #: pysvnmanager/templates/authz/index.mako:503 464 msgid "Update ACL failed:" 465 msgstr "" 466 467 #: pysvnmanager/templates/authz/index.mako:508 468 msgid "Update ACL successfully." 469 msgstr "" 470 471 #: pysvnmanager/templates/authz/index.mako:529 472 msgid "No path selected." 473 msgstr "" 474 475 #: pysvnmanager/templates/authz/index.mako:534 476 msgid "Are you sure to delete module:" 477 msgstr "" 478 479 #: pysvnmanager/templates/authz/index.mako:536 480 #: pysvnmanager/templates/role/index.mako:446 481 #: pysvnmanager/templates/role/index.mako:531 482 msgid "Click Ok to proceed, or click cancel" 483 msgstr "" 484 485 #: pysvnmanager/templates/authz/index.mako:557 486 msgid "Can not delete module " 487 msgstr "" 488 489 #: pysvnmanager/templates/authz/index.mako:562 490 msgid "Successfully delete module:" 491 msgstr "" 492 493 #: pysvnmanager/templates/authz/index.mako:597 494 #: pysvnmanager/templates/repos/hooks.mako:195 495 msgid "Repository:" 496 msgstr "" 497 498 #: pysvnmanager/templates/authz/index.mako:600 499 msgid "New repository" 500 msgstr "" 501 502 #: pysvnmanager/templates/authz/index.mako:604 503 msgid "Repository Name:" 504 msgstr "" 505 506 #: pysvnmanager/templates/authz/index.mako:609 507 msgid "Administrators:" 508 msgstr "" 509 510 #: pysvnmanager/templates/authz/index.mako:621 511 msgid "Module:" 512 msgstr "" 513 514 #: pysvnmanager/templates/authz/index.mako:624 515 msgid "New module" 516 msgstr "" 517 518 #: pysvnmanager/templates/authz/index.mako:630 519 msgid "Module Path:" 520 msgstr "" 521 522 #: pysvnmanager/templates/authz/index.mako:644 523 msgid "ACL" 524 msgstr "" 525 526 #: pysvnmanager/templates/authz/index.mako:649 527 msgid "Users" 528 msgstr "" 529 530 #: pysvnmanager/templates/authz/index.mako:663 531 msgid "ReadOnly" 532 msgstr "" 533 302 534 #: pysvnmanager/templates/authz/index.mako:678 303 msgid "Denied" 304 msgstr "" 305 306 #: pysvnmanager/templates/authz/index.mako:380 307 msgid "No rights selected! Please check proper rights for selected users." 308 msgstr "" 309 310 #: pysvnmanager/templates/authz/index.mako:391 311 msgid "Unknown rights: " 312 msgstr "" 313 314 #: pysvnmanager/templates/authz/index.mako:479 315 msgid "Please input module path." 316 msgstr "" 317 318 #: pysvnmanager/templates/authz/index.mako:485 319 msgid "Please input repository name." 320 msgstr "" 321 322 #: pysvnmanager/templates/authz/index.mako:490 323 msgid "Save failed." 324 msgstr "" 325 326 #: pysvnmanager/templates/authz/index.mako:510 327 msgid "Update ACL failed:" 328 msgstr "" 329 330 #: pysvnmanager/templates/authz/index.mako:517 331 msgid "Update ACL successfully." 332 msgstr "" 333 334 #: pysvnmanager/templates/authz/index.mako:539 335 msgid "No path selected." 336 msgstr "" 337 338 #: pysvnmanager/templates/authz/index.mako:544 339 msgid "Are you sure to delete module:" 340 msgstr "" 341 342 #: pysvnmanager/templates/authz/index.mako:546 343 #: pysvnmanager/templates/role/index.mako:450 344 #: pysvnmanager/templates/role/index.mako:541 345 msgid "Click Ok to proceed, or click cancel" 346 msgstr "" 347 348 #: pysvnmanager/templates/authz/index.mako:567 349 msgid "Can not delete module " 350 msgstr "" 351 352 #: pysvnmanager/templates/authz/index.mako:574 353 msgid "Successfully delete module:" 354 msgstr "" 355 356 #: pysvnmanager/templates/authz/index.mako:610 357 msgid "Repository:" 358 msgstr "" 359 360 #: pysvnmanager/templates/authz/index.mako:613 361 msgid "New repository" 362 msgstr "" 363 364 #: pysvnmanager/templates/authz/index.mako:617 365 msgid "Repository Name:" 366 msgstr "" 367 368 #: pysvnmanager/templates/authz/index.mako:622 369 msgid "Administrators:" 370 msgstr "" 371 372 #: pysvnmanager/templates/authz/index.mako:634 373 msgid "Module:" 374 msgstr "" 375 376 #: pysvnmanager/templates/authz/index.mako:637 377 msgid "New module" 378 msgstr "" 379 380 #: pysvnmanager/templates/authz/index.mako:643 381 msgid "Module Path:" 382 msgstr "" 383 384 #: pysvnmanager/templates/authz/index.mako:657 385 msgid "ACL" 386 msgstr "" 387 388 #: pysvnmanager/templates/authz/index.mako:662 389 msgid "Users" 390 msgstr "" 391 392 #: pysvnmanager/templates/authz/index.mako:676 393 msgid "ReadOnly" 394 msgstr "" 395 396 #: pysvnmanager/templates/authz/index.mako:693 397 #: pysvnmanager/templates/role/index.mako:727 535 #: pysvnmanager/templates/role/index.mako:711 398 536 msgid "Save" 399 537 msgstr "" 400 538 401 #: pysvnmanager/templates/authz/index.mako:6 94402 #: pysvnmanager/templates/role/index.mako:7 28539 #: pysvnmanager/templates/authz/index.mako:679 540 #: pysvnmanager/templates/role/index.mako:712 403 541 msgid "Delete" 404 542 msgstr "" 405 543 406 #: pysvnmanager/templates/authz/index.mako:6 95407 #: pysvnmanager/templates/role/index.mako:7 29544 #: pysvnmanager/templates/authz/index.mako:680 545 #: pysvnmanager/templates/role/index.mako:713 408 546 msgid "Cancel" 409 547 msgstr "" … … 486 624 487 625 #: pysvnmanager/templates/logs/rollback.mako:14 488 #: pysvnmanager/templates/logs/view.mako: 18626 #: pysvnmanager/templates/logs/view.mako:20 489 627 msgid "Close" 490 628 msgstr "" … … 498 636 msgstr "" 499 637 500 #: pysvnmanager/templates/logs/view.mako:1 6638 #: pysvnmanager/templates/logs/view.mako:17 501 639 msgid "Rollback to this revision" 502 640 msgstr "" 503 641 642 #: pysvnmanager/templates/repos/create.mako:5 643 #: pysvnmanager/templates/repos/create.mako:8 644 #: pysvnmanager/templates/repos/create.mako:25 645 msgid "Create repository" 646 msgstr "" 647 648 #: pysvnmanager/templates/repos/create.mako:22 649 #: pysvnmanager/templates/repos/remove.mako:63 650 msgid "Repository name:" 651 msgstr "" 652 653 #: pysvnmanager/templates/repos/hooks.mako:198 654 msgid "Add repository" 655 msgstr "" 656 657 #: pysvnmanager/templates/repos/hooks.mako:199 658 #: pysvnmanager/templates/repos/remove.mako:5 659 #: pysvnmanager/templates/repos/remove.mako:49 660 #: pysvnmanager/templates/repos/remove.mako:67 661 msgid "Remove repository" 662 msgstr "" 663 664 #: pysvnmanager/templates/repos/hooks.mako:204 665 msgid "Uninstalled hooks:" 666 msgstr "" 667 668 #: pysvnmanager/templates/repos/hooks.mako:226 669 msgid "Enable this hook" 670 msgstr "" 671 504 672 #: pysvnmanager/templates/role/index.mako:5 505 #: pysvnmanager/templates/role/index.mako:6 38673 #: pysvnmanager/templates/role/index.mako:625 506 674 msgid "Role Management" 507 675 msgstr "" 508 676 509 #: pysvnmanager/templates/role/index.mako:4 20677 #: pysvnmanager/templates/role/index.mako:418 510 678 msgid "Update group failed:" 511 679 msgstr "" 512 680 513 #: pysvnmanager/templates/role/index.mako:42 7681 #: pysvnmanager/templates/role/index.mako:424 514 682 msgid "Update group successfully." 515 683 msgstr "" 516 684 517 #: pysvnmanager/templates/role/index.mako:44 8685 #: pysvnmanager/templates/role/index.mako:444 518 686 msgid "Are you sure to delete group:" 519 687 msgstr "" 520 688 521 #: pysvnmanager/templates/role/index.mako:4 71689 #: pysvnmanager/templates/role/index.mako:467 522 690 msgid "Delete group failed:" 523 691 msgstr "" 524 692 525 #: pysvnmanager/templates/role/index.mako:47 8693 #: pysvnmanager/templates/role/index.mako:472 526 694 msgid "Delete group successfully." 527 695 msgstr "" 528 696 529 #: pysvnmanager/templates/role/index.mako:5 12697 #: pysvnmanager/templates/role/index.mako:505 530 698 msgid "Update alias failed:" 531 699 msgstr "" 532 700 533 #: pysvnmanager/templates/role/index.mako:51 9701 #: pysvnmanager/templates/role/index.mako:510 534 702 msgid "Update alias successfully." 535 703 msgstr "" 536 704 537 #: pysvnmanager/templates/role/index.mako:5 39705 #: pysvnmanager/templates/role/index.mako:529 538 706 msgid "Are you sure to delete alias:" 539 707 msgstr "" 540 708 541 #: pysvnmanager/templates/role/index.mako:5 62709 #: pysvnmanager/templates/role/index.mako:552 542 710 msgid "Delete alias failed:" 543 711 msgstr "" 544 712 545 #: pysvnmanager/templates/role/index.mako:5 69713 #: pysvnmanager/templates/role/index.mako:557 546 714 msgid "Delete alias successfully." 547 715 msgstr "" 548 716 717 #: pysvnmanager/templates/role/index.mako:632 718 msgid "Select a role name:" 719 msgstr "" 720 721 #: pysvnmanager/templates/role/index.mako:636 722 msgid "New Group" 723 msgstr "" 724 725 #: pysvnmanager/templates/role/index.mako:637 726 msgid "New Alias" 727 msgstr "" 728 729 #: pysvnmanager/templates/role/index.mako:641 730 msgid "New group name:" 731 msgstr "" 732 549 733 #: pysvnmanager/templates/role/index.mako:645 550 msgid "Select a role name:"551 msgstr ""552 553 #: pysvnmanager/templates/role/index.mako:649554 msgid "New Group"555 msgstr ""556 557 #: pysvnmanager/templates/role/index.mako:650558 msgid "New Alias"559 msgstr ""560 561 #: pysvnmanager/templates/role/index.mako:654562 msgid "New group name:"563 msgstr ""564 565 #: pysvnmanager/templates/role/index.mako:658566 734 msgid "New alias name:" 567 735 msgstr "" 568 736 569 #: pysvnmanager/templates/role/index.mako:6 70737 #: pysvnmanager/templates/role/index.mako:657 570 738 msgid "Members list" 571 739 msgstr "" 572 740 573 #: pysvnmanager/templates/role/index.mako:6 75741 #: pysvnmanager/templates/role/index.mako:662 574 742 msgid "Other users" 575 743 msgstr "" 576 744 577 #: pysvnmanager/templates/role/index.mako:6 94745 #: pysvnmanager/templates/role/index.mako:681 578 746 msgid "Ignore recursive" 579 747 msgstr "" 580 748 581 #: pysvnmanager/templates/role/index.mako: 706749 #: pysvnmanager/templates/role/index.mako:693 582 750 msgid "User name:" 583 751 msgstr "" -
trunk/pysvnmanager/i18n/zh/LC_MESSAGES/pysvnmanager.po
r38 r45 9 9 msgid "" 10 10 msgstr "" 11 "Project-Id-Version: pysvnmanager\n"11 "Project-Id-Version: pysvnmanager\n" 12 12 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 13 13 "POT-Creation-Date: 2008-07-03 22:14+0800\n" 14 "PO-Revision-Date: 2008-0 7-31 09:21+0800\n"14 "PO-Revision-Date: 2008-08-27 00:07+0800\n" 15 15 "Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n" 16 "Language-Team: <zh@li.org>\n"16 "Language-Team: <zh@li.org>\n" 17 17 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION\n" 18 18 "MIME-Version: 1.0\n" 19 "Content-Type: text/plain; charset= utf-8\n"19 "Content-Type: text/plain; charset=UTF-8\n" 20 20 "Content-Transfer-Encoding: 8bit\n" 21 21 "Generated-By: Babel 0.9.2\n" 22 23 #: pysvnmanager/controllers/authz.py:29 24 #: pysvnmanager/templates/authz/index.mako:159 22 "X-Generator: KBabel 1.11.4\n" 23 24 #: pysvnmanager/controllers/authz.py:43 25 #: pysvnmanager/templates/authz/index.mako:152 25 26 #: pysvnmanager/templates/check/index.mako:10 26 27 msgid "All users(with anon)" 27 28 msgstr "所有用户(含匿名)" 28 29 29 #: pysvnmanager/controllers/authz.py: 3030 #: pysvnmanager/templates/authz/index.mako:1 6130 #: pysvnmanager/controllers/authz.py:44 31 #: pysvnmanager/templates/authz/index.mako:154 31 32 #: pysvnmanager/templates/check/index.mako:11 32 33 msgid "Known users" 33 34 msgstr "注册用户" 34 35 35 #: pysvnmanager/controllers/authz.py: 3136 #: pysvnmanager/templates/authz/index.mako:1 6336 #: pysvnmanager/controllers/authz.py:45 37 #: pysvnmanager/templates/authz/index.mako:156 37 38 #: pysvnmanager/templates/check/index.mako:12 38 39 msgid "Anonymous" 39 40 msgstr "匿名用户" 40 41 41 #: pysvnmanager/controllers/authz.py: 36pysvnmanager/controllers/role.py:5042 #: pysvnmanager/controllers/authz.py:50 pysvnmanager/controllers/role.py:50 42 43 #: pysvnmanager/controllers/role.py:70 43 #: pysvnmanager/templates/authz/index.mako:1 5544 #: pysvnmanager/templates/authz/index.mako:148 44 45 #: pysvnmanager/templates/check/index.mako:17 45 46 #: pysvnmanager/templates/role/index.mako:18 … … 50 51 msgstr "团队:" 51 52 52 #: pysvnmanager/controllers/authz.py: 39pysvnmanager/controllers/role.py:5553 #: pysvnmanager/controllers/authz.py:53 pysvnmanager/controllers/role.py:55 53 54 #: pysvnmanager/controllers/role.py:72 54 #: pysvnmanager/templates/authz/index.mako:15 755 #: pysvnmanager/templates/authz/index.mako:150 55 56 #: pysvnmanager/templates/check/index.mako:19 56 57 #: pysvnmanager/templates/role/index.mako:23 … … 61 62 msgstr "别名:" 62 63 63 #: pysvnmanager/controllers/authz.py:54 pysvnmanager/controllers/authz.py:74 64 #: pysvnmanager/controllers/check.py:83 pysvnmanager/controllers/role.py:43 64 #: pysvnmanager/controllers/authz.py:68 pysvnmanager/controllers/authz.py:99 65 #: pysvnmanager/controllers/check.py:89 pysvnmanager/controllers/repos.py:40 66 #: pysvnmanager/controllers/repos.py:59 pysvnmanager/controllers/role.py:43 65 67 #: pysvnmanager/templates/check/index.mako:9 66 68 #: pysvnmanager/templates/check/index.mako:23 … … 70 72 msgstr "请选择..." 71 73 72 #: pysvnmanager/controllers/authz.py:1 3574 #: pysvnmanager/controllers/authz.py:160 73 75 #, python-format 74 76 msgid "User %(user)s changed authz rules. (rev:%(rev)s)" 75 77 msgstr "用户 %(user)s 修改了授权策略。(rev:%(rev)s)" 76 78 77 #: pysvnmanager/controllers/authz.py:1 4479 #: pysvnmanager/controllers/authz.py:173 78 80 #, python-format 79 81 msgid "Repository %s not exist." 80 82 msgstr "版本库 %s 不存在。" 81 83 82 #: pysvnmanager/controllers/authz.py:1 5284 #: pysvnmanager/controllers/authz.py:181 83 85 #, python-format 84 86 msgid "Module %s not exist." 85 87 msgstr "模组 %s 不存在。" 86 88 87 #: pysvnmanager/controllers/authz.py:1 5889 #: pysvnmanager/controllers/authz.py:187 88 90 msgid "You can not delete yourself from admin list." 89 91 msgstr "您不能将自己从管理员列表中删除。" 90 92 91 #: pysvnmanager/controllers/authz.py: 18393 #: pysvnmanager/controllers/authz.py:212 92 94 #, python-format 93 95 msgid "User %(user)s delete authz rules. (rev:%(rev)s)" 94 96 msgstr "用户 %(user)s 删除了授权策略。(rev:%(rev)s)" 95 97 96 #: pysvnmanager/controllers/check.py:6 398 #: pysvnmanager/controllers/check.py:69 97 99 #: pysvnmanager/templates/auth_failed.mako:3 98 100 msgid "Permission denied." … … 127 129 msgstr "版本间比较" 128 130 129 #: pysvnmanager/controllers/logs.py:1 48131 #: pysvnmanager/controllers/logs.py:152 130 132 #, python-format 131 133 msgid "Rollback successfully to revision: %s" 132 134 msgstr "成功回滚至版本: %s" 133 135 134 #: pysvnmanager/controllers/logs.py:1 57136 #: pysvnmanager/controllers/logs.py:161 135 137 #, python-format 136 138 msgid "Rollback failed: %s" 137 139 msgstr "回滚失败: %s" 138 140 141 #: pysvnmanager/controllers/repos.py:74 142 msgid "Installed hooks:" 143 msgstr "已安装插件:" 144 145 #: pysvnmanager/controllers/repos.py:80 146 msgid "Id" 147 msgstr "Id" 148 149 #: pysvnmanager/controllers/repos.py:81 150 #: pysvnmanager/hooks/plugins/__init__.py:244 151 msgid "Plugin name" 152 msgstr "插件名称" 153 154 #: pysvnmanager/controllers/repos.py:82 155 #: pysvnmanager/hooks/plugins/__init__.py:245 156 msgid "Type" 157 msgstr "类型" 158 159 #: pysvnmanager/controllers/repos.py:96 160 msgid "Remove selected hooks" 161 msgstr "删除选择的插件" 162 163 #: pysvnmanager/controllers/repos.py:116 164 #, python-format 165 msgid "" 166 "Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 167 "%(msg)s" 168 msgstr "" 169 "启用版本库'%(repos)s'的插件'%(plugin)s'失败。错误信息:<br>\n" 170 "%(msg)s" 171 172 #: pysvnmanager/controllers/repos.py:119 173 #, python-format 174 msgid "Apply plugin '%(plugin)s' on '%(repos)s' success." 175 msgstr "成功启用版本库'%(repos)s'的插件'%(plugin)s'。 " 176 177 #: pysvnmanager/controllers/repos.py:140 178 #, python-format 179 msgid "" 180 "Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 181 "%(msg)s" 182 msgstr "" 183 "删除版本库'%(repos)s'的插件'%(plugin)s'失败。错误信息:<br>\n" 184 "%(msg)s" 185 186 #: pysvnmanager/controllers/repos.py:143 187 #, python-format 188 msgid "Delete plugin '%(plugin)s' on '%(repos)s' success." 189 msgstr "成功删除版本库'%(repos)s'的插件'%(plugin)s'。" 190 191 #: pysvnmanager/controllers/repos.py:146 192 #, python-format 193 msgid "No plugin has been deleted for '%(repos)s'." 194 msgstr "未删除版本库'%(repos)s'的插件。" 195 196 #: pysvnmanager/controllers/repos.py:155 197 #, python-format 198 msgid "" 199 "Create repository '%(repos)s' Failed. Error message:<br>\n" 200 "%(msg)s" 201 msgstr "" 202 "创建版本库'%(repos)s'失败。错误信息:<br>\n" 203 "%(msg)s" 204 205 #: pysvnmanager/controllers/repos.py:158 206 #, python-format 207 msgid "Create repository '%(repos)s' success." 208 msgstr "成功创建版本库'%(repos)s'。" 209 210 #: pysvnmanager/controllers/repos.py:171 211 #, python-format 212 msgid "" 213 "Delete repository '%(repos)s' Failed. Error message:<br>\n" 214 "%(msg)s" 215 msgstr "" 216 "删除版本库'%(repos)s'失败。错误信息:<br>\n" 217 "%(msg)s" 218 219 #: pysvnmanager/controllers/repos.py:174 220 #, python-format 221 msgid "Delete blank repository '%(repos)s' success." 222 msgstr "成功删除版本库'%(repos)s'。" 223 139 224 #: pysvnmanager/controllers/role.py:103 140 225 #, python-format … … 171 256 msgid "User %s logged out" 172 257 msgstr "用户 %s 登出" 258 259 #: pysvnmanager/hooks/plugins/CaseInsensitive.py:10 260 msgid "check case insensitive" 261 msgstr "大小写不敏感" 262 263 #: pysvnmanager/hooks/plugins/CaseInsensitive.py:13 264 msgid "A pre-commit hook to detect case-insensitive filename clashes." 265 msgstr "在 pre-commit 钩子中执行,检查文件名大小写引起的文件名冲突。" 266 267 #: pysvnmanager/hooks/plugins/EolStyleCheck.py:10 268 msgid "mime-type and eol-style check" 269 msgstr "文件类型和换行符设置检查" 270 271 #: pysvnmanager/hooks/plugins/EolStyleCheck.py:13 272 msgid "New file must provide svn:eol-style if not binary file." 273 msgstr "新增的文本文件,必须设置换行符。" 274 275 #: pysvnmanager/hooks/plugins/__init__.py:84 276 #, python-format 277 msgid "repos '%s' not exist!" 278 msgstr "版本库 %s 不存在!" 279 280 #: pysvnmanager/hooks/plugins/__init__.py:133 281 #, python-format 282 msgid "Conflict: plugin '%s' is modified by others." 283 msgstr "冲突:插件'%s'被其他人修改了。" 284 285 #: pysvnmanager/hooks/plugins/__init__.py:160 286 #: pysvnmanager/hooks/plugins/__init__.py:174 287 #: pysvnmanager/hooks/plugins/__init__.py:190 288 #: pysvnmanager/hooks/plugins/__init__.py:254 289 #: pysvnmanager/hooks/plugins/__init__.py:261 290 #: pysvnmanager/hooks/plugins/__init__.py:270 291 msgid "Plugin not fully implemented." 292 msgstr "插件未完全实现。" 293 294 #: pysvnmanager/hooks/plugins/__init__.py:246 295 msgid "Description" 296 msgstr "描述" 297 298 #: pysvnmanager/model/repos.py:39 299 #, python-format 300 msgid "Repos root does not exist: %s" 301 msgstr "版本库根不存在:%s" 302 303 #: pysvnmanager/model/repos.py:68 304 #, python-format 305 msgid "Repos %s already exists." 306 msgstr "版本库 %s 已经存在。" 307 308 #: pysvnmanager/model/repos.py:137 309 #, python-format 310 msgid "Repos %s is not a blank repository." 311 msgstr "版本库 %s 不是一个空的版本库。" 173 312 174 313 #: pysvnmanager/model/svnauthz.py:61 … … 225 364 msgstr "%s 在 [%s] 中被引用。" 226 365 227 #: pysvnmanager/model/svnauthz.py:17 70366 #: pysvnmanager/model/svnauthz.py:1769 228 367 #, python-format 229 368 msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 230 369 msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有完全权限 (RW)" 231 370 232 #: pysvnmanager/model/svnauthz.py:177 2371 #: pysvnmanager/model/svnauthz.py:1771 233 372 #, python-format 234 373 msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 235 374 msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有只读权限 (RO)" 236 375 237 #: pysvnmanager/model/svnauthz.py:177 4376 #: pysvnmanager/model/svnauthz.py:1773 238 377 #, python-format 239 378 msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 240 379 msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 没有访问权限 (XX)" 241 380 242 #: pysvnmanager/model/svnauthz.py:181 2381 #: pysvnmanager/model/svnauthz.py:1813 243 382 #, python-format 244 383 msgid "" … … 259 398 "\n" 260 399 261 #: pysvnmanager/model/svnauthz.py:183 1400 #: pysvnmanager/model/svnauthz.py:1832 262 401 #, python-format 263 402 msgid "" … … 290 429 "%(sep)s\n" 291 430 292 #: pysvnmanager/templates/base.mako:1 1431 #: pysvnmanager/templates/base.mako:12 293 432 msgid "Loading, please wait..." 294 433 msgstr "数据加载中,请稍后..." 295 434 296 #: pysvnmanager/templates/base.mako:27 435 #: pysvnmanager/templates/base.mako:19 436 msgid "Clear message" 437 msgstr "清除消息" 438 439 #: pysvnmanager/templates/base.mako:33 297 440 msgid "Check permissions" 298 441 msgstr "权限检查" 299 442 300 #: pysvnmanager/templates/base.mako: 28443 #: pysvnmanager/templates/base.mako:34 301 444 msgid "Role management" 302 445 msgstr "角色管理" 303 446 304 #: pysvnmanager/templates/base.mako: 29447 #: pysvnmanager/templates/base.mako:35 305 448 #: pysvnmanager/templates/authz/index.mako:5 306 #: pysvnmanager/templates/authz/index.mako: 603449 #: pysvnmanager/templates/authz/index.mako:590 307 450 msgid "ACL management" 308 451 msgstr "权限控制" 309 452 310 #: pysvnmanager/templates/base.mako:30 311 msgid "Logs" 312 msgstr "日志" 313 314 #: pysvnmanager/templates/base.mako:32 453 #: pysvnmanager/templates/base.mako:36 454 #: pysvnmanager/templates/repos/hooks.mako:5 455 #: pysvnmanager/templates/repos/hooks.mako:189 456 msgid "Repos management" 457 msgstr "版本库管理" 458 459 #: pysvnmanager/templates/base.mako:37 460 msgid "Change log" 461 msgstr "修改日志" 462 463 #: pysvnmanager/templates/base.mako:39 315 464 msgid "Logout" 316 465 msgstr "登出" 317 466 318 #: pysvnmanager/templates/authz/index.mako:1 65467 #: pysvnmanager/templates/authz/index.mako:158 319 468 msgid "User:" 320 469 msgstr "用户:" 321 470 322 #: pysvnmanager/templates/authz/index.mako:1 74471 #: pysvnmanager/templates/authz/index.mako:167 323 472 msgid "Readonly" 324 473 msgstr "只读" 325 474 326 #: pysvnmanager/templates/authz/index.mako:17 8327 #: pysvnmanager/templates/authz/index.mako:6 77475 #: pysvnmanager/templates/authz/index.mako:171 476 #: pysvnmanager/templates/authz/index.mako:664 328 477 msgid "Full" 329 478 msgstr "完全权限" 330 479 331 #: pysvnmanager/templates/authz/index.mako:1 82332 #: pysvnmanager/templates/authz/index.mako:6 78480 #: pysvnmanager/templates/authz/index.mako:175 481 #: pysvnmanager/templates/authz/index.mako:665 333 482 msgid "Denied" 334 483 msgstr "禁用" 335 484 336 #: pysvnmanager/templates/authz/index.mako:3 80485 #: pysvnmanager/templates/authz/index.mako:373 337 486 msgid "No rights selected! Please check proper rights for selected users." 338 487 msgstr "未选择权限!请为用户选择合适的权限。" 339 488 340 #: pysvnmanager/templates/authz/index.mako:3 91489 #: pysvnmanager/templates/authz/index.mako:384 341 490 msgid "Unknown rights: " 342 491 msgstr "未知权限: " 343 492 344 #: pysvnmanager/templates/authz/index.mako:47 9493 #: pysvnmanager/templates/authz/index.mako:472 345 494 msgid "Please input module path." 346 495 msgstr "请输入模组路径。" 347 496 348 #: pysvnmanager/templates/authz/index.mako:4 85497 #: pysvnmanager/templates/authz/index.mako:478 349 498 msgid "Please input repository name." 350 499 msgstr "请输入版本库名称。" 351 500 352 #: pysvnmanager/templates/authz/index.mako:4 90501 #: pysvnmanager/templates/authz/index.mako:483 353 502 msgid "Save failed." 354 503 msgstr "保存失败。" 355 504 356 #: pysvnmanager/templates/authz/index.mako:5 10505 #: pysvnmanager/templates/authz/index.mako:503 357 506 msgid "Update ACL failed:" 358 507 msgstr "更新ACL失败:" 359 508 360 #: pysvnmanager/templates/authz/index.mako:5 17509 #: pysvnmanager/templates/authz/index.mako:508 361 510 msgid "Update ACL successfully." 362 511 msgstr "成功更新ACL。" 363 512 364 #: pysvnmanager/templates/authz/index.mako:5 39513 #: pysvnmanager/templates/authz/index.mako:529 365 514 msgid "No path selected." 366 515 msgstr "未选择路径。" 367 516 368 #: pysvnmanager/templates/authz/index.mako:5 44517 #: pysvnmanager/templates/authz/index.mako:534 369 518 msgid "Are you sure to delete module:" 370 519 msgstr "您确认要删除模组:" 371 520 372 #: pysvnmanager/templates/authz/index.mako:5 46373 #: pysvnmanager/templates/role/index.mako:4 50374 #: pysvnmanager/templates/role/index.mako:5 41521 #: pysvnmanager/templates/authz/index.mako:536 522 #: pysvnmanager/templates/role/index.mako:446 523 #: pysvnmanager/templates/role/index.mako:531 375 524 msgid "Click Ok to proceed, or click cancel" 376 525 msgstr "点击 OK 继续,或者点击取消" 377 526 378 #: pysvnmanager/templates/authz/index.mako:5 67527 #: pysvnmanager/templates/authz/index.mako:557 379 528 msgid "Can not delete module " 380 529 msgstr "无法删除模组 " 381 530 382 #: pysvnmanager/templates/authz/index.mako:5 74531 #: pysvnmanager/templates/authz/index.mako:562 383 532 msgid "Successfully delete module:" 384 533 msgstr "成功删除模组:" 385 534 386 #: pysvnmanager/templates/authz/index.mako:610 535 #: pysvnmanager/templates/authz/index.mako:597 536 #: pysvnmanager/templates/repos/hooks.mako:195 387 537 msgid "Repository:" 388 538 msgstr "版本库:" 389 539 390 #: pysvnmanager/templates/authz/index.mako:6 13540 #: pysvnmanager/templates/authz/index.mako:600 391 541 msgid "New repository" 392 542 msgstr "新版本库" 393 543 394 #: pysvnmanager/templates/authz/index.mako:6 17544 #: pysvnmanager/templates/authz/index.mako:604 395 545 msgid "Repository Name:" 396 546 msgstr "版本库名称:" 397 547 398 #: pysvnmanager/templates/authz/index.mako:6 22548 #: pysvnmanager/templates/authz/index.mako:609 399 549 msgid "Administrators:" 400 550 msgstr "管理员:" 401 551 402 #: pysvnmanager/templates/authz/index.mako:6 34552 #: pysvnmanager/templates/authz/index.mako:621 403 553 msgid "Module:" 404 554 msgstr "模组:" 405 555 406 #: pysvnmanager/templates/authz/index.mako:6 37556 #: pysvnmanager/templates/authz/index.mako:624 407 557 msgid "New module" 408 558 msgstr "新模组" 409 559 410 #: pysvnmanager/templates/authz/index.mako:6 43560 #: pysvnmanager/templates/authz/index.mako:630 411 561 msgid "Module Path:" 412 562 msgstr "模组路径:" 413 563 414 #: pysvnmanager/templates/authz/index.mako:6 57564 #: pysvnmanager/templates/authz/index.mako:644 415 565 msgid "ACL" 416 566 msgstr "ACL" 417 567 418 #: pysvnmanager/templates/authz/index.mako:6 62568 #: pysvnmanager/templates/authz/index.mako:649 419 569 msgid "Users" 420 570 msgstr "用户" 421 571 422 #: pysvnmanager/templates/authz/index.mako:6 76572 #: pysvnmanager/templates/authz/index.mako:663 423 573 msgid "ReadOnly" 424 574 msgstr "只读" 425 575 426 #: pysvnmanager/templates/authz/index.mako:6 93427 #: pysvnmanager/templates/role/index.mako:7 27576 #: pysvnmanager/templates/authz/index.mako:678 577 #: pysvnmanager/templates/role/index.mako:711 428 578 msgid "Save" 429 579 msgstr "保存" 430 580 431 #: pysvnmanager/templates/authz/index.mako:6 94432 #: pysvnmanager/templates/role/index.mako:7 28581 #: pysvnmanager/templates/authz/index.mako:679 582 #: pysvnmanager/templates/role/index.mako:712 433 583 msgid "Delete" 434 584 msgstr "删除" 435 585 436 #: pysvnmanager/templates/authz/index.mako:6 95437 #: pysvnmanager/templates/role/index.mako:7 29586 #: pysvnmanager/templates/authz/index.mako:680 587 #: pysvnmanager/templates/role/index.mako:713 438 588 msgid "Cancel" 439 589 msgstr "取消" … … 516 666 517 667 #: pysvnmanager/templates/logs/rollback.mako:14 518 #: pysvnmanager/templates/logs/view.mako: 18668 #: pysvnmanager/templates/logs/view.mako:20 519 669 msgid "Close" 520 670 msgstr "关闭" … … 528 678 msgstr "你确认回滚文件至此版本么?" 529 679 530 #: pysvnmanager/templates/logs/view.mako:1 6680 #: pysvnmanager/templates/logs/view.mako:17 531 681 msgid "Rollback to this revision" 532 682 msgstr "回滚至此版本" 533 683 684 #: pysvnmanager/templates/repos/create.mako:5 685 #: pysvnmanager/templates/repos/create.mako:8 686 #: pysvnmanager/templates/repos/create.mako:25 687 msgid "Create repository" 688 msgstr "创建版本库" 689 690 #: pysvnmanager/templates/repos/create.mako:22 691 #: pysvnmanager/templates/repos/remove.mako:63 692 msgid "Repository name:" 693 msgstr "版本库名称:" 694 695 #: pysvnmanager/templates/repos/hooks.mako:198 696 msgid "Add repository" 697 msgstr "添加版本库" 698 699 #: pysvnmanager/templates/repos/hooks.mako:199 700 #: pysvnmanager/templates/repos/remove.mako:5 701 #: pysvnmanager/templates/repos/remove.mako:49 702 #: pysvnmanager/templates/repos/remove.mako:67 703 msgid "Remove repository" 704 msgstr "删除版本库" 705 706 #: pysvnmanager/templates/repos/hooks.mako:204 707 msgid "Uninstalled hooks:" 708 msgstr "尚未安装的插件:" 709 710 #: pysvnmanager/templates/repos/hooks.mako:226 711 msgid "Enable this hook" 712 msgstr "启用此插件" 713 534 714 #: pysvnmanager/templates/role/index.mako:5 535 #: pysvnmanager/templates/role/index.mako:6 38715 #: pysvnmanager/templates/role/index.mako:625 536 716 msgid "Role Management" 537 717 msgstr "角色管理" 538 718 539 #: pysvnmanager/templates/role/index.mako:4 20719 #: pysvnmanager/templates/role/index.mako:418 540 720 msgid "Update group failed:" 541 721 msgstr "更新用户组失败:" 542 722 543 #: pysvnmanager/templates/role/index.mako:42 7723 #: pysvnmanager/templates/role/index.mako:424 544 724 msgid "Update group successfully." 545 725 msgstr "成功更新用户组。" 546 726 547 #: pysvnmanager/templates/role/index.mako:44 8727 #: pysvnmanager/templates/role/index.mako:444 548 728 msgid "Are you sure to delete group:" 549 729 msgstr "您确认要删除用户组:" 550 730 551 #: pysvnmanager/templates/role/index.mako:4 71731 #: pysvnmanager/templates/role/index.mako:467 552 732 msgid "Delete group failed:" 553 733 msgstr "更新用户组失败:" 554 734 555 #: pysvnmanager/templates/role/index.mako:47 8735 #: pysvnmanager/templates/role/index.mako:472 556 736 msgid "Delete group successfully." 557 737 msgstr "成功删除用户组。" 558 738 559 #: pysvnmanager/templates/role/index.mako:5 12739 #: pysvnmanager/templates/role/index.mako:505 560 740 msgid "Update alias failed:" 561 741 msgstr "更新别名失败:" 562 742 563 #: pysvnmanager/templates/role/index.mako:51 9743 #: pysvnmanager/templates/role/index.mako:510 564 744 msgid "Update alias successfully." 565 745 msgstr "成功更新别名。" 566 746 567 #: pysvnmanager/templates/role/index.mako:5 39747 #: pysvnmanager/templates/role/index.mako:529 568 748 msgid "Are you sure to delete alias:" 569 749 msgstr "您确认要删除别名:" 570 750 571 #: pysvnmanager/templates/role/index.mako:5 62751 #: pysvnmanager/templates/role/index.mako:552 572 752 msgid "Delete alias failed:" 573 753 msgstr "删除别名失败:" 574 754 575 #: pysvnmanager/templates/role/index.mako:5 69755 #: pysvnmanager/templates/role/index.mako:557 576 756 msgid "Delete alias successfully." 577 757 msgstr "成功删除别名。" 578 758 579 #: pysvnmanager/templates/role/index.mako:6 45759 #: pysvnmanager/templates/role/index.mako:632 580 760 msgid "Select a role name:" 581 761 msgstr "选择一个角色:" 582 762 583 #: pysvnmanager/templates/role/index.mako:6 49763 #: pysvnmanager/templates/role/index.mako:636 584 764 msgid "New Group" 585 765 msgstr "新用户组" 586 766 587 #: pysvnmanager/templates/role/index.mako:6 50767 #: pysvnmanager/templates/role/index.mako:637 588 768 msgid "New Alias" 589 769 msgstr "新别名" 590 770 591 #: pysvnmanager/templates/role/index.mako:6 54771 #: pysvnmanager/templates/role/index.mako:641 592 772 msgid "New group name:" 593 773 msgstr "新用户组名称:" 594 774 595 #: pysvnmanager/templates/role/index.mako:6 58775 #: pysvnmanager/templates/role/index.mako:645 596 776 msgid "New alias name:" 597 777 msgstr "新别名名称:" 598 778 599 #: pysvnmanager/templates/role/index.mako:6 70779 #: pysvnmanager/templates/role/index.mako:657 600 780 msgid "Members list" 601 781 msgstr "成员列表" 602 782 603 #: pysvnmanager/templates/role/index.mako:6 75783 #: pysvnmanager/templates/role/index.mako:662 604 784 msgid "Other users" 605 785 msgstr "其他用户" 606 786 607 #: pysvnmanager/templates/role/index.mako:6 94787 #: pysvnmanager/templates/role/index.mako:681 608 788 msgid "Ignore recursive" 609 789 msgstr "忽略组间循环引用" 610 790 611 #: pysvnmanager/templates/role/index.mako: 706791 #: pysvnmanager/templates/role/index.mako:693 612 792 msgid "User name:" 613 793 msgstr "用户名:" -
trunk/pysvnmanager/model/hooks.py
r43 r45 51 51 result={} 52 52 for k,v in self.plugins.iteritems(): 53 if v. is_set():53 if v.enabled(): 54 54 result[k]=v 55 55 return result … … 60 60 result={} 61 61 for k,v in self.plugins.iteritems(): 62 if not v. is_set():62 if not v.enabled(): 63 63 result[k]=v 64 64 return result -
trunk/pysvnmanager/model/repos.py
r44 r45 55 55 self.__repos_list.append(i) 56 56 57 self.__repos_list = sorted(self.__repos_list) 57 58 return self.__repos_list 58 59 … … 109 110 os.path.exists("%s/hooks" % repos_path): 110 111 return True 112 log.info("'%(entry)s' is not svn repository below %(root)s" % { "root": self.repos_root, "entry": repos_name} ) 111 113 return False 112 114 -
trunk/pysvnmanager/model/svnauthz.py
r24 r45 1537 1537 if self.is_admin(username, i): 1538 1538 repos_list.append(i.name) 1539 return repos_list1539 return sorted(repos_list) 1540 1540 1541 1541 def del_rule(self, reposname, path, rule): … … 1745 1745 if not user: 1746 1746 user = '*' 1747 1748 1747 if reposname: 1749 1748 reposname = normalize_repos(reposname) … … 1792 1791 if isinstance(reposname, (list, tuple)): 1793 1792 for i in reposname: 1794 map = self.get_access_map(user, i, descend=False) 1793 #map = self.get_access_map(user, i, descend=False) 1794 map = self.get_access_map(user, i) 1795 log.debug("repos:%s, map: %s" % (i, map)) 1795 1796 if map: 1796 1797 map['user'] = unicode(user) -
trunk/pysvnmanager/templates/authz/index.mako
r43 r45 502 502 { 503 503 message = '${_("Update ACL failed:")}' + message; 504 set_message_box(message);504 error_msg(message); 505 505 } 506 506 else 507 507 { 508 508 message = '${_("Update ACL successfully.")}'; 509 set_message_box(message);509 info_msg(message); 510 510 if (document.main_form.repos_list.value == reposname) 511 511 { … … 556 556 { 557 557 message = '${_("Can not delete module ")}' + reposname + ':' + path + ' : ' + message; 558 set_message_box(message);558 error_msg(message); 559 559 } 560 560 else 561 561 { 562 562 message = '${_("Successfully delete module:")}' + reposname + ':' + path; 563 set_message_box(message);563 info_msg(message); 564 564 repos_changed(); 565 565 } … … 633 633 <!-- end: path_input box --> 634 634 635 <table >635 <table class="hidden"> 636 636 <tr> 637 637 <td> … … 639 639 <!-- begin: authz box --> 640 640 <DIV id='authz_box' style="position:relative;" class=gainlayout style="visibility:hidden;"> 641 <table width='100%' >641 <table width='100%' class="hidden"> 642 642 <tr> 643 643 <th align='center'> … … 672 672 <!-- begin: action box --> 673 673 <DIV id='action_box' class=gainlayout style="visibility:hidden;"> 674 <table width='100%' >674 <table width='100%' class="hidden"> 675 675 <tr> 676 676 <td align='center'> -
trunk/pysvnmanager/templates/base.mako
r43 r45 4 4 ${self.head_tags()} 5 5 ${self.ajax_script()} 6 ${h.stylesheet_link_tag('/css/common', media='all')} 6 7 </head> 7 8 <body ${self.body_params()}> … … 14 15 ${self.nav_bar()} 15 16 16 <div id="message_box" style="visibility:hidden;position:absolute " class=gainlayout>17 < span id="message"></span>18 <br><a class="clear-link" href="#" onClick="document.getElementById('message').innerHTML='';switch_message_box()">Clear message</a>17 <div id="message_box" style="visibility:hidden;position:absolute; margin:1em;" class=gainlayout> 18 <div id="message"></div> 19 <a class="clear-link" href="#" onClick="document.getElementById('message').innerHTML='';switch_message_box()">${_("Clear message")}</a> 19 20 </div> 20 21 … … 34 35 <td>${h.link_to(_("ACL management"), h.url(controller="authz", id=None))}</td> 35 36 <td>${h.link_to(_("Repos management"), h.url(controller="repos", id=None))}</td> 36 <td>${h.link_to(_(" Logs"), h.url(controller="logs", id=None))}</td>37 <td>${h.link_to(_("Change log"), h.url(controller="logs", id=None))}</td> 37 38 <td>welcome ${session.get('user')}</td> 38 39 <td>${h.link_to(_("Logout"), h.url(controller="logout", id=None))}</td> … … 115 116 } 116 117 118 function warn_msg(message) 119 { 120 set_message_box("<div class='warning'>"+message+"<div>"); 121 } 122 123 function error_msg(message) 124 { 125 set_message_box("<div class='error'>"+message+"<div>"); 126 } 127 128 function info_msg(message) 129 { 130 set_message_box("<div class='info'>"+message+"<div>"); 131 } 132 117 133 function set_message_box(message) 118 134 { -
trunk/pysvnmanager/templates/check/index.mako
r43 r45 122 122 %> 123 123 124 <table >124 <table class="hidden"> 125 125 <tr> 126 126 <th>${_("Account")}</th> -
trunk/pysvnmanager/templates/repos/hooks.mako
r44 r45 128 128 } 129 129 130 path_changed();130 select_unset_hook_list(); 131 131 } 132 132 … … 198 198 ${h.link_to(_("Add repository"), h.url(action="create"))} 199 199 ${h.link_to(_("Remove repository"), h.url(action="remove"))} 200 ##<a href="#" onclick='#'>[+${_("Add repository")}]</a>201 ##<a href="#" onclick='#'>[-${_("Remove repository")}]</a>202 200 </DIV> 203 201 204 202 <DIV id="new_hook_list_box" class=gainlayout style="visibility:hidden;position:absolute"> 205 ${_("Available hooks:")} 203 <hr> 204 ${_("Uninstalled hooks:")} 206 205 <select name="unset_plugin_list" size="1" onChange='select_unset_hook_list()'> 207 206 </select> -
trunk/pysvnmanager/templates/role/index.mako
r43 r45 418 418 message = '${_("Update group failed:")}' + message; 419 419 alert(message); 420 set_message_box(message);420 error_msg(message); 421 421 } 422 422 else 423 423 { 424 424 message = '${_("Update group successfully.")}'; 425 set_message_box(message);425 info_msg(message); 426 426 if (document.main_form.role_list.value == rolename) 427 427 { … … 466 466 { 467 467 message = '${_("Delete group failed:")}' + message; 468 set_message_box(message);468 error_msg(message); 469 469 } 470 470 else 471 471 { 472 472 message = '${_("Delete group successfully.")}'; 473 set_message_box(message);473 info_msg(message); 474 474 reset_main_form(); 475 475 } … … 504 504 { 505 505 message = '${_("Update alias failed:")}' + message; 506 set_message_box(message);506 error_msg(message); 507 507 } 508 508 else 509 509 { 510 510 message = '${_("Update alias successfully.")}'; 511 set_message_box(message);511 info_msg(message); 512 512 if (document.main_form.role_list.value == aliasname) 513 513 { … … 551 551 { 552 552 message = '${_("Delete alias failed:")}' + message; 553 set_message_box(message);553 error_msg(message); 554 554 } 555 555 else 556 556 { 557 557 message = '${_("Delete alias successfully.")}'; 558 set_message_box(message);558 info_msg(message); 559 559 reset_main_form(); 560 560 } -
trunk/pysvnmanager/tests/functional/test_authz.py
r36 r45 21 21 res = self.app.get(url_for(controller='authz')) 22 22 assert res.status == 200 23 assert res.c.reposlist == [u'repos1', u'repos2'], res.c.reposlist23 assert ','.join(sorted(res.c.reposlist)) == 'repos1,repos2', res.c.reposlist 24 24 assert """<input type="button" name="save_btn" value='Save'""" in res.body, res.body 25 25 … … 28 28 res = self.app.get(url_for(controller='authz')) 29 29 assert res.status == 200 30 assert res.c.reposlist == ['/', u'repos1', u'repos2', u'repos3', u'document']30 assert ','.join(sorted(res.c.reposlist)) == u'/,document,repos1,repos2,repos3', res.c.reposlist 31 31 assert """<input type="button" name="save_btn" value='Save'""" in res.body, res.body 32 32 … … 49 49 assert """id[0]="...";name[0]="Please choose..."; 50 50 id[1]="/";name[1]="/"; 51 id[2]="repos1";name[2]="repos1"; 52 id[3]="repos2";name[3]="repos2"; 53 id[4]="repos3";name[4]="repos3"; 54 id[5]="document";name[5]="document"; 55 total=6; 51 id[2]="repos3";name[2]="repos3"; 52 id[3]="document";name[3]="document (?)"; 53 id[4]="repos1";name[4]="repos1 (?)"; 54 id[5]="repos2";name[5]="repos2 (?)"; 55 id[6]="project1";name[6]="project1 (!)"; 56 id[7]="project2";name[7]="project2 (!)"; 57 total=8; 56 58 revision="0.2.1"; 57 59 """ == res.body, res.body … … 297 299 res = self.app.get(url_for(controller='authz', action='save_authz'), params) 298 300 assert res.status == 200 299 assert " Repository reposXnot exist." == res.body, res.body301 assert "Module /trunk/src not exist." == res.body, res.body 300 302 finally: 301 303 self.rollback() -
trunk/pysvnmanager/tests/functional/test_check.py
r36 r45 32 32 res = self.app.get(url_for(controller='check')) 33 33 assert res.status == 200 34 assert '''<input type="submit" name="submit" value='Check Permissions'>''' in res.body 35 assert res.c.reposlist == [ '/', u'repos1', u'repos2', u'repos3', u'document']34 assert '''<input type="submit" name="submit" value='Check Permissions'>''' in res.body, res.body 35 assert res.c.reposlist == [u'/', u'document', u'project1', u'project2', u'repos1', u'repos2', u'repos3'], res.c.reposlist 36 36 37 37 -
trunk/pysvnmanager/tests/functional/test_repos.py
r43 r45 1 ## -*- coding: utf-8 -*- 2 1 3 from pysvnmanager.tests import * 2 4 … … 4 6 5 7 def test_index(self): 6 response = self.app.get(url_for(controller='repos')) 7 # Test response... 8 9 # Test redirect to login pange 10 res = self.app.get(url_for(controller='repos')) 11 assert res.status == 302 12 self.assertEqual(res.header('location'), '/security') 13 14 # Login as common user 15 self.login('nobody') 16 res = self.app.get(url_for(controller='repos')) 17 assert res.status == 302, res.status 18 assert res.header('location')== '/security/failed', res.header('location') 19 20 # Permission denied for repos admin(not root admin) 21 self.login('admin2') 22 res = self.app.get(url_for(controller='repos')) 23 assert res.status == 302, res.status 24 assert res.header('location')== '/security/failed', res.header('location') 25 26 # Login as superuser 27 self.login('root') 28 res = self.app.get(url_for(controller='repos')) 29 assert res.status == 200 30 assert """<div id="remove_hook_form_content"></div>""" in res.body, res.body[:100] 31 32 def test_init_repos_list(self): 33 # Login as superuser 34 self.login('root') 35 res = self.app.get(url_for(controller='repos', action="init_repos_list")) 36 assert res.status == 200 37 assert """id[0]="...";name[0]="Please choose..."; 38 id[1]="project1";name[1]="project1"; 39 id[2]="project2";name[2]="project2"; 40 id[3]="repos3";name[3]="repos3"; 41 total=4; 42 """ in res.body, res.body[:100] 43 44 def test_get_plugin_list(self): 45 self.login('root') 46 params = { 47 'select':'project1', 48 } 49 res = self.app.get(url_for(controller='repos', action="get_plugin_list"), params) 50 assert res.status == 200 51 assert "CaseInsensitive" in res.body, res.body 52 assert "EolStyleCheck" in res.body, res.body 53 assert "Please choose..." in res.body, res.body 54 55 def test_get_remove_hook_form_content(self): 56 self.login('root') 57 params = { 58 'select':'project1', 59 } 60 res = self.app.get(url_for(controller='repos', action="get_remove_hook_form_content"), params) 61 assert res.status == 200 62 assert "" == res.body, res.body 63 64 def test_get_hook_form(self): 65 self.login('root') 66 params = { 67 'repos':'project1', 68 'plugin':'CaseInsensitive', 69 } 70 res = self.app.get(url_for(controller='repos', action="get_hook_form"), params) 71 assert res.status == 200 72 assert "A pre-commit hook to detect case-insensitive filename clashes." in res.body, res.body 73 74 def test_install_uninstall_hook(self): 75 self.login('root') 76 params = { 77 '_repos':'project1', 78 '_plugin':'CaseInsensitiveXXX', 79 } 80 res = self.app.get(url_for(controller='repos', action="apply_new_hook"), params) 81 assert res.status == 200 82 assert "Apply plugin 'CaseInsensitiveXXX' on 'project1' Failed" in res.body, res.body 83 84 self.login('root') 85 params = { 86 'select':'project1', 87 } 88 res = self.app.get(url_for(controller='repos', action="get_plugin_list"), params) 89 assert res.status == 200 90 assert "CaseInsensitive" in res.body, res.body 91 assert "EolStyleCheck" in res.body, res.body 92 assert "Please choose..." in res.body, res.body 93 94 self.login('root') 95 params = { 96 '_repos':'project1', 97 '_plugin':'CaseInsensitive', 98 } 99 res = self.app.get(url_for(controller='repos', action="apply_new_hook"), params) 100 assert res.status == 200 101 assert "<div class='info'>Apply plugin 'CaseInsensitive' on 'project1' success.</div>" == res.body, res.body 102 103 self.login('root') 104 params = { 105 'select':'project1', 106 } 107 res = self.app.get(url_for(controller='repos', action="get_plugin_list"), params) 108 assert res.status == 200 109 assert "CaseInsensitive" not in res.body, res.body 110 assert "EolStyleCheck" in res.body, res.body 111 assert "Please choose..." in res.body, res.body 112 113 self.login('root') 114 params = { 115 '_repos':'project1', 116 '_plugin':'EolStyleCheck', 117 } 118 res = self.app.get(url_for(controller='repos', action="apply_new_hook"), params) 119 assert res.status == 200 120 assert """<div class='info'>Apply plugin 'EolStyleCheck' on 'project1' success.</div>""" == res.body, res.body 121 122 self.login('root') 123 params = { 124 'select':'project1', 125 } 126 res = self.app.get(url_for(controller='repos', action="get_plugin_list"), params) 127 assert res.status == 200 128 assert "CaseInsensitive" not in res.body, res.body 129 assert "EolStyleCheck" not in res.body, res.body 130 assert "Please choose..." in res.body, res.body 131 132 self.login('root') 133 params = { 134 '_repos':'project1', 135 'pluginid_0':'CaseInsensitive', 136 'pluginid_1':'EolStyleCheck', 137 } 138 res = self.app.get(url_for(controller='repos', action="remove_hook"), params) 139 assert res.status == 200 140 assert """<div class='info'>Delete plugin 'CaseInsensitive, EolStyleCheck' on 'project1' success.</div>""" == res.body, res.body 141 142 self.login('root') 143 params = { 144 'select':'project1', 145 } 146 res = self.app.get(url_for(controller='repos', action="get_plugin_list"), params) 147 assert res.status == 200 148 assert "CaseInsensitive" in res.body, res.body 149 assert "EolStyleCheck" in res.body, res.body 150 assert "Please choose..." in res.body, res.body 151 152 153 -
trunk/pysvnmanager/tests/test_repos.py
r43 r45 12 12 from pysvnmanager.hooks import plugins 13 13 14 from pysvnmanager.lib.base import * 15 14 16 import StringIO 15 17 from pprint import pprint … … 18 20 19 21 def __init__(self, *args): 20 self.repos_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + '/svnroot' 22 # self.repos_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + '/svnroot' 23 self.repos_root = cfg.repos_root 21 24 self.repos = repos.Repos(self.repos_root) 22 25 super(TestRepos, self).__init__(*args) … … 31 34 32 35 def testReposCreate(self): 33 self.assertRaises(Exception, self.repos.create, 'repos 1')36 self.assertRaises(Exception, self.repos.create, 'repos3') 34 37 self.repos.delete('repos3') 35 38 self.repos.create('repos3') 36 self.assert_(sorted(self.repos.repos_list) == [ 'repos1', 'repos2','repos3'], self.repos.repos_list)39 self.assert_(sorted(self.repos.repos_list) == [u'project1', u'project2', u'repos3'], self.repos.repos_list) 37 40 38 41 def testReposDelete(self): 39 self.assertRaises(Exception, self.repos.delete, ' repos1')42 self.assertRaises(Exception, self.repos.delete, 'project1') 40 43 41 44 def testReposRoot(self): … … 44 47 45 48 def testReposlist(self): 46 self.assert_(sorted(self.repos.repos_list) == [' repos1', 'repos2', 'repos3'], u','.join(self.repos.repos_list).encode('utf-8'))49 self.assert_(sorted(self.repos.repos_list) == ['project1', 'project2', 'repos3'], u','.join(self.repos.repos_list).encode('utf-8')) 47 50 48 51 def testSvnVersion(self): … … 54 57 55 58 def __init__(self, *args): 56 self.repos_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + '/svnroot' 59 # self.repos_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + '/svnroot' 60 self.repos_root = cfg.repos_root 57 61 super(TestReposPlugin, self).__init__(*args) 58 62 … … 70 74 def testPluginImport(self): 71 75 self.assertRaises(Exception, plugins.getHandler("CaseInsensitive"), "") 72 module_ci = plugins.getHandler("CaseInsensitive")(self.repos_root + '/ repos1')76 module_ci = plugins.getHandler("CaseInsensitive")(self.repos_root + '/project1') 73 77 self.assert_(module_ci.name=="check case insensitive", module_ci.name) 74 78 self.assert_(module_ci.description!="", module_ci.description) 75 79 76 80 def testPluginSetting(self): 77 m = plugins.getHandler("CaseInsensitive")(self.repos_root + '/ repos1')78 self.assert_(m. is_set()==False)79 m. set_plugin()80 self.assert_(m. is_set()==True)81 m. delete_plugin()82 self.assert_(m. is_set()==False)81 m = plugins.getHandler("CaseInsensitive")(self.repos_root + '/project1') 82 self.assert_(m.enabled()==False) 83 m.install() 84 self.assert_(m.enabled()==True) 85 m.uninstall() 86 self.assert_(m.enabled()==False) 83 87 84 88 def testHooks(self): … … 86 90 self.assertRaises(AssertionError, hooks.Hooks, self.repos_root) 87 91 88 myhooks = hooks.Hooks(self.repos_root + '/ repos1')92 myhooks = hooks.Hooks(self.repos_root + '/project1') 89 93 self.assert_(myhooks.pluginnames==['CaseInsensitive', 'EolStyleCheck'], myhooks.pluginnames) 90 94 self.assert_(myhooks.unapplied_plugins.keys()==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins.keys()) … … 95 99 96 100 def testHooksSetting(self): 97 myhooks = hooks.Hooks(self.repos_root + '/ repos1')101 myhooks = hooks.Hooks(self.repos_root + '/project1') 98 102 99 103 m = myhooks.plugins['CaseInsensitive'] 100 self.assert_(m. is_set()==False)104 self.assert_(m.enabled()==False) 101 105 self.assert_(myhooks.applied_plugins.keys()==[], myhooks.applied_plugins.keys()) 102 106 self.assert_(myhooks.unapplied_plugins.keys()==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins.keys()) 103 107 104 m. set_plugin()105 self.assert_(m. is_set()==True)108 m.install() 109 self.assert_(m.enabled()==True) 106 110 self.assert_(myhooks.applied_plugins.keys()==['CaseInsensitive'], myhooks.applied_plugins.keys()) 107 111 self.assert_(myhooks.unapplied_plugins.keys()==['EolStyleCheck'], myhooks.unapplied_plugins.keys()) 108 112 109 m. delete_plugin()110 self.assert_(m. is_set()==False)113 m.uninstall() 114 self.assert_(m.enabled()==False) 111 115 self.assert_(myhooks.applied_plugins.keys()==[], myhooks.applied_plugins.keys()) 112 116 self.assert_(myhooks.unapplied_plugins.keys()==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins.keys()) -
trunk/test.ini
r23 r45 55 55 authz_file = %(here)s/config/svn.access.test 56 56 57 # svn repository root path 58 repos_root = %(here)s/svnroot.test 59 57 60 # Logging configuration 58 61 [loggers]
![(please configure the [header_logo] section in trac.ini)](/trac/pysvnmanager/chrome/common/trac_banner.png)