~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Aaron Bentley
  • Date: 2005-10-18 19:47:04 UTC
  • mfrom: (1460)
  • mto: (1185.25.1)
  • mto: This revision was merged to the branch mainline in revision 1474.
  • Revision ID: abentley@panoramicfeedback.com-20051018194704-47d6827cc1d0d11b
Merged more config stuff from Robert

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
from bzrlib.store.compressed_text import CompressedTextStore
45
45
from bzrlib.store.text import TextStore
46
46
from bzrlib.store.weave import WeaveStore
 
47
from bzrlib.testament import Testament
47
48
import bzrlib.transactions as transactions
48
49
from bzrlib.transport import Transport, get_transport
49
50
import bzrlib.xml5
243
244
            self.weave_store = get_weave('weaves', prefixed=True)
244
245
            self.revision_store = get_store('revision-store', compressed=False,
245
246
                                            prefixed=True)
 
247
        self.revision_store.register_suffix('sig')
246
248
        self._transaction = None
247
249
 
248
250
    def __str__(self):
722
724
        This does not necessarily imply the revision is merge
723
725
        or on the mainline."""
724
726
        return (revision_id is None
725
 
                or revision_id in self.revision_store)
 
727
                or self.revision_store.has_id(revision_id))
726
728
 
727
729
    def get_revision_xml_file(self, revision_id):
728
730
        """Return XML file object for revision object."""
732
734
        self.lock_read()
733
735
        try:
734
736
            try:
735
 
                return self.revision_store[revision_id]
 
737
                return self.revision_store.get(revision_id)
736
738
            except (IndexError, KeyError):
737
739
                raise bzrlib.errors.NoSuchRevision(self, revision_id)
738
740
        finally:
952
954
                else:
953
955
                    raise e
954
956
        
955
 
 
956
957
    def commit(self, *args, **kw):
957
958
        from bzrlib.commit import Commit
958
959
        Commit().commit(self, *args, **kw)
990
991
            inv = self.get_revision_inventory(revision_id)
991
992
            return RevisionTree(self.weave_store, inv, revision_id)
992
993
 
993
 
 
994
994
    def working_tree(self):
995
995
        """Return a `Tree` for the working copy."""
996
996
        from bzrlib.workingtree import WorkingTree
1257
1257
        if revno < 1 or revno > self.revno():
1258
1258
            raise InvalidRevisionNumber(revno)
1259
1259
        
1260
 
        
1261
 
        
 
1260
    def sign_revision(self, revision_id, gpg_strategy):
 
1261
        self.lock_write()
 
1262
        try:
 
1263
            plaintext = Testament.from_revision(self, revision_id).as_short_text()
 
1264
            self.revision_store.add(StringIO(gpg_strategy.sign(plaintext)), 
 
1265
                                    revision_id, "sig")
 
1266
        finally:
 
1267
            self.unlock()
1262
1268
 
1263
1269
 
1264
1270
class ScratchBranch(_Branch):
1268
1274
    >>> isdir(b.base)
1269
1275
    True
1270
1276
    >>> bd = b.base
1271
 
    >>> b.destroy()
 
1277
    >>> b._transport.__del__()
1272
1278
    >>> isdir(bd)
1273
1279
    False
1274
1280
    """
1275
 
    def __init__(self, files=[], dirs=[], base=None):
 
1281
 
 
1282
    def __init__(self, files=[], dirs=[], transport=None):
1276
1283
        """Make a test branch.
1277
1284
 
1278
1285
        This creates a temporary directory and runs init-tree in it.
1279
1286
 
1280
1287
        If any files are listed, they are created in the working copy.
1281
1288
        """
1282
 
        from tempfile import mkdtemp
1283
 
        init = False
1284
 
        if base is None:
1285
 
            base = mkdtemp()
1286
 
            init = True
1287
 
        if isinstance(base, basestring):
1288
 
            base = get_transport(base)
1289
 
        _Branch.__init__(self, base, init=init)
 
1289
        if transport is None:
 
1290
            transport = bzrlib.transport.local.ScratchTransport()
 
1291
            super(ScratchBranch, self).__init__(transport, init=True)
 
1292
        else:
 
1293
            super(ScratchBranch, self).__init__(transport)
 
1294
 
1290
1295
        for d in dirs:
1291
1296
            self._transport.mkdir(d)
1292
1297
            
1312
1317
        base = mkdtemp()
1313
1318
        os.rmdir(base)
1314
1319
        copytree(self.base, base, symlinks=True)
1315
 
        return ScratchBranch(base=base)
1316
 
 
1317
 
    def __del__(self):
1318
 
        self.destroy()
1319
 
 
1320
 
    def destroy(self):
1321
 
        """Destroy the test branch, removing the scratch directory."""
1322
 
        from shutil import rmtree
1323
 
        try:
1324
 
            if self.base:
1325
 
                mutter("delete ScratchBranch %s" % self.base)
1326
 
                rmtree(self.base)
1327
 
        except OSError, e:
1328
 
            # Work around for shutil.rmtree failing on Windows when
1329
 
            # readonly files are encountered
1330
 
            mutter("hit exception in destroying ScratchBranch: %s" % e)
1331
 
            for root, dirs, files in os.walk(self.base, topdown=False):
1332
 
                for name in files:
1333
 
                    os.chmod(os.path.join(root, name), 0700)
1334
 
            rmtree(self.base)
1335
 
        self._transport = None
1336
 
 
 
1320
        return ScratchBranch(
 
1321
            transport=bzrlib.transport.local.ScratchTransport(base))
1337
1322
    
1338
1323
 
1339
1324
######################################################################