comparison mercurial/fileset.py @ 38876:da3bd2afd68d

fileset: pass in basectx to _buildstatus() I'll make matchctx remember both ctx and basectx so that file status between them can be computed later. This prepares for the change.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 22 Jul 2018 10:55:38 +0900
parents 899b4c74209c
children 8d6780f0b34d
comparison
equal deleted inserted replaced
38875:755741c39230 38876:da3bd2afd68d
384 revs = scmutil.revrange(repo, [revspec]) 384 revs = scmutil.revrange(repo, [revspec])
385 385
386 matchers = [] 386 matchers = []
387 for r in revs: 387 for r in revs:
388 ctx = repo[r] 388 ctx = repo[r]
389 matchers.append(getmatch(mctx.switch(ctx, _buildstatus(ctx, x)), x)) 389 mc = mctx.switch(ctx, _buildstatus(ctx.p1(), ctx, x))
390 matchers.append(getmatch(mc, x))
390 if not matchers: 391 if not matchers:
391 return mctx.never() 392 return mctx.never()
392 if len(matchers) == 1: 393 if len(matchers) == 1:
393 return matchers[0] 394 return matchers[0]
394 return matchmod.unionmatcher(matchers) 395 return matchmod.unionmatcher(matchers)
411 reverr = _("second argument to status must be a revision") 412 reverr = _("second argument to status must be a revision")
412 revspec = getstring(r, reverr) 413 revspec = getstring(r, reverr)
413 if not revspec: 414 if not revspec:
414 raise error.ParseError(reverr) 415 raise error.ParseError(reverr)
415 basectx, ctx = scmutil.revpair(repo, [baserevspec, revspec]) 416 basectx, ctx = scmutil.revpair(repo, [baserevspec, revspec])
416 return getmatch(mctx.switch(ctx, _buildstatus(ctx, x, basectx=basectx)), x) 417 mc = mctx.switch(ctx, _buildstatus(basectx, ctx, x))
418 return getmatch(mc, x)
417 419
418 @predicate('subrepo([pattern])') 420 @predicate('subrepo([pattern])')
419 def subrepo(mctx, x): 421 def subrepo(mctx, x):
420 """Subrepositories whose paths match the given pattern. 422 """Subrepositories whose paths match the given pattern.
421 """ 423 """
536 def match(ctx, expr, badfn=None): 538 def match(ctx, expr, badfn=None):
537 """Create a matcher for a single fileset expression""" 539 """Create a matcher for a single fileset expression"""
538 tree = filesetlang.parse(expr) 540 tree = filesetlang.parse(expr)
539 tree = filesetlang.analyze(tree) 541 tree = filesetlang.analyze(tree)
540 tree = filesetlang.optimize(tree) 542 tree = filesetlang.optimize(tree)
541 mctx = matchctx(ctx, _buildstatus(ctx, tree), badfn=badfn) 543 mctx = matchctx(ctx, _buildstatus(ctx.p1(), ctx, tree), badfn=badfn)
542 return getmatch(mctx, tree) 544 return getmatch(mctx, tree)
543 545
544 def _buildstatus(ctx, tree, basectx=None): 546 def _buildstatus(basectx, ctx, tree):
545 # do we need status info? 547 # do we need status info?
546 548
547 if _intree(_statuscallers, tree): 549 if _intree(_statuscallers, tree):
548 unknown = _intree(['unknown'], tree) 550 unknown = _intree(['unknown'], tree)
549 ignored = _intree(['ignored'], tree) 551 ignored = _intree(['ignored'], tree)
550 552
551 if basectx is None:
552 basectx = ctx.p1()
553 return basectx.status(ctx, listunknown=unknown, listignored=ignored, 553 return basectx.status(ctx, listunknown=unknown, listignored=ignored,
554 listclean=True) 554 listclean=True)
555 else: 555 else:
556 return None 556 return None
557 557