comparison mercurial/fileset.py @ 16443:9e02e032b522

fileset: add "subrepo" fileset symbol This new fileset symbol returns a list of subrepos whose paths match a given pattern. If the argument has no pattern type set, an exact match is performed. If no argument is passed, return a list of all subrepos.
author Angel Ezquerra <angel.ezquerra@gmail.com>
date Thu, 22 Mar 2012 21:12:15 +0100
parents 042e84e39dee
children 5d9e2031c0b1
comparison
equal deleted inserted replaced
16442:9181188ffb5b 16443:9e02e032b522
356 p = mctx.ctx[f].parents() 356 p = mctx.ctx[f].parents()
357 if p and p[0].path() != f: 357 if p and p[0].path() != f:
358 s.append(f) 358 s.append(f)
359 return s 359 return s
360 360
361 def subrepo(mctx, x):
362 """``subrepo([pattern])``
363 Subrepositories whose paths match the given pattern.
364 """
365 # i18n: "subrepo" is a keyword
366 getargs(x, 0, 1, _("subrepo takes at most one argument"))
367 ctx = mctx.ctx
368 sstate = ctx.substate
369 if x:
370 pat = getstring(x, _("subrepo requires a pattern or no arguments"))
371
372 import match as matchmod # avoid circular import issues
373 fast = not matchmod.patkind(pat)
374 if fast:
375 def m(s):
376 return (s == pat)
377 else:
378 m = matchmod.match(ctx._repo.root, '', [pat], ctx=ctx)
379 return [sub for sub in sstate if m(sub)]
380 else:
381 return [sub for sub in sstate]
382
361 symbols = { 383 symbols = {
362 'added': added, 384 'added': added,
363 'binary': binary, 385 'binary': binary,
364 'clean': clean, 386 'clean': clean,
365 'copied': copied, 387 'copied': copied,
374 'resolved': resolved, 396 'resolved': resolved,
375 'size': size, 397 'size': size,
376 'symlink': symlink, 398 'symlink': symlink,
377 'unknown': unknown, 399 'unknown': unknown,
378 'unresolved': unresolved, 400 'unresolved': unresolved,
401 'subrepo': subrepo,
379 } 402 }
380 403
381 methods = { 404 methods = {
382 'string': stringset, 405 'string': stringset,
383 'symbol': stringset, 406 'symbol': stringset,