~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

Rename detritus -> debris, make list_files take a lisf of classifiers

Show diffs side-by-side

added added

removed removed

Lines of Context:
703
703
        else:
704
704
            return '?'
705
705
 
706
 
    def list_files(self, allow_detritus=False):
 
706
    def list_files(self, classifiers=()):
707
707
        """Recursively list all files as (path, class, kind, id, entry).
708
708
 
709
709
        Lists, but does not descend into unversioned directories.
712
712
        tree.
713
713
 
714
714
        Skips the control directory.
715
 
        :param allow_detritus: If specified, unversioned files that match the
716
 
        detritus pattern will be returned as 'D'-type files
 
715
 
 
716
        Additional classifiers may be specified.  If provided, they are
 
717
        are callables that take a single filename arguments, and return a
 
718
        letter if the filename matches that class.  If the filename does not
 
719
        match, they should return None.  See WorkingTree.debris_classifier for
 
720
        an example.
 
721
        
 
722
        Classifiers are tried in order and the first match is used.  They can
 
723
        supersede an Ignored or Unknown classification, but not Versioned.
 
724
 
 
725
        :param classifiers: If specified, additional classifiers to use.
717
726
        """
718
727
        inv = self._inventory
719
728
        # Convert these into local objects to save lookup times
759
768
                f_ie = inv.get_child(from_dir_id, f)
760
769
                if f_ie:
761
770
                    c = 'V'
762
 
                elif allow_detritus and self.is_detritus_name(fp[1:]):
763
 
                    c = 'D'
764
 
                elif self.is_ignored(fp[1:]):
765
 
                    c = 'I'
766
771
                else:
767
 
                    c = '?'
 
772
                    c = None
 
773
                    for classifier in classifiers:
 
774
                        c = classifier(fp[1:])
 
775
                        if c is not None:
 
776
                            break
 
777
                if c is None:
 
778
                    if self.is_ignored(fp[1:]):
 
779
                        c = 'I'
 
780
                    else:
 
781
                        c = '?'
768
782
 
769
783
                fk = file_kind(fap)
770
784
 
1139
1153
        return None
1140
1154
 
1141
1155
    @staticmethod
1142
 
    def is_detritus_name(filename):
 
1156
    def is_debris_name(filename):
1143
1157
        """Return True if the supplied filename may be junk from earlier ops.
1144
1158
        
1145
1159
        This does not attempt to determine whether the file is versioned, which
1148
1162
        """
1149
1163
        return _detritus_pattern.match(filename) is not None
1150
1164
 
 
1165
    @staticmethod
 
1166
    def debris_classifier(filename):
 
1167
        if WorkingTree.is_debris_name(filename):
 
1168
            return 'D'
 
1169
        else:
 
1170
            return None
 
1171
 
1151
1172
    def kind(self, file_id):
1152
1173
        return file_kind(self.id2abspath(file_id))
1153
1174