##// END OF EJS Templates
dirstate.changes() now distinguishes 'hg remove'd or just deleted files....
Thomas Arendsen Hein -
r861:cbe5c4d0 default
parent child Browse files
Show More
@@ -10,7 +10,7 b' 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):
@@ -484,33 +484,41 b' class dirstate:'
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):
General Comments 0
You need to be logged in to leave comments. Login now