mercurial/revset.py
changeset 43117 8ff1ecfadcd1
parent 43106 d783f945a701
child 43561 45d123d84011
equal deleted inserted replaced
43116:defabf63e969 43117:8ff1ecfadcd1
   978     err = b''
   978     err = b''
   979     if b'size' not in args or b'set' not in args:
   979     if b'size' not in args or b'set' not in args:
   980         raise error.ParseError(_(b'invalid set of arguments'))
   980         raise error.ParseError(_(b'invalid set of arguments'))
   981     minsize, maxsize = getintrange(
   981     minsize, maxsize = getintrange(
   982         args[b'size'],
   982         args[b'size'],
   983         _(b'expectsize requires a size range' b' or a positive integer'),
   983         _(b'expectsize requires a size range or a positive integer'),
   984         _(b'size range bounds must be integers'),
   984         _(b'size range bounds must be integers'),
   985         minsize,
   985         minsize,
   986         maxsize,
   986         maxsize,
   987     )
   987     )
   988     if minsize < 0 or maxsize < 0:
   988     if minsize < 0 or maxsize < 0:
   989         raise error.ParseError(_(b'negative size'))
   989         raise error.ParseError(_(b'negative size'))
   990     rev = getset(repo, fullreposet(repo), args[b'set'], order=order)
   990     rev = getset(repo, fullreposet(repo), args[b'set'], order=order)
   991     if minsize != maxsize and (len(rev) < minsize or len(rev) > maxsize):
   991     if minsize != maxsize and (len(rev) < minsize or len(rev) > maxsize):
   992         err = _(
   992         err = _(b'revset size mismatch. expected between %d and %d, got %d') % (
   993             b'revset size mismatch.' b' expected between %d and %d, got %d'
   993             minsize,
   994         ) % (minsize, maxsize, len(rev))
   994             maxsize,
       
   995             len(rev),
       
   996         )
   995     elif minsize == maxsize and len(rev) != minsize:
   997     elif minsize == maxsize and len(rev) != minsize:
   996         err = _(b'revset size mismatch.' b' expected %d, got %d') % (
   998         err = _(b'revset size mismatch. expected %d, got %d') % (
   997             minsize,
   999             minsize,
   998             len(rev),
  1000             len(rev),
   999         )
  1001         )
  1000     if err:
  1002     if err:
  1001         raise error.RepoLookupError(err)
  1003         raise error.RepoLookupError(err)
  1041     if b'label' not in args:
  1043     if b'label' not in args:
  1042         # i18n: "extra" is a keyword
  1044         # i18n: "extra" is a keyword
  1043         raise error.ParseError(_(b'extra takes at least 1 argument'))
  1045         raise error.ParseError(_(b'extra takes at least 1 argument'))
  1044     # i18n: "extra" is a keyword
  1046     # i18n: "extra" is a keyword
  1045     label = getstring(
  1047     label = getstring(
  1046         args[b'label'], _(b'first argument to extra must be ' b'a string')
  1048         args[b'label'], _(b'first argument to extra must be a string')
  1047     )
  1049     )
  1048     value = None
  1050     value = None
  1049 
  1051 
  1050     if b'value' in args:
  1052     if b'value' in args:
  1051         # i18n: "extra" is a keyword
  1053         # i18n: "extra" is a keyword
  1052         value = getstring(
  1054         value = getstring(
  1053             args[b'value'], _(b'second argument to extra must be ' b'a string')
  1055             args[b'value'], _(b'second argument to extra must be a string')
  1054         )
  1056         )
  1055         kind, value, matcher = stringutil.stringmatcher(value)
  1057         kind, value, matcher = stringutil.stringmatcher(value)
  1056 
  1058 
  1057     def _matchvalue(r):
  1059     def _matchvalue(r):
  1058         extra = repo[r].extra()
  1060         extra = repo[r].extra()
  1312         elif prefix == b'x:':
  1314         elif prefix == b'x:':
  1313             exc.append(value)
  1315             exc.append(value)
  1314         elif prefix == b'r:':
  1316         elif prefix == b'r:':
  1315             if rev is not None:
  1317             if rev is not None:
  1316                 raise error.ParseError(
  1318                 raise error.ParseError(
  1317                     b'_matchfiles expected at most one ' b'revision'
  1319                     b'_matchfiles expected at most one revision'
  1318                 )
  1320                 )
  1319             if value == b'':  # empty means working directory
  1321             if value == b'':  # empty means working directory
  1320                 rev = node.wdirrev
  1322                 rev = node.wdirrev
  1321             else:
  1323             else:
  1322                 rev = value
  1324                 rev = value
  1323         elif prefix == b'd:':
  1325         elif prefix == b'd:':
  1324             if default is not None:
  1326             if default is not None:
  1325                 raise error.ParseError(
  1327                 raise error.ParseError(
  1326                     b'_matchfiles expected at most one ' b'default mode'
  1328                     b'_matchfiles expected at most one default mode'
  1327                 )
  1329                 )
  1328             default = value
  1330             default = value
  1329         else:
  1331         else:
  1330             raise error.ParseError(b'invalid _matchfiles prefix: %s' % prefix)
  1332             raise error.ParseError(b'invalid _matchfiles prefix: %s' % prefix)
  1331     if not default:
  1333     if not default:
  2125     fieldlist = [b'metadata']
  2127     fieldlist = [b'metadata']
  2126     if len(l) > 1:
  2128     if len(l) > 1:
  2127         fieldlist = getstring(
  2129         fieldlist = getstring(
  2128             l[1],
  2130             l[1],
  2129             # i18n: "matching" is a keyword
  2131             # i18n: "matching" is a keyword
  2130             _(b"matching requires a string " b"as its second argument"),
  2132             _(b"matching requires a string as its second argument"),
  2131         ).split()
  2133         ).split()
  2132 
  2134 
  2133     # Make sure that there are no repeated fields,
  2135     # Make sure that there are no repeated fields,
  2134     # expand the 'special' 'metadata' field type
  2136     # expand the 'special' 'metadata' field type
  2135     # and check the 'files' whenever we check the 'diff'
  2137     # and check the 'files' whenever we check the 'diff'
  2282         keyflags.append((k, reverse))
  2284         keyflags.append((k, reverse))
  2283 
  2285 
  2284     if len(keyflags) > 1 and any(k == b'topo' for k, reverse in keyflags):
  2286     if len(keyflags) > 1 and any(k == b'topo' for k, reverse in keyflags):
  2285         # i18n: "topo" is a keyword
  2287         # i18n: "topo" is a keyword
  2286         raise error.ParseError(
  2288         raise error.ParseError(
  2287             _(b'topo sort order cannot be combined ' b'with other sort keys')
  2289             _(b'topo sort order cannot be combined with other sort keys')
  2288         )
  2290         )
  2289 
  2291 
  2290     opts = {}
  2292     opts = {}
  2291     if b'topo.firstbranch' in args:
  2293     if b'topo.firstbranch' in args:
  2292         if any(k == b'topo' for k, reverse in keyflags):
  2294         if any(k == b'topo' for k, reverse in keyflags):