--- a/hgext/largefiles/basestore.py Thu Jun 02 22:39:01 2016 +0100
+++ b/hgext/largefiles/basestore.py Sat Jun 04 16:53:44 2016 +0200
@@ -8,9 +8,7 @@
'''base class for store implementations and store-related utility code'''
-import re
-
-from mercurial import util, node, hg, error
+from mercurial import util, node
from mercurial.i18n import _
import lfutil
@@ -164,63 +162,3 @@
Returns _true_ if any problems are found!
'''
raise NotImplementedError('abstract method')
-
-import localstore, wirestore
-
-_storeprovider = {
- 'file': [localstore.localstore],
- 'http': [wirestore.wirestore],
- 'https': [wirestore.wirestore],
- 'ssh': [wirestore.wirestore],
- }
-
-_scheme_re = re.compile(r'^([a-zA-Z0-9+-.]+)://')
-
-# During clone this function is passed the src's ui object
-# but it needs the dest's ui object so it can read out of
-# the config file. Use repo.ui instead.
-def _openstore(repo, remote=None, put=False):
- ui = repo.ui
-
- if not remote:
- lfpullsource = getattr(repo, 'lfpullsource', None)
- if lfpullsource:
- path = ui.expandpath(lfpullsource)
- elif put:
- path = ui.expandpath('default-push', 'default')
- else:
- path = ui.expandpath('default')
-
- # ui.expandpath() leaves 'default-push' and 'default' alone if
- # they cannot be expanded: fallback to the empty string,
- # meaning the current directory.
- if path == 'default-push' or path == 'default':
- path = ''
- remote = repo
- else:
- path, _branches = hg.parseurl(path)
- remote = hg.peer(repo, {}, path)
-
- # The path could be a scheme so use Mercurial's normal functionality
- # to resolve the scheme to a repository and use its path
- path = util.safehasattr(remote, 'url') and remote.url() or remote.path
-
- match = _scheme_re.match(path)
- if not match: # regular filesystem path
- scheme = 'file'
- else:
- scheme = match.group(1)
-
- try:
- storeproviders = _storeprovider[scheme]
- except KeyError:
- raise error.Abort(_('unsupported URL scheme %r') % scheme)
-
- for classobj in storeproviders:
- try:
- return classobj(ui, repo, remote)
- except lfutil.storeprotonotcapable:
- pass
-
- raise error.Abort(_('%s does not appear to be a largefile store') %
- util.hidepassword(path))
--- a/hgext/largefiles/lfcommands.py Thu Jun 02 22:39:01 2016 +0100
+++ b/hgext/largefiles/lfcommands.py Sat Jun 04 16:53:44 2016 +0200
@@ -20,7 +20,7 @@
from hgext.convert import filemap
import lfutil
-import basestore
+import storefactory
# -- Commands ----------------------------------------------------------
@@ -337,7 +337,7 @@
if not files:
return
- store = basestore._openstore(rsrc, rdst, put=True)
+ store = storefactory._openstore(rsrc, rdst, put=True)
at = 0
ui.debug("sending statlfile command for %d largefiles\n" % len(files))
@@ -368,7 +368,7 @@
else:
revs = ['.']
- store = basestore._openstore(repo)
+ store = storefactory._openstore(repo)
return store.verify(revs, contents=contents)
def cachelfiles(ui, repo, node, filelist=None):
@@ -394,7 +394,7 @@
toget.append((lfile, expectedhash))
if toget:
- store = basestore._openstore(repo)
+ store = storefactory._openstore(repo)
ret = store.get(toget)
return ret
--- a/hgext/largefiles/overrides.py Thu Jun 02 22:39:01 2016 +0100
+++ b/hgext/largefiles/overrides.py Sat Jun 04 16:53:44 2016 +0200
@@ -17,7 +17,7 @@
import lfutil
import lfcommands
-import basestore
+import storefactory
# -- Utility functions: commonly/repeatedly needed functionality ---------------
@@ -1109,7 +1109,7 @@
lfhashes.add(lfhash)
lfutil.getlfilestoupload(repo, missing, dedup)
if lfhashes:
- lfexists = basestore._openstore(repo, other).exists(lfhashes)
+ lfexists = storefactory._openstore(repo, other).exists(lfhashes)
for fn, lfhash in knowns:
if not lfexists[lfhash]: # lfhash doesn't exist on "other"
addfunc(fn, lfhash)
@@ -1338,7 +1338,7 @@
else:
hash = lfutil.readstandin(repo, lf, ctx.rev())
if not lfutil.inusercache(repo.ui, hash):
- store = basestore._openstore(repo)
+ store = storefactory._openstore(repo)
success, missing = store.get([(lf, hash)])
if len(success) != 1:
raise error.Abort(
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/largefiles/storefactory.py Sat Jun 04 16:53:44 2016 +0200
@@ -0,0 +1,78 @@
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+from __future__ import absolute_import
+
+import re
+
+from mercurial.i18n import _
+
+from mercurial import (
+ error,
+ hg,
+ util,
+)
+
+from . import (
+ lfutil,
+ localstore,
+ wirestore,
+)
+
+# During clone this function is passed the src's ui object
+# but it needs the dest's ui object so it can read out of
+# the config file. Use repo.ui instead.
+def _openstore(repo, remote=None, put=False):
+ ui = repo.ui
+
+ if not remote:
+ lfpullsource = getattr(repo, 'lfpullsource', None)
+ if lfpullsource:
+ path = ui.expandpath(lfpullsource)
+ elif put:
+ path = ui.expandpath('default-push', 'default')
+ else:
+ path = ui.expandpath('default')
+
+ # ui.expandpath() leaves 'default-push' and 'default' alone if
+ # they cannot be expanded: fallback to the empty string,
+ # meaning the current directory.
+ if path == 'default-push' or path == 'default':
+ path = ''
+ remote = repo
+ else:
+ path, _branches = hg.parseurl(path)
+ remote = hg.peer(repo, {}, path)
+
+ # The path could be a scheme so use Mercurial's normal functionality
+ # to resolve the scheme to a repository and use its path
+ path = util.safehasattr(remote, 'url') and remote.url() or remote.path
+
+ match = _scheme_re.match(path)
+ if not match: # regular filesystem path
+ scheme = 'file'
+ else:
+ scheme = match.group(1)
+
+ try:
+ storeproviders = _storeprovider[scheme]
+ except KeyError:
+ raise error.Abort(_('unsupported URL scheme %r') % scheme)
+
+ for classobj in storeproviders:
+ try:
+ return classobj(ui, repo, remote)
+ except lfutil.storeprotonotcapable:
+ pass
+
+ raise error.Abort(_('%s does not appear to be a largefile store') %
+ util.hidepassword(path))
+
+_storeprovider = {
+ 'file': [localstore.localstore],
+ 'http': [wirestore.wirestore],
+ 'https': [wirestore.wirestore],
+ 'ssh': [wirestore.wirestore],
+ }
+
+_scheme_re = re.compile(r'^([a-zA-Z0-9+-.]+)://')
--- a/tests/test-check-module-imports.t Thu Jun 02 22:39:01 2016 +0100
+++ b/tests/test-check-module-imports.t Sat Jun 04 16:53:44 2016 +0200
@@ -179,5 +179,3 @@
> -X tests/test-hgweb-no-request-uri.t \
> -X tests/test-hgweb-non-interactive.t \
> | sed 's-\\-/-g' | python "$import_checker" -
- Import cycle: hgext.largefiles.basestore -> hgext.largefiles.localstore -> hgext.largefiles.basestore
- [1]