Changeset 42
- Timestamp:
- 2008年08月25日 18时22分44秒 (4 years ago)
- Location:
- trunk/pysvnmanager
- Files:
-
- 9 added
- 2 modified
-
hooks (added)
-
hooks/__init__.py (added)
-
hooks/init (added)
-
hooks/init/__init__.py (added)
-
hooks/plugins (added)
-
hooks/plugins/CaseInsensitive.py (added)
-
hooks/plugins/EolStyleCheck.py (added)
-
hooks/plugins/__init__.py (added)
-
model/hooks.py (added)
-
model/repos.py (modified) (4 diffs)
-
tests/test_repos.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pysvnmanager/model/repos.py
r41 r42 2 2 # -*- coding: utf-8 -*- 3 3 4 """Subversion authz config filemanagement.4 """Subversion repos management. 5 5 6 Basic classes used for Subversion authz management.6 Basic classes used for Subversion repository add/remove. 7 7 """ 8 8 … … 14 14 log = logging.getLogger(__name__) 15 15 16 from pylons import config 17 config_path = config["here"] + '/config' 18 if config_path not in sys.path: 19 sys.path.insert(0, config_path) 20 from localconfig import LocalConfig as cfg 21 22 sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) 23 from pysvnmanager import hooks 24 16 25 # i18n works only as pysvnmanager (a pylons app) model. 17 from pylons import config18 26 if config.get('package') and not config.has_key('unittest'): 19 27 from pylons.i18n import _ … … 60 68 61 69 def hooks_init(self, repos_name): 62 version = self.svnversion() 63 repos_path = "%(root)s/%(entry)s" % { "root": self.repos_root, "entry": repos_name} 70 import distutils.version as dv 71 version = '.'.join(self.svnversion()) 72 matched = 'default' 73 for ver in sorted(hooks.init.svn_hooks_init_dict.keys(), 74 cmp = lambda x,y: cmp(dv.LooseVersion(x), dv.LooseVersion(y)), 75 reverse=True): 76 if dv.LooseVersion(version) >= dv.LooseVersion(ver): 77 matched = ver 78 break 79 80 #log.debug('Hooks version matched: %s' % matched) 81 #log.debug('svn_hooks_init_base: %s' % hooks.init.svn_hooks_init_base) 82 83 # copy hook-scripts from matched hooks templates directory. 84 src = hooks.init.svn_hooks_init_base + '/' + hooks.init.svn_hooks_init_dict[matched] 85 dest = "%(root)s/%(entry)s/hooks" % { "root": self.repos_root, "entry": repos_name} 86 87 log.debug('Now copy hooks from \n\t%s to \n\t%s' % (src, dest)) 88 import shutil 89 shutil.rmtree(dest) 90 shutil.copytree(src, dest, symlinks=True) 91 64 92 65 93 def svnversion(self): … … 94 122 95 123 def delete(self, repos_name): 96 if self.is_blank_svn_repos(repos_name): 97 repos_path = "%(root)s/%(entry)s" % { "root": self.repos_root, "entry": repos_name} 98 from svn import repos as _repos 99 _repos.delete(repos_path) 100 else: 101 raise Exception, _("Repos %s is not a blank repository.") % repos_name 124 repos_path = "%(root)s/%(entry)s" % { "root": self.repos_root, "entry": repos_name} 125 if os.path.exists(repos_path): 126 if self.is_blank_svn_repos(repos_name): 127 from svn import repos as _repos 128 _repos.delete(repos_path) 129 else: 130 raise Exception, _("Repos %s is not a blank repository.") % repos_name 102 131 103 132 -
trunk/pysvnmanager/tests/test_repos.py
r41 r42 9 9 from pysvnmanager import model 10 10 from pysvnmanager.model import repos 11 from pysvnmanager.model import hooks 12 from pysvnmanager.hooks import plugins 13 11 14 import StringIO 12 15 from pprint import pprint … … 15 18 16 19 def __init__(self, *args): 17 repos_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + '/svnroot'18 self.repos = repos.Repos( repos_root)20 self.repos_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + '/svnroot' 21 self.repos = repos.Repos(self.repos_root) 19 22 super(TestRepos, self).__init__(*args) 20 23 … … 27 30 pass 28 31 32 def testReposCreate(self): 33 self.assertRaises(Exception, self.repos.create, 'repos1') 34 self.repos.delete('repos3') 35 self.repos.create('repos3') 36 self.assert_(sorted(self.repos.repos_list) == ['repos1', 'repos2', 'repos3'], self.repos.repos_list) 37 38 def testReposDelete(self): 39 self.assertRaises(Exception, self.repos.delete, 'repos1') 40 29 41 def testReposRoot(self): 30 42 repos.Repos('/tmp') … … 32 44 33 45 def testReposlist(self): 34 self.assert_(sorted(self.repos.repos_list) == ['repos1', 'repos2' ], u','.join(self.repos.repos_list).encode('utf-8'))46 self.assert_(sorted(self.repos.repos_list) == ['repos1', 'repos2', 'repos3'], u','.join(self.repos.repos_list).encode('utf-8')) 35 47 36 def testReposCreate(self):37 self.assertRaises(Exception, self.repos.create, 'repos1')38 self.repos.create('repos3')39 self.assert_(sorted(self.repos.repos_list) == ['repos1', 'repos2', 'repos3'], self.repos.repos_list)40 self.repos.delete('repos3')41 42 def testReposDelete(self):43 self.assertRaises(Exception, self.repos.delete, 'repos1')44 45 48 def testSvnVersion(self): 46 49 svnversion = self.repos.svnversion() 47 50 self.assert_(svnversion[0]!='', svnversion[0]) 48 51 self.assert_(svnversion[1]!='', svnversion[1]) 52 53 class TestReposPlugin(TestController): 49 54 55 def __init__(self, *args): 56 self.repos_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + '/svnroot' 57 super(TestReposPlugin, self).__init__(*args) 58 59 def setUp(self): 60 #print '+'*40, 'setup' 61 pass 62 63 def tearDown(self): 64 #print '+'*40, 'teardown' 65 pass 66 67 def testPluginList(self): 68 self.assert_(plugins.modules==['CaseInsensitive', 'EolStyleCheck'], plugins.modules) 69 70 def testPluginImport(self): 71 self.assertRaises(Exception, plugins.getHandler("CaseInsensitive"), "") 72 module_ci = plugins.getHandler("CaseInsensitive")(self.repos_root + '/repos1') 73 self.assert_(module_ci.name=="check case insensitive", module_ci.name) 74 self.assert_(module_ci.description!="", module_ci.description) 75 76 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) 83 84 def testHooks(self): 85 # self.repos_root is not a repository. 86 self.assertRaises(AssertionError, hooks.Hooks, self.repos_root) 87 88 myhooks = hooks.Hooks(self.repos_root + '/repos1') 89 self.assert_(myhooks.pluginnames==['CaseInsensitive', 'EolStyleCheck'], myhooks.pluginnames) 90 self.assert_(myhooks.unapplied_plugins==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins) 91 92 m = myhooks.plugins['CaseInsensitive'] 93 self.assert_(m.name=="check case insensitive", m.name) 94 self.assert_(m.description!="", m.description) 95 96 def testHooksSetting(self): 97 myhooks = hooks.Hooks(self.repos_root + '/repos1') 98 99 m = myhooks.plugins['CaseInsensitive'] 100 self.assert_(m.is_set()==False) 101 self.assert_(myhooks.applied_plugins==[], myhooks.applied_plugins) 102 self.assert_(myhooks.unapplied_plugins==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins) 103 104 m.set_plugin() 105 self.assert_(m.is_set()==True) 106 self.assert_(myhooks.applied_plugins==['CaseInsensitive'], myhooks.applied_plugins) 107 self.assert_(myhooks.unapplied_plugins==['EolStyleCheck'], myhooks.unapplied_plugins) 108 109 m.delete_plugin() 110 self.assert_(m.is_set()==False) 111 self.assert_(myhooks.applied_plugins==[], myhooks.applied_plugins) 112 self.assert_(myhooks.unapplied_plugins==['CaseInsensitive', 'EolStyleCheck'], myhooks.unapplied_plugins) 113 114 50 115 if __name__ == '__main__': 51 116 import unittest
![(please configure the [header_logo] section in trac.ini)](/trac/pysvnmanager/chrome/common/trac_banner.png)