hgext/largefiles/wirestore.py
author timeless <timeless@mozdev.org>
Fri, 01 Apr 2016 13:19:58 +0000
changeset 28756 45954a251a40
parent 28439 b6e71f8af5b8
child 29316 28dfcf3d0ad3
permissions -rw-r--r--
hghave: update cvs112 description Classic cvs stopped at 1.11. There was a beta version 1.12 that never had a final release. CVS NT is a fork which starts with versions numbered 2.0+. We should have an hg have cvsnt, but to test that requires getting cvsnt, and it's commercial / its older source versions are hard to find.

# Copyright 2010-2011 Fog Creek Software
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

'''largefile store working over Mercurial's wire protocol'''

import lfutil
import remotestore

class wirestore(remotestore.remotestore):
    def __init__(self, ui, repo, remote):
        cap = remote.capable('largefiles')
        if not cap:
            raise lfutil.storeprotonotcapable([])
        storetypes = cap.split(',')
        if 'serve' not in storetypes:
            raise lfutil.storeprotonotcapable(storetypes)
        self.remote = remote
        super(wirestore, self).__init__(ui, repo, remote.url())

    def _put(self, hash, fd):
        return self.remote.putlfile(hash, fd)

    def _get(self, hash):
        return self.remote.getlfile(hash)

    def _stat(self, hashes):
        '''For each hash, return 0 if it is available, other values if not.
        It is usually 2 if the largefile is missing, but might be 1 the server
        has a corrupted copy.'''
        batch = self.remote.iterbatch()
        for hash in hashes:
            batch.statlfile(hash)
        batch.submit()
        return dict(zip(hashes, batch.results()))