/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/transform.py

extend list_files() with from_dir and recursive parameters

Show diffs side-by-side

added added

removed removed

Lines of Context:
1713
1713
            if self._transform.final_file_id(trans_id) is None:
1714
1714
                yield self._final_paths._determine_path(trans_id)
1715
1715
 
1716
 
    def _make_inv_entries(self, ordered_entries, specific_file_ids):
 
1716
    def _make_inv_entries(self, ordered_entries, specific_file_ids=None):
1717
1717
        for trans_id, parent_file_id in ordered_entries:
1718
1718
            file_id = self._transform.final_file_id(trans_id)
1719
1719
            if file_id is None:
1756
1756
                                                      specific_file_ids):
1757
1757
            yield unicode(self._final_paths.get_path(trans_id)), entry
1758
1758
 
1759
 
    def list_files(self, include_root=False):
1760
 
        """See Tree.list_files."""
 
1759
    def _iter_entries_for_dir(self, dir_path):
 
1760
        """Return path, entry for items in a directory without recursing down."""
 
1761
        dir_file_id = self.path2id(dir_path)
 
1762
        ordered_ids = []
 
1763
        for file_id in self.iter_children(dir_file_id):
 
1764
            trans_id = self._transform.trans_id_file_id(file_id)
 
1765
            ordered_ids.append((trans_id, file_id))
 
1766
        for entry, trans_id in self._make_inv_entries(ordered_ids):
 
1767
            yield unicode(self._final_paths.get_path(trans_id)), entry
 
1768
 
 
1769
    def list_files(self, include_root=False, from_dir=None, recursive=True):
 
1770
        """See WorkingTree.list_files."""
1761
1771
        # XXX This should behave like WorkingTree.list_files, but is really
1762
1772
        # more like RevisionTree.list_files.
1763
 
        for path, entry in self.iter_entries_by_dir():
1764
 
            if entry.name == '' and not include_root:
1765
 
                continue
1766
 
            yield path, 'V', entry.kind, entry.file_id, entry
 
1773
        if recursive:
 
1774
            prefix = None
 
1775
            if from_dir:
 
1776
                prefix = from_dir + '/'
 
1777
            entries = self.iter_entries_by_dir()
 
1778
            for path, entry in entries:
 
1779
                if entry.name == '' and not include_root:
 
1780
                    continue
 
1781
                if prefix:
 
1782
                    if not path.startswith(prefix):
 
1783
                        continue
 
1784
                    path = path[len(prefix):]
 
1785
                yield path, 'V', entry.kind, entry.file_id, entry
 
1786
        else:
 
1787
            if from_dir is None and include_root is True:
 
1788
                root_entry = inventory.make_entry('directory', '',
 
1789
                    ROOT_PARENT, self.get_root_id())
 
1790
                yield '', 'V', 'directory', root_entry.file_id, root_entry
 
1791
            entries = self._iter_entries_for_dir(from_dir or '')
 
1792
            for path, entry in entries:
 
1793
                yield path, 'V', entry.kind, entry.file_id, entry
1767
1794
 
1768
1795
    def kind(self, file_id):
1769
1796
        trans_id = self._transform.trans_id_file_id(file_id)