mercurial/httprangereader.py
author mason@suse.com
Tue, 04 Apr 2006 16:38:43 -0400
changeset 2073 1e6745f78989
parent 1559 59b3639df0a9
child 2138 f5046cab9e2e
permissions -rw-r--r--
Implement data inlined with the index file This patch allows you to optionally inline data bytes with the revlog index file. It saves considerable space and checkout time by reducing the number of inodes, wasted partial blocks and system calls. To use the inline data add this to your .hgrc [revlog] # inline data only works with revlogng format=1 # inline is the only valid flag right now. flags=inline
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
1559
59b3639df0a9 Convert all classes to new-style classes by deriving them from object.
Eric Hopper <hopper@omnifarious.org>
parents: 372
diff changeset
    10
class httprangereader(object):
372
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()