Mercurial > hg
diff hgext/inotify/server.py @ 8382:6f44b1adc948
inotify: RepoWatcher.updatestatus: document & use meaningful parameter names
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Fri, 08 May 2009 17:45:01 +0900 |
parents | f52fcc864df4 |
children | dcfdcb51ac5c |
line wrap: on
line diff
--- a/hgext/inotify/server.py Mon May 04 18:19:26 2009 +0900 +++ b/hgext/inotify/server.py Fri May 08 17:45:01 2009 +0900 @@ -253,9 +253,16 @@ return 'i' return type_ - def updatestatus(self, wfn, st=None, status=None): - if st: - status = self.filestatus(wfn, st) + def updatestatus(self, wfn, osstat=None, newstatus=None): + ''' + Update the stored status of a file or directory. + + osstat: (mode, size, time) tuple, as returned by os.lstat(wfn) + + newstatus: char in statuskeys, new status to apply. + ''' + if osstat: + newstatus = self.filestatus(wfn, osstat) else: self.statcache.pop(wfn, None) root, fn = self.split(wfn) @@ -264,35 +271,35 @@ isdir = False if oldstatus: try: - if not status: + if not newstatus: if oldstatus in 'almn': - status = '!' + newstatus = '!' elif oldstatus == 'r': - status = 'r' + newstatus = 'r' except TypeError: # oldstatus may be a dict left behind by a deleted # directory isdir = True else: - if oldstatus in self.statuskeys and oldstatus != status: + if oldstatus in self.statuskeys and oldstatus != newstatus: del self.dir(self.statustrees[oldstatus], root)[fn] - if self.ui.debugflag and oldstatus != status: + if self.ui.debugflag and oldstatus != newstatus: if isdir: self.ui.note(_('status: %r dir(%d) -> %s\n') % - (wfn, len(oldstatus), status)) + (wfn, len(oldstatus), newstatus)) else: self.ui.note(_('status: %r %s -> %s\n') % - (wfn, oldstatus, status)) + (wfn, oldstatus, newstatus)) if not isdir: - if status and status != 'i': - d[fn] = status - if status in self.statuskeys: - dd = self.dir(self.statustrees[status], root) - if oldstatus != status or fn not in dd: - dd[fn] = status + if newstatus and newstatus != 'i': + d[fn] = newstatus + if newstatus in self.statuskeys: + dd = self.dir(self.statustrees[newstatus], root) + if oldstatus != newstatus or fn not in dd: + dd[fn] = newstatus else: d.pop(fn, None) - elif not status: + elif not newstatus: # a directory is being removed, check its contents for subfile, b in oldstatus.copy().iteritems(): self.updatestatus(wfn + '/' + subfile, None) @@ -333,7 +340,7 @@ st = self.stat(wfn) except OSError: status = state[0] - self.updatestatus(wfn, None, status=status) + self.updatestatus(wfn, None, newstatus=status) else: self.updatestatus(wfn, st) self.check_deleted('!')