'
if level:
print fmt_level(run.level)
if players:
print '%(longskill)s in'%run.__dict__
else:
print '%s in'%(catmap[run.skill[:2]])
if players:
tcomma = ''
else:
tcomma = ','
for run2 in runs:
if run2.record:
print '''%(stime)s'''%run2.__dict__ + tcomma
else:
print '''%(stime)s'''%run2.__dict__ + tcomma
if players and run2 is runs[0]:
print '''by %(playerlist)s, '''%run2.__dict__
if run2.record:
if run2.beaten:
diff = run2.beaten.parsedtime - run2.demoobj.parsedtime
if diff == 1:
ss = ''
else:
ss = 's'
victim = fmt_players(run2.beaten.players)
a, b = [sorted([p.name for p in d.players])
for d in [run2.demoobj, run2.beaten]]
if a == b:
if len(run2.players) == 1:
victim = 'himself'
else:
victim = 'themselves'
print 'beating', victim, 'by', diff, 'second' + ss,
else:
d2b = demo_to_beat(run2.level, run2.skill)
if d2b:
if len(d2b.players) == 1:
l = 'single'
else:
l = d2b.cat[-1]
print 'tablefiller (%s player time %s).'%(
l, d2b.time)
else:
print 'tablefiller',
for updater in coopupdaters:
print '
'
print '%s:'%updater
else:
print 'not a record'
if run2 is not runs[-1]:
sys.stdout.softspace = 0
print ', then'
else:
sys.stdout.softspace = 0
print '.'
@return_output
def curl_for(run):
if run.record:
print '
'
print 'curl -u sdaquake:`cat sdapass` -T %(localname)s ' \
'ftp://speeddemosarchive.com/demos/%(skill)s/' \
'%(filename)s'%run.__dict__
print ''
basecats = ['ER', 'EH', 'NR', 'NH']
def cmpskill(s, t):
i = len(s) - len(t)
if i < 0:
return -1
elif i > 0:
return 1
if len(s) == 3:
i = ord(s[-1]) - ord(t[-1])
if i < 0:
return -1
elif i > 0:
return 1
s = s[:2]
t = t[:2]
i = basecats.index(s) - basecats.index(t)
if i < 0:
return -1
elif i > 0:
return 1
else:
return 0
def history_for(run):
line = ''
levelHadCoops = max([0] + map(len, run.level.records)) > 2
run.affect_config()
if not run.record:
return
if run.beaten:
run.demoobj.lineno = run.beaten.lineno + 1
else:
levels = config.levels.values()
levels.sort(key=lambda x:x.seqno)
i = levels.index(run.level) - 1
if len(run.players) > 1:
if levelHadCoops:
n = run.skill[-1]
coopskills = [s for s in run.level.records if len(s) > 2]
coopskills.sort(cmpskill)
j = coopskills.index(run.skill)
if j == 0:
while max([0] + map(len, levels[i].records)) <= 2:
i -= 1
ln = 0
lvl = levels[i]
for v in lvl.demos.values():
ln = max(ln, max([r.lineno for r in v]))
historyLines[ln] = '\t\t'+historyLines[ln].split(None, 1)[1]
levelHadCoops = False
run.demoobj.lineno = ln + 1
else:
run.demoobj.lineno = run.level.records[
coopskills[j-1]].lineno + 1
else:
while max([0] + map(len, levels[i].records)) <= 2:
i -= 1
ln = 0
lvl = levels[i]
for v in lvl.demos.values():
ln = max(ln, max([r.lineno for r in v]))
run.demoobj.lineno = ln + 1
else:
while run.skill not in levels[i].records:
i -= 1
run.demoobj.lineno = levels[i].records[run.skill].lineno + 1
if run.beaten or \
(len(run.players) > 1 and levelHadCoops):
line += '\t\t'
else:
line += run.bspname
if len(run.bspname) < 8:
line += '\t\t'
else:
line += '\t'
if len(run.players) > 1:
pnames = '/'.join([shortnames.get(p, p) for p in run.players])
if len(pnames) > 22:
parts = pnames.split('/')
preparts = []
i = 1
while len('/'.join(parts[:-i])) + 1> 24:
i += 1
preparts, postparts = parts[:-i], parts[-i:]
pnames = '/'.join(preparts) + '/\n' + '\t\t' + ' '*11 + \
'%-22s'%('/'.join(postparts),)
else:
pnames = recordbot.fmt_players(run.demoobj.players)
line += '%s %-22s %s'%(run.demoobj.date, pnames, run.stime)
if len(run.players) > 1 and not run.beaten:
line += ' ' + run.skill
if run.demoobj.kills:
if len(run.players) > 1:
line += ' '
line += ' [%d]'%run.demoobj.kills
assert hasattr(run.demoobj, 'lineno')
lines = line.split('\n')
for l in lines[::-1]:
historyLines.insert(run.demoobj.lineno-1, l+'\n')
run.demoobj.lineno += len(lines) - 1
for d in config.all_demos():
if d is not run.demoobj and d.lineno >= run.demoobj.lineno:
d.lineno += len(lines)
def make_html(runs):
html = []
news = ['
In the traditional bullet style, we have %s demos:'%len(runs), '
')
f = open(diffoutput, 'w')
for l in difflib.unified_diff(origHistoryLines, historyLines,
fromfile='history.txt~',
tofile='history.txt',
n=3):
html.append(l[:-1])
f.write(l)
f.close()
open(histoutput, 'w').writelines(historyLines)
html.append('Ignoring %r"%unknowns print >>o, '\n'.join(html) print >>o, '' o.close() except: #raise print 'HTML generation failed' import pdb; pdb.post_mortem(sys.exc_traceback) traceback.print_exc() r = raw_input('Try Again? (y/n): ') if not r.startswith('y'): raise import __main__ __main__.__name__ = '' exec open(script).read() in __main__.__dict__ continue break raw_input('hit return to re-gen') import __main__ __main__.__name__ = '' exec open(script).read() in __main__.__dict__ historyLines = origHistoryLines[:] finally: shutil.rmtree(directory) if __name__ == '__main__': sys.path.append('../recordbot') import parseHistory, recordbot print 'parsing' config = parseHistory.Config() parseHistory.parseConfig(open('../recordbot/config', 'U'), config) parseHistory.parseHistory(open('../recordbot/history.txt', 'U'), config) script = os.path.abspath(sys.argv[0]) diffoutput = os.path.abspath('history.diff') histoutput = os.path.abspath('history_new.txt') historyLines = open('../recordbot/history.txt', 'U').readlines() origHistoryLines = historyLines[:] main(os.path.abspath(sys.argv[1]), os.path.abspath('update.html'))