def run(self): self.repo.dirstate.invalidate() extract = lambda x, y: dict(zip(x, map(y.get, x))) stopts = extract(('unknown', 'ignored', 'clean'), self.opts) patchecked = {} try: if self.pats: if self.opts.get('checkall'): # quickop sets this flag to pre-check even !?IC files precheckfn = lambda x: True else: # status and commit only pre-check MAR files precheckfn = lambda x: x < 4 m = hglib.match(self.repo[None], self.pats) self.repo.bfstatus = True self.repo.lfstatus = True status = self.repo.status(match=m, **stopts) self.repo.bfstatus = False self.repo.lfstatus = False # Record all matched files as initially checked for i, stat in enumerate(StatusType.preferredOrder): if stat == 'S': continue val = statusTypes[stat] if self.opts[val.name]: d = dict([(fn, precheckfn(i)) for fn in status[i]]) patchecked.update(d) wctx = context.workingctx(self.repo, changes=status) self.patchecked = patchecked elif self.pctx: self.repo.bfstatus = True self.repo.lfstatus = True status = self.repo.status(node1=self.pctx.p1().node(), **stopts) self.repo.bfstatus = False self.repo.lfstatus = False wctx = context.workingctx(self.repo, changes=status) else: wctx = self.repo[None] self.repo.bfstatus = True self.repo.lfstatus = True wctx.status(**stopts) self.repo.bfstatus = False self.repo.lfstatus = False self.wctx = wctx wctx.dirtySubrepos = [] for s in wctx.substate: if wctx.sub(s).dirty(): wctx.dirtySubrepos.append(s) except EnvironmentError, e: self.showMessage.emit(hglib.tounicode(str(e)))
except error.RepoError: # We aren't in a working tree debugf("%s: not in repo", pdir) add(pdir + "*", IGNORED) return IGNORED except Exception, e: debugf("error while handling %s:", pdir) debugf(e) add(pdir + "*", UNKNOWN) return UNKNOWN # get file status tc1 = GetTickCount() try: matcher = hglib.match(repo[None], [pdir]) repostate = repo.status(match=matcher, ignored=True, clean=True, unknown=True) except util.Abort, inst: debugf("abort: %s", inst) debugf("treat as unknown : %s", path) return UNKNOWN debugf("status() took %g ticks", (GetTickCount() - tc1)) mergestate = repo.dirstate.parents()[1] != node.nullid and hasattr(merge, "mergestate") # cached file info tc = GetTickCount() overlay_cache = {} add(root, ROOT) add(os.path.join(root, ".hg"), NOT_IN_REPO) states = STATUS_STATES