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 |
|
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, |
|
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 |
|
|
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 |
|
|
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 |
|
|
510 | modified.append(fn) | |
508 |
elif |
|
511 | elif c[3] != s.st_mtime: | |
509 | lookup.append(fn) |
|
512 | lookup.append(fn) | |
510 | else: |
|
513 | else: | |
511 |
|
|
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