##// END OF EJS Templates
dirstate: skip step 3 in walk if nothing new will match...
Simon Heimberg -
r8589:3edf133d default
parent child Browse files
Show More
@@ -461,6 +461,23 b' class dirstate(object):'
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 = ['']
@@ -476,6 +493,7 b' class dirstate(object):'
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
@@ -497,6 +515,7 b' class dirstate(object):'
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:
@@ -541,11 +560,12 b' class dirstate(object):'
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
General Comments 0
You need to be logged in to leave comments. Login now