comparison mercurial/revset.py @ 16860:e1aa1ed30030

revset: turn dagrange into a function
author Bryan O'Sullivan <bryano@fb.com>
date Fri, 01 Jun 2012 15:50:22 -0700
parents eeb464ed7275
children 76bcd3eac67e
comparison
equal deleted inserted replaced
16859:eeb464ed7275 16860:e1aa1ed30030
189 else: 189 else:
190 r = range(m, n - 1, -1) 190 r = range(m, n - 1, -1)
191 s = set(subset) 191 s = set(subset)
192 return [x for x in r if x in s] 192 return [x for x in r if x in s]
193 193
194 def dagrange(repo, subset, x, y):
195 return andset(repo, subset,
196 ('func', ('symbol', 'descendants'), x),
197 ('func', ('symbol', 'ancestors'), y))
198
194 def andset(repo, subset, x, y): 199 def andset(repo, subset, x, y):
195 return getset(repo, getset(repo, subset, x), y) 200 return getset(repo, getset(repo, subset, x), y)
196 201
197 def orset(repo, subset, x, y): 202 def orset(repo, subset, x, y):
198 xl = getset(repo, subset, x) 203 xl = getset(repo, subset, x)
1307 "_list": _list, 1312 "_list": _list,
1308 } 1313 }
1309 1314
1310 methods = { 1315 methods = {
1311 "range": rangeset, 1316 "range": rangeset,
1317 "dagrange": dagrange,
1312 "string": stringset, 1318 "string": stringset,
1313 "symbol": symbolset, 1319 "symbol": symbolset,
1314 "and": andset, 1320 "and": andset,
1315 "or": orset, 1321 "or": orset,
1316 "not": notset, 1322 "not": notset,
1330 smallbonus = .5 1336 smallbonus = .5
1331 1337
1332 op = x[0] 1338 op = x[0]
1333 if op == 'minus': 1339 if op == 'minus':
1334 return optimize(('and', x[1], ('not', x[2])), small) 1340 return optimize(('and', x[1], ('not', x[2])), small)
1335 elif op == 'dagrange':
1336 return optimize(('and', ('func', ('symbol', 'descendants'), x[1]),
1337 ('func', ('symbol', 'ancestors'), x[2])), small)
1338 elif op == 'dagrangepre': 1341 elif op == 'dagrangepre':
1339 return optimize(('func', ('symbol', 'ancestors'), x[1]), small) 1342 return optimize(('func', ('symbol', 'ancestors'), x[1]), small)
1340 elif op == 'dagrangepost': 1343 elif op == 'dagrangepost':
1341 return optimize(('func', ('symbol', 'descendants'), x[1]), small) 1344 return optimize(('func', ('symbol', 'descendants'), x[1]), small)
1342 elif op == 'rangepre': 1345 elif op == 'rangepre':
1367 elif op == 'parentpost': 1370 elif op == 'parentpost':
1368 o = optimize(x[1], small) 1371 o = optimize(x[1], small)
1369 return o[0], (op, o[1]) 1372 return o[0], (op, o[1])
1370 elif op == 'group': 1373 elif op == 'group':
1371 return optimize(x[1], small) 1374 return optimize(x[1], small)
1372 elif op in 'range list parent ancestorspec': 1375 elif op in 'dagrange range list parent ancestorspec':
1373 if op == 'parent': 1376 if op == 'parent':
1374 # x^:y means (x^) : y, not x ^ (:y) 1377 # x^:y means (x^) : y, not x ^ (:y)
1375 post = ('parentpost', x[1]) 1378 post = ('parentpost', x[1])
1376 if x[2][0] == 'dagrangepre': 1379 if x[2][0] == 'dagrangepre':
1377 return optimize(('dagrange', post, x[2][1]), small) 1380 return optimize(('dagrange', post, x[2][1]), small)