~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-10 17:16:19 UTC
  • mfrom: (4884 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4889.
  • Revision ID: john@arbash-meinel.com-20091210171619-ehdcxjbl8afhq9g1
Bring in bzr.dev 4884

Show diffs side-by-side

added added

removed removed

Lines of Context:
65
65
    merge,
66
66
    revision as _mod_revision,
67
67
    revisiontree,
68
 
    textui,
69
68
    trace,
70
69
    transform,
71
70
    ui,
544
543
        else:
545
544
            parents = [last_rev]
546
545
        try:
547
 
            merges_file = self._transport.get('pending-merges')
 
546
            merges_bytes = self._transport.get_bytes('pending-merges')
548
547
        except errors.NoSuchFile:
549
548
            pass
550
549
        else:
551
 
            for l in merges_file.readlines():
 
550
            for l in osutils.split_lines(merges_bytes):
552
551
                revision_id = l.rstrip('\n')
553
552
                parents.append(revision_id)
554
553
        return parents
636
635
 
637
636
    def _is_executable_from_path_and_stat_from_basis(self, path, stat_result):
638
637
        file_id = self.path2id(path)
 
638
        if file_id is None:
 
639
            # For unversioned files on win32, we just assume they are not
 
640
            # executable
 
641
            return False
639
642
        return self._inventory[file_id].executable
640
643
 
641
644
    def _is_executable_from_path_and_stat_from_stat(self, path, stat_result):
896
899
 
897
900
    @needs_write_lock # because merge pulls data into the branch.
898
901
    def merge_from_branch(self, branch, to_revision=None, from_revision=None,
899
 
        merge_type=None):
 
902
                          merge_type=None, force=False):
900
903
        """Merge from a branch into this working tree.
901
904
 
902
905
        :param branch: The branch to merge from.
911
914
            merger = Merger(self.branch, this_tree=self, pb=pb)
912
915
            merger.pp = ProgressPhase("Merge phase", 5, pb)
913
916
            merger.pp.next_phase()
914
 
            # check that there are no
915
 
            # local alterations
916
 
            merger.check_basis(check_clean=True, require_commits=False)
 
917
            # check that there are no local alterations
 
918
            if not force and self.has_changes():
 
919
                raise errors.UncommittedChanges(self)
917
920
            if to_revision is None:
918
921
                to_revision = _mod_revision.ensure_null(branch.last_revision())
919
922
            merger.other_rev_id = to_revision
1841
1844
    def _reset_data(self):
1842
1845
        """Reset transient data that cannot be revalidated."""
1843
1846
        self._inventory_is_modified = False
1844
 
        result = self._deserialize(self._transport.get('inventory'))
 
1847
        f = self._transport.get('inventory')
 
1848
        try:
 
1849
            result = self._deserialize(f)
 
1850
        finally:
 
1851
            f.close()
1845
1852
        self._set_inventory(result, dirty=False)
1846
1853
 
1847
1854
    @needs_tree_write_lock
1923
1930
        # binary.
1924
1931
        if self._inventory_is_modified:
1925
1932
            raise errors.InventoryModified(self)
1926
 
        result = self._deserialize(self._transport.get('inventory'))
 
1933
        f = self._transport.get('inventory')
 
1934
        try:
 
1935
            result = self._deserialize(f)
 
1936
        finally:
 
1937
            f.close()
1927
1938
        self._set_inventory(result, dirty=False)
1928
1939
        return result
1929
1940
 
1944
1955
 
1945
1956
        new_files=set()
1946
1957
        unknown_nested_files=set()
 
1958
        if to_file is None:
 
1959
            to_file = sys.stdout
1947
1960
 
1948
1961
        def recurse_directory_to_add_files(directory):
1949
1962
            # Recurse directory and add all files
2019
2032
                        new_status = 'I'
2020
2033
                    else:
2021
2034
                        new_status = '?'
2022
 
                    textui.show_status(new_status, self.kind(fid), f,
2023
 
                                       to_file=to_file)
 
2035
                    # XXX: Really should be a more abstract reporter interface
 
2036
                    kind_ch = osutils.kind_marker(self.kind(fid))
 
2037
                    to_file.write(new_status + '       ' + f + kind_ch + '\n')
2024
2038
                # Unversion file
2025
2039
                inv_delta.append((f, None, fid, None))
2026
2040
                message = "removed %s" % (f,)
2580
2594
        """
2581
2595
        return
2582
2596
 
2583
 
    @needs_read_lock
2584
2597
    def _get_rules_searcher(self, default_searcher):
2585
2598
        """See Tree._get_rules_searcher."""
2586
2599
        if self._rules_searcher is None:
2765
2778
        """Return the format for the working tree object in a_bzrdir."""
2766
2779
        try:
2767
2780
            transport = a_bzrdir.get_workingtree_transport(None)
2768
 
            format_string = transport.get("format").read()
 
2781
            format_string = transport.get_bytes("format")
2769
2782
            return klass._formats[format_string]
2770
2783
        except errors.NoSuchFile:
2771
2784
            raise errors.NoWorkingTree(base=transport.base)