Mercurial > hg
comparison mercurial/dirstate.py @ 3536:ece5c53577eb
small refactoring of path normalization in dirstate.statwalk
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 27 Oct 2006 14:10:01 -0500 |
parents | 549cb7b640fb |
children | f4c9bb4ad7b1 |
comparison
equal
deleted
inserted
replaced
3535:4d97184a06ad | 3536:ece5c53577eb |
---|---|
371 # walk all files by default | 371 # walk all files by default |
372 if not files: | 372 if not files: |
373 files = [self.root] | 373 files = [self.root] |
374 dc = self.map.copy() | 374 dc = self.map.copy() |
375 else: | 375 else: |
376 files = util.unique(files) | |
376 dc = self.filterfiles(files) | 377 dc = self.filterfiles(files) |
377 | 378 |
378 def imatch(file_): | 379 def imatch(file_): |
379 if file_ not in dc and self.ignore(file_): | 380 if file_ not in dc and self.ignore(file_): |
380 return False | 381 return False |
429 if fn in known: return True | 430 if fn in known: return True |
430 known[fn] = 1 | 431 known[fn] = 1 |
431 | 432 |
432 # step one, find all files that match our criteria | 433 # step one, find all files that match our criteria |
433 files.sort() | 434 files.sort() |
434 for ff in util.unique(files): | 435 for ff in files: |
436 nf = util.normpath(ff) | |
435 f = self.wjoin(ff) | 437 f = self.wjoin(ff) |
436 try: | 438 try: |
437 st = os.lstat(f) | 439 st = os.lstat(f) |
438 except OSError, inst: | 440 except OSError, inst: |
439 nf = util.normpath(ff) | |
440 found = False | 441 found = False |
441 for fn in dc: | 442 for fn in dc: |
442 if nf == fn or (fn.startswith(nf) and fn[len(nf)] == '/'): | 443 if nf == fn or (fn.startswith(nf) and fn[len(nf)] == '/'): |
443 found = True | 444 found = True |
444 break | 445 break |
455 sorted_ = [ x for x in findfiles(f) ] | 456 sorted_ = [ x for x in findfiles(f) ] |
456 sorted_.sort(cmp1) | 457 sorted_.sort(cmp1) |
457 for e in sorted_: | 458 for e in sorted_: |
458 yield e | 459 yield e |
459 else: | 460 else: |
460 ff = util.normpath(ff) | 461 if not seen(nf) and match(nf): |
461 if seen(ff): | |
462 continue | |
463 if match(ff): | |
464 if self.supported_type(ff, st, verbose=True): | 462 if self.supported_type(ff, st, verbose=True): |
465 yield 'f', ff, st | 463 yield 'f', nf, st |
466 elif ff in dc: | 464 elif ff in dc: |
467 yield 'm', ff, st | 465 yield 'm', nf, st |
468 | 466 |
469 # step two run through anything left in the dc hash and yield | 467 # step two run through anything left in the dc hash and yield |
470 # if we haven't already seen it | 468 # if we haven't already seen it |
471 ks = dc.keys() | 469 ks = dc.keys() |
472 ks.sort() | 470 ks.sort() |