/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/bundle/__init__.py

  • Committer: John Arbash Meinel
  • Date: 2006-07-18 18:57:54 UTC
  • mto: This revision was merged to the branch mainline in revision 1868.
  • Revision ID: john@arbash-meinel.com-20060718185754-4007745748e28db9
Commit timestamp restricted to 1ms precision.

The old code would restrict to 1s resolution if the timestamp was
supplied, while it preserved full resolution if the timestamp was
auto generated. Now both paths preserve only 1ms resolution.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2006 by Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
 
 
17
 
from cStringIO import StringIO
18
 
 
19
 
from bzrlib.symbol_versioning import deprecated_function, deprecated_in
20
 
from bzrlib.lazy_import import lazy_import
21
 
lazy_import(globals(), """
22
 
from bzrlib import (
23
 
    errors,
24
 
    urlutils,
25
 
    )
26
 
from bzrlib.bundle import serializer as _serializer
27
 
from bzrlib.merge_directive import MergeDirective
28
 
from bzrlib.transport import (
29
 
    do_catching_redirections,
30
 
    get_transport,
31
 
    )
32
 
""")
33
 
from bzrlib.trace import note
34
 
 
35
 
 
36
 
@deprecated_function(deprecated_in((1, 12, 0)))
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
 
 
17
from bzrlib.bundle.serializer import read_bundle
 
18
import bzrlib.errors as errors
 
19
import bzrlib.urlutils
 
20
import bzrlib.transport
 
21
 
 
22
 
37
23
def read_bundle_from_url(url):
38
 
    return read_mergeable_from_url(url, _do_directive=False)
39
 
 
40
 
 
41
 
def read_mergeable_from_url(url, _do_directive=True, possible_transports=None):
42
 
    """Read mergable object from a given URL.
43
 
 
44
 
    :return: An object supporting get_target_revision.  Raises NotABundle if
45
 
        the target is not a mergeable type.
 
24
    """Read a bundle from a given URL.
 
25
 
 
26
    :return: A BundleReader, may raise NotABundle if the target 
 
27
            is not a proper bundle.
46
28
    """
47
 
    child_transport = get_transport(url,
48
 
        possible_transports=possible_transports)
49
 
    transport = child_transport.clone('..')
50
 
    filename = transport.relpath(child_transport.base)
51
 
    mergeable, transport = read_mergeable_from_transport(transport, filename,
52
 
                                                         _do_directive)
53
 
    return mergeable
54
 
 
55
 
 
56
 
def read_mergeable_from_transport(transport, filename, _do_directive=True):
57
 
    def get_bundle(transport):
58
 
        return StringIO(transport.get_bytes(filename)), transport
59
 
 
60
 
    def redirected_transport(transport, exception, redirection_notice):
61
 
        note(redirection_notice)
62
 
        url, filename = urlutils.split(exception.target,
63
 
                                       exclude_trailing_slash=False)
64
 
        if not filename:
65
 
            raise errors.NotABundle('A directory cannot be a bundle')
66
 
        return get_transport(url)
67
 
 
 
29
    url, filename = bzrlib.urlutils.split(url, exclude_trailing_slash=False)
 
30
    if not filename:
 
31
        # A path to a directory was passed in
 
32
        # definitely not a bundle
 
33
        raise errors.NotABundle('A directory cannot be a bundle')
 
34
 
 
35
    # All of this must be in the try/except
 
36
    # Some transports cannot detect that we are trying to read a
 
37
    # directory until we actually issue read() on the handle.
68
38
    try:
69
 
        bytef, transport = do_catching_redirections(get_bundle, transport,
70
 
                                                    redirected_transport)
71
 
    except errors.TooManyRedirections:
72
 
        raise errors.NotABundle(transport.clone(filename).base)
73
 
    except (errors.ConnectionReset, errors.ConnectionError), e:
74
 
        raise
 
39
        t = bzrlib.transport.get_transport(url)
 
40
        f = t.get(filename)
 
41
        return read_bundle(f)
75
42
    except (errors.TransportError, errors.PathError), e:
76
43
        raise errors.NotABundle(str(e))
77
44
    except (IOError,), e:
80
47
        # doesn't always fail at get() time. Sometimes it fails
81
48
        # during read. And that raises a generic IOError with
82
49
        # just the string 'Failure'
83
 
        # StubSFTPServer does fail during get() (because of prefetch)
 
50
        # StubSFTPServer does fail during get() (because of prefetch) 
84
51
        # so it has an opportunity to translate the error.
85
52
        raise errors.NotABundle(str(e))
86
53
 
87
 
    if _do_directive:
88
 
        try:
89
 
            return MergeDirective.from_lines(bytef), transport
90
 
        except errors.NotAMergeDirective:
91
 
            bytef.seek(0)
92
 
 
93
 
    return _serializer.read_bundle(bytef), transport