mercurial/revsetlang.py
changeset 35560 3a8810c1b9bc
parent 35559 a480551bd1b4
child 35561 4c3a4bb31c0e
equal deleted inserted replaced
35559:a480551bd1b4 35560:3a8810c1b9bc
   618 
   618 
   619         m = l // 2
   619         m = l // 2
   620         return '(%s or %s)' % (listexp(s[:m], t), listexp(s[m:], t))
   620         return '(%s or %s)' % (listexp(s[:m], t), listexp(s[m:], t))
   621 
   621 
   622     expr = pycompat.bytestr(expr)
   622     expr = pycompat.bytestr(expr)
       
   623     argiter = iter(args)
   623     ret = []
   624     ret = []
   624     pos = 0
   625     pos = 0
   625     arg = 0
       
   626     while pos < len(expr):
   626     while pos < len(expr):
   627         q = expr.find('%', pos)
   627         q = expr.find('%', pos)
   628         if q < 0:
   628         if q < 0:
   629             ret.append(expr[pos:])
   629             ret.append(expr[pos:])
   630             break
   630             break
   632         pos = q + 1
   632         pos = q + 1
   633         d = expr[pos]
   633         d = expr[pos]
   634         if d == '%':
   634         if d == '%':
   635             ret.append(d)
   635             ret.append(d)
   636         elif d in 'dsnbr':
   636         elif d in 'dsnbr':
   637             ret.append(argtype(d, args[arg]))
   637             ret.append(argtype(d, next(argiter)))
   638             arg += 1
       
   639         elif d == 'l':
   638         elif d == 'l':
   640             # a list of some type
   639             # a list of some type
   641             pos += 1
   640             pos += 1
   642             d = expr[pos]
   641             d = expr[pos]
   643             ret.append(listexp(list(args[arg]), d))
   642             ret.append(listexp(list(next(argiter)), d))
   644             arg += 1
       
   645         else:
   643         else:
   646             raise error.Abort(_('unexpected revspec format character %s') % d)
   644             raise error.Abort(_('unexpected revspec format character %s') % d)
   647         pos += 1
   645         pos += 1
   648 
   646 
   649     return ''.join(ret)
   647     return ''.join(ret)