##// END OF EJS Templates
spelling: Failing
spelling: Failing

File last commit:

r17439:fbb732a8 merge default
r17480:4e092da9 default
Show More
localstore.py
82 lines | 2.9 KiB | text/x-python | PythonLexer
various
hgext: add largefiles extension...
r15168 # Copyright 2009-2010 Gregory P. Ward
# Copyright 2009-2010 Intelerad Medical Systems Incorporated
# Copyright 2010-2011 Fog Creek Software
# Copyright 2010-2011 Unity Technologies
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Greg Ward
largefiles: improve comments, internal docstrings...
r15252 '''store class for local filesystem'''
various
hgext: add largefiles extension...
r15168
import os
from mercurial import util
from mercurial.i18n import _
import lfutil
import basestore
class localstore(basestore.basestore):
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 '''localstore first attempts to grab files out of the store in the remote
timeless@mozdev.org
spelling: Failing
r17480 Mercurial repository. Failing that, it attempts to grab the files from
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 the user cache.'''
various
hgext: add largefiles extension...
r15168
def __init__(self, ui, repo, remote):
Sune Foldager
peer: introduce peer methods to prepare for peer classes...
r17191 url = os.path.join(remote.local().path, '.hg', lfutil.longname)
various
hgext: add largefiles extension...
r15168 super(localstore, self).__init__(ui, repo, util.expandpath(url))
Sune Foldager
peer: introduce peer methods to prepare for peer classes...
r17191 self.remote = remote.local()
various
hgext: add largefiles extension...
r15168
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 def put(self, source, hash):
Hao Lian
largefiles: remove lfutil.createdir, replace calls with util.makedirs
r15371 util.makedirs(os.path.dirname(lfutil.storepath(self.remote, hash)))
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 if lfutil.instore(self.remote, hash):
return
lfutil.link(lfutil.storepath(self.repo, hash),
lfutil.storepath(self.remote, hash))
various
hgext: add largefiles extension...
r15168
def exists(self, hash):
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 return lfutil.instore(self.remote, hash)
various
hgext: add largefiles extension...
r15168
def _getfile(self, tmpfile, filename, hash):
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 if lfutil.instore(self.remote, hash):
path = lfutil.storepath(self.remote, hash)
elif lfutil.inusercache(self.ui, hash):
path = lfutil.usercachepath(self.ui, hash)
else:
raise basestore.StoreError(filename, hash, '',
Martin Geisler
largefiles: lowercase messages
r16928 _("can't get file locally"))
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 fd = open(path, 'rb')
try:
return lfutil.copyandhash(fd, tmpfile)
finally:
fd.close()
various
hgext: add largefiles extension...
r15168
def _verifyfile(self, cctx, cset, contents, standin, verified):
filename = lfutil.splitstandin(standin)
if not filename:
return False
fctx = cctx[standin]
key = (filename, fctx.filenode())
if key in verified:
return False
expecthash = fctx.data()[0:40]
verified.add(key)
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 if not lfutil.instore(self.remote, expecthash):
various
hgext: add largefiles extension...
r15168 self.ui.warn(
_('changeset %s: %s missing\n'
' (looked for hash %s)\n')
% (cset, filename, expecthash))
return True # failed
if contents:
Benjamin Pollack
largefiles: make the store primary, and the user cache secondary...
r15317 storepath = lfutil.storepath(self.remote, expecthash)
various
hgext: add largefiles extension...
r15168 actualhash = lfutil.hashfile(storepath)
if actualhash != expecthash:
self.ui.warn(
_('changeset %s: %s: contents differ\n'
' (%s:\n'
' expected hash %s,\n'
' but got %s)\n')
% (cset, filename, storepath, expecthash, actualhash))
return True # failed
return False