hgext/largefiles/localstore.py
author Greg Ward <greg@gerg.ca>
Wed, 12 Oct 2011 20:59:27 -0400
changeset 15252 6e809bb4f969
parent 15168 cfccd3bee7b3
child 15316 c65f5b6e26d4
permissions -rw-r--r--
largefiles: improve comments, internal docstrings - fix some ungrammatical/unclear/incorrect comments/docstrings - rewrite some really unclear comments/docstrings - make formatting/style more consistent with the rest of Mercurial (lowercase without period unless it's really multiple sentences) - wrap to 75 columns - always say "largefile(s)", not "lfile(s)" (or "big files") - one space between sentences, not two

# 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.

'''store class for local filesystem'''

import os

from mercurial import util
from mercurial.i18n import _

import lfutil
import basestore

class localstore(basestore.basestore):
    '''Because there is a system-wide cache, the local store always
    uses that cache. Since the cache is updated elsewhere, we can
    just read from it here as if it were the store.'''

    def __init__(self, ui, repo, remote):
        url = os.path.join(remote.path, '.hg', lfutil.longname)
        super(localstore, self).__init__(ui, repo, util.expandpath(url))

    def put(self, source, filename, hash):
        '''Any file that is put must already be in the system-wide
        cache so do nothing.'''
        return

    def exists(self, hash):
        return lfutil.insystemcache(self.repo.ui, hash)

    def _getfile(self, tmpfile, filename, hash):
        if lfutil.insystemcache(self.ui, hash):
            return lfutil.systemcachepath(self.ui, hash)
        raise basestore.StoreError(filename, hash, '',
            _("Can't get file locally"))

    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)
        if not lfutil.insystemcache(self.ui, expecthash):
            self.ui.warn(
                _('changeset %s: %s missing\n'
                  '  (looked for hash %s)\n')
                % (cset, filename, expecthash))
            return True                 # failed

        if contents:
            storepath = lfutil.systemcachepath(self.ui, expecthash)
            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