~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/dirstate.py

  • Committer: John Arbash Meinel
  • Date: 2011-05-19 13:56:58 UTC
  • mto: This revision was merged to the branch mainline in revision 5900.
  • Revision ID: john@arbash-meinel.com-20110519135658-6mskfmazb53dy102
Get rid of rename_targets.
We weren't checking it yet anyway.
Instead we use _id_index. We need it anyway to check for file_id
uniqueness. And we need it for the pure-add case, vs a rename,
and renames are rare, so it would only rarely help.
Since we now have direct modifies going through changes, I don't
think we need to worry about the performance.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1495
1495
        adds = []
1496
1496
        changes = []
1497
1497
        deletes = []
1498
 
        # when we renaming something in basis, which is already at a
1499
 
        # different path from the active tree. This tracks what active path was
1500
 
        # associated with the given old basis path
1501
 
        rename_targets = {}
1502
1498
        # The paths this function accepts are unicode and must be encoded as we
1503
1499
        # go.
1504
1500
        encode = cache_utf8.encode
1562
1558
                # the target of the 'r' is old_path here, and we add that to
1563
1559
                # deletes, meaning that the add handler does not need to check
1564
1560
                # for 'r' items on every pass.
1565
 
                self._update_basis_apply_deletes(deletes, rename_targets)
 
1561
                self._update_basis_apply_deletes(deletes)
1566
1562
                deletes = []
1567
1563
                # Split into an add/delete pair recursively.
1568
1564
                adds.append((old_path_utf8, new_path_utf8, file_id,
1593
1589
        self._check_delta_ids_absent(new_ids, delta, 1)
1594
1590
        try:
1595
1591
            # Finish expunging deletes/first half of renames.
1596
 
            self._update_basis_apply_deletes(deletes, rename_targets)
 
1592
            self._update_basis_apply_deletes(deletes)
1597
1593
            # Reinstate second half of renames and new paths.
1598
 
            self._update_basis_apply_adds(adds, rename_targets)
 
1594
            self._update_basis_apply_adds(adds)
1599
1595
            # Apply in-situ changes.
1600
1596
            self._update_basis_apply_changes(changes)
1601
1597
            # Validate parents
1638
1634
        self._changes_aborted = True
1639
1635
        raise errors.InconsistentDelta(path, file_id, reason)
1640
1636
 
1641
 
    def _update_basis_apply_adds(self, adds, rename_targets):
 
1637
    def _update_basis_apply_adds(self, adds):
1642
1638
        """Apply a sequence of adds to tree 1 during update_basis_by_delta.
1643
1639
 
1644
1640
        They may be adds, or renames that have been split into add/delete
1718
1714
                # The active record shows up as absent, this could be genuine,
1719
1715
                # or it could be present at some other location. We need to
1720
1716
                # verify.
1721
 
                # TODO: Check rename_targets first, in case we can find a
1722
 
                #       target without having to load the id_index
1723
1717
                id_index = self._get_id_index()
1724
1718
                # The id_index may not be perfectly accurate for tree1, because
1725
1719
                # we haven't been keeping it updated. However, it should be
1775
1769
                    'changed entry considered not present')
1776
1770
            entry[1][1] = new_details
1777
1771
 
1778
 
    def _update_basis_apply_deletes(self, deletes, rename_targets):
 
1772
    def _update_basis_apply_deletes(self, deletes):
1779
1773
        """Apply a sequence of deletes to tree 1 during update_basis_by_delta.
1780
1774
 
1781
1775
        They may be deletes, or renames that have been split into add/delete
1786
1780
            real_delete is True when the desired outcome is an actual deletion
1787
1781
            rather than the rename handling logic temporarily deleting a path
1788
1782
            during the replacement of a parent.
1789
 
        :param rename_targets: When we mark an entry for deletion, if it was a
1790
 
            rename record, save the matching path.
1791
 
            eg, tree0 has dir/name file_id, tree1 has other/name file_id
1792
 
                and we are renaming other/name file_id to third/name file_id
1793
 
                record that the other/name record pointed at dir/name.
1794
1783
        """
1795
1784
        null = DirState.NULL_PARENT_DETAILS
1796
1785
        for old_path, new_path, file_id, _, real_delete in deletes:
1820
1809
                # delete it
1821
1810
                if active_kind == 'r':
1822
1811
                    active_path = entry[1][0][1]
1823
 
                    rename_targets[old_path] = active_path
1824
1812
                    active_entry = self._get_entry(0, file_id, active_path)
1825
1813
                    if active_entry[1][1][0] != 'r':
1826
1814
                        self._raise_invalid(old_path, file_id,