##// END OF EJS Templates
mergetools: rename 'base' to 'merged' in meld...
mergetools: rename 'base' to 'merged' in meld This makes it clear which panel is the target of the merge operation.

File last commit:

r18545:a49b7c9f default
r18972:3de9b1f9 default
Show More
localstore.py
81 lines | 2.7 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
Mads Kiilerich
fix trivial spelling errors
r17424 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 self.remote = remote.local()
Mads Kiilerich
largefiles: cleanup of warnings on errors getting largefiles...
r18155 super(localstore, self).__init__(ui, repo, self.remote.url())
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
Matt Harbison
largefiles: adjust localstore to handle batch statlfile requests (issue3583)...
r17411 def exists(self, hashes):
retval = {}
for hash in hashes:
retval[hash] = lfutil.instore(self.remote, hash)
return retval
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:
Mads Kiilerich
largefiles: cleanup of warnings on errors getting largefiles...
r18155 raise basestore.StoreError(filename, hash, self.url,
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]
Mads Kiilerich
largefiles: report localstore errors with single line warnings messages...
r18545 storepath = lfutil.storepath(self.remote, expecthash)
various
hgext: add largefiles extension...
r15168 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(
Mads Kiilerich
largefiles: report localstore errors with single line warnings messages...
r18545 _('changeset %s: %s references missing %s\n')
% (cset, filename, storepath))
various
hgext: add largefiles extension...
r15168 return True # failed
if contents:
actualhash = lfutil.hashfile(storepath)
if actualhash != expecthash:
self.ui.warn(
Mads Kiilerich
largefiles: report localstore errors with single line warnings messages...
r18545 _('changeset %s: %s references corrupted %s\n')
% (cset, filename, storepath))
various
hgext: add largefiles extension...
r15168 return True # failed
return False