hgext/largefiles/wirestore.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 23 Nov 2021 18:13:33 +0100
changeset 48396 c0d88407b7d4
parent 45942 89a2afe31e82
child 48875 6000f5b25c9b
permissions -rw-r--r--
largefile: use the proper "mtime boundary" logic during fixup This will prevent ambiguous cache entry to be used in racy situation. This fix flakiness in test and some real live misbehavior. Differential Revision: https://phab.mercurial-scm.org/D11800
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'''
29316
28dfcf3d0ad3 py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28439
diff changeset
     7
from __future__ import absolute_import
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     8
29316
28dfcf3d0ad3 py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28439
diff changeset
     9
from . import (
28dfcf3d0ad3 py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28439
diff changeset
    10
    lfutil,
28dfcf3d0ad3 py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28439
diff changeset
    11
    remotestore,
28dfcf3d0ad3 py3: make largefiles/wirestore.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28439
diff changeset
    12
)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    13
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37632
diff changeset
    14
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    15
class wirestore(remotestore.remotestore):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    16
    def __init__(self, ui, repo, remote):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    17
        cap = remote.capable(b'largefiles')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    18
        if not cap:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    19
            raise lfutil.storeprotonotcapable([])
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    20
        storetypes = cap.split(b',')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    21
        if b'serve' not in storetypes:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    22
            raise lfutil.storeprotonotcapable(storetypes)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    23
        self.remote = remote
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    24
        super(wirestore, self).__init__(ui, repo, remote.url())
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    25
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    26
    def _put(self, hash, fd):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    27
        return self.remote.putlfile(hash, fd)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    28
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    29
    def _get(self, hash):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    30
        return self.remote.getlfile(hash)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    31
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16686
diff changeset
    32
    def _stat(self, hashes):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    33
        """For each hash, return 0 if it is available, other values if not.
19008
9d33d6e0d442 largefiles: stat all largefiles in one batch before downloading
Mads Kiilerich <madski@unity3d.com>
parents: 18481
diff changeset
    34
        It is usually 2 if the largefile is missing, but might be 1 the server
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    35
        has a corrupted copy."""
37632
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
    36
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
    37
        with self.remote.commandexecutor() as e:
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
    38
            fs = []
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
    39
            for hash in hashes:
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    40
                fs.append(
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    41
                    (
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    42
                        hash,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    43
                        e.callcommand(
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    44
                            b'statlfile',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    45
                            {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    46
                                b'sha': hash,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    47
                            },
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    48
                        ),
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    49
                    )
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43077
diff changeset
    50
                )
37632
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
    51
6c55ce51d6c3 largefiles: use command executor for batch operation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29316
diff changeset
    52
            return {hash: f.result() for hash, f in fs}