From 690828ce2e03ce32c5a66186c543d7c5050287e4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 6 Jul 2011 22:11:48 +0200 Subject: Added basis for initial dulwich integration. Many basic issues should surface while integrating this --- git/test/db/dulwich/__init__.py | 4 ++++ git/test/db/dulwich/test_base.py | 22 ++++++++++++++++++++++ git/test/db/lib.py | 3 ++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 git/test/db/dulwich/__init__.py create mode 100644 git/test/db/dulwich/test_base.py (limited to 'git/test/db') diff --git a/git/test/db/dulwich/__init__.py b/git/test/db/dulwich/__init__.py new file mode 100644 index 00000000..8a681e42 --- /dev/null +++ b/git/test/db/dulwich/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php diff --git a/git/test/db/dulwich/test_base.py b/git/test/db/dulwich/test_base.py new file mode 100644 index 00000000..f3489014 --- /dev/null +++ b/git/test/db/dulwich/test_base.py @@ -0,0 +1,22 @@ +# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors +# +# This module is part of GitDB and is released under +# the New BSD License: http://www.opensource.org/licenses/bsd-license.php +from git.test.db.base import RepoBase +from git.db.complex import PureCompatibilityGitDB + +try: + import git.db.dulwich # import test + + class TestPyDBBase(RepoBase): + + RepoCls = PureCompatibilityGitDB + + # def test_basics(self): + # pass + +except ImportError: + del(RepoBase) + import warnings + warnings.warn("Skipped all dulwich tests as they are not in the path") +#END handle import diff --git a/git/test/db/lib.py b/git/test/db/lib.py index 499ca252..2b3ddde5 100644 --- a/git/test/db/lib.py +++ b/git/test/db/lib.py @@ -70,7 +70,8 @@ class TestDBBase(TestBase): each test type has its own repository """ if cls.needs_ro_repo: - assert cls.RepoCls is not None, "RepoCls class member must be set" + if cls is not TestDBBase: + assert cls.RepoCls is not None, "RepoCls class member must be set in %s" % cls cls.rorepo = cls.RepoCls(rorepo_dir()) #END handle rorepo -- cgit v1.2.3 From 80aa40537a3596f24593b5a67adb6d635fe4fa22 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 7 Jul 2011 12:55:03 +0200 Subject: Added auto-skip mixin metacls, some serious brainfuck, if the required module was not found. Its actually a nice mix between decorators which are class types, and a mixin as a metaclass, which applies said decorator. The InstanceDecorator wouldn't actually be needed, but it adds flexibility. Maybe it should be removed ... --- git/test/db/dulwich/lib.py | 18 ++++++++++++++++++ git/test/db/dulwich/test_base.py | 25 +++++++++++++------------ 2 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 git/test/db/dulwich/lib.py (limited to 'git/test/db') diff --git a/git/test/db/dulwich/lib.py b/git/test/db/dulwich/lib.py new file mode 100644 index 00000000..a1110ffa --- /dev/null +++ b/git/test/db/dulwich/lib.py @@ -0,0 +1,18 @@ +"""dulwich specific utilities, as well as all the default ones""" + +from git.test.lib import * + +#{ Decoorators + +def needs_dulwich_or_skip(func): + """Skip this test if we have no dulwich - print warning""" + return needs_module_or_skip('dulwich')(func) + +#}END decorators + +#{ MetaClasses + +class DulwichRequiredMetaMixin(InheritedTestMethodsOverrideWrapperMetaClsAutoMixin): + decorator = [needs_dulwich_or_skip] + +#} END metaclasses diff --git a/git/test/db/dulwich/test_base.py b/git/test/db/dulwich/test_base.py index f3489014..9bc9c394 100644 --- a/git/test/db/dulwich/test_base.py +++ b/git/test/db/dulwich/test_base.py @@ -2,21 +2,22 @@ # # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php +from lib import * from git.test.db.base import RepoBase from git.db.complex import PureCompatibilityGitDB try: - import git.db.dulwich # import test + import dulwich +except ImportError: + # om this case, all other dulwich tests will be skipped + pass - class TestPyDBBase(RepoBase): - - RepoCls = PureCompatibilityGitDB +class TestPyDBBase(RepoBase): + __metaclass__ = DulwichRequiredMetaMixin + RepoCls = PureCompatibilityGitDB + + @needs_dulwich_or_skip + def test_basics(self): + import dulwich + pass - # def test_basics(self): - # pass - -except ImportError: - del(RepoBase) - import warnings - warnings.warn("Skipped all dulwich tests as they are not in the path") -#END handle import -- cgit v1.2.3 From 4bb5107cff6f205f5c6e73a6f8bd22fc56f48cf4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 7 Jul 2011 14:53:37 +0200 Subject: Initial version of the DulwichType inheritance. For now, it inherits everything from the existing implementation, but one by one things can be reimplmented to use dulwich. It also shows that py 2.6 is quite plagued from its new feature, which is actually a bug, as objects inability to accept any args makes mixins hard to use ... --- git/test/db/base.py | 6 ++++++ git/test/db/dulwich/lib.py | 7 ++++++- git/test/db/dulwich/test_base.py | 22 ++++++++++++++++------ 3 files changed, 28 insertions(+), 7 deletions(-) (limited to 'git/test/db') diff --git a/git/test/db/base.py b/git/test/db/base.py index 5291ba03..7016afb7 100644 --- a/git/test/db/base.py +++ b/git/test/db/base.py @@ -613,8 +613,14 @@ class RepoBase(TestDBBase): def test_submodule_update(self, rwrepo): # fails in bare mode rwrepo._bare = True + # special handling: there are repo implementations which have a bare attribute. IN that case, set it directly + if not rwrepo.bare: + rwrepo.bare = True self.failUnlessRaises(InvalidGitRepositoryError, rwrepo.submodule_update) rwrepo._bare = False + if rwrepo.bare: + rwrepo.bare = False + #END special repo handling # test create submodule sm = rwrepo.submodules[0] diff --git a/git/test/db/dulwich/lib.py b/git/test/db/dulwich/lib.py index a1110ffa..56734064 100644 --- a/git/test/db/dulwich/lib.py +++ b/git/test/db/dulwich/lib.py @@ -1,6 +1,11 @@ """dulwich specific utilities, as well as all the default ones""" -from git.test.lib import * +from git.test.lib import ( + InheritedTestMethodsOverrideWrapperMetaClsAutoMixin, + needs_module_or_skip + ) + +__all__ = ['needs_dulwich_or_skip', 'DulwichRequiredMetaMixin'] #{ Decoorators diff --git a/git/test/db/dulwich/test_base.py b/git/test/db/dulwich/test_base.py index 9bc9c394..50e64131 100644 --- a/git/test/db/dulwich/test_base.py +++ b/git/test/db/dulwich/test_base.py @@ -3,21 +3,31 @@ # This module is part of GitDB and is released under # the New BSD License: http://www.opensource.org/licenses/bsd-license.php from lib import * +from git.test.lib import TestBase, with_rw_repo from git.test.db.base import RepoBase -from git.db.complex import PureCompatibilityGitDB + + try: import dulwich except ImportError: # om this case, all other dulwich tests will be skipped - pass + # Need to properly initialize the class though, otherwise it would fail + from git.db.complex import PureCompatibilityGitDB as DulwichDB +else: + # now we know dulwich is available, to do futher imports + from git.db.dulwich.complex import DulwichCompatibilityGitDB as DulwichDB + +#END handle imports class TestPyDBBase(RepoBase): __metaclass__ = DulwichRequiredMetaMixin - RepoCls = PureCompatibilityGitDB + RepoCls = DulwichDB @needs_dulwich_or_skip - def test_basics(self): - import dulwich - pass + @with_rw_repo('HEAD', bare=False) + def test_basics(self, rw_repo): + db = DulwichDB(rw_repo.working_tree_dir) + print db.git_dir + -- cgit v1.2.3 From b56764b2dbe8845d476e41c8659fc0543ffb3433 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Thu, 7 Jul 2011 21:01:12 +0200 Subject: Fixed submodule related issues once again - is it ever going to end ? --- git/test/db/base.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'git/test/db') diff --git a/git/test/db/base.py b/git/test/db/base.py index 7016afb7..2f8f50e2 100644 --- a/git/test/db/base.py +++ b/git/test/db/base.py @@ -601,12 +601,12 @@ class RepoBase(TestDBBase): self.failUnlessRaises(NotImplementedError, rev_parse, "@{1 week ago}") def test_submodules(self): - assert len(self.rorepo.submodules) == 1 # non-recursive + assert len(self.rorepo.submodules) == 2 # non-recursive # in previous configurations, we had recursive repositories so this would compare to 2 - # now there is only one left, as gitdb was merged - assert len(list(self.rorepo.iter_submodules())) == 1 + # now there is only one left, as gitdb was merged, but we have smmap instead + assert len(list(self.rorepo.iter_submodules())) == 2 - assert isinstance(self.rorepo.submodule("git/ext/async"), Submodule) + assert isinstance(self.rorepo.submodule("async"), Submodule) self.failUnlessRaises(ValueError, self.rorepo.submodule, "doesn't exist") @with_rw_repo('HEAD', bare=False) -- cgit v1.2.3