~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Martin Pool
  • Date: 2005-10-04 02:27:27 UTC
  • mfrom: (1399)
  • mto: (1185.13.3)
  • mto: This revision was merged to the branch mainline in revision 1400.
  • Revision ID: mbp@sourcefrog.net-20051004022727-aee7064c62e039a7
[merge] merge robertc's format5 integration

 - test status on specific files
 - track x bit
 - baz2bzr fixes
 - remotebranch fixes

Show diffs side-by-side

added added

removed removed

Lines of Context:
520
520
        
521
521
        mutter('wrote working inventory')
522
522
            
523
 
 
524
523
    inventory = property(read_working_inventory, _write_inventory, None,
525
524
                         """Inventory for the working copy.""")
526
525
 
527
 
 
528
526
    def add(self, files, ids=None):
529
527
        """Make files versioned.
530
528
 
578
576
                    kind = file_kind(fullpath)
579
577
                except OSError:
580
578
                    # maybe something better?
581
 
                    raise BzrError('cannot add: not a regular file or directory: %s' % quotefn(f))
 
579
                    raise BzrError('cannot add: not a regular file, symlink or directory: %s' % quotefn(f))
582
580
 
583
 
                if kind != 'file' and kind != 'directory':
584
 
                    raise BzrError('cannot add: not a regular file or directory: %s' % quotefn(f))
 
581
                if kind not in ('file', 'directory', 'symlink'):
 
582
                    raise BzrError('cannot add: not a regular file, symlink or directory: %s' % quotefn(f))
585
583
 
586
584
                if file_id is None:
587
585
                    file_id = gen_file_id(f)
652
650
        finally:
653
651
            self.unlock()
654
652
 
655
 
 
656
653
    # FIXME: this doesn't need to be a branch method
657
654
    def set_inventory(self, new_inventory_list):
658
655
        from bzrlib.inventory import Inventory, InventoryEntry
664
661
            inv.add(InventoryEntry(file_id, name, kind, parent))
665
662
        self._write_inventory(inv)
666
663
 
667
 
 
668
664
    def unknowns(self):
669
665
        """Return all unknown files.
670
666
 
695
691
        finally:
696
692
            self.unlock()
697
693
 
698
 
 
699
694
    def has_revision(self, revision_id):
700
695
        """True if this branch has a copy of the revision.
701
696
 
704
699
        return (revision_id is None
705
700
                or revision_id in self.revision_store)
706
701
 
707
 
 
708
702
    def get_revision_xml_file(self, revision_id):
709
703
        """Return XML file object for revision object."""
710
704
        if not revision_id or not isinstance(revision_id, basestring):
719
713
        finally:
720
714
            self.unlock()
721
715
 
 
716
    #deprecated
 
717
    get_revision_xml = get_revision_xml_file
722
718
 
723
719
    def get_revision_xml(self, revision_id):
724
720
        return self.get_revision_xml_file(revision_id).read()
738
734
        assert r.revision_id == revision_id
739
735
        return r
740
736
 
741
 
 
742
737
    def get_revision_delta(self, revno):
743
738
        """Return the delta for one revision.
744
739
 
762
757
 
763
758
    def get_revision_sha1(self, revision_id):
764
759
        """Hash the stored value of a revision, and return it."""
 
760
        # In the future, revision entries will be signed. At that
 
761
        # point, it is probably best *not* to include the signature
 
762
        # in the revision hash. Because that lets you re-sign
 
763
        # the revision, (add signatures/remove signatures) and still
 
764
        # have all hash pointers stay consistent.
 
765
        # But for now, just hash the contents.
765
766
        return bzrlib.osutils.sha_file(self.get_revision_xml_file(revision_id))
766
767
 
767
 
 
768
768
    def _get_ancestry_weave(self):
769
769
        return self.control_weaves.get_weave('ancestry')
770
 
        
771
770
 
772
771
    def get_ancestry(self, revision_id):
773
772
        """Return a list of revision-ids integrated by a revision.
778
777
        w = self._get_ancestry_weave()
779
778
        return [None] + [l[:-1] for l in w.get_iter(w.lookup(revision_id))]
780
779
 
781
 
 
782
780
    def get_inventory_weave(self):
783
781
        return self.control_weaves.get_weave('inventory')
784
782
 
785
 
 
786
783
    def get_inventory(self, revision_id):
787
784
        """Get Inventory object by hash."""
788
785
        xml = self.get_inventory_xml(revision_id)
789
786
        return bzrlib.xml5.serializer_v5.read_inventory_from_string(xml)
790
787
 
791
 
 
792
788
    def get_inventory_xml(self, revision_id):
793
789
        """Get inventory XML as a file object."""
794
790
        try:
798
794
        except IndexError:
799
795
            raise bzrlib.errors.HistoryMissing(self, 'inventory', revision_id)
800
796
 
801
 
 
802
797
    def get_inventory_sha1(self, revision_id):
803
798
        """Return the sha1 hash of the inventory entry
804
799
        """
805
800
        return self.get_revision(revision_id).inventory_sha1
806
801
 
807
 
 
808
802
    def get_revision_inventory(self, revision_id):
809
803
        """Return inventory of a past revision."""
810
804
        # TODO: Unify this with get_inventory()
815
809
        else:
816
810
            return self.get_inventory(revision_id)
817
811
 
818
 
 
819
812
    def revision_history(self):
820
813
        """Return sequence of revision hashes on to this branch."""
821
814
        self.lock_read()
825
818
        finally:
826
819
            self.unlock()
827
820
 
828
 
 
829
821
    def common_ancestor(self, other, self_revno=None, other_revno=None):
830
822
        """
831
823
        >>> from bzrlib.commit import commit
1315
1307
        copytree(self.base, base, symlinks=True)
1316
1308
        return ScratchBranch(base=base)
1317
1309
 
1318
 
 
1319
 
        
1320
1310
    def __del__(self):
1321
1311
        self.destroy()
1322
1312