Show More
@@ -754,50 +754,54 b' class dirstate(object):' | |||||
754 |
|
754 | |||
755 | skipstep3 = skipstep3 and not (work or dirsnotfound) |
|
755 | skipstep3 = skipstep3 and not (work or dirsnotfound) | |
756 | work = [d for d in work if not dirignore(d[0])] |
|
756 | work = [d for d in work if not dirignore(d[0])] | |
757 | wadd = work.append |
|
|||
758 |
|
757 | |||
759 | # step 2: visit subdirectories |
|
758 | # step 2: visit subdirectories | |
760 |
|
|
759 | def traverse(work): | |
761 |
|
|
760 | wadd = work.append | |
762 | skip = None |
|
761 | while work: | |
763 |
|
|
762 | nd, d = work.pop() | |
764 |
|
|
763 | skip = None | |
765 |
|
|
764 | if nd == '.': | |
766 | else: |
|
765 | nd = '' | |
767 |
|
|
766 | d = '' | |
768 | try: |
|
|||
769 | entries = listdir(join(nd), stat=True, skip=skip) |
|
|||
770 | except OSError, inst: |
|
|||
771 | if inst.errno in (errno.EACCES, errno.ENOENT): |
|
|||
772 | match.bad(self.pathto(nd), inst.strerror) |
|
|||
773 | continue |
|
|||
774 | raise |
|
|||
775 | for f, kind, st in entries: |
|
|||
776 | if normalizefile: |
|
|||
777 | # even though f might be a directory, we're only interested |
|
|||
778 | # in comparing it to files currently in the dmap -- |
|
|||
779 | # therefore normalizefile is enough |
|
|||
780 | nf = normalizefile(nd and (nd + "/" + f) or f, True, True) |
|
|||
781 | f = d and (d + "/" + f) or f |
|
|||
782 | else: |
|
767 | else: | |
783 | nf = nd and (nd + "/" + f) or f |
|
768 | skip = '.hg' | |
784 |
|
|
769 | try: | |
785 | if nf not in results: |
|
770 | entries = listdir(join(nd), stat=True, skip=skip) | |
786 | if kind == dirkind: |
|
771 | except OSError, inst: | |
787 |
|
|
772 | if inst.errno in (errno.EACCES, errno.ENOENT): | |
788 |
|
|
773 | match.bad(self.pathto(nd), inst.strerror) | |
789 |
|
|
774 | continue | |
790 |
|
|
775 | raise | |
791 | if nf in dmap and (matchalways or matchfn(nf)): |
|
776 | for f, kind, st in entries: | |
|
777 | if normalizefile: | |||
|
778 | # even though f might be a directory, we're only | |||
|
779 | # interested in comparing it to files currently in the | |||
|
780 | # dmap -- therefore normalizefile is enough | |||
|
781 | nf = normalizefile(nd and (nd + "/" + f) or f, True, | |||
|
782 | True) | |||
|
783 | f = d and (d + "/" + f) or f | |||
|
784 | else: | |||
|
785 | nf = nd and (nd + "/" + f) or f | |||
|
786 | f = nf | |||
|
787 | if nf not in results: | |||
|
788 | if kind == dirkind: | |||
|
789 | if not ignore(nf): | |||
|
790 | if matchtdir: | |||
|
791 | matchtdir(nf) | |||
|
792 | wadd((nf, f)) | |||
|
793 | if nf in dmap and (matchalways or matchfn(nf)): | |||
|
794 | results[nf] = None | |||
|
795 | elif kind == regkind or kind == lnkkind: | |||
|
796 | if nf in dmap: | |||
|
797 | if matchalways or matchfn(nf): | |||
|
798 | results[nf] = st | |||
|
799 | elif (matchalways or matchfn(f)) and not ignore(nf): | |||
|
800 | results[nf] = st | |||
|
801 | elif nf in dmap and (matchalways or matchfn(nf)): | |||
792 | results[nf] = None |
|
802 | results[nf] = None | |
793 | elif kind == regkind or kind == lnkkind: |
|
803 | ||
794 | if nf in dmap: |
|
804 | traverse(work) | |
795 | if matchalways or matchfn(nf): |
|
|||
796 | results[nf] = st |
|
|||
797 | elif (matchalways or matchfn(f)) and not ignore(nf): |
|
|||
798 | results[nf] = st |
|
|||
799 | elif nf in dmap and (matchalways or matchfn(nf)): |
|
|||
800 | results[nf] = None |
|
|||
801 |
|
805 | |||
802 | for s in subrepos: |
|
806 | for s in subrepos: | |
803 | del results[s] |
|
807 | del results[s] |
General Comments 0
You need to be logged in to leave comments.
Login now