equal
deleted
inserted
replaced
459 lnkkind = stat.S_IFLNK |
459 lnkkind = stat.S_IFLNK |
460 join = self._join |
460 join = self._join |
461 work = [] |
461 work = [] |
462 wadd = work.append |
462 wadd = work.append |
463 |
463 |
|
464 if match.anypats(): |
|
465 #match.match with patterns |
|
466 dostep3 = True |
|
467 nomatches = False |
|
468 elif not match.files(): |
|
469 #match.always or match.never |
|
470 dostep3 = matchfn('') |
|
471 nomatches = not dostep3 |
|
472 else: |
|
473 #match.exact or match.match without pattern |
|
474 dostep3 = False |
|
475 nomatches = matchfn == match.exact |
|
476 |
|
477 if nomatches: |
|
478 #skip step 2 |
|
479 dirignore = util.always |
|
480 |
464 files = set(match.files()) |
481 files = set(match.files()) |
465 if not files or '.' in files: |
482 if not files or '.' in files: |
466 files = [''] |
483 files = [''] |
467 results = {'.hg': None} |
484 results = {'.hg': None} |
468 |
485 |
474 |
491 |
475 try: |
492 try: |
476 st = lstat(join(nf)) |
493 st = lstat(join(nf)) |
477 kind = getkind(st.st_mode) |
494 kind = getkind(st.st_mode) |
478 if kind == dirkind: |
495 if kind == dirkind: |
|
496 dostep3 = True |
479 if nf in dmap: |
497 if nf in dmap: |
480 #file deleted on disc but still in dirstate |
498 #file deleted on disc but still in dirstate |
481 results[nf] = None |
499 results[nf] = None |
482 if not dirignore(nf): |
500 if not dirignore(nf): |
483 wadd(nf) |
501 wadd(nf) |
495 if matchfn(nf): |
513 if matchfn(nf): |
496 results[nf] = None |
514 results[nf] = None |
497 keep = True |
515 keep = True |
498 break |
516 break |
499 elif fn.startswith(prefix): |
517 elif fn.startswith(prefix): |
|
518 dostep3 = True |
500 keep = True |
519 keep = True |
501 break |
520 break |
502 if not keep: |
521 if not keep: |
503 if inst.errno != errno.ENOENT: |
522 if inst.errno != errno.ENOENT: |
504 fwarn(ff, inst.strerror) |
523 fwarn(ff, inst.strerror) |
539 results[nf] = st |
558 results[nf] = st |
540 elif nf in dmap and matchfn(nf): |
559 elif nf in dmap and matchfn(nf): |
541 results[nf] = None |
560 results[nf] = None |
542 |
561 |
543 # step 3: report unseen items in the dmap hash |
562 # step 3: report unseen items in the dmap hash |
544 visit = sorted([f for f in dmap if f not in results and matchfn(f)]) |
563 if dostep3 and not nomatches: |
545 for nf, st in zip(visit, util.statfiles([join(i) for i in visit])): |
564 visit = sorted([f for f in dmap if f not in results and matchfn(f)]) |
546 if not st is None and not getkind(st.st_mode) in (regkind, lnkkind): |
565 for nf, st in zip(visit, util.statfiles([join(i) for i in visit])): |
547 st = None |
566 if not st is None and not getkind(st.st_mode) in (regkind, lnkkind): |
548 results[nf] = st |
567 st = None |
|
568 results[nf] = st |
549 |
569 |
550 del results['.hg'] |
570 del results['.hg'] |
551 return results |
571 return results |
552 |
572 |
553 def status(self, match, ignored, clean, unknown): |
573 def status(self, match, ignored, clean, unknown): |