hgext/largefiles/wirestore.py
author Mads Kiilerich <madski@unity3d.com>
Fri, 28 Dec 2012 11:55:57 +0100
changeset 18144 e16982a74bf7
parent 17127 9e1616307c4c
child 18481 ed647c59753b
permissions -rw-r--r--
largefiles: introduce basic debugstate --large functionality Very useful for debugging largefiles "performance" issues. This is used for testing 03faf12fbee7.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     1
# Copyright 2010-2011 Fog Creek Software
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     2
#
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     3
# This software may be used and distributed according to the terms of the
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     4
# GNU General Public License version 2 or any later version.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     5
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15168
diff changeset
     6
'''largefile store working over Mercurial's wire protocol'''
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     7
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     8
import lfutil
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     9
import remotestore
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    10
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    11
class wirestore(remotestore.remotestore):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    12
    def __init__(self, ui, repo, remote):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    13
        cap = remote.capable('largefiles')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    14
        if not cap:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    15
            raise lfutil.storeprotonotcapable([])
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    16
        storetypes = cap.split(',')
16686
67964cda8701 cleanup: "not x in y" -> "x not in y"
Brodie Rao <brodie@sf.io>
parents: 15252
diff changeset
    17
        if 'serve' not in storetypes:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    18
            raise lfutil.storeprotonotcapable(storetypes)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    19
        self.remote = remote
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    20
        super(wirestore, self).__init__(ui, repo, remote.url())
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    21
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    22
    def _put(self, hash, fd):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    23
        return self.remote.putlfile(hash, fd)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    24
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    25
    def _get(self, hash):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    26
        return self.remote.getlfile(hash)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    27
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    28
    def _stat(self, hashes):
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    29
        batch = self.remote.batch()
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    30
        futures = {}
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    31
        for hash in hashes:
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    32
            futures[hash] = batch.statlfile(hash)
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    33
        batch.submit()
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    34
        retval = {}
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    35
        for hash in hashes:
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    36
            retval[hash] = not futures[hash].value
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    37
        return retval