import os, shutil, re
if os.path.exists('new_flr.txt'): os.remove('new_flr.txt')
if os.path.exists('new_flr.txt,v'): os.remove('new_flr.txt,v')
p = os.popen('rlog current_flr.txt')
target = '1.1305'
revs = []
for stuff in [i.strip() for i in p.read().split('----------------------------')]:
    if not stuff.startswith('revision'): continue
    lines = stuff.split('\n')
    revnum = lines[0].split(' ')[1]
    date = lines[1][6:lines[1].find(';')]
    message = '\n'.join(lines[2:])
    if revnum == target: break
    revs.append((revnum, date, message))


shutil.copy('current_flr.txt,v', 'new_flr.txt,v')
#os.chmod('new_flr.txt,v', 0666)

diffs = {}

for revnum, date, message in revs:
    parts = revnum.split('.')
    oldnum = parts[0] + '.' + str(int(parts[1]) - 1)
    diffs[revnum] = os.popen('rcsdiff -r%s -r%s new_flr.txt' % (oldnum, revnum)).read()

for revnum, date, message in revs:
    assert not os.system('rcs -o%s new_flr.txt' % revnum)
assert not os.system('rcs -o%s new_flr.txt' % target)

assert not os.system('co -u new_flr.txt')
for revnum, date, message in revs[::-1]:
    assert not os.system('co -l new_flr.txt')
    open('the_patch', 'w').write(diffs[revnum])
    ret = os.system('patch new_flr.txt < the_patch')
    if ret:
        rf = re.findall(re.compile('^- ', re.M), open('new_flr.txt.rej').read())
        print rf
        assert 1 == len(rf)
        os.remove('new_flr.txt.rej')
    assert not os.system('ci -u -d"%s" -m"%s" new_flr.txt' % (date, message))
    os.remove('the_patch')
