~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/store/text.py

  • Committer: John Arbash Meinel
  • Date: 2013-05-19 14:29:37 UTC
  • mfrom: (6437.63.9 2.5)
  • mto: (6437.63.10 2.5)
  • mto: This revision was merged to the branch mainline in revision 6575.
  • Revision ID: john@arbash-meinel.com-20130519142937-21ykz2n2y2f22za9
Merge in the actual 2.5 branch. It seems I failed before

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2008, 2009, 2010 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""A store that keeps the full text of every version.
18
18
 
20
20
do any sort of delta compression.
21
21
"""
22
22
 
 
23
from __future__ import absolute_import
 
24
 
 
25
import gzip
23
26
import os
 
27
 
 
28
from bzrlib import osutils
 
29
from bzrlib.errors import BzrError, NoSuchFile, FileExists
24
30
import bzrlib.store
25
31
from bzrlib.trace import mutter
26
 
from bzrlib.errors import BzrError, NoSuchFile, FileExists
27
32
 
28
 
import gzip
29
 
from cStringIO import StringIO
30
33
 
31
34
 
32
35
class TextStore(bzrlib.store.TransportStore):
42
45
    def _add_compressed(self, fn, f):
43
46
        from cStringIO import StringIO
44
47
        from bzrlib.osutils import pumpfile
45
 
        
 
48
 
46
49
        if isinstance(f, basestring):
47
50
            f = StringIO(f)
48
 
            
 
51
 
49
52
        sio = StringIO()
50
53
        gf = gzip.GzipFile(mode='wb', fileobj=sio)
51
54
        # if pumpfile handles files that don't fit in ram,
99
102
            if not self._prefixed:
100
103
                raise
101
104
            try:
102
 
                self._transport.mkdir(self.hash_prefix(fileid)[:-1], mode=self._dir_mode)
 
105
                self._transport.mkdir(osutils.dirname(path), mode=self._dir_mode)
103
106
            except FileExists:
104
107
                pass
105
108
            result = other._transport.copy_to([path], self._transport,
116
119
        # so buffer them in a StringIO instead
117
120
        if getattr(f, 'tell', None) is not None:
118
121
            return gzip.GzipFile(mode='rb', fileobj=f)
119
 
        else:
 
122
        try:
120
123
            from cStringIO import StringIO
121
124
            sio = StringIO(f.read())
122
125
            return gzip.GzipFile(mode='rb', fileobj=sio)
 
126
        finally:
 
127
            f.close()