Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/fileset.py @ 38915: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
38914:755741c39230 | 38915: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 |