##// END OF EJS Templates
vcs: use single base for shared functions of Remote objects
marcink -
r749:34388801 default
parent child Browse files
Show More
@@ -0,0 +1,28 b''
1 # RhodeCode VCSServer provides access to different vcs backends via network.
2 # Copyright (C) 2014-2019 RhodeCode GmbH
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software Foundation,
16 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18
19 class RemoteBase(object):
20 EMPTY_COMMIT = '0' * 40
21
22 def _cache_on(self, wire):
23 context = wire.get('context', '')
24 context_uid = '{}'.format(context)
25 repo_id = wire.get('repo_id', '')
26 cache = wire.get('cache', True)
27 cache_on = context and cache
28 return cache_on, context_uid, repo_id
@@ -44,6 +44,7 b' from vcsserver.base import RepoFactory, '
44 44 from vcsserver.hgcompat import (
45 45 hg_url as url_parser, httpbasicauthhandler, httpdigestauthhandler)
46 46 from vcsserver.git_lfs.lib import LFSOidStore
47 from vcsserver.vcs_base import RemoteBase
47 48
48 49 DIR_STAT = stat.S_IFDIR
49 50 FILE_MODE = stat.S_IFMT
@@ -127,8 +128,7 b' class GitFactory(RepoFactory):'
127 128 return self.repo(wire, use_libgit2=True)
128 129
129 130
130 class GitRemote(object):
131 EMPTY_COMMIT = '0' * 40
131 class GitRemote(RemoteBase):
132 132
133 133 def __init__(self, factory):
134 134 self._factory = factory
@@ -156,14 +156,6 b' class GitRemote(object):'
156 156 params.extend(['-c', 'http.sslCAinfo={}'.format(ssl_cert_dir)])
157 157 return params
158 158
159 def _cache_on(self, wire):
160 context = wire.get('context', '')
161 context_uid = '{}'.format(context)
162 repo_id = wire.get('repo_id', '')
163 cache = wire.get('cache', True)
164 cache_on = context and cache
165 return cache_on, context_uid, repo_id
166
167 159 @reraise_safe_exceptions
168 160 def discover_git_version(self):
169 161 stdout, _ = self.run_git_command(
@@ -404,7 +396,6 b' class GitRemote(object):'
404 396 @reraise_safe_exceptions
405 397 def branch(self, wire, commit_id):
406 398 cache_on, context_uid, repo_id = self._cache_on(wire)
407 cache_on = False
408 399 @self.region.conditional_cache_on_arguments(condition=cache_on)
409 400 def _branch(_context_uid, _repo_id, _commit_id):
410 401 regex = re.compile('^refs/heads')
@@ -37,6 +37,7 b' from vcsserver.hgcompat import ('
37 37 makepeer, instance, match, memctx, exchange, memfilectx, nullrev, hg_merge,
38 38 patch, peer, revrange, ui, hg_tag, Abort, LookupError, RepoError,
39 39 RepoLookupError, InterventionRequired, RequirementError)
40 from vcsserver.vcs_base import RemoteBase
40 41
41 42 log = logging.getLogger(__name__)
42 43
@@ -150,7 +151,7 b' class MercurialFactory(RepoFactory):'
150 151 return self._create_repo(wire, create)
151 152
152 153
153 class HgRemote(object):
154 class HgRemote(RemoteBase):
154 155
155 156 def __init__(self, factory):
156 157 self._factory = factory
@@ -173,14 +174,6 b' class HgRemote(object):'
173 174 def _get_ctx(self, repo, ref):
174 175 return get_ctx(repo, ref)
175 176
176 def _cache_on(self, wire):
177 context = wire.get('context', '')
178 context_uid = '{}'.format(context)
179 repo_id = wire.get('repo_id', '')
180 cache = wire.get('cache', True)
181 cache_on = context and cache
182 return cache_on, context_uid, repo_id
183
184 177 @reraise_safe_exceptions
185 178 def discover_hg_version(self):
186 179 from mercurial import util
@@ -36,6 +36,7 b' import svn.repos'
36 36
37 37 from vcsserver import svn_diff, exceptions, subprocessio, settings
38 38 from vcsserver.base import RepoFactory, raise_from_original
39 from vcsserver.vcs_base import RemoteBase
39 40
40 41 log = logging.getLogger(__name__)
41 42
@@ -107,7 +108,7 b' NODE_TYPE_MAPPING = {'
107 108 }
108 109
109 110
110 class SvnRemote(object):
111 class SvnRemote(RemoteBase):
111 112
112 113 def __init__(self, factory, hg_factory=None):
113 114 self._factory = factory
@@ -116,14 +117,6 b' class SvnRemote(object):'
116 117 self._hg_factory = hg_factory
117 118 self.region = self._factory._cache_region
118 119
119 def _cache_on(self, wire):
120 context = wire.get('context', '')
121 context_uid = '{}'.format(context)
122 repo_id = wire.get('repo_id', '')
123 cache = wire.get('cache', True)
124 cache_on = context and cache
125 return cache_on, context_uid, repo_id
126
127 120 @reraise_safe_exceptions
128 121 def discover_svn_version(self):
129 122 try:
General Comments 0
You need to be logged in to leave comments. Login now