comparison 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
comparison
equal deleted inserted replaced
8381:f52fcc864df4 8382:6f44b1adc948
251 return 'n' 251 return 'n'
252 if type_ == '?' and self.repo.dirstate._ignore(fn): 252 if type_ == '?' and self.repo.dirstate._ignore(fn):
253 return 'i' 253 return 'i'
254 return type_ 254 return type_
255 255
256 def updatestatus(self, wfn, st=None, status=None): 256 def updatestatus(self, wfn, osstat=None, newstatus=None):
257 if st: 257 '''
258 status = self.filestatus(wfn, st) 258 Update the stored status of a file or directory.
259
260 osstat: (mode, size, time) tuple, as returned by os.lstat(wfn)
261
262 newstatus: char in statuskeys, new status to apply.
263 '''
264 if osstat:
265 newstatus = self.filestatus(wfn, osstat)
259 else: 266 else:
260 self.statcache.pop(wfn, None) 267 self.statcache.pop(wfn, None)
261 root, fn = self.split(wfn) 268 root, fn = self.split(wfn)
262 d = self.dir(self.tree, root) 269 d = self.dir(self.tree, root)
263 oldstatus = d.get(fn) 270 oldstatus = d.get(fn)
264 isdir = False 271 isdir = False
265 if oldstatus: 272 if oldstatus:
266 try: 273 try:
267 if not status: 274 if not newstatus:
268 if oldstatus in 'almn': 275 if oldstatus in 'almn':
269 status = '!' 276 newstatus = '!'
270 elif oldstatus == 'r': 277 elif oldstatus == 'r':
271 status = 'r' 278 newstatus = 'r'
272 except TypeError: 279 except TypeError:
273 # oldstatus may be a dict left behind by a deleted 280 # oldstatus may be a dict left behind by a deleted
274 # directory 281 # directory
275 isdir = True 282 isdir = True
276 else: 283 else:
277 if oldstatus in self.statuskeys and oldstatus != status: 284 if oldstatus in self.statuskeys and oldstatus != newstatus:
278 del self.dir(self.statustrees[oldstatus], root)[fn] 285 del self.dir(self.statustrees[oldstatus], root)[fn]
279 if self.ui.debugflag and oldstatus != status: 286 if self.ui.debugflag and oldstatus != newstatus:
280 if isdir: 287 if isdir:
281 self.ui.note(_('status: %r dir(%d) -> %s\n') % 288 self.ui.note(_('status: %r dir(%d) -> %s\n') %
282 (wfn, len(oldstatus), status)) 289 (wfn, len(oldstatus), newstatus))
283 else: 290 else:
284 self.ui.note(_('status: %r %s -> %s\n') % 291 self.ui.note(_('status: %r %s -> %s\n') %
285 (wfn, oldstatus, status)) 292 (wfn, oldstatus, newstatus))
286 if not isdir: 293 if not isdir:
287 if status and status != 'i': 294 if newstatus and newstatus != 'i':
288 d[fn] = status 295 d[fn] = newstatus
289 if status in self.statuskeys: 296 if newstatus in self.statuskeys:
290 dd = self.dir(self.statustrees[status], root) 297 dd = self.dir(self.statustrees[newstatus], root)
291 if oldstatus != status or fn not in dd: 298 if oldstatus != newstatus or fn not in dd:
292 dd[fn] = status 299 dd[fn] = newstatus
293 else: 300 else:
294 d.pop(fn, None) 301 d.pop(fn, None)
295 elif not status: 302 elif not newstatus:
296 # a directory is being removed, check its contents 303 # a directory is being removed, check its contents
297 for subfile, b in oldstatus.copy().iteritems(): 304 for subfile, b in oldstatus.copy().iteritems():
298 self.updatestatus(wfn + '/' + subfile, None) 305 self.updatestatus(wfn + '/' + subfile, None)
299 306
300 307
331 continue 338 continue
332 try: 339 try:
333 st = self.stat(wfn) 340 st = self.stat(wfn)
334 except OSError: 341 except OSError:
335 status = state[0] 342 status = state[0]
336 self.updatestatus(wfn, None, status=status) 343 self.updatestatus(wfn, None, newstatus=status)
337 else: 344 else:
338 self.updatestatus(wfn, st) 345 self.updatestatus(wfn, st)
339 self.check_deleted('!') 346 self.check_deleted('!')
340 self.check_deleted('r') 347 self.check_deleted('r')
341 348