hgext/largefiles/proto.py
author Matt Harbison <matt_harbison@yahoo.com>
Tue, 23 Oct 2012 21:32:19 -0400
branchstable
changeset 17878 d1d0140287b8
parent 17192 1ac628cd7113
child 18298 3598c585e464
permissions -rw-r--r--
largefiles: don't copy largefiles from working dir to the store while converting Previously, if one or more largefiles for a repo being converted were not in the usercache, the convert would abort with a reference to the largefile being missing (as opposed to the previous patch, where the standin was referenced as missing). This is because commitctx() tries to copy all largefiles to the local store, first from the user cache, and if the file isn't found there, from the working directory. No files will exist in the working directory during a convert, however. It is not sufficient to force the source repo to be local before proceeding, because clone and pull do not download largefiles by default. This is slightly less than ideal because while the conversion will now complete, it won't be possible to update to revs with missing largefiles unless the user intervenes manually, because there is no default path pointing back to the source repo. Ideally these files would be cached during the conversion. This check could have been done in reposetup.commitctx() instead, but this ensures the local store directory is created, which is necessary to enable the standin matcher. The rm -> 'rm -f' change in the test is to temporarily suppress an error clearing the cache- as noted, the cache is is not repopulated during convert. When that is fixed, this can be changed back and the verification errors will disappear too.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     1
# Copyright 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
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     6
import os
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     7
import urllib2
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     8
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17127
diff changeset
     9
from mercurial import error, httppeer, util, wireproto
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16594
diff changeset
    10
from mercurial.wireproto import batchable, future
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    11
from mercurial.i18n import _
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    12
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    13
import lfutil
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    14
15255
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
    15
LARGEFILES_REQUIRED_MSG = ('\nThis repository uses the largefiles extension.'
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
    16
                           '\n\nPlease enable it in your Mercurial config '
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
    17
                           'file.\n')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    18
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    19
def putlfile(repo, proto, sha):
15317
41f371150ccb largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents: 15316
diff changeset
    20
    '''Put a largefile into a repository's local store and into the
41f371150ccb largefiles: make the store primary, and the user cache secondary
Benjamin Pollack <benjamin@bitquabit.com>
parents: 15316
diff changeset
    21
    user cache.'''
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    22
    proto.redirect()
15391
a5a6a9b7f3b9 largefiles: replace tempfile.NamedTemporaryFile with tempfile.mkstemp
Hao Lian <hao@fogcreek.com>
parents: 15317
diff changeset
    23
16594
5516fdf3fe24 largefiles: in putlfile, ensure tempfile's directory exists prior to creation
hlian
parents: 16247
diff changeset
    24
    path = lfutil.storepath(repo, sha)
5516fdf3fe24 largefiles: in putlfile, ensure tempfile's directory exists prior to creation
hlian
parents: 16247
diff changeset
    25
    util.makedirs(os.path.dirname(path))
5516fdf3fe24 largefiles: in putlfile, ensure tempfile's directory exists prior to creation
hlian
parents: 16247
diff changeset
    26
    tmpfp = util.atomictempfile(path, createmode=repo.store.createmode)
5516fdf3fe24 largefiles: in putlfile, ensure tempfile's directory exists prior to creation
hlian
parents: 16247
diff changeset
    27
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    28
    try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    29
        try:
15391
a5a6a9b7f3b9 largefiles: replace tempfile.NamedTemporaryFile with tempfile.mkstemp
Hao Lian <hao@fogcreek.com>
parents: 15317
diff changeset
    30
            proto.getfile(tmpfp)
16155
1b2b42e866be largefiles: respect store.createmode and avoid extra file copy
Martin Geisler <mg@aragost.com>
parents: 15778
diff changeset
    31
            tmpfp._fp.seek(0)
1b2b42e866be largefiles: respect store.createmode and avoid extra file copy
Martin Geisler <mg@aragost.com>
parents: 15778
diff changeset
    32
            if sha != lfutil.hexsha1(tmpfp._fp):
15778
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    33
                raise IOError(0, _('largefile contents do not match hash'))
15391
a5a6a9b7f3b9 largefiles: replace tempfile.NamedTemporaryFile with tempfile.mkstemp
Hao Lian <hao@fogcreek.com>
parents: 15317
diff changeset
    34
            tmpfp.close()
16155
1b2b42e866be largefiles: respect store.createmode and avoid extra file copy
Martin Geisler <mg@aragost.com>
parents: 15778
diff changeset
    35
            lfutil.linktousercache(repo, sha)
15391
a5a6a9b7f3b9 largefiles: replace tempfile.NamedTemporaryFile with tempfile.mkstemp
Hao Lian <hao@fogcreek.com>
parents: 15317
diff changeset
    36
        except IOError, e:
15778
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    37
            repo.ui.warn(_('largefiles: failed to put %s into store: %s') %
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    38
                         (sha, e.strerror))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    39
            return wireproto.pushres(1)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    40
    finally:
16155
1b2b42e866be largefiles: respect store.createmode and avoid extra file copy
Martin Geisler <mg@aragost.com>
parents: 15778
diff changeset
    41
        tmpfp.discard()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    42
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    43
    return wireproto.pushres(0)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    44
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    45
def getlfile(repo, proto, sha):
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    46
    '''Retrieve a largefile from the repository-local cache or system
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    47
    cache.'''
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    48
    filename = lfutil.findfile(repo, sha)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    49
    if not filename:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    50
        raise util.Abort(_('requested largefile %s not present in cache') % sha)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    51
    f = open(filename, 'rb')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    52
    length = os.fstat(f.fileno())[6]
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    53
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    54
    # Since we can't set an HTTP content-length header here, and
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    55
    # Mercurial core provides no way to give the length of a streamres
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    56
    # (and reading the entire file into RAM would be ill-advised), we
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    57
    # just send the length on the first line of the response, like the
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    58
    # ssh proto does for string responses.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    59
    def generator():
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    60
        yield '%d\n' % length
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    61
        for chunk in f:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    62
            yield chunk
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    63
    return wireproto.streamres(generator())
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    64
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    65
def statlfile(repo, proto, sha):
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    66
    '''Return '2\n' if the largefile is missing, '1\n' if it has a
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
    67
    mismatched checksum, or '0\n' if it is in good condition'''
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    68
    filename = lfutil.findfile(repo, sha)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    69
    if not filename:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    70
        return '2\n'
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    71
    fd = None
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    72
    try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    73
        fd = open(filename, 'rb')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    74
        return lfutil.hexsha1(fd) == sha and '0\n' or '1\n'
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    75
    finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    76
        if fd:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    77
            fd.close()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    78
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    79
def wirereposetup(ui, repo):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    80
    class lfileswirerepository(repo.__class__):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    81
        def putlfile(self, sha, fd):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    82
            # unfortunately, httprepository._callpush tries to convert its
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    83
            # input file-like into a bundle before sending it, so we can't use
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    84
            # it ...
17192
1ac628cd7113 peer: introduce real peer classes
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 17127
diff changeset
    85
            if issubclass(self.__class__, httppeer.httppeer):
15778
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    86
                res = None
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    87
                try:
15778
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    88
                    res = self._call('putlfile', data=fd, sha=sha,
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    89
                        headers={'content-type':'application/mercurial-0.1'})
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    90
                    d, output = res.split('\n', 1)
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    91
                    for l in output.splitlines(True):
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    92
                        self.ui.warn(_('remote: '), l, '\n')
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    93
                    return int(d)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    94
                except (ValueError, urllib2.HTTPError):
15778
f15c646bffc7 largefiles: display remote errors from putlfile (issue3123) (issue3149)
Kevin Gessner <kevin@fogcreek.com>
parents: 15391
diff changeset
    95
                    self.ui.warn(_('unexpected putlfile response: %s') % res)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    96
                    return 1
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    97
            # ... but we can't use sshrepository._call because the data=
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    98
            # argument won't get sent, and _callpush does exactly what we want
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    99
            # in this case: send the data straight through
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   100
            else:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   101
                try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   102
                    ret, output = self._callpush("putlfile", fd, sha=sha)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   103
                    if ret == "":
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   104
                        raise error.ResponseError(_('putlfile failed:'),
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   105
                                output)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   106
                    return int(ret)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   107
                except IOError:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   108
                    return 1
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   109
                except ValueError:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   110
                    raise error.ResponseError(
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   111
                        _('putlfile failed (unexpected response):'), ret)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   112
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   113
        def getlfile(self, sha):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   114
            stream = self._callstream("getlfile", sha=sha)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   115
            length = stream.readline()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   116
            try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   117
                length = int(length)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   118
            except ValueError:
15170
c1a4a3220711 largefiles: fix over-long lines
Matt Mackall <mpm@selenic.com>
parents: 15168
diff changeset
   119
                self._abort(error.ResponseError(_("unexpected response:"),
c1a4a3220711 largefiles: fix over-long lines
Matt Mackall <mpm@selenic.com>
parents: 15168
diff changeset
   120
                                                length))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   121
            return (length, stream)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   122
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16594
diff changeset
   123
        @batchable
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   124
        def statlfile(self, sha):
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16594
diff changeset
   125
            f = future()
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16594
diff changeset
   126
            result = {'sha': sha}
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16594
diff changeset
   127
            yield result, f
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   128
            try:
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16594
diff changeset
   129
                yield int(f.value)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   130
            except (ValueError, urllib2.HTTPError):
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
   131
                # If the server returns anything but an integer followed by a
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   132
                # newline, newline, it's not speaking our language; if we get
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   133
                # an HTTP error, we can't be sure the largefile is present;
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
   134
                # either way, consider it missing.
17127
9e1616307c4c largefiles: batch statlfile requests when pushing a largefiles repo (issue3386)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16594
diff changeset
   135
                yield 2
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   136
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   137
    repo.__class__ = lfileswirerepository
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   138
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   139
# advertise the largefiles=serve capability
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   140
def capabilities(repo, proto):
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16155
diff changeset
   141
    return capabilitiesorig(repo, proto) + ' largefiles=serve'
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   142
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   143
# duplicate what Mercurial's new out-of-band errors mechanism does, because
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   144
# clients old and new alike both handle it well
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16155
diff changeset
   145
def webprotorefuseclient(self, message):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   146
    self.req.header([('Content-Type', 'application/hg-error')])
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   147
    return message
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   148
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16155
diff changeset
   149
def sshprotorefuseclient(self, message):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   150
    self.ui.write_err('%s\n-\n' % message)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   151
    self.fout.write('\n')
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   152
    self.fout.flush()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   153
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   154
    return ''
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   155
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   156
def heads(repo, proto):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   157
    if lfutil.islfilesrepo(repo):
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
   158
        return wireproto.ooberror(LARGEFILES_REQUIRED_MSG)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   159
    return wireproto.heads(repo, proto)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   160
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16155
diff changeset
   161
def sshrepocallstream(self, cmd, **args):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   162
    if cmd == 'heads' and self.capable('largefiles'):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   163
        cmd = 'lheads'
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   164
    if cmd == 'batch' and self.capable('largefiles'):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   165
        args['cmds'] = args['cmds'].replace('heads ', 'lheads ')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16155
diff changeset
   166
    return ssholdcallstream(self, cmd, **args)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   167
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16155
diff changeset
   168
def httprepocallstream(self, cmd, **args):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   169
    if cmd == 'heads' and self.capable('largefiles'):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   170
        cmd = 'lheads'
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   171
    if cmd == 'batch' and self.capable('largefiles'):
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   172
        args['cmds'] = args['cmds'].replace('heads ', 'lheads ')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16155
diff changeset
   173
    return httpoldcallstream(self, cmd, **args)