Changeset 45

Show
Ignore:
Timestamp:
2008年08月27日 00时18分33秒 (4 years ago)
Author:
jiangx
Message:

See #9: add unittest; i18n; refactor plugins

Location:
trunk
Files:
9 added
27 modified

Legend:

Unmodified
Added
Removed
  • trunk/config/Makefile

    r38 r45  
    33CONFFILE=localconfig.py svn.access svn.passwd svn.access.test svn.passwd.test 
    44 
    5 all: $(CONFFILE) 
     5all: $(CONFFILE) ../svnroot.test 
    66         
    77clean: 
     
    1616        cp $< $@ 
    1717 
     18../svnroot.test: ../pysvnmanager/tests/data/svnroot.tar.bz2 
     19        @if [ ! -d $@ ]; then \ 
     20                tar -C .. -jxvf $< ; \ 
     21        fi 
    1822 
    1923.PHONY : all clean  
  • trunk/development.ini

    r44 r45  
    5656 
    5757# svn repository root path 
    58 repos_root = %(here)s/svnroot/ 
     58repos_root = %(here)s/svnroot 
    5959 
    6060#[filter:proxy-prefix] 
     
    7878[logger_pysvnmanager] 
    7979level = DEBUG 
    80 handlers = console 
     80handlers =  
    8181qualname = pysvnmanager 
    8282 
  • trunk/pySvnManager.egg-info/paste_deploy_config.ini_tmpl

    r4 r45  
    5050authz_file = %(here)s/config/svn.access 
    5151 
     52# svn repository root path 
     53repos_root = %(here)s/svnroot 
    5254 
    5355#[filter:proxy-prefix] 
     
    5759# Logging configuration 
    5860[loggers] 
    59 keys = root 
     61keys = root, pysvnmanager 
    6062 
    6163[handlers] 
     
    6971handlers = console 
    7072 
     73[logger_pysvnmanager] 
     74level = DEBUG 
     75handlers =  
     76qualname = pysvnmanager 
     77 
    7178[handler_console] 
    7279class = StreamHandler 
  • trunk/pysvnmanager/controllers/authz.py

    r32 r45  
    44from pysvnmanager.lib.base import * 
    55from pysvnmanager.model.svnauthz import * 
     6from pysvnmanager.model import repos as _repos 
    67 
    78log = logging.getLogger(__name__) 
     
    1516        # Used as checked in user to rcs file. 
    1617        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             
    1932    def __before__(self, action): 
    2033        super(AuthzController, self).__before__(action) 
     
    2437    def index(self): 
    2538        c.revision = self.authz.version 
     39        # used for functional test. 
    2640        c.reposlist = self.reposlist 
    2741         
     
    5468        msg += 'name[0]="%s";\n' % _("Please choose...") 
    5569        total += 1; 
    56         for reposname in self.reposlist: 
     70        for reposname in sorted(self.reposlist_set): 
    5771            msg += 'id[%d]="%s";' % (total, reposname) 
    5872            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+' (!)') 
    5981            total += 1; 
    6082        msg += 'total=%d;\n' % total 
     
    6890        select = d.get('select') 
    6991        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) 
    7095 
    7196        if repos: 
     
    141166            else: 
    142167                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                 
    143172            if not repos: 
    144173                raise Exception, _("Repository %s not exist.") % reposname 
     
    164193            self.authz.save(revision, comment=log_message) 
    165194        except Exception, e: 
    166             msg = get_unicode(e[0]) 
     195            msg = get_unicode(e.message) 
    167196 
    168197        log.info(log_message) 
     
    187216            self.authz.save(revision, comment=log_message) 
    188217        except Exception, e: 
    189             msg = get_unicode(e[0]) 
     218            msg = get_unicode(e.message) 
    190219         
    191220        log.info(log_message) 
  • trunk/pysvnmanager/controllers/check.py

    r32 r45  
    44from pysvnmanager.lib.base import * 
    55from pysvnmanager.model.svnauthz import * 
     6from pysvnmanager.model import repos as _repos 
    67 
    78log = logging.getLogger(__name__) 
     
    1617        self.authz.login_as = self.login_as 
    1718        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) 
    1824 
    1925    def __before__(self, action): 
  • trunk/pysvnmanager/controllers/logs.py

    r39 r45  
    156156            self.rcslog.backup(comment=log_message, user=self.login_as) 
    157157        except Exception, e: 
    158             msg = "%s" % e 
     158            msg = e.message 
    159159            if isinstance(msg, str): 
    160160                msg = unicode(msg, 'utf-8') 
  • trunk/pysvnmanager/controllers/repos.py

    r44 r45  
    5151    def get_plugin_list(self): 
    5252        reposname = request.params.get('select') 
    53         h = _hooks.Hooks(self.repos_root + reposname) 
     53        h = _hooks.Hooks(self.repos_root + '/' + reposname) 
    5454        total = 0; 
    5555        msg = '' 
     
    6969    def get_remove_hook_form_content(self): 
    7070        reposname = request.params.get('select') 
    71         h = _hooks.Hooks(self.repos_root + reposname) 
     71        h = _hooks.Hooks(self.repos_root + '/' + reposname) 
    7272        msg = '' 
    7373        if len(h.applied_plugins) > 0: 
     
    7575            msg += "<br>\n" 
    7676            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" 
    7884            for name in h.applied_plugins.keys(): 
     85                msg += "<tr><td width='1' rolspan='2'>" 
    7986                msg += '<input type="checkbox" name="pluginid_%(num)d" value="%(plugin)s">' % { 
    8087                    '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" 
    8896            msg += '<input type="submit" name="remove_hook" value="%s">\n' % _("Remove selected hooks") 
    8997 
     
    93101        reposname  = request.params.get('repos') 
    94102        pluginname = request.params.get('plugin') 
    95         h = _hooks.Hooks(self.repos_root + reposname) 
     103        h = _hooks.Hooks(self.repos_root + '/' + reposname) 
    96104 
    97         return h.plugins[pluginname].show_form() 
     105        return h.plugins[pluginname].install_config_form() 
    98106     
    99107    def apply_new_hook(self): 
     
    102110            reposname = d.get("_repos") 
    103111            pluginname = d.get("_plugin") 
    104             h = _hooks.Hooks(self.repos_root + reposname) 
     112            h = _hooks.Hooks(self.repos_root + '/' + reposname) 
    105113            plugin = h.plugins[pluginname] 
    106             plugin.set_plugin(d) 
     114            plugin.install(d) 
    107115        except Exception, e: 
    108             result = _("Apply plugin '%(plugin)s on '%(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>" 
    110118        else: 
    111             result = _("Apply plugin '%(plugin)s on '%(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>" 
    113121        return result 
    114122     
    115123    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>" 
    128145        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>" 
    131147        return result 
    132148 
     
    137153            self.repos.create(reposname) 
    138154        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>" 
    141157        else: 
    142             result = _("Create repository '%(repos)s' success.") % {"repos":reposname} 
     158            result = "<div class='info'>" + _("Create repository '%(repos)s' success.") % {"repos":reposname} + "</div>" 
    143159        return result 
    144160         
     
    153169            self.repos.delete(reposname) 
    154170        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>" 
    157173        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>" 
    159175        return result 
    160176     
  • trunk/pysvnmanager/controllers/role.py

    r32 r45  
    108108            self.authz.save(revision, comment=log_message) 
    109109        except Exception, e: 
    110             msg = get_unicode(e[0]) 
     110            msg = get_unicode(e.message) 
    111111 
    112112        log.info(log_message) 
     
    129129                self.authz.save(revision, comment=log_message) 
    130130            except Exception, e: 
    131                 msg = get_unicode(e[0]) 
     131                msg = get_unicode(e.message) 
    132132 
    133133        log.info(log_message) 
     
    150150            self.authz.save(revision, comment=log_message) 
    151151        except Exception, e: 
    152             msg = get_unicode(e[0]) 
     152            msg = get_unicode(e.message) 
    153153 
    154154        log.info(log_message) 
     
    171171                self.authz.save(revision, comment=log_message) 
    172172            except Exception, e: 
    173                 msg = get_unicode(e[0]) 
     173                msg = get_unicode(e.message) 
    174174 
    175175        log.info(log_message) 
  • trunk/pysvnmanager/hooks/plugins/CaseInsensitive.py

    r42 r45  
    22# -*- coding: utf-8 -*- 
    33 
    4 from pysvnmanager.hooks.plugins import PluginBase 
     4from pysvnmanager.hooks.plugins import * 
     5from pysvnmanager.hooks.plugins import _ 
    56 
    67class 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" 
    1020    value = "yes" 
    1121     
    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() 
    1428     
    15     def show(self): 
     29    def get_detail(self): 
     30        """ 
     31        Show detail informantion if plugin is already installed. 
     32        """ 
    1633        return self.description 
    1734     
    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. 
    2040         
    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() 
    2452     
    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() 
    2862         
    2963def execute(repospath=""): 
  • trunk/pysvnmanager/hooks/plugins/EolStyleCheck.py

    r42 r45  
    22# -*- coding: utf-8 -*- 
    33 
    4 from pysvnmanager.hooks.plugins import PluginBase 
     4from pysvnmanager.hooks.plugins import * 
     5from pysvnmanager.hooks.plugins import _ 
    56 
    67class 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" 
    1020    value = "yes" 
    1121     
    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() 
    1428     
    15     def show(self): 
     29    def get_detail(self): 
     30        """ 
     31        Show detail informantion if plugin is already installed. 
     32        """ 
    1633        return self.description 
    1734     
    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. 
    2040         
    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() 
    2452     
    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() 
    2862         
    2963def 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 
    23import ConfigParser 
    34import os 
     5import time 
     6import logging 
     7 
     8# i18n works only as pysvnmanager (a pylons app) model. 
     9from pylons import config 
     10if config.get('package') and not config.has_key('unittest'): 
     11    from pylons.i18n import _ 
     12else: 
     13    _ = lambda x:x 
     14     
     15log = logging.getLogger(__name__) 
    416 
    517def 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. 
    821    """ 
    922    import os, re 
     
    3952        return module 
    4053 
     54T_START_COMMIT          = 1 
     55T_PRE_COMMIT            = 2 
     56T_POST_COMMIT           = 3 
     57T_PRE_REVPROP_CHANGE    = 4 
     58T_POST_REVPROP_CHANGE   = 5 
     59T_PRE_LOCK              = 6 
     60T_POST_LOCK             = 7 
     61T_PRE_UNLOCK            = 8 
     62T_POST_UNLOCK           = 9 
    4163 
    4264class PluginBase(object): 
    4365    """ Base class for hook plugins 
    4466    """ 
     67    # Brief name for this plugin. 
    4568    name = "" 
     69     
     70    # Longer description for this plugin. 
    4671    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 = "" 
    4779     
    4880    def __init__(self, repospath): 
     81        # Test if repository is exists. 
    4982        self.__repospath = repospath 
    5083        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. 
    5287        self.__configfile = "%s/conf/hooks.ini" % self.__repospath 
    53         self.cp = ConfigParser.ConfigParser() 
    5488        self.__read_config() 
    5589 
    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        """ 
    57112        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. 
    63136        fp = open(self.__configfile, 'w') 
    64137        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        """ 
    67147        if not self.cp.has_section(section): 
    68148            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) 
    71151        else: 
    72152            result = default 
    73153        return result 
    74154 
    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             
    76181        if not self.cp.has_section(section): 
    77182            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         
    81197        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. 
    83200            if not self.cp.options(section): 
    84201                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.") 
    96255             
    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.") 
    102271     
    103272     
  • trunk/pysvnmanager/i18n/en/LC_MESSAGES/pysvnmanager.po

    r38 r45  
    1010"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 
    1111"POT-Creation-Date: 2008-07-03 22:14+0800\n" 
    12 "PO-Revision-Date: 2008-07-31 09:21+0800\n" 
     12"PO-Revision-Date: 2008-08-27 00:06+0800\n" 
    1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 
    1414"Language-Team: en <LL@li.org>\n" 
     
    1919"Generated-By: Babel 0.9.2\n" 
    2020 
    21 #: pysvnmanager/controllers/authz.py:29 
    22 #: pysvnmanager/templates/authz/index.mako:159 
     21#: pysvnmanager/controllers/authz.py:43 
     22#: pysvnmanager/templates/authz/index.mako:152 
    2323#: pysvnmanager/templates/check/index.mako:10 
    2424msgid "All users(with anon)" 
    2525msgstr "" 
    2626 
    27 #: pysvnmanager/controllers/authz.py:30 
    28 #: pysvnmanager/templates/authz/index.mako:161 
     27#: pysvnmanager/controllers/authz.py:44 
     28#: pysvnmanager/templates/authz/index.mako:154 
    2929#: pysvnmanager/templates/check/index.mako:11 
    3030msgid "Known users" 
    3131msgstr "" 
    3232 
    33 #: pysvnmanager/controllers/authz.py:31 
    34 #: pysvnmanager/templates/authz/index.mako:163 
     33#: pysvnmanager/controllers/authz.py:45 
     34#: pysvnmanager/templates/authz/index.mako:156 
    3535#: pysvnmanager/templates/check/index.mako:12 
    3636msgid "Anonymous" 
    3737msgstr "" 
    3838 
    39 #: pysvnmanager/controllers/authz.py:36 pysvnmanager/controllers/role.py:50 
     39#: pysvnmanager/controllers/authz.py:50 pysvnmanager/controllers/role.py:50 
    4040#: pysvnmanager/controllers/role.py:70 
    41 #: pysvnmanager/templates/authz/index.mako:155 
     41#: pysvnmanager/templates/authz/index.mako:148 
    4242#: pysvnmanager/templates/check/index.mako:17 
    4343#: pysvnmanager/templates/role/index.mako:18 
     
    4848msgstr "" 
    4949 
    50 #: pysvnmanager/controllers/authz.py:39 pysvnmanager/controllers/role.py:55 
     50#: pysvnmanager/controllers/authz.py:53 pysvnmanager/controllers/role.py:55 
    5151#: pysvnmanager/controllers/role.py:72 
    52 #: pysvnmanager/templates/authz/index.mako:157 
     52#: pysvnmanager/templates/authz/index.mako:150 
    5353#: pysvnmanager/templates/check/index.mako:19 
    5454#: pysvnmanager/templates/role/index.mako:23 
     
    5959msgstr "" 
    6060 
    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 
    6364#: pysvnmanager/templates/check/index.mako:9 
    6465#: pysvnmanager/templates/check/index.mako:23 
     
    6869msgstr "" 
    6970 
    70 #: pysvnmanager/controllers/authz.py:135 
     71#: pysvnmanager/controllers/authz.py:160 
    7172#, python-format 
    7273msgid "User %(user)s changed authz rules. (rev:%(rev)s)" 
    7374msgstr "" 
    7475 
    75 #: pysvnmanager/controllers/authz.py:144 
     76#: pysvnmanager/controllers/authz.py:173 
    7677#, python-format 
    7778msgid "Repository %s not exist." 
    7879msgstr "" 
    7980 
    80 #: pysvnmanager/controllers/authz.py:152 
     81#: pysvnmanager/controllers/authz.py:181 
    8182#, python-format 
    8283msgid "Module %s not exist." 
    8384msgstr "" 
    8485 
    85 #: pysvnmanager/controllers/authz.py:158 
     86#: pysvnmanager/controllers/authz.py:187 
    8687msgid "You can not delete yourself from admin list." 
    8788msgstr "" 
    8889 
    89 #: pysvnmanager/controllers/authz.py:183 
     90#: pysvnmanager/controllers/authz.py:212 
    9091#, python-format 
    9192msgid "User %(user)s delete authz rules. (rev:%(rev)s)" 
    9293msgstr "" 
    9394 
    94 #: pysvnmanager/controllers/check.py:63 
     95#: pysvnmanager/controllers/check.py:69 
    9596#: pysvnmanager/templates/auth_failed.mako:3 
    9697msgid "Permission denied." 
     
    125126msgstr "" 
    126127 
    127 #: pysvnmanager/controllers/logs.py:148 
     128#: pysvnmanager/controllers/logs.py:152 
    128129#, python-format 
    129130msgid "Rollback successfully to revision: %s" 
    130131msgstr "" 
    131132 
    132 #: pysvnmanager/controllers/logs.py:157 
     133#: pysvnmanager/controllers/logs.py:161 
    133134#, python-format 
    134135msgid "Rollback failed: %s" 
    135136msgstr "" 
    136137 
     138#: pysvnmanager/controllers/repos.py:74 
     139msgid "Installed hooks:" 
     140msgstr "" 
     141 
     142#: pysvnmanager/controllers/repos.py:80 
     143msgid "Id" 
     144msgstr "" 
     145 
     146#: pysvnmanager/controllers/repos.py:81 
     147#: pysvnmanager/hooks/plugins/__init__.py:244 
     148msgid "Plugin name" 
     149msgstr "" 
     150 
     151#: pysvnmanager/controllers/repos.py:82 
     152#: pysvnmanager/hooks/plugins/__init__.py:245 
     153msgid "Type" 
     154msgstr "" 
     155 
     156#: pysvnmanager/controllers/repos.py:96 
     157msgid "Remove selected hooks" 
     158msgstr "" 
     159 
     160#: pysvnmanager/controllers/repos.py:116 
     161#, python-format 
     162msgid "" 
     163"Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 
     164"%(msg)s" 
     165msgstr "" 
     166 
     167#: pysvnmanager/controllers/repos.py:119 
     168#, python-format 
     169msgid "Apply plugin '%(plugin)s' on '%(repos)s' success." 
     170msgstr "" 
     171 
     172#: pysvnmanager/controllers/repos.py:140 
     173#, python-format 
     174msgid "" 
     175"Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 
     176"%(msg)s" 
     177msgstr "" 
     178 
     179#: pysvnmanager/controllers/repos.py:143 
     180#, python-format 
     181msgid "Delete plugin '%(plugin)s' on '%(repos)s' success." 
     182msgstr "" 
     183 
     184#: pysvnmanager/controllers/repos.py:146 
     185#, python-format 
     186msgid "No plugin has been deleted for '%(repos)s'." 
     187msgstr "" 
     188 
     189#: pysvnmanager/controllers/repos.py:155 
     190#, python-format 
     191msgid "" 
     192"Create repository '%(repos)s' Failed. Error message:<br>\n" 
     193"%(msg)s" 
     194msgstr "" 
     195 
     196#: pysvnmanager/controllers/repos.py:158 
     197#, python-format 
     198msgid "Create repository '%(repos)s' success." 
     199msgstr "" 
     200 
     201#: pysvnmanager/controllers/repos.py:171 
     202#, python-format 
     203msgid "" 
     204"Delete repository '%(repos)s' Failed. Error message:<br>\n" 
     205"%(msg)s" 
     206msgstr "" 
     207 
     208#: pysvnmanager/controllers/repos.py:174 
     209#, python-format 
     210msgid "Delete blank repository '%(repos)s' success." 
     211msgstr "" 
     212 
    137213#: pysvnmanager/controllers/role.py:103 
    138214#, python-format 
     
    168244#, python-format 
    169245msgid "User %s logged out" 
     246msgstr "" 
     247 
     248#: pysvnmanager/hooks/plugins/CaseInsensitive.py:10 
     249msgid "check case insensitive" 
     250msgstr "" 
     251 
     252#: pysvnmanager/hooks/plugins/CaseInsensitive.py:13 
     253msgid "A pre-commit hook to detect case-insensitive filename clashes." 
     254msgstr "" 
     255 
     256#: pysvnmanager/hooks/plugins/EolStyleCheck.py:10 
     257msgid "mime-type and eol-style check" 
     258msgstr "" 
     259 
     260#: pysvnmanager/hooks/plugins/EolStyleCheck.py:13 
     261msgid "New file must provide svn:eol-style if not binary file." 
     262msgstr "" 
     263 
     264#: pysvnmanager/hooks/plugins/__init__.py:84 
     265#, python-format 
     266msgid "repos '%s' not exist!" 
     267msgstr "" 
     268 
     269#: pysvnmanager/hooks/plugins/__init__.py:133 
     270#, python-format 
     271msgid "Conflict: plugin '%s' is modified by others." 
     272msgstr "" 
     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 
     280msgid "Plugin not fully implemented." 
     281msgstr "" 
     282 
     283#: pysvnmanager/hooks/plugins/__init__.py:246 
     284msgid "Description" 
     285msgstr "" 
     286 
     287#: pysvnmanager/model/repos.py:39 
     288#, python-format 
     289msgid "Repos root does not exist: %s" 
     290msgstr "" 
     291 
     292#: pysvnmanager/model/repos.py:68 
     293#, python-format 
     294msgid "Repos %s already exists." 
     295msgstr "" 
     296 
     297#: pysvnmanager/model/repos.py:137 
     298#, python-format 
     299msgid "Repos %s is not a blank repository." 
    170300msgstr "" 
    171301 
     
    223353msgstr "" 
    224354 
    225 #: pysvnmanager/model/svnauthz.py:1770 
     355#: pysvnmanager/model/svnauthz.py:1769 
    226356#, python-format 
    227357msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 
    228358msgstr "" 
    229359 
    230 #: pysvnmanager/model/svnauthz.py:1772 
     360#: pysvnmanager/model/svnauthz.py:1771 
    231361#, python-format 
    232362msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 
    233363msgstr "" 
    234364 
    235 #: pysvnmanager/model/svnauthz.py:1774 
     365#: pysvnmanager/model/svnauthz.py:1773 
    236366#, python-format 
    237367msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 
    238368msgstr "" 
    239369 
    240 #: pysvnmanager/model/svnauthz.py:1812 
     370#: pysvnmanager/model/svnauthz.py:1813 
    241371#, python-format 
    242372msgid "" 
     
    250380msgstr "" 
    251381 
    252 #: pysvnmanager/model/svnauthz.py:1831 
     382#: pysvnmanager/model/svnauthz.py:1832 
    253383#, python-format 
    254384msgid "" 
     
    268398msgstr "" 
    269399 
    270 #: pysvnmanager/templates/base.mako:11 
     400#: pysvnmanager/templates/base.mako:12 
    271401msgid "Loading, please wait..." 
    272402msgstr "" 
    273403 
    274 #: pysvnmanager/templates/base.mako:27 
     404#: pysvnmanager/templates/base.mako:19 
     405msgid "Clear message" 
     406msgstr "" 
     407 
     408#: pysvnmanager/templates/base.mako:33 
    275409msgid "Check permissions" 
    276410msgstr "" 
    277411 
    278 #: pysvnmanager/templates/base.mako:28 
     412#: pysvnmanager/templates/base.mako:34 
    279413msgid "Role management" 
    280414msgstr "" 
    281415 
    282 #: pysvnmanager/templates/base.mako:29 
     416#: pysvnmanager/templates/base.mako:35 
    283417#: pysvnmanager/templates/authz/index.mako:5 
    284 #: pysvnmanager/templates/authz/index.mako:603 
     418#: pysvnmanager/templates/authz/index.mako:590 
    285419msgid "ACL management" 
    286420msgstr "" 
    287421 
    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 
     425msgid "Repos management" 
     426msgstr "" 
     427 
     428#: pysvnmanager/templates/base.mako:37 
     429msgid "Change log" 
     430msgstr "" 
     431 
     432#: pysvnmanager/templates/base.mako:39 
    293433msgid "Logout" 
    294434msgstr "" 
    295435 
    296 #: pysvnmanager/templates/authz/index.mako:165 
     436#: pysvnmanager/templates/authz/index.mako:158 
    297437msgid "User:" 
    298438msgstr "" 
    299439 
    300 #: pysvnmanager/templates/authz/index.mako:174 
     440#: pysvnmanager/templates/authz/index.mako:167 
    301441msgid "Readonly" 
    302442msgstr "" 
    303443 
    304 #: pysvnmanager/templates/authz/index.mako:178 
    305 #: pysvnmanager/templates/authz/index.mako:677 
     444#: pysvnmanager/templates/authz/index.mako:171 
     445#: pysvnmanager/templates/authz/index.mako:664 
    306446msgid "Full" 
    307447msgstr "" 
    308448 
    309 #: pysvnmanager/templates/authz/index.mako:182 
     449#: pysvnmanager/templates/authz/index.mako:175 
     450#: pysvnmanager/templates/authz/index.mako:665 
     451msgid "Denied" 
     452msgstr "" 
     453 
     454#: pysvnmanager/templates/authz/index.mako:373 
     455msgid "No rights selected! Please check proper rights for selected users." 
     456msgstr "" 
     457 
     458#: pysvnmanager/templates/authz/index.mako:384 
     459msgid "Unknown rights: " 
     460msgstr "" 
     461 
     462#: pysvnmanager/templates/authz/index.mako:472 
     463msgid "Please input module path." 
     464msgstr "" 
     465 
     466#: pysvnmanager/templates/authz/index.mako:478 
     467msgid "Please input repository name." 
     468msgstr "" 
     469 
     470#: pysvnmanager/templates/authz/index.mako:483 
     471msgid "Save failed." 
     472msgstr "" 
     473 
     474#: pysvnmanager/templates/authz/index.mako:503 
     475msgid "Update ACL failed:" 
     476msgstr "" 
     477 
     478#: pysvnmanager/templates/authz/index.mako:508 
     479msgid "Update ACL successfully." 
     480msgstr "" 
     481 
     482#: pysvnmanager/templates/authz/index.mako:529 
     483msgid "No path selected." 
     484msgstr "" 
     485 
     486#: pysvnmanager/templates/authz/index.mako:534 
     487msgid "Are you sure to delete module:" 
     488msgstr "" 
     489 
     490#: pysvnmanager/templates/authz/index.mako:536 
     491#: pysvnmanager/templates/role/index.mako:446 
     492#: pysvnmanager/templates/role/index.mako:531 
     493msgid "Click Ok to proceed, or click cancel" 
     494msgstr "" 
     495 
     496#: pysvnmanager/templates/authz/index.mako:557 
     497msgid "Can not delete module " 
     498msgstr "" 
     499 
     500#: pysvnmanager/templates/authz/index.mako:562 
     501msgid "Successfully delete module:" 
     502msgstr "" 
     503 
     504#: pysvnmanager/templates/authz/index.mako:597 
     505#: pysvnmanager/templates/repos/hooks.mako:195 
     506msgid "Repository:" 
     507msgstr "" 
     508 
     509#: pysvnmanager/templates/authz/index.mako:600 
     510msgid "New repository" 
     511msgstr "" 
     512 
     513#: pysvnmanager/templates/authz/index.mako:604 
     514msgid "Repository Name:" 
     515msgstr "" 
     516 
     517#: pysvnmanager/templates/authz/index.mako:609 
     518msgid "Administrators:" 
     519msgstr "" 
     520 
     521#: pysvnmanager/templates/authz/index.mako:621 
     522msgid "Module:" 
     523msgstr "" 
     524 
     525#: pysvnmanager/templates/authz/index.mako:624 
     526msgid "New module" 
     527msgstr "" 
     528 
     529#: pysvnmanager/templates/authz/index.mako:630 
     530msgid "Module Path:" 
     531msgstr "" 
     532 
     533#: pysvnmanager/templates/authz/index.mako:644 
     534msgid "ACL" 
     535msgstr "" 
     536 
     537#: pysvnmanager/templates/authz/index.mako:649 
     538msgid "Users" 
     539msgstr "" 
     540 
     541#: pysvnmanager/templates/authz/index.mako:663 
     542msgid "ReadOnly" 
     543msgstr "" 
     544 
    310545#: 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 
    406547msgid "Save" 
    407548msgstr "" 
    408549 
    409 #: pysvnmanager/templates/authz/index.mako:694 
    410 #: pysvnmanager/templates/role/index.mako:728 
     550#: pysvnmanager/templates/authz/index.mako:679 
     551#: pysvnmanager/templates/role/index.mako:712 
    411552msgid "Delete" 
    412553msgstr "" 
    413554 
    414 #: pysvnmanager/templates/authz/index.mako:695 
    415 #: pysvnmanager/templates/role/index.mako:729 
     555#: pysvnmanager/templates/authz/index.mako:680 
     556#: pysvnmanager/templates/role/index.mako:713 
    416557msgid "Cancel" 
    417558msgstr "" 
     
    494635 
    495636#: pysvnmanager/templates/logs/rollback.mako:14 
    496 #: pysvnmanager/templates/logs/view.mako:18 
     637#: pysvnmanager/templates/logs/view.mako:20 
    497638msgid "Close" 
    498639msgstr "" 
     
    506647msgstr "" 
    507648 
    508 #: pysvnmanager/templates/logs/view.mako:16 
     649#: pysvnmanager/templates/logs/view.mako:17 
    509650msgid "Rollback to this revision" 
    510651msgstr "" 
    511652 
     653#: pysvnmanager/templates/repos/create.mako:5 
     654#: pysvnmanager/templates/repos/create.mako:8 
     655#: pysvnmanager/templates/repos/create.mako:25 
     656msgid "Create repository" 
     657msgstr "" 
     658 
     659#: pysvnmanager/templates/repos/create.mako:22 
     660#: pysvnmanager/templates/repos/remove.mako:63 
     661msgid "Repository name:" 
     662msgstr "" 
     663 
     664#: pysvnmanager/templates/repos/hooks.mako:198 
     665msgid "Add repository" 
     666msgstr "" 
     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 
     672msgid "Remove repository" 
     673msgstr "" 
     674 
     675#: pysvnmanager/templates/repos/hooks.mako:204 
     676msgid "Uninstalled hooks:" 
     677msgstr "" 
     678 
     679#: pysvnmanager/templates/repos/hooks.mako:226 
     680msgid "Enable this hook" 
     681msgstr "" 
     682 
    512683#: pysvnmanager/templates/role/index.mako:5 
    513 #: pysvnmanager/templates/role/index.mako:638 
     684#: pysvnmanager/templates/role/index.mako:625 
    514685msgid "Role Management" 
    515686msgstr "" 
    516687 
    517 #: pysvnmanager/templates/role/index.mako:420 
     688#: pysvnmanager/templates/role/index.mako:418 
    518689msgid "Update group failed:" 
    519690msgstr "" 
    520691 
    521 #: pysvnmanager/templates/role/index.mako:427 
     692#: pysvnmanager/templates/role/index.mako:424 
    522693msgid "Update group successfully." 
    523694msgstr "" 
    524695 
    525 #: pysvnmanager/templates/role/index.mako:448 
     696#: pysvnmanager/templates/role/index.mako:444 
    526697msgid "Are you sure to delete group:" 
    527698msgstr "" 
    528699 
    529 #: pysvnmanager/templates/role/index.mako:471 
     700#: pysvnmanager/templates/role/index.mako:467 
    530701msgid "Delete group failed:" 
    531702msgstr "" 
    532703 
    533 #: pysvnmanager/templates/role/index.mako:478 
     704#: pysvnmanager/templates/role/index.mako:472 
    534705msgid "Delete group successfully." 
    535706msgstr "" 
    536707 
    537 #: pysvnmanager/templates/role/index.mako:512 
     708#: pysvnmanager/templates/role/index.mako:505 
    538709msgid "Update alias failed:" 
    539710msgstr "" 
    540711 
    541 #: pysvnmanager/templates/role/index.mako:519 
     712#: pysvnmanager/templates/role/index.mako:510 
    542713msgid "Update alias successfully." 
    543714msgstr "" 
    544715 
    545 #: pysvnmanager/templates/role/index.mako:539 
     716#: pysvnmanager/templates/role/index.mako:529 
    546717msgid "Are you sure to delete alias:" 
    547718msgstr "" 
    548719 
    549 #: pysvnmanager/templates/role/index.mako:562 
     720#: pysvnmanager/templates/role/index.mako:552 
    550721msgid "Delete alias failed:" 
    551722msgstr "" 
    552723 
    553 #: pysvnmanager/templates/role/index.mako:569 
     724#: pysvnmanager/templates/role/index.mako:557 
    554725msgid "Delete alias successfully." 
    555726msgstr "" 
    556727 
     728#: pysvnmanager/templates/role/index.mako:632 
     729msgid "Select a role name:" 
     730msgstr "" 
     731 
     732#: pysvnmanager/templates/role/index.mako:636 
     733msgid "New Group" 
     734msgstr "" 
     735 
     736#: pysvnmanager/templates/role/index.mako:637 
     737msgid "New Alias" 
     738msgstr "" 
     739 
     740#: pysvnmanager/templates/role/index.mako:641 
     741msgid "New group name:" 
     742msgstr "" 
     743 
    557744#: pysvnmanager/templates/role/index.mako:645 
    558 msgid "Select a role name:" 
    559 msgstr "" 
    560  
    561 #: pysvnmanager/templates/role/index.mako:649 
    562 msgid "New Group" 
    563 msgstr "" 
    564  
    565 #: pysvnmanager/templates/role/index.mako:650 
    566 msgid "New Alias" 
    567 msgstr "" 
    568  
    569 #: pysvnmanager/templates/role/index.mako:654 
    570 msgid "New group name:" 
    571 msgstr "" 
    572  
    573 #: pysvnmanager/templates/role/index.mako:658 
    574745msgid "New alias name:" 
    575746msgstr "" 
    576747 
    577 #: pysvnmanager/templates/role/index.mako:670 
     748#: pysvnmanager/templates/role/index.mako:657 
    578749msgid "Members list" 
    579750msgstr "" 
    580751 
    581 #: pysvnmanager/templates/role/index.mako:675 
     752#: pysvnmanager/templates/role/index.mako:662 
    582753msgid "Other users" 
    583754msgstr "" 
    584755 
    585 #: pysvnmanager/templates/role/index.mako:694 
     756#: pysvnmanager/templates/role/index.mako:681 
    586757msgid "Ignore recursive" 
    587758msgstr "" 
    588759 
    589 #: pysvnmanager/templates/role/index.mako:706 
     760#: pysvnmanager/templates/role/index.mako:693 
    590761msgid "User name:" 
    591762msgstr "" 
  • trunk/pysvnmanager/i18n/pysvnmanager.pot

    r38 r45  
    77msgid "" 
    88msgstr "" 
    9 "Project-Id-Version: pySvnManager 0.1.3\n" 
     9"Project-Id-Version: pySvnManager 0.2.0\n" 
    1010"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 
    11 "POT-Creation-Date: 2008-07-31 09:21+0800\n" 
     11"POT-Creation-Date: 2008-08-27 00:06+0800\n" 
    1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
    1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 
     
    1818"Generated-By: Babel 0.9.2\n" 
    1919 
    20 #: pysvnmanager/controllers/authz.py:29 pysvnmanager/templates/authz/index.mako:159 
     20#: pysvnmanager/controllers/authz.py:43 pysvnmanager/templates/authz/index.mako:152 
    2121#: pysvnmanager/templates/check/index.mako:10 
    2222msgid "All users(with anon)" 
    2323msgstr "" 
    2424 
    25 #: pysvnmanager/controllers/authz.py:30 pysvnmanager/templates/authz/index.mako:161 
     25#: pysvnmanager/controllers/authz.py:44 pysvnmanager/templates/authz/index.mako:154 
    2626#: pysvnmanager/templates/check/index.mako:11 
    2727msgid "Known users" 
    2828msgstr "" 
    2929 
    30 #: pysvnmanager/controllers/authz.py:31 pysvnmanager/templates/authz/index.mako:163 
     30#: pysvnmanager/controllers/authz.py:45 pysvnmanager/templates/authz/index.mako:156 
    3131#: pysvnmanager/templates/check/index.mako:12 
    3232msgid "Anonymous" 
    3333msgstr "" 
    3434 
    35 #: pysvnmanager/controllers/authz.py:36 pysvnmanager/controllers/role.py:50 
    36 #: pysvnmanager/controllers/role.py:70 pysvnmanager/templates/authz/index.mako:155 
     35#: pysvnmanager/controllers/authz.py:50 pysvnmanager/controllers/role.py:50 
     36#: pysvnmanager/controllers/role.py:70 pysvnmanager/templates/authz/index.mako:148 
    3737#: pysvnmanager/templates/check/index.mako:17 
    3838#: pysvnmanager/templates/role/index.mako:18 
     
    4343msgstr "" 
    4444 
    45 #: pysvnmanager/controllers/authz.py:39 pysvnmanager/controllers/role.py:55 
    46 #: pysvnmanager/controllers/role.py:72 pysvnmanager/templates/authz/index.mako:157 
     45#: pysvnmanager/controllers/authz.py:53 pysvnmanager/controllers/role.py:55 
     46#: pysvnmanager/controllers/role.py:72 pysvnmanager/templates/authz/index.mako:150 
    4747#: pysvnmanager/templates/check/index.mako:19 
    4848#: pysvnmanager/templates/role/index.mako:23 
     
    5353msgstr "" 
    5454 
    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 
    5758#: pysvnmanager/templates/check/index.mako:9 
    5859#: pysvnmanager/templates/check/index.mako:23 
     
    6263msgstr "" 
    6364 
    64 #: pysvnmanager/controllers/authz.py:135 
     65#: pysvnmanager/controllers/authz.py:160 
    6566#, python-format 
    6667msgid "User %(user)s changed authz rules. (rev:%(rev)s)" 
    6768msgstr "" 
    6869 
    69 #: pysvnmanager/controllers/authz.py:144 
     70#: pysvnmanager/controllers/authz.py:173 
    7071#, python-format 
    7172msgid "Repository %s not exist." 
    7273msgstr "" 
    7374 
    74 #: pysvnmanager/controllers/authz.py:152 
     75#: pysvnmanager/controllers/authz.py:181 
    7576#, python-format 
    7677msgid "Module %s not exist." 
    7778msgstr "" 
    7879 
    79 #: pysvnmanager/controllers/authz.py:158 
     80#: pysvnmanager/controllers/authz.py:187 
    8081msgid "You can not delete yourself from admin list." 
    8182msgstr "" 
    8283 
    83 #: pysvnmanager/controllers/authz.py:183 
     84#: pysvnmanager/controllers/authz.py:212 
    8485#, python-format 
    8586msgid "User %(user)s delete authz rules. (rev:%(rev)s)" 
    8687msgstr "" 
    8788 
    88 #: pysvnmanager/controllers/check.py:63 pysvnmanager/templates/auth_failed.mako:3 
     89#: pysvnmanager/controllers/check.py:69 pysvnmanager/templates/auth_failed.mako:3 
    8990msgid "Permission denied." 
    9091msgstr "" 
     
    118119msgstr "" 
    119120 
    120 #: pysvnmanager/controllers/logs.py:148 
     121#: pysvnmanager/controllers/logs.py:152 
    121122#, python-format 
    122123msgid "Rollback successfully to revision: %s" 
    123124msgstr "" 
    124125 
    125 #: pysvnmanager/controllers/logs.py:157 
     126#: pysvnmanager/controllers/logs.py:161 
    126127#, python-format 
    127128msgid "Rollback failed: %s" 
    128129msgstr "" 
    129130 
     131#: pysvnmanager/controllers/repos.py:74 
     132msgid "Installed hooks:" 
     133msgstr "" 
     134 
     135#: pysvnmanager/controllers/repos.py:80 
     136msgid "Id" 
     137msgstr "" 
     138 
     139#: pysvnmanager/controllers/repos.py:81 pysvnmanager/hooks/plugins/__init__.py:244 
     140msgid "Plugin name" 
     141msgstr "" 
     142 
     143#: pysvnmanager/controllers/repos.py:82 pysvnmanager/hooks/plugins/__init__.py:245 
     144msgid "Type" 
     145msgstr "" 
     146 
     147#: pysvnmanager/controllers/repos.py:96 
     148msgid "Remove selected hooks" 
     149msgstr "" 
     150 
     151#: pysvnmanager/controllers/repos.py:116 
     152#, python-format 
     153msgid "" 
     154"Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 
     155"%(msg)s" 
     156msgstr "" 
     157 
     158#: pysvnmanager/controllers/repos.py:119 
     159#, python-format 
     160msgid "Apply plugin '%(plugin)s' on '%(repos)s' success." 
     161msgstr "" 
     162 
     163#: pysvnmanager/controllers/repos.py:140 
     164#, python-format 
     165msgid "" 
     166"Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 
     167"%(msg)s" 
     168msgstr "" 
     169 
     170#: pysvnmanager/controllers/repos.py:143 
     171#, python-format 
     172msgid "Delete plugin '%(plugin)s' on '%(repos)s' success." 
     173msgstr "" 
     174 
     175#: pysvnmanager/controllers/repos.py:146 
     176#, python-format 
     177msgid "No plugin has been deleted for '%(repos)s'." 
     178msgstr "" 
     179 
     180#: pysvnmanager/controllers/repos.py:155 
     181#, python-format 
     182msgid "" 
     183"Create repository '%(repos)s' Failed. Error message:<br>\n" 
     184"%(msg)s" 
     185msgstr "" 
     186 
     187#: pysvnmanager/controllers/repos.py:158 
     188#, python-format 
     189msgid "Create repository '%(repos)s' success." 
     190msgstr "" 
     191 
     192#: pysvnmanager/controllers/repos.py:171 
     193#, python-format 
     194msgid "" 
     195"Delete repository '%(repos)s' Failed. Error message:<br>\n" 
     196"%(msg)s" 
     197msgstr "" 
     198 
     199#: pysvnmanager/controllers/repos.py:174 
     200#, python-format 
     201msgid "Delete blank repository '%(repos)s' success." 
     202msgstr "" 
     203 
    130204#: pysvnmanager/controllers/role.py:103 
    131205#, python-format 
     
    161235#, python-format 
    162236msgid "User %s logged out" 
     237msgstr "" 
     238 
     239#: pysvnmanager/hooks/plugins/CaseInsensitive.py:10 
     240msgid "check case insensitive" 
     241msgstr "" 
     242 
     243#: pysvnmanager/hooks/plugins/CaseInsensitive.py:13 
     244msgid "A pre-commit hook to detect case-insensitive filename clashes." 
     245msgstr "" 
     246 
     247#: pysvnmanager/hooks/plugins/EolStyleCheck.py:10 
     248msgid "mime-type and eol-style check" 
     249msgstr "" 
     250 
     251#: pysvnmanager/hooks/plugins/EolStyleCheck.py:13 
     252msgid "New file must provide svn:eol-style if not binary file." 
     253msgstr "" 
     254 
     255#: pysvnmanager/hooks/plugins/__init__.py:84 
     256#, python-format 
     257msgid "repos '%s' not exist!" 
     258msgstr "" 
     259 
     260#: pysvnmanager/hooks/plugins/__init__.py:133 
     261#, python-format 
     262msgid "Conflict: plugin '%s' is modified by others." 
     263msgstr "" 
     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 
     271msgid "Plugin not fully implemented." 
     272msgstr "" 
     273 
     274#: pysvnmanager/hooks/plugins/__init__.py:246 
     275msgid "Description" 
     276msgstr "" 
     277 
     278#: pysvnmanager/model/repos.py:39 
     279#, python-format 
     280msgid "Repos root does not exist: %s" 
     281msgstr "" 
     282 
     283#: pysvnmanager/model/repos.py:68 
     284#, python-format 
     285msgid "Repos %s already exists." 
     286msgstr "" 
     287 
     288#: pysvnmanager/model/repos.py:137 
     289#, python-format 
     290msgid "Repos %s is not a blank repository." 
    163291msgstr "" 
    164292 
     
    216344msgstr "" 
    217345 
    218 #: pysvnmanager/model/svnauthz.py:1770 
     346#: pysvnmanager/model/svnauthz.py:1769 
    219347#, python-format 
    220348msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 
    221349msgstr "" 
    222350 
    223 #: pysvnmanager/model/svnauthz.py:1772 
     351#: pysvnmanager/model/svnauthz.py:1771 
    224352#, python-format 
    225353msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 
    226354msgstr "" 
    227355 
    228 #: pysvnmanager/model/svnauthz.py:1774 
     356#: pysvnmanager/model/svnauthz.py:1773 
    229357#, python-format 
    230358msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 
    231359msgstr "" 
    232360 
    233 #: pysvnmanager/model/svnauthz.py:1812 
     361#: pysvnmanager/model/svnauthz.py:1813 
    234362#, python-format 
    235363msgid "" 
     
    243371msgstr "" 
    244372 
    245 #: pysvnmanager/model/svnauthz.py:1831 
     373#: pysvnmanager/model/svnauthz.py:1832 
    246374#, python-format 
    247375msgid "" 
     
    261389msgstr "" 
    262390 
    263 #: pysvnmanager/templates/base.mako:11 
     391#: pysvnmanager/templates/base.mako:12 
    264392msgid "Loading, please wait..." 
    265393msgstr "" 
    266394 
    267 #: pysvnmanager/templates/base.mako:27 
     395#: pysvnmanager/templates/base.mako:19 
     396msgid "Clear message" 
     397msgstr "" 
     398 
     399#: pysvnmanager/templates/base.mako:33 
    268400msgid "Check permissions" 
    269401msgstr "" 
    270402 
    271 #: pysvnmanager/templates/base.mako:28 
     403#: pysvnmanager/templates/base.mako:34 
    272404msgid "Role management" 
    273405msgstr "" 
    274406 
    275 #: pysvnmanager/templates/base.mako:29 pysvnmanager/templates/authz/index.mako:5 
    276 #: pysvnmanager/templates/authz/index.mako:603 
     407#: pysvnmanager/templates/base.mako:35 pysvnmanager/templates/authz/index.mako:5 
     408#: pysvnmanager/templates/authz/index.mako:590 
    277409msgid "ACL management" 
    278410msgstr "" 
    279411 
    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 
     414msgid "Repos management" 
     415msgstr "" 
     416 
     417#: pysvnmanager/templates/base.mako:37 
     418msgid "Change log" 
     419msgstr "" 
     420 
     421#: pysvnmanager/templates/base.mako:39 
    285422msgid "Logout" 
    286423msgstr "" 
    287424 
    288 #: pysvnmanager/templates/authz/index.mako:165 
     425#: pysvnmanager/templates/authz/index.mako:158 
    289426msgid "User:" 
    290427msgstr "" 
    291428 
    292 #: pysvnmanager/templates/authz/index.mako:174 
     429#: pysvnmanager/templates/authz/index.mako:167 
    293430msgid "Readonly" 
    294431msgstr "" 
    295432 
    296 #: pysvnmanager/templates/authz/index.mako:178 
    297 #: pysvnmanager/templates/authz/index.mako:677 
     433#: pysvnmanager/templates/authz/index.mako:171 
     434#: pysvnmanager/templates/authz/index.mako:664 
    298435msgid "Full" 
    299436msgstr "" 
    300437 
    301 #: pysvnmanager/templates/authz/index.mako:182 
     438#: pysvnmanager/templates/authz/index.mako:175 
     439#: pysvnmanager/templates/authz/index.mako:665 
     440msgid "Denied" 
     441msgstr "" 
     442 
     443#: pysvnmanager/templates/authz/index.mako:373 
     444msgid "No rights selected! Please check proper rights for selected users." 
     445msgstr "" 
     446 
     447#: pysvnmanager/templates/authz/index.mako:384 
     448msgid "Unknown rights: " 
     449msgstr "" 
     450 
     451#: pysvnmanager/templates/authz/index.mako:472 
     452msgid "Please input module path." 
     453msgstr "" 
     454 
     455#: pysvnmanager/templates/authz/index.mako:478 
     456msgid "Please input repository name." 
     457msgstr "" 
     458 
     459#: pysvnmanager/templates/authz/index.mako:483 
     460msgid "Save failed." 
     461msgstr "" 
     462 
     463#: pysvnmanager/templates/authz/index.mako:503 
     464msgid "Update ACL failed:" 
     465msgstr "" 
     466 
     467#: pysvnmanager/templates/authz/index.mako:508 
     468msgid "Update ACL successfully." 
     469msgstr "" 
     470 
     471#: pysvnmanager/templates/authz/index.mako:529 
     472msgid "No path selected." 
     473msgstr "" 
     474 
     475#: pysvnmanager/templates/authz/index.mako:534 
     476msgid "Are you sure to delete module:" 
     477msgstr "" 
     478 
     479#: pysvnmanager/templates/authz/index.mako:536 
     480#: pysvnmanager/templates/role/index.mako:446 
     481#: pysvnmanager/templates/role/index.mako:531 
     482msgid "Click Ok to proceed, or click cancel" 
     483msgstr "" 
     484 
     485#: pysvnmanager/templates/authz/index.mako:557 
     486msgid "Can not delete module " 
     487msgstr "" 
     488 
     489#: pysvnmanager/templates/authz/index.mako:562 
     490msgid "Successfully delete module:" 
     491msgstr "" 
     492 
     493#: pysvnmanager/templates/authz/index.mako:597 
     494#: pysvnmanager/templates/repos/hooks.mako:195 
     495msgid "Repository:" 
     496msgstr "" 
     497 
     498#: pysvnmanager/templates/authz/index.mako:600 
     499msgid "New repository" 
     500msgstr "" 
     501 
     502#: pysvnmanager/templates/authz/index.mako:604 
     503msgid "Repository Name:" 
     504msgstr "" 
     505 
     506#: pysvnmanager/templates/authz/index.mako:609 
     507msgid "Administrators:" 
     508msgstr "" 
     509 
     510#: pysvnmanager/templates/authz/index.mako:621 
     511msgid "Module:" 
     512msgstr "" 
     513 
     514#: pysvnmanager/templates/authz/index.mako:624 
     515msgid "New module" 
     516msgstr "" 
     517 
     518#: pysvnmanager/templates/authz/index.mako:630 
     519msgid "Module Path:" 
     520msgstr "" 
     521 
     522#: pysvnmanager/templates/authz/index.mako:644 
     523msgid "ACL" 
     524msgstr "" 
     525 
     526#: pysvnmanager/templates/authz/index.mako:649 
     527msgid "Users" 
     528msgstr "" 
     529 
     530#: pysvnmanager/templates/authz/index.mako:663 
     531msgid "ReadOnly" 
     532msgstr "" 
     533 
    302534#: 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 
    398536msgid "Save" 
    399537msgstr "" 
    400538 
    401 #: pysvnmanager/templates/authz/index.mako:694 
    402 #: pysvnmanager/templates/role/index.mako:728 
     539#: pysvnmanager/templates/authz/index.mako:679 
     540#: pysvnmanager/templates/role/index.mako:712 
    403541msgid "Delete" 
    404542msgstr "" 
    405543 
    406 #: pysvnmanager/templates/authz/index.mako:695 
    407 #: pysvnmanager/templates/role/index.mako:729 
     544#: pysvnmanager/templates/authz/index.mako:680 
     545#: pysvnmanager/templates/role/index.mako:713 
    408546msgid "Cancel" 
    409547msgstr "" 
     
    486624 
    487625#: pysvnmanager/templates/logs/rollback.mako:14 
    488 #: pysvnmanager/templates/logs/view.mako:18 
     626#: pysvnmanager/templates/logs/view.mako:20 
    489627msgid "Close" 
    490628msgstr "" 
     
    498636msgstr "" 
    499637 
    500 #: pysvnmanager/templates/logs/view.mako:16 
     638#: pysvnmanager/templates/logs/view.mako:17 
    501639msgid "Rollback to this revision" 
    502640msgstr "" 
    503641 
     642#: pysvnmanager/templates/repos/create.mako:5 
     643#: pysvnmanager/templates/repos/create.mako:8 
     644#: pysvnmanager/templates/repos/create.mako:25 
     645msgid "Create repository" 
     646msgstr "" 
     647 
     648#: pysvnmanager/templates/repos/create.mako:22 
     649#: pysvnmanager/templates/repos/remove.mako:63 
     650msgid "Repository name:" 
     651msgstr "" 
     652 
     653#: pysvnmanager/templates/repos/hooks.mako:198 
     654msgid "Add repository" 
     655msgstr "" 
     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 
     661msgid "Remove repository" 
     662msgstr "" 
     663 
     664#: pysvnmanager/templates/repos/hooks.mako:204 
     665msgid "Uninstalled hooks:" 
     666msgstr "" 
     667 
     668#: pysvnmanager/templates/repos/hooks.mako:226 
     669msgid "Enable this hook" 
     670msgstr "" 
     671 
    504672#: pysvnmanager/templates/role/index.mako:5 
    505 #: pysvnmanager/templates/role/index.mako:638 
     673#: pysvnmanager/templates/role/index.mako:625 
    506674msgid "Role Management" 
    507675msgstr "" 
    508676 
    509 #: pysvnmanager/templates/role/index.mako:420 
     677#: pysvnmanager/templates/role/index.mako:418 
    510678msgid "Update group failed:" 
    511679msgstr "" 
    512680 
    513 #: pysvnmanager/templates/role/index.mako:427 
     681#: pysvnmanager/templates/role/index.mako:424 
    514682msgid "Update group successfully." 
    515683msgstr "" 
    516684 
    517 #: pysvnmanager/templates/role/index.mako:448 
     685#: pysvnmanager/templates/role/index.mako:444 
    518686msgid "Are you sure to delete group:" 
    519687msgstr "" 
    520688 
    521 #: pysvnmanager/templates/role/index.mako:471 
     689#: pysvnmanager/templates/role/index.mako:467 
    522690msgid "Delete group failed:" 
    523691msgstr "" 
    524692 
    525 #: pysvnmanager/templates/role/index.mako:478 
     693#: pysvnmanager/templates/role/index.mako:472 
    526694msgid "Delete group successfully." 
    527695msgstr "" 
    528696 
    529 #: pysvnmanager/templates/role/index.mako:512 
     697#: pysvnmanager/templates/role/index.mako:505 
    530698msgid "Update alias failed:" 
    531699msgstr "" 
    532700 
    533 #: pysvnmanager/templates/role/index.mako:519 
     701#: pysvnmanager/templates/role/index.mako:510 
    534702msgid "Update alias successfully." 
    535703msgstr "" 
    536704 
    537 #: pysvnmanager/templates/role/index.mako:539 
     705#: pysvnmanager/templates/role/index.mako:529 
    538706msgid "Are you sure to delete alias:" 
    539707msgstr "" 
    540708 
    541 #: pysvnmanager/templates/role/index.mako:562 
     709#: pysvnmanager/templates/role/index.mako:552 
    542710msgid "Delete alias failed:" 
    543711msgstr "" 
    544712 
    545 #: pysvnmanager/templates/role/index.mako:569 
     713#: pysvnmanager/templates/role/index.mako:557 
    546714msgid "Delete alias successfully." 
    547715msgstr "" 
    548716 
     717#: pysvnmanager/templates/role/index.mako:632 
     718msgid "Select a role name:" 
     719msgstr "" 
     720 
     721#: pysvnmanager/templates/role/index.mako:636 
     722msgid "New Group" 
     723msgstr "" 
     724 
     725#: pysvnmanager/templates/role/index.mako:637 
     726msgid "New Alias" 
     727msgstr "" 
     728 
     729#: pysvnmanager/templates/role/index.mako:641 
     730msgid "New group name:" 
     731msgstr "" 
     732 
    549733#: pysvnmanager/templates/role/index.mako:645 
    550 msgid "Select a role name:" 
    551 msgstr "" 
    552  
    553 #: pysvnmanager/templates/role/index.mako:649 
    554 msgid "New Group" 
    555 msgstr "" 
    556  
    557 #: pysvnmanager/templates/role/index.mako:650 
    558 msgid "New Alias" 
    559 msgstr "" 
    560  
    561 #: pysvnmanager/templates/role/index.mako:654 
    562 msgid "New group name:" 
    563 msgstr "" 
    564  
    565 #: pysvnmanager/templates/role/index.mako:658 
    566734msgid "New alias name:" 
    567735msgstr "" 
    568736 
    569 #: pysvnmanager/templates/role/index.mako:670 
     737#: pysvnmanager/templates/role/index.mako:657 
    570738msgid "Members list" 
    571739msgstr "" 
    572740 
    573 #: pysvnmanager/templates/role/index.mako:675 
     741#: pysvnmanager/templates/role/index.mako:662 
    574742msgid "Other users" 
    575743msgstr "" 
    576744 
    577 #: pysvnmanager/templates/role/index.mako:694 
     745#: pysvnmanager/templates/role/index.mako:681 
    578746msgid "Ignore recursive" 
    579747msgstr "" 
    580748 
    581 #: pysvnmanager/templates/role/index.mako:706 
     749#: pysvnmanager/templates/role/index.mako:693 
    582750msgid "User name:" 
    583751msgstr "" 
  • trunk/pysvnmanager/i18n/zh/LC_MESSAGES/pysvnmanager.po

    r38 r45  
    99msgid "" 
    1010msgstr "" 
    11 "Project-Id-Version:  pysvnmanager\n" 
     11"Project-Id-Version: pysvnmanager\n" 
    1212"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 
    1313"POT-Creation-Date: 2008-07-03 22:14+0800\n" 
    14 "PO-Revision-Date: 2008-07-31 09:21+0800\n" 
     14"PO-Revision-Date: 2008-08-27 00:07+0800\n" 
    1515"Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n" 
    16 "Language-Team: <zh@li.org>\n" 
     16"Language-Team:  <zh@li.org>\n" 
    1717"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION\n" 
    1818"MIME-Version: 1.0\n" 
    19 "Content-Type: text/plain; charset=utf-8\n" 
     19"Content-Type: text/plain; charset=UTF-8\n" 
    2020"Content-Transfer-Encoding: 8bit\n" 
    2121"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 
    2526#: pysvnmanager/templates/check/index.mako:10 
    2627msgid "All users(with anon)" 
    2728msgstr "所有用户(含匿名)" 
    2829 
    29 #: pysvnmanager/controllers/authz.py:30 
    30 #: pysvnmanager/templates/authz/index.mako:161 
     30#: pysvnmanager/controllers/authz.py:44 
     31#: pysvnmanager/templates/authz/index.mako:154 
    3132#: pysvnmanager/templates/check/index.mako:11 
    3233msgid "Known users" 
    3334msgstr "注册用户" 
    3435 
    35 #: pysvnmanager/controllers/authz.py:31 
    36 #: pysvnmanager/templates/authz/index.mako:163 
     36#: pysvnmanager/controllers/authz.py:45 
     37#: pysvnmanager/templates/authz/index.mako:156 
    3738#: pysvnmanager/templates/check/index.mako:12 
    3839msgid "Anonymous" 
    3940msgstr "匿名用户" 
    4041 
    41 #: pysvnmanager/controllers/authz.py:36 pysvnmanager/controllers/role.py:50 
     42#: pysvnmanager/controllers/authz.py:50 pysvnmanager/controllers/role.py:50 
    4243#: pysvnmanager/controllers/role.py:70 
    43 #: pysvnmanager/templates/authz/index.mako:155 
     44#: pysvnmanager/templates/authz/index.mako:148 
    4445#: pysvnmanager/templates/check/index.mako:17 
    4546#: pysvnmanager/templates/role/index.mako:18 
     
    5051msgstr "团队:" 
    5152 
    52 #: pysvnmanager/controllers/authz.py:39 pysvnmanager/controllers/role.py:55 
     53#: pysvnmanager/controllers/authz.py:53 pysvnmanager/controllers/role.py:55 
    5354#: pysvnmanager/controllers/role.py:72 
    54 #: pysvnmanager/templates/authz/index.mako:157 
     55#: pysvnmanager/templates/authz/index.mako:150 
    5556#: pysvnmanager/templates/check/index.mako:19 
    5657#: pysvnmanager/templates/role/index.mako:23 
     
    6162msgstr "别名:" 
    6263 
    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 
    6567#: pysvnmanager/templates/check/index.mako:9 
    6668#: pysvnmanager/templates/check/index.mako:23 
     
    7072msgstr "请选择..." 
    7173 
    72 #: pysvnmanager/controllers/authz.py:135 
     74#: pysvnmanager/controllers/authz.py:160 
    7375#, python-format 
    7476msgid "User %(user)s changed authz rules. (rev:%(rev)s)" 
    7577msgstr "用户 %(user)s 修改了授权策略。(rev:%(rev)s)" 
    7678 
    77 #: pysvnmanager/controllers/authz.py:144 
     79#: pysvnmanager/controllers/authz.py:173 
    7880#, python-format 
    7981msgid "Repository %s not exist." 
    8082msgstr "版本库 %s 不存在。" 
    8183 
    82 #: pysvnmanager/controllers/authz.py:152 
     84#: pysvnmanager/controllers/authz.py:181 
    8385#, python-format 
    8486msgid "Module %s not exist." 
    8587msgstr "模组 %s 不存在。" 
    8688 
    87 #: pysvnmanager/controllers/authz.py:158 
     89#: pysvnmanager/controllers/authz.py:187 
    8890msgid "You can not delete yourself from admin list." 
    8991msgstr "您不能将自己从管理员列表中删除。" 
    9092 
    91 #: pysvnmanager/controllers/authz.py:183 
     93#: pysvnmanager/controllers/authz.py:212 
    9294#, python-format 
    9395msgid "User %(user)s delete authz rules. (rev:%(rev)s)" 
    9496msgstr "用户 %(user)s 删除了授权策略。(rev:%(rev)s)" 
    9597 
    96 #: pysvnmanager/controllers/check.py:63 
     98#: pysvnmanager/controllers/check.py:69 
    9799#: pysvnmanager/templates/auth_failed.mako:3 
    98100msgid "Permission denied." 
     
    127129msgstr "版本间比较" 
    128130 
    129 #: pysvnmanager/controllers/logs.py:148 
     131#: pysvnmanager/controllers/logs.py:152 
    130132#, python-format 
    131133msgid "Rollback successfully to revision: %s" 
    132134msgstr "成功回滚至版本: %s" 
    133135 
    134 #: pysvnmanager/controllers/logs.py:157 
     136#: pysvnmanager/controllers/logs.py:161 
    135137#, python-format 
    136138msgid "Rollback failed: %s" 
    137139msgstr "回滚失败: %s" 
    138140 
     141#: pysvnmanager/controllers/repos.py:74 
     142msgid "Installed hooks:" 
     143msgstr "已安装插件:" 
     144 
     145#: pysvnmanager/controllers/repos.py:80 
     146msgid "Id" 
     147msgstr "Id" 
     148 
     149#: pysvnmanager/controllers/repos.py:81 
     150#: pysvnmanager/hooks/plugins/__init__.py:244 
     151msgid "Plugin name" 
     152msgstr "插件名称" 
     153 
     154#: pysvnmanager/controllers/repos.py:82 
     155#: pysvnmanager/hooks/plugins/__init__.py:245 
     156msgid "Type" 
     157msgstr "类型" 
     158 
     159#: pysvnmanager/controllers/repos.py:96 
     160msgid "Remove selected hooks" 
     161msgstr "删除选择的插件" 
     162 
     163#: pysvnmanager/controllers/repos.py:116 
     164#, python-format 
     165msgid "" 
     166"Apply plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 
     167"%(msg)s" 
     168msgstr "" 
     169"启用版本库'%(repos)s'的插件'%(plugin)s'失败。错误信息:<br>\n" 
     170"%(msg)s" 
     171 
     172#: pysvnmanager/controllers/repos.py:119 
     173#, python-format 
     174msgid "Apply plugin '%(plugin)s' on '%(repos)s' success." 
     175msgstr "成功启用版本库'%(repos)s'的插件'%(plugin)s'。 " 
     176 
     177#: pysvnmanager/controllers/repos.py:140 
     178#, python-format 
     179msgid "" 
     180"Delete plugin '%(plugin)s' on '%(repos)s' Failed. Error message:<br>\n" 
     181"%(msg)s" 
     182msgstr "" 
     183"删除版本库'%(repos)s'的插件'%(plugin)s'失败。错误信息:<br>\n" 
     184"%(msg)s" 
     185 
     186#: pysvnmanager/controllers/repos.py:143 
     187#, python-format 
     188msgid "Delete plugin '%(plugin)s' on '%(repos)s' success." 
     189msgstr "成功删除版本库'%(repos)s'的插件'%(plugin)s'。" 
     190 
     191#: pysvnmanager/controllers/repos.py:146 
     192#, python-format 
     193msgid "No plugin has been deleted for '%(repos)s'." 
     194msgstr "未删除版本库'%(repos)s'的插件。" 
     195 
     196#: pysvnmanager/controllers/repos.py:155 
     197#, python-format 
     198msgid "" 
     199"Create repository '%(repos)s' Failed. Error message:<br>\n" 
     200"%(msg)s" 
     201msgstr "" 
     202"创建版本库'%(repos)s'失败。错误信息:<br>\n" 
     203"%(msg)s" 
     204 
     205#: pysvnmanager/controllers/repos.py:158 
     206#, python-format 
     207msgid "Create repository '%(repos)s' success." 
     208msgstr "成功创建版本库'%(repos)s'。" 
     209 
     210#: pysvnmanager/controllers/repos.py:171 
     211#, python-format 
     212msgid "" 
     213"Delete repository '%(repos)s' Failed. Error message:<br>\n" 
     214"%(msg)s" 
     215msgstr "" 
     216"删除版本库'%(repos)s'失败。错误信息:<br>\n" 
     217"%(msg)s" 
     218 
     219#: pysvnmanager/controllers/repos.py:174 
     220#, python-format 
     221msgid "Delete blank repository '%(repos)s' success." 
     222msgstr "成功删除版本库'%(repos)s'。" 
     223 
    139224#: pysvnmanager/controllers/role.py:103 
    140225#, python-format 
     
    171256msgid "User %s logged out" 
    172257msgstr "用户 %s 登出" 
     258 
     259#: pysvnmanager/hooks/plugins/CaseInsensitive.py:10 
     260msgid "check case insensitive" 
     261msgstr "大小写不敏感" 
     262 
     263#: pysvnmanager/hooks/plugins/CaseInsensitive.py:13 
     264msgid "A pre-commit hook to detect case-insensitive filename clashes." 
     265msgstr "在 pre-commit 钩子中执行,检查文件名大小写引起的文件名冲突。" 
     266 
     267#: pysvnmanager/hooks/plugins/EolStyleCheck.py:10 
     268msgid "mime-type and eol-style check" 
     269msgstr "文件类型和换行符设置检查" 
     270 
     271#: pysvnmanager/hooks/plugins/EolStyleCheck.py:13 
     272msgid "New file must provide svn:eol-style if not binary file." 
     273msgstr "新增的文本文件,必须设置换行符。" 
     274 
     275#: pysvnmanager/hooks/plugins/__init__.py:84 
     276#, python-format 
     277msgid "repos '%s' not exist!" 
     278msgstr "版本库 %s 不存在!" 
     279 
     280#: pysvnmanager/hooks/plugins/__init__.py:133 
     281#, python-format 
     282msgid "Conflict: plugin '%s' is modified by others." 
     283msgstr "冲突:插件'%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 
     291msgid "Plugin not fully implemented." 
     292msgstr "插件未完全实现。" 
     293 
     294#: pysvnmanager/hooks/plugins/__init__.py:246 
     295msgid "Description" 
     296msgstr "描述" 
     297 
     298#: pysvnmanager/model/repos.py:39 
     299#, python-format 
     300msgid "Repos root does not exist: %s" 
     301msgstr "版本库根不存在:%s" 
     302 
     303#: pysvnmanager/model/repos.py:68 
     304#, python-format 
     305msgid "Repos %s already exists." 
     306msgstr "版本库 %s 已经存在。" 
     307 
     308#: pysvnmanager/model/repos.py:137 
     309#, python-format 
     310msgid "Repos %s is not a blank repository." 
     311msgstr "版本库 %s 不是一个空的版本库。" 
    173312 
    174313#: pysvnmanager/model/svnauthz.py:61 
     
    225364msgstr "%s 在 [%s] 中被引用。" 
    226365 
    227 #: pysvnmanager/model/svnauthz.py:1770 
     366#: pysvnmanager/model/svnauthz.py:1769 
    228367#, python-format 
    229368msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 
    230369msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有完全权限 (RW)" 
    231370 
    232 #: pysvnmanager/model/svnauthz.py:1772 
     371#: pysvnmanager/model/svnauthz.py:1771 
    233372#, python-format 
    234373msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 
    235374msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有只读权限 (RO)" 
    236375 
    237 #: pysvnmanager/model/svnauthz.py:1774 
     376#: pysvnmanager/model/svnauthz.py:1773 
    238377#, python-format 
    239378msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 
    240379msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 没有访问权限 (XX)" 
    241380 
    242 #: pysvnmanager/model/svnauthz.py:1812 
     381#: pysvnmanager/model/svnauthz.py:1813 
    243382#, python-format 
    244383msgid "" 
     
    259398"\n" 
    260399 
    261 #: pysvnmanager/model/svnauthz.py:1831 
     400#: pysvnmanager/model/svnauthz.py:1832 
    262401#, python-format 
    263402msgid "" 
     
    290429"%(sep)s\n" 
    291430 
    292 #: pysvnmanager/templates/base.mako:11 
     431#: pysvnmanager/templates/base.mako:12 
    293432msgid "Loading, please wait..." 
    294433msgstr "数据加载中,请稍后..." 
    295434 
    296 #: pysvnmanager/templates/base.mako:27 
     435#: pysvnmanager/templates/base.mako:19 
     436msgid "Clear message" 
     437msgstr "清除消息" 
     438 
     439#: pysvnmanager/templates/base.mako:33 
    297440msgid "Check permissions" 
    298441msgstr "权限检查" 
    299442 
    300 #: pysvnmanager/templates/base.mako:28 
     443#: pysvnmanager/templates/base.mako:34 
    301444msgid "Role management" 
    302445msgstr "角色管理" 
    303446 
    304 #: pysvnmanager/templates/base.mako:29 
     447#: pysvnmanager/templates/base.mako:35 
    305448#: pysvnmanager/templates/authz/index.mako:5 
    306 #: pysvnmanager/templates/authz/index.mako:603 
     449#: pysvnmanager/templates/authz/index.mako:590 
    307450msgid "ACL management" 
    308451msgstr "权限控制" 
    309452 
    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 
     456msgid "Repos management" 
     457msgstr "版本库管理" 
     458 
     459#: pysvnmanager/templates/base.mako:37 
     460msgid "Change log" 
     461msgstr "修改日志" 
     462 
     463#: pysvnmanager/templates/base.mako:39 
    315464msgid "Logout" 
    316465msgstr "登出" 
    317466 
    318 #: pysvnmanager/templates/authz/index.mako:165 
     467#: pysvnmanager/templates/authz/index.mako:158 
    319468msgid "User:" 
    320469msgstr "用户:" 
    321470 
    322 #: pysvnmanager/templates/authz/index.mako:174 
     471#: pysvnmanager/templates/authz/index.mako:167 
    323472msgid "Readonly" 
    324473msgstr "只读" 
    325474 
    326 #: pysvnmanager/templates/authz/index.mako:178 
    327 #: pysvnmanager/templates/authz/index.mako:677 
     475#: pysvnmanager/templates/authz/index.mako:171 
     476#: pysvnmanager/templates/authz/index.mako:664 
    328477msgid "Full" 
    329478msgstr "完全权限" 
    330479 
    331 #: pysvnmanager/templates/authz/index.mako:182 
    332 #: pysvnmanager/templates/authz/index.mako:678 
     480#: pysvnmanager/templates/authz/index.mako:175 
     481#: pysvnmanager/templates/authz/index.mako:665 
    333482msgid "Denied" 
    334483msgstr "禁用" 
    335484 
    336 #: pysvnmanager/templates/authz/index.mako:380 
     485#: pysvnmanager/templates/authz/index.mako:373 
    337486msgid "No rights selected! Please check proper rights for selected users." 
    338487msgstr "未选择权限!请为用户选择合适的权限。" 
    339488 
    340 #: pysvnmanager/templates/authz/index.mako:391 
     489#: pysvnmanager/templates/authz/index.mako:384 
    341490msgid "Unknown rights: " 
    342491msgstr "未知权限: " 
    343492 
    344 #: pysvnmanager/templates/authz/index.mako:479 
     493#: pysvnmanager/templates/authz/index.mako:472 
    345494msgid "Please input module path." 
    346495msgstr "请输入模组路径。" 
    347496 
    348 #: pysvnmanager/templates/authz/index.mako:485 
     497#: pysvnmanager/templates/authz/index.mako:478 
    349498msgid "Please input repository name." 
    350499msgstr "请输入版本库名称。" 
    351500 
    352 #: pysvnmanager/templates/authz/index.mako:490 
     501#: pysvnmanager/templates/authz/index.mako:483 
    353502msgid "Save failed." 
    354503msgstr "保存失败。" 
    355504 
    356 #: pysvnmanager/templates/authz/index.mako:510 
     505#: pysvnmanager/templates/authz/index.mako:503 
    357506msgid "Update ACL failed:" 
    358507msgstr "更新ACL失败:" 
    359508 
    360 #: pysvnmanager/templates/authz/index.mako:517 
     509#: pysvnmanager/templates/authz/index.mako:508 
    361510msgid "Update ACL successfully." 
    362511msgstr "成功更新ACL。" 
    363512 
    364 #: pysvnmanager/templates/authz/index.mako:539 
     513#: pysvnmanager/templates/authz/index.mako:529 
    365514msgid "No path selected." 
    366515msgstr "未选择路径。" 
    367516 
    368 #: pysvnmanager/templates/authz/index.mako:544 
     517#: pysvnmanager/templates/authz/index.mako:534 
    369518msgid "Are you sure to delete module:" 
    370519msgstr "您确认要删除模组:" 
    371520 
    372 #: pysvnmanager/templates/authz/index.mako:546 
    373 #: pysvnmanager/templates/role/index.mako:450 
    374 #: pysvnmanager/templates/role/index.mako:541 
     521#: pysvnmanager/templates/authz/index.mako:536 
     522#: pysvnmanager/templates/role/index.mako:446 
     523#: pysvnmanager/templates/role/index.mako:531 
    375524msgid "Click Ok to proceed, or click cancel" 
    376525msgstr "点击 OK 继续,或者点击取消" 
    377526 
    378 #: pysvnmanager/templates/authz/index.mako:567 
     527#: pysvnmanager/templates/authz/index.mako:557 
    379528msgid "Can not delete module " 
    380529msgstr "无法删除模组 " 
    381530 
    382 #: pysvnmanager/templates/authz/index.mako:574 
     531#: pysvnmanager/templates/authz/index.mako:562 
    383532msgid "Successfully delete module:" 
    384533msgstr "成功删除模组:" 
    385534 
    386 #: pysvnmanager/templates/authz/index.mako:610 
     535#: pysvnmanager/templates/authz/index.mako:597 
     536#: pysvnmanager/templates/repos/hooks.mako:195 
    387537msgid "Repository:" 
    388538msgstr "版本库:" 
    389539 
    390 #: pysvnmanager/templates/authz/index.mako:613 
     540#: pysvnmanager/templates/authz/index.mako:600 
    391541msgid "New repository" 
    392542msgstr "新版本库" 
    393543 
    394 #: pysvnmanager/templates/authz/index.mako:617 
     544#: pysvnmanager/templates/authz/index.mako:604 
    395545msgid "Repository Name:" 
    396546msgstr "版本库名称:" 
    397547 
    398 #: pysvnmanager/templates/authz/index.mako:622 
     548#: pysvnmanager/templates/authz/index.mako:609 
    399549msgid "Administrators:" 
    400550msgstr "管理员:" 
    401551 
    402 #: pysvnmanager/templates/authz/index.mako:634 
     552#: pysvnmanager/templates/authz/index.mako:621 
    403553msgid "Module:" 
    404554msgstr "模组:" 
    405555 
    406 #: pysvnmanager/templates/authz/index.mako:637 
     556#: pysvnmanager/templates/authz/index.mako:624 
    407557msgid "New module" 
    408558msgstr "新模组" 
    409559 
    410 #: pysvnmanager/templates/authz/index.mako:643 
     560#: pysvnmanager/templates/authz/index.mako:630 
    411561msgid "Module Path:" 
    412562msgstr "模组路径:" 
    413563 
    414 #: pysvnmanager/templates/authz/index.mako:657 
     564#: pysvnmanager/templates/authz/index.mako:644 
    415565msgid "ACL" 
    416566msgstr "ACL" 
    417567 
    418 #: pysvnmanager/templates/authz/index.mako:662 
     568#: pysvnmanager/templates/authz/index.mako:649 
    419569msgid "Users" 
    420570msgstr "用户" 
    421571 
    422 #: pysvnmanager/templates/authz/index.mako:676 
     572#: pysvnmanager/templates/authz/index.mako:663 
    423573msgid "ReadOnly" 
    424574msgstr "只读" 
    425575 
    426 #: pysvnmanager/templates/authz/index.mako:693 
    427 #: pysvnmanager/templates/role/index.mako:727 
     576#: pysvnmanager/templates/authz/index.mako:678 
     577#: pysvnmanager/templates/role/index.mako:711 
    428578msgid "Save" 
    429579msgstr "保存" 
    430580 
    431 #: pysvnmanager/templates/authz/index.mako:694 
    432 #: pysvnmanager/templates/role/index.mako:728 
     581#: pysvnmanager/templates/authz/index.mako:679 
     582#: pysvnmanager/templates/role/index.mako:712 
    433583msgid "Delete" 
    434584msgstr "删除" 
    435585 
    436 #: pysvnmanager/templates/authz/index.mako:695 
    437 #: pysvnmanager/templates/role/index.mako:729 
     586#: pysvnmanager/templates/authz/index.mako:680 
     587#: pysvnmanager/templates/role/index.mako:713 
    438588msgid "Cancel" 
    439589msgstr "取消" 
     
    516666 
    517667#: pysvnmanager/templates/logs/rollback.mako:14 
    518 #: pysvnmanager/templates/logs/view.mako:18 
     668#: pysvnmanager/templates/logs/view.mako:20 
    519669msgid "Close" 
    520670msgstr "关闭" 
     
    528678msgstr "你确认回滚文件至此版本么?" 
    529679 
    530 #: pysvnmanager/templates/logs/view.mako:16 
     680#: pysvnmanager/templates/logs/view.mako:17 
    531681msgid "Rollback to this revision" 
    532682msgstr "回滚至此版本" 
    533683 
     684#: pysvnmanager/templates/repos/create.mako:5 
     685#: pysvnmanager/templates/repos/create.mako:8 
     686#: pysvnmanager/templates/repos/create.mako:25 
     687msgid "Create repository" 
     688msgstr "创建版本库" 
     689 
     690#: pysvnmanager/templates/repos/create.mako:22 
     691#: pysvnmanager/templates/repos/remove.mako:63 
     692msgid "Repository name:" 
     693msgstr "版本库名称:" 
     694 
     695#: pysvnmanager/templates/repos/hooks.mako:198 
     696msgid "Add repository" 
     697msgstr "添加版本库" 
     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 
     703msgid "Remove repository" 
     704msgstr "删除版本库" 
     705 
     706#: pysvnmanager/templates/repos/hooks.mako:204 
     707msgid "Uninstalled hooks:" 
     708msgstr "尚未安装的插件:" 
     709 
     710#: pysvnmanager/templates/repos/hooks.mako:226 
     711msgid "Enable this hook" 
     712msgstr "启用此插件" 
     713 
    534714#: pysvnmanager/templates/role/index.mako:5 
    535 #: pysvnmanager/templates/role/index.mako:638 
     715#: pysvnmanager/templates/role/index.mako:625 
    536716msgid "Role Management" 
    537717msgstr "角色管理" 
    538718 
    539 #: pysvnmanager/templates/role/index.mako:420 
     719#: pysvnmanager/templates/role/index.mako:418 
    540720msgid "Update group failed:" 
    541721msgstr "更新用户组失败:" 
    542722 
    543 #: pysvnmanager/templates/role/index.mako:427 
     723#: pysvnmanager/templates/role/index.mako:424 
    544724msgid "Update group successfully." 
    545725msgstr "成功更新用户组。" 
    546726 
    547 #: pysvnmanager/templates/role/index.mako:448 
     727#: pysvnmanager/templates/role/index.mako:444 
    548728msgid "Are you sure to delete group:" 
    549729msgstr "您确认要删除用户组:" 
    550730 
    551 #: pysvnmanager/templates/role/index.mako:471 
     731#: pysvnmanager/templates/role/index.mako:467 
    552732msgid "Delete group failed:" 
    553733msgstr "更新用户组失败:" 
    554734 
    555 #: pysvnmanager/templates/role/index.mako:478 
     735#: pysvnmanager/templates/role/index.mako:472 
    556736msgid "Delete group successfully." 
    557737msgstr "成功删除用户组。" 
    558738 
    559 #: pysvnmanager/templates/role/index.mako:512 
     739#: pysvnmanager/templates/role/index.mako:505 
    560740msgid "Update alias failed:" 
    561741msgstr "更新别名失败:" 
    562742 
    563 #: pysvnmanager/templates/role/index.mako:519 
     743#: pysvnmanager/templates/role/index.mako:510 
    564744msgid "Update alias successfully." 
    565745msgstr "成功更新别名。" 
    566746 
    567 #: pysvnmanager/templates/role/index.mako:539 
     747#: pysvnmanager/templates/role/index.mako:529 
    568748msgid "Are you sure to delete alias:" 
    569749msgstr "您确认要删除别名:" 
    570750 
    571 #: pysvnmanager/templates/role/index.mako:562 
     751#: pysvnmanager/templates/role/index.mako:552 
    572752msgid "Delete alias failed:" 
    573753msgstr "删除别名失败:" 
    574754 
    575 #: pysvnmanager/templates/role/index.mako:569 
     755#: pysvnmanager/templates/role/index.mako:557 
    576756msgid "Delete alias successfully." 
    577757msgstr "成功删除别名。" 
    578758 
    579 #: pysvnmanager/templates/role/index.mako:645 
     759#: pysvnmanager/templates/role/index.mako:632 
    580760msgid "Select a role name:" 
    581761msgstr "选择一个角色:" 
    582762 
    583 #: pysvnmanager/templates/role/index.mako:649 
     763#: pysvnmanager/templates/role/index.mako:636 
    584764msgid "New Group" 
    585765msgstr "新用户组" 
    586766 
    587 #: pysvnmanager/templates/role/index.mako:650 
     767#: pysvnmanager/templates/role/index.mako:637 
    588768msgid "New Alias" 
    589769msgstr "新别名" 
    590770 
    591 #: pysvnmanager/templates/role/index.mako:654 
     771#: pysvnmanager/templates/role/index.mako:641 
    592772msgid "New group name:" 
    593773msgstr "新用户组名称:" 
    594774 
    595 #: pysvnmanager/templates/role/index.mako:658 
     775#: pysvnmanager/templates/role/index.mako:645 
    596776msgid "New alias name:" 
    597777msgstr "新别名名称:" 
    598778 
    599 #: pysvnmanager/templates/role/index.mako:670 
     779#: pysvnmanager/templates/role/index.mako:657 
    600780msgid "Members list" 
    601781msgstr "成员列表" 
    602782 
    603 #: pysvnmanager/templates/role/index.mako:675 
     783#: pysvnmanager/templates/role/index.mako:662 
    604784msgid "Other users" 
    605785msgstr "其他用户" 
    606786 
    607 #: pysvnmanager/templates/role/index.mako:694 
     787#: pysvnmanager/templates/role/index.mako:681 
    608788msgid "Ignore recursive" 
    609789msgstr "忽略组间循环引用" 
    610790 
    611 #: pysvnmanager/templates/role/index.mako:706 
     791#: pysvnmanager/templates/role/index.mako:693 
    612792msgid "User name:" 
    613793msgstr "用户名:" 
  • trunk/pysvnmanager/model/hooks.py

    r43 r45  
    5151        result={} 
    5252        for k,v in self.plugins.iteritems(): 
    53             if v.is_set(): 
     53            if v.enabled(): 
    5454                result[k]=v 
    5555        return result 
     
    6060        result={} 
    6161        for k,v in self.plugins.iteritems(): 
    62             if not v.is_set(): 
     62            if not v.enabled(): 
    6363                result[k]=v 
    6464        return result 
  • trunk/pysvnmanager/model/repos.py

    r44 r45  
    5555                self.__repos_list.append(i) 
    5656 
     57        self.__repos_list = sorted(self.__repos_list) 
    5758        return self.__repos_list 
    5859 
     
    109110                os.path.exists("%s/hooks" % repos_path): 
    110111                return True 
     112        log.info("'%(entry)s' is not svn repository below %(root)s" % { "root": self.repos_root, "entry": repos_name} ) 
    111113        return False 
    112114     
  • trunk/pysvnmanager/model/svnauthz.py

    r24 r45  
    15371537                if self.is_admin(username, i): 
    15381538                    repos_list.append(i.name) 
    1539         return repos_list 
     1539        return sorted(repos_list) 
    15401540         
    15411541    def del_rule(self, reposname, path, rule): 
     
    17451745        if not user: 
    17461746            user = '*' 
    1747  
    17481747        if reposname: 
    17491748            reposname = normalize_repos(reposname) 
     
    17921791        if isinstance(reposname, (list, tuple)): 
    17931792            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)) 
    17951796                if map: 
    17961797                    map['user'] = unicode(user) 
  • trunk/pysvnmanager/templates/authz/index.mako

    r43 r45  
    502502        { 
    503503                message = '${_("Update ACL failed:")}' + message; 
    504                 set_message_box(message); 
     504                error_msg(message); 
    505505        } 
    506506        else 
    507507        { 
    508508                message = '${_("Update ACL successfully.")}'; 
    509                 set_message_box(message); 
     509                info_msg(message); 
    510510                if (document.main_form.repos_list.value == reposname) 
    511511                { 
     
    556556        { 
    557557                message = '${_("Can not delete module ")}' + reposname + ':' + path + ' : ' + message; 
    558                 set_message_box(message); 
     558                error_msg(message); 
    559559        } 
    560560        else 
    561561        { 
    562562                message = '${_("Successfully delete module:")}' + reposname + ':' + path; 
    563                 set_message_box(message); 
     563                info_msg(message); 
    564564                repos_changed(); 
    565565        } 
     
    633633<!-- end: path_input box --> 
    634634 
    635 <table> 
     635<table class="hidden"> 
    636636<tr> 
    637637<td> 
     
    639639<!-- begin: authz box --> 
    640640<DIV id='authz_box' style="position:relative;" class=gainlayout style="visibility:hidden;"> 
    641 <table width='100%'> 
     641<table width='100%' class="hidden"> 
    642642<tr> 
    643643  <th align='center'> 
     
    672672<!-- begin: action box --> 
    673673<DIV id='action_box' class=gainlayout style="visibility:hidden;"> 
    674 <table width='100%'> 
     674<table width='100%' class="hidden"> 
    675675<tr> 
    676676  <td align='center'> 
  • trunk/pysvnmanager/templates/base.mako

    r43 r45  
    44    ${self.head_tags()} 
    55    ${self.ajax_script()} 
     6    ${h.stylesheet_link_tag('/css/common', media='all')} 
    67  </head> 
    78  <body ${self.body_params()}> 
     
    1415        ${self.nav_bar()} 
    1516 
    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  &nbsp;&nbsp;&nbsp;&nbsp;<a class="clear-link" href="#" onClick="document.getElementById('message').innerHTML='';switch_message_box()">${_("Clear message")}</a> 
    1920  </div> 
    2021         
     
    3435          <td>${h.link_to(_("ACL management"), h.url(controller="authz", id=None))}</td> 
    3536          <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> 
    3738          <td>welcome ${session.get('user')}</td> 
    3839          <td>${h.link_to(_("Logout"), h.url(controller="logout", id=None))}</td> 
     
    115116} 
    116117 
     118function warn_msg(message) 
     119{ 
     120        set_message_box("<div class='warning'>"+message+"<div>"); 
     121} 
     122 
     123function error_msg(message) 
     124{ 
     125        set_message_box("<div class='error'>"+message+"<div>"); 
     126} 
     127 
     128function info_msg(message) 
     129{ 
     130        set_message_box("<div class='info'>"+message+"<div>"); 
     131} 
     132 
    117133function set_message_box(message) 
    118134{ 
  • trunk/pysvnmanager/templates/check/index.mako

    r43 r45  
    122122%> 
    123123 
    124 <table> 
     124<table class="hidden"> 
    125125<tr> 
    126126    <th>${_("Account")}</th> 
  • trunk/pysvnmanager/templates/repos/hooks.mako

    r44 r45  
    128128        } 
    129129         
    130         path_changed(); 
     130        select_unset_hook_list(); 
    131131} 
    132132 
     
    198198${h.link_to(_("Add repository"), h.url(action="create"))} 
    199199${h.link_to(_("Remove repository"), h.url(action="remove"))} 
    200 ##<a href="#" onclick='#'>[+${_("Add repository")}]</a> 
    201 ##<a href="#" onclick='#'>[-${_("Remove repository")}]</a> 
    202200</DIV> 
    203201 
    204202<DIV id="new_hook_list_box" class=gainlayout style="visibility:hidden;position:absolute"> 
    205 ${_("Available hooks:")} 
     203<hr> 
     204${_("Uninstalled hooks:")} 
    206205    <select name="unset_plugin_list" size="1" onChange='select_unset_hook_list()'> 
    207206    </select> 
  • trunk/pysvnmanager/templates/role/index.mako

    r43 r45  
    418418                message = '${_("Update group failed:")}' + message; 
    419419                alert(message); 
    420                 set_message_box(message); 
     420                error_msg(message); 
    421421        } 
    422422        else 
    423423        { 
    424424                message = '${_("Update group successfully.")}'; 
    425                 set_message_box(message); 
     425                info_msg(message); 
    426426                if (document.main_form.role_list.value == rolename) 
    427427                { 
     
    466466        { 
    467467                message = '${_("Delete group failed:")}' + message; 
    468                 set_message_box(message); 
     468                error_msg(message); 
    469469        } 
    470470        else 
    471471        { 
    472472                message = '${_("Delete group successfully.")}'; 
    473                 set_message_box(message); 
     473                info_msg(message); 
    474474                reset_main_form(); 
    475475        } 
     
    504504        { 
    505505                message = '${_("Update alias failed:")}' + message; 
    506                 set_message_box(message); 
     506                error_msg(message); 
    507507        } 
    508508        else 
    509509        { 
    510510                message = '${_("Update alias successfully.")}'; 
    511                 set_message_box(message); 
     511                info_msg(message); 
    512512                if (document.main_form.role_list.value == aliasname) 
    513513                { 
     
    551551        { 
    552552                message = '${_("Delete alias failed:")}' + message; 
    553                 set_message_box(message); 
     553                error_msg(message); 
    554554        } 
    555555        else 
    556556        { 
    557557                message = '${_("Delete alias successfully.")}'; 
    558                 set_message_box(message); 
     558                info_msg(message); 
    559559                reset_main_form(); 
    560560        } 
  • trunk/pysvnmanager/tests/functional/test_authz.py

    r36 r45  
    2121        res = self.app.get(url_for(controller='authz')) 
    2222        assert res.status == 200 
    23         assert res.c.reposlist == [u'repos1', u'repos2'], res.c.reposlist 
     23        assert ','.join(sorted(res.c.reposlist)) == 'repos1,repos2', res.c.reposlist 
    2424        assert """<input type="button" name="save_btn"   value='Save'""" in res.body, res.body 
    2525 
     
    2828        res = self.app.get(url_for(controller='authz')) 
    2929        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 
    3131        assert """<input type="button" name="save_btn"   value='Save'""" in res.body, res.body 
    3232 
     
    4949        assert """id[0]="...";name[0]="Please choose..."; 
    5050id[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; 
     51id[2]="repos3";name[2]="repos3"; 
     52id[3]="document";name[3]="document (?)"; 
     53id[4]="repos1";name[4]="repos1 (?)"; 
     54id[5]="repos2";name[5]="repos2 (?)"; 
     55id[6]="project1";name[6]="project1 (!)"; 
     56id[7]="project2";name[7]="project2 (!)"; 
     57total=8; 
    5658revision="0.2.1"; 
    5759""" == res.body, res.body 
     
    297299            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    298300            assert res.status == 200 
    299             assert "Repository reposX not exist." == res.body, res.body 
     301            assert "Module /trunk/src not exist." == res.body, res.body 
    300302        finally: 
    301303            self.rollback() 
  • trunk/pysvnmanager/tests/functional/test_check.py

    r36 r45  
    3232        res = self.app.get(url_for(controller='check')) 
    3333        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 
    3636 
    3737 
  • trunk/pysvnmanager/tests/functional/test_repos.py

    r43 r45  
     1## -*- coding: utf-8 -*- 
     2 
    13from pysvnmanager.tests import * 
    24 
     
    46 
    57    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..."; 
     38id[1]="project1";name[1]="project1"; 
     39id[2]="project2";name[2]="project2"; 
     40id[3]="repos3";name[3]="repos3"; 
     41total=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  
    1212from pysvnmanager.hooks import plugins 
    1313 
     14from pysvnmanager.lib.base import * 
     15 
    1416import StringIO 
    1517from pprint import pprint 
     
    1820     
    1921    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 
    2124        self.repos = repos.Repos(self.repos_root) 
    2225        super(TestRepos, self).__init__(*args) 
     
    3134     
    3235    def testReposCreate(self): 
    33         self.assertRaises(Exception, self.repos.create, 'repos1') 
     36        self.assertRaises(Exception, self.repos.create, 'repos3') 
    3437        self.repos.delete('repos3') 
    3538        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) 
    3740 
    3841    def testReposDelete(self): 
    39         self.assertRaises(Exception, self.repos.delete, 'repos1') 
     42        self.assertRaises(Exception, self.repos.delete, 'project1') 
    4043     
    4144    def testReposRoot(self): 
     
    4447 
    4548    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')) 
    4750 
    4851    def testSvnVersion(self): 
     
    5457     
    5558    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 
    5761        super(TestReposPlugin, self).__init__(*args) 
    5862 
     
    7074    def testPluginImport(self): 
    7175        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') 
    7377        self.assert_(module_ci.name=="check case insensitive", module_ci.name) 
    7478        self.assert_(module_ci.description!="", module_ci.description) 
    7579       
    7680    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) 
    8387       
    8488    def testHooks(self): 
     
    8690        self.assertRaises(AssertionError, hooks.Hooks, self.repos_root) 
    8791         
    88         myhooks = hooks.Hooks(self.repos_root + '/repos1') 
     92        myhooks = hooks.Hooks(self.repos_root + '/project1') 
    8993        self.assert_(myhooks.pluginnames==['CaseInsensitive', 'EolStyleCheck'], myhooks.pluginnames) 
    9094        self.assert_(myhooks.unapplied_plugins.keys()==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins.keys()) 
     
    9599     
    96100    def testHooksSetting(self): 
    97         myhooks = hooks.Hooks(self.repos_root + '/repos1') 
     101        myhooks = hooks.Hooks(self.repos_root + '/project1') 
    98102 
    99103        m = myhooks.plugins['CaseInsensitive'] 
    100         self.assert_(m.is_set()==False) 
     104        self.assert_(m.enabled()==False) 
    101105        self.assert_(myhooks.applied_plugins.keys()==[], myhooks.applied_plugins.keys()) 
    102106        self.assert_(myhooks.unapplied_plugins.keys()==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins.keys()) 
    103107 
    104         m.set_plugin() 
    105         self.assert_(m.is_set()==True) 
     108        m.install() 
     109        self.assert_(m.enabled()==True) 
    106110        self.assert_(myhooks.applied_plugins.keys()==['CaseInsensitive'], myhooks.applied_plugins.keys()) 
    107111        self.assert_(myhooks.unapplied_plugins.keys()==['EolStyleCheck'], myhooks.unapplied_plugins.keys()) 
    108112 
    109         m.delete_plugin() 
    110         self.assert_(m.is_set()==False) 
     113        m.uninstall() 
     114        self.assert_(m.enabled()==False) 
    111115        self.assert_(myhooks.applied_plugins.keys()==[], myhooks.applied_plugins.keys()) 
    112116        self.assert_(myhooks.unapplied_plugins.keys()==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins.keys()) 
  • trunk/test.ini

    r23 r45  
    5555authz_file = %(here)s/config/svn.access.test 
    5656 
     57# svn repository root path 
     58repos_root = %(here)s/svnroot.test 
     59 
    5760# Logging configuration 
    5861[loggers]