X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=lib%2Fbup%2Findex.py;h=5f6c366957cb93d0b98e90dd411c4b09bd890f08;hb=7d8f74a4f0ed85a1827ec02a9f39b336093b91dc;hp=a570784da81c5c2a7e6b30cb2922fe30975d40e7;hpb=43ebef65bd8cf86f58d7bd49872cceea58d9712d;p=bup.git diff --git a/lib/bup/index.py b/lib/bup/index.py index a570784..5f6c366 100644 --- a/lib/bup/index.py +++ b/lib/bup/index.py @@ -195,13 +195,34 @@ class Entry: log('pack error: %s (%r)\n' % (e, self)) raise - def from_stat(self, st, meta_ofs, tstart, check_device=True): - old = (self.dev if check_device else 0, - self.ino, self.nlink, self.ctime, self.mtime, - self.size, self.flags & IX_EXISTS) - new = (st.st_dev if check_device else 0, - st.st_ino, st.st_nlink, st.st_ctime, st.st_mtime, - st.st_size, IX_EXISTS) + def stale(self, st, tstart, check_device=True): + if self.size != st.st_size: + return True + if self.mtime != st.st_mtime: + return True + if self.sha == EMPTY_SHA: + return True + if not self.gitmode: + return True + if self.ctime != st.st_ctime: + return True + if self.ino != st.st_ino: + return True + if self.nlink != st.st_nlink: + return True + if not (self.flags & IX_EXISTS): + return True + if check_device and (self.dev != st.st_dev): + return True + # Check that the ctime's "second" is at or after tstart's. + ctime_sec_in_ns = xstat.fstime_floor_secs(st.st_ctime) * 10**9 + if ctime_sec_in_ns >= tstart: + return True + return False + + def update_from_stat(self, st, meta_ofs): + # Should only be called when the entry is stale(), and + # invalidate() should almost certainly be called afterward. self.dev = st.st_dev self.ino = st.st_ino self.nlink = st.st_nlink @@ -212,13 +233,8 @@ class Entry: self.mode = st.st_mode self.flags |= IX_EXISTS self.meta_ofs = meta_ofs - # Check that the ctime's "second" is at or after tstart's. - ctime_sec_in_ns = xstat.fstime_floor_secs(st.st_ctime) * 10**9 - if ctime_sec_in_ns >= tstart or old != new \ - or self.sha == EMPTY_SHA or not self.gitmode: - self.invalidate() self._fixup() - + def _fixup(self): self.mtime = self._fixup_time(self.mtime) self.ctime = self._fixup_time(self.ctime)