2015-12-21 18:07:52 +11:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
# Sort a group list, carefully preserving comments.
|
|
|
|
|
|
|
|
|
|
def xfstest_key(key):
|
|
|
|
|
'''Extract the numeric part of a test name if possible.'''
|
|
|
|
|
k = 0
|
|
|
|
|
|
|
|
|
|
assert type(key) == str
|
|
|
|
|
|
|
|
|
|
# No test number at all...
|
|
|
|
|
if not key[0].isdigit():
|
|
|
|
|
return key
|
|
|
|
|
|
|
|
|
|
# ...otherwise extract as much number as we can.
|
|
|
|
|
for digit in key:
|
|
|
|
|
if digit.isdigit():
|
|
|
|
|
k = k * 10 + int(digit)
|
|
|
|
|
else:
|
|
|
|
|
return k
|
|
|
|
|
return k
|
|
|
|
|
|
|
|
|
|
def read_group(fd):
|
|
|
|
|
'''Read the group list, carefully attaching comments to the next test.'''
|
|
|
|
|
tests = {}
|
|
|
|
|
comments = None
|
|
|
|
|
|
|
|
|
|
for line in fd:
|
|
|
|
|
sline = line.strip()
|
|
|
|
|
tokens = sline.split()
|
|
|
|
|
if len(tokens) == 0 or tokens[0] == '#':
|
|
|
|
|
if comments == None:
|
|
|
|
|
comments = []
|
|
|
|
|
comments.append(sline)
|
|
|
|
|
else:
|
|
|
|
|
tests[tokens[0]] = (comments, tokens[1:])
|
|
|
|
|
comments = None
|
|
|
|
|
return tests
|
|
|
|
|
|
|
|
|
|
def sort_keys(keys):
|
|
|
|
|
'''Separate keys into integer and non-integer tests.'''
|
|
|
|
|
int_keys = []
|
|
|
|
|
int_xkeys = []
|
|
|
|
|
str_keys = []
|
|
|
|
|
|
|
|
|
|
# Sort keys into integer(ish) tests and other
|
|
|
|
|
for key in keys:
|
|
|
|
|
xkey = xfstest_key(key)
|
|
|
|
|
if type(xkey) == int:
|
|
|
|
|
int_keys.append(key)
|
|
|
|
|
int_xkeys.append(xkey)
|
|
|
|
|
else:
|
|
|
|
|
str_keys.append(key)
|
|
|
|
|
return (int_keys, int_xkeys, str_keys)
|
|
|
|
|
|
|
|
|
|
def write_sorted(tests, fd):
|
|
|
|
|
def dump_xkey(xkey):
|
|
|
|
|
(comments, tokens) = tests[key]
|
|
|
|
|
if comments:
|
|
|
|
|
for c in comments:
|
|
|
|
|
fd.write('%s\n' % c)
|
|
|
|
|
fd.write('%s %s\n' % (key, ' '.join(tokens)))
|
|
|
|
|
'''Print tests (and comments) in number order.'''
|
|
|
|
|
|
|
|
|
|
(int_keys, ignored, str_keys) = sort_keys(tests.keys())
|
|
|
|
|
for key in sorted(int_keys, key = xfstest_key):
|
|
|
|
|
dump_xkey(key)
|
|
|
|
|
for key in sorted(str_keys):
|
|
|
|
|
dump_xkey(key)
|
|
|
|
|
|
|
|
|
|
def sort_main():
|
|
|
|
|
if '--help' in sys.argv[1:]:
|
|
|
|
|
print('Usage: %s groupfiles' % sys.argv[0])
|
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
|
|
for arg in sys.argv[1:]:
|
|
|
|
|
with open(arg, 'r+') as fd:
|
|
|
|
|
x = read_group(fd)
|
|
|
|
|
fd.seek(0, 0)
|
|
|
|
|
write_sorted(x, fd)
|
|
|
|
|
|
|
|
|
|
def nextid_main():
|
|
|
|
|
if '--help' in sys.argv[1:]:
|
|
|
|
|
print('Usage: %s group[/startid] ' % sys.argv[0])
|
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
|
|
if len(sys.argv) != 2:
|
|
|
|
|
print('Specify exactly one group name.')
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
c = sys.argv[1].split('/')
|
|
|
|
|
if len(c) > 1:
|
|
|
|
|
startid = int(c[1])
|
|
|
|
|
else:
|
|
|
|
|
startid = 1
|
|
|
|
|
group = c[0]
|
|
|
|
|
|
|
|
|
|
with open('tests/%s/group' % group, 'r') as fd:
|
|
|
|
|
x = read_group(fd)
|
|
|
|
|
xkeys = {int(x) for x in sort_keys(x.keys())[1]}
|
|
|
|
|
|
|
|
|
|
xid = startid
|
|
|
|
|
while xid in xkeys:
|
|
|
|
|
xid += 1
|
2017-01-24 18:30:04 +08:00
|
|
|
print('%s/%03d' % (group, xid))
|
2015-12-21 18:07:52 +11:00
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
if 'nextid' in sys.argv[0]:
|
|
|
|
|
nextid_main()
|
|
|
|
|
else:
|
|
|
|
|
sort_main()
|