mercurial/httprangereader.py
author mpm@selenic.com
Fri, 24 Jun 2005 22:51:39 -0800
changeset 460 6409d9a0df43
parent 372 4b0f562c61f4
child 1559 59b3639df0a9
permissions -rw-r--r--
add dirstate debugging commands -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 add dirstate debugging commands As I've played with various different merges and more recently rawcommit, I've found the following patch to be very very helpful in figuring out whether the dirstate is being left in a consistent or inconsistent state with respect to the current manifest. I attempted to deduce the invariants that were assumed by the current code, and then check it in this code. I may or may not have captured the design intent in this check; if not, I'd be very happy to hear more clearly what was intended, so that I can write tests to that expectation. Anyway, here's the patch. Not sure if it's a good idea to commit it to the mainline, or just leave it as a debugging aid. I attempted to package it so that it doesn't interfere with normal usage. Michael Fetterman (tweaked by mpm: remove -d magic) manifest hash: 869f5b5f954dc0f46ba27322359e811d5e21d71c -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCvP77ywK+sNU5EO8RArmtAKCCVuI2slANzWZ26P5edtH/ixdwNwCfZLWl 5P+V+C92II3usO4YW2MULKY= =/Pv4 -----END PGP SIGNATURE-----
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
372
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     1
# httprangereader.py - just what it says
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     2
#
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     3
# Copyright 2005 Matt Mackall <mpm@selenic.com>
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     4
#
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     5
# This software may be used and distributed according to the terms
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     6
# of the GNU General Public License, incorporated herein by reference.
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     7
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     8
import byterange, urllib2
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
     9
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    10
class httprangereader:
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    11
    def __init__(self, url):
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    12
        self.url = url
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    13
        self.pos = 0
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    14
    def seek(self, pos):
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    15
        self.pos = pos
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    16
    def read(self, bytes=None):
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    17
        opener = urllib2.build_opener(byterange.HTTPRangeHandler())
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    18
        urllib2.install_opener(opener)
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    19
        req = urllib2.Request(self.url)
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    20
        end = ''
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    21
        if bytes: end = self.pos + bytes
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    22
        req.add_header('Range', 'bytes=%d-%s' % (self.pos, end))
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    23
        f = urllib2.urlopen(req)
4b0f562c61f4 Move httprangereader into its own file
mpm@selenic.com
parents:
diff changeset
    24
        return f.read()