Mercurial > public > mercurial-scm > hg
comparison mercurial/hg.py @ 861:cbe5c4d016b7
dirstate.changes() now distinguishes 'hg remove'd or just deleted files.
Interface is not yet changed.
Non-regular files are considered to be removed or deleted.
Removed the unneeded match(fn) call for adding to the unknown list.
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Tue, 09 Aug 2005 11:32:30 +0100 |
parents | fbe964ae7325 |
children | d70c1c31fd45 |
comparison
equal
deleted
inserted
replaced
860:8ccbac05cf59 | 861:cbe5c4d016b7 |
---|---|
8 import sys, struct, os | 8 import sys, struct, os |
9 import util | 9 import util |
10 from revlog import * | 10 from revlog import * |
11 from demandload import * | 11 from demandload import * |
12 demandload(globals(), "re lock urllib urllib2 transaction time socket") | 12 demandload(globals(), "re lock urllib urllib2 transaction time socket") |
13 demandload(globals(), "tempfile httprangereader bdiff urlparse") | 13 demandload(globals(), "tempfile httprangereader bdiff urlparse stat") |
14 demandload(globals(), "bisect select") | 14 demandload(globals(), "bisect select") |
15 | 15 |
16 class filelog(revlog): | 16 class filelog(revlog): |
17 def __init__(self, opener, path): | 17 def __init__(self, opener, path): |
18 revlog.__init__(self, opener, | 18 revlog.__init__(self, opener, |
482 elif self.ignore(fn): | 482 elif self.ignore(fn): |
483 continue | 483 continue |
484 if match(fn): | 484 if match(fn): |
485 yield src, fn | 485 yield src, fn |
486 | 486 |
487 def changes(self, files = None, match = util.always): | 487 def changes(self, files=None, match=util.always): |
488 self.read() | 488 self.read() |
489 dc = self.map.copy() | 489 dc = self.map.copy() |
490 lookup, changed, added, unknown = [], [], [], [] | 490 lookup, modified, added, unknown = [], [], [], [] |
491 removed, deleted = [], [] | |
491 | 492 |
492 for src, fn in self.walk(files, match): | 493 for src, fn in self.walk(files, match): |
493 try: s = os.stat(os.path.join(self.root, fn)) | 494 try: |
494 except: continue | 495 s = os.stat(os.path.join(self.root, fn)) |
495 | 496 except OSError: |
496 if fn in dc: | 497 continue |
497 c = dc[fn] | 498 if not stat.S_ISREG(s.st_mode): |
499 continue | |
500 c = dc.get(fn) | |
501 if c: | |
498 del dc[fn] | 502 del dc[fn] |
499 | |
500 if c[0] == 'm': | 503 if c[0] == 'm': |
501 changed.append(fn) | 504 modified.append(fn) |
502 elif c[0] == 'a': | 505 elif c[0] == 'a': |
503 added.append(fn) | 506 added.append(fn) |
504 elif c[0] == 'r': | 507 elif c[0] == 'r': |
505 unknown.append(fn) | 508 unknown.append(fn) |
506 elif c[2] != s.st_size or (c[1] ^ s.st_mode) & 0100: | 509 elif c[2] != s.st_size or (c[1] ^ s.st_mode) & 0100: |
507 changed.append(fn) | 510 modified.append(fn) |
508 elif c[1] != s.st_mode or c[3] != s.st_mtime: | 511 elif c[3] != s.st_mtime: |
509 lookup.append(fn) | 512 lookup.append(fn) |
510 else: | 513 else: |
511 if match(fn): unknown.append(fn) | 514 unknown.append(fn) |
512 | 515 |
513 return (lookup, changed, added, filter(match, dc.keys()), unknown) | 516 for fn, c in [(fn, c) for fn, c in dc.items() if match(fn)]: |
517 if c[0] == 'r': | |
518 removed.append(fn) | |
519 else: | |
520 deleted.append(fn) | |
521 return (lookup, modified, added, removed + deleted, unknown) | |
514 | 522 |
515 # used to avoid circular references so destructors work | 523 # used to avoid circular references so destructors work |
516 def opener(base): | 524 def opener(base): |
517 p = base | 525 p = base |
518 def o(path, mode="r"): | 526 def o(path, mode="r"): |