Show More
@@ -521,6 +521,9 b' class GitRemote(object):' | |||
|
521 | 521 | def discover_git_version(self): |
|
522 | 522 | stdout, _ = self.run_git_command( |
|
523 | 523 | {}, ['--version'], _bare=True, _safe=True) |
|
524 | prefix = 'git version' | |
|
525 | if stdout.startswith(prefix): | |
|
526 | stdout = stdout[len(prefix):] | |
|
524 | 527 | return stdout |
|
525 | 528 | |
|
526 | 529 | @reraise_safe_exceptions |
@@ -142,6 +142,11 b' class HgRemote(object):' | |||
|
142 | 142 | } |
|
143 | 143 | |
|
144 | 144 | @reraise_safe_exceptions |
|
145 | def discover_hg_version(self): | |
|
146 | from mercurial import util | |
|
147 | return util.version() | |
|
148 | ||
|
149 | @reraise_safe_exceptions | |
|
145 | 150 | def archive_repo(self, archive_path, mtime, file_info, kind): |
|
146 | 151 | if kind == "tgz": |
|
147 | 152 | archiver = archival.tarit(archive_path, mtime, "gz") |
@@ -32,6 +32,7 b' import svn.fs' | |||
|
32 | 32 | import svn.repos |
|
33 | 33 | |
|
34 | 34 | from vcsserver import svn_diff |
|
35 | from vcsserver import exceptions | |
|
35 | 36 | from vcsserver.base import RepoFactory |
|
36 | 37 | |
|
37 | 38 | |
@@ -48,6 +49,30 b' svn_compatible_versions = set([' | |||
|
48 | 49 | ]) |
|
49 | 50 | |
|
50 | 51 | |
|
52 | def reraise_safe_exceptions(func): | |
|
53 | """Decorator for converting svn exceptions to something neutral.""" | |
|
54 | def wrapper(*args, **kwargs): | |
|
55 | try: | |
|
56 | return func(*args, **kwargs) | |
|
57 | except Exception as e: | |
|
58 | if not hasattr(e, '_vcs_kind'): | |
|
59 | log.exception("Unhandled exception in hg remote call") | |
|
60 | raise_from_original(exceptions.UnhandledException) | |
|
61 | raise | |
|
62 | return wrapper | |
|
63 | ||
|
64 | ||
|
65 | def raise_from_original(new_type): | |
|
66 | """ | |
|
67 | Raise a new exception type with original args and traceback. | |
|
68 | """ | |
|
69 | _, original, traceback = sys.exc_info() | |
|
70 | try: | |
|
71 | raise new_type(*original.args), None, traceback | |
|
72 | finally: | |
|
73 | del traceback | |
|
74 | ||
|
75 | ||
|
51 | 76 | class SubversionFactory(RepoFactory): |
|
52 | 77 | |
|
53 | 78 | def _create_repo(self, wire, create, compatible_version): |
@@ -88,6 +113,15 b' class SvnRemote(object):' | |||
|
88 | 113 | # for subversion |
|
89 | 114 | self._hg_factory = hg_factory |
|
90 | 115 | |
|
116 | @reraise_safe_exceptions | |
|
117 | def discover_svn_version(self): | |
|
118 | try: | |
|
119 | import svn.core | |
|
120 | svn_ver = svn.core.SVN_VERSION | |
|
121 | except ImportError: | |
|
122 | svn_ver = None | |
|
123 | return svn_ver | |
|
124 | ||
|
91 | 125 | def check_url(self, url, config_items): |
|
92 | 126 | # this can throw exception if not installed, but we detect this |
|
93 | 127 | from hgsubversion import svnrepo |
General Comments 0
You need to be logged in to leave comments.
Login now