469 |
469 |
470 def status(self, files, match, list_ignored, list_clean): |
470 def status(self, files, match, list_ignored, list_clean): |
471 lookup, modified, added, unknown, ignored = [], [], [], [], [] |
471 lookup, modified, added, unknown, ignored = [], [], [], [], [] |
472 removed, deleted, clean = [], [], [] |
472 removed, deleted, clean = [], [], [] |
473 |
473 |
|
474 _join = self._join |
|
475 lstat = os.lstat |
|
476 cmap = self._copymap |
|
477 dmap = self._map |
|
478 ladd = lookup.append |
|
479 madd = modified.append |
|
480 aadd = added.append |
|
481 uadd = unknown.append |
|
482 iadd = ignored.append |
|
483 radd = removed.append |
|
484 dadd = deleted.append |
|
485 cadd = clean.append |
|
486 |
474 for src, fn, st in self.statwalk(files, match, ignored=list_ignored): |
487 for src, fn, st in self.statwalk(files, match, ignored=list_ignored): |
475 try: |
488 if fn in dmap: |
476 type_, mode, size, time = self._map[fn] |
489 type_, mode, size, time = dmap[fn] |
477 except KeyError: |
490 else: |
478 if list_ignored and self._ignore(fn): |
491 if list_ignored and self._ignore(fn): |
479 ignored.append(fn) |
492 iadd(fn) |
480 else: |
493 else: |
481 unknown.append(fn) |
494 uadd(fn) |
482 continue |
495 continue |
483 if src == 'm': |
496 if src == 'm': |
484 nonexistent = True |
497 nonexistent = True |
485 if not st: |
498 if not st: |
486 try: |
499 try: |
487 st = os.lstat(self._join(fn)) |
500 st = lstat(_join(fn)) |
488 except OSError, inst: |
501 except OSError, inst: |
489 if inst.errno != errno.ENOENT: |
502 if inst.errno != errno.ENOENT: |
490 raise |
503 raise |
491 st = None |
504 st = None |
492 # We need to re-check that it is a valid file |
505 # We need to re-check that it is a valid file |
493 if st and self._supported(fn, st.st_mode): |
506 if st and self._supported(fn, st.st_mode): |
494 nonexistent = False |
507 nonexistent = False |
495 # XXX: what to do with file no longer present in the fs |
508 # XXX: what to do with file no longer present in the fs |
496 # who are not removed in the dirstate ? |
509 # who are not removed in the dirstate ? |
497 if nonexistent and type_ in "nm": |
510 if nonexistent and type_ in "nm": |
498 deleted.append(fn) |
511 dadd(fn) |
499 continue |
512 continue |
500 # check the common case first |
513 # check the common case first |
501 if type_ == 'n': |
514 if type_ == 'n': |
502 if not st: |
515 if not st: |
503 st = os.lstat(self._join(fn)) |
516 st = lstat(_join(fn)) |
504 if (size >= 0 and (size != st.st_size |
517 if (size >= 0 and (size != st.st_size |
505 or (mode ^ st.st_mode) & 0100) |
518 or (mode ^ st.st_mode) & 0100) |
506 or fn in self._copymap): |
519 or fn in self._copymap): |
507 modified.append(fn) |
520 madd(fn) |
508 elif time != int(st.st_mtime): |
521 elif time != int(st.st_mtime): |
509 lookup.append(fn) |
522 ladd(fn) |
510 elif list_clean: |
523 elif list_clean: |
511 clean.append(fn) |
524 cadd(fn) |
512 elif type_ == 'm': |
525 elif type_ == 'm': |
513 modified.append(fn) |
526 madd(fn) |
514 elif type_ == 'a': |
527 elif type_ == 'a': |
515 added.append(fn) |
528 aadd(fn) |
516 elif type_ == 'r': |
529 elif type_ == 'r': |
517 removed.append(fn) |
530 radd(fn) |
518 |
531 |
519 return (lookup, modified, added, removed, deleted, unknown, ignored, |
532 return (lookup, modified, added, removed, deleted, unknown, ignored, |
520 clean) |
533 clean) |