~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

  • Committer: Martin Pool
  • Date: 2005-05-11 04:57:13 UTC
  • Revision ID: mbp@sourcefrog.net-20050511045713-5175e3084bad6196
- New form 'file_id in tree' to check if the file is present
- Rewrite show_info to work on compare_trees (much faster)
- New form 'for file_id in tree' to iterate through files there.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
        self.basedir = basedir
39
39
        self.path2id = inv.path2id
40
40
 
 
41
    def __iter__(self):
 
42
        """Iterate through file_ids for this tree.
 
43
 
 
44
        file_ids are in a WorkingTree if they are in the working inventory
 
45
        and the working file exists.
 
46
        """
 
47
        self._update_statcache()
 
48
        inv = self._inventory
 
49
        for file_id in self._inventory:
 
50
            # TODO: This is slightly redundant; we should be able to just
 
51
            # check the statcache but it only includes regular files.
 
52
            # only include files which still exist on disk
 
53
            ie = inv[file_id]
 
54
            if ie.kind == 'file':
 
55
                if ((file_id in self._statcache)
 
56
                    or (os.path.exists(self.abspath(inv.id2path(file_id))))):
 
57
                    yield file_id
 
58
 
 
59
 
 
60
 
41
61
    def __repr__(self):
42
62
        return "<%s of %s>" % (self.__class__.__name__,
43
63
                               self.basedir)
58
78
        ## XXX: badly named; this isn't in the store at all
59
79
        return self.abspath(self.id2path(file_id))
60
80
 
 
81
                
61
82
    def has_id(self, file_id):
62
83
        # files that have been deleted are excluded
63
84
        if not self.inventory.has_id(file_id):
64
85
            return False
65
 
        import os
66
 
        return os.access(self.abspath(self.inventory.id2path(file_id)), os.F_OK)
 
86
        self._update_statcache()
 
87
        if file_id in self._statcache:
 
88
            return True
 
89
        return os.path.exists(self.abspath(self.id2path(file_id)))
 
90
 
 
91
 
 
92
    __contains__ = has_id
 
93
    
 
94
 
 
95
    def _update_statcache(self):
 
96
        import statcache
 
97
        if not self._statcache:
 
98
            self._statcache = statcache.update_cache(self.basedir, self.inventory)
67
99
 
68
100
    def get_file_size(self, file_id):
69
101
        import os, stat
72
104
 
73
105
    def get_file_sha1(self, file_id):
74
106
        import statcache
75
 
        if not self._statcache:
76
 
            self._statcache = statcache.update_cache(self.basedir, self.inventory)
77
 
 
 
107
        self._update_statcache()
78
108
        return self._statcache[file_id][statcache.SC_SHA1]
79
109
 
80
110