#!/usr/bin/python
"""
Simulates svnrdump by replaying an existing dump from a file, taking care
of the specified revision range.
To simulate incremental imports the environment variable SVNRMAX can be set
to the highest revision that should be available.
"""
import sys, os


def getrevlimit():
        var = 'SVNRMAX'
        if os.environ.has_key(var):
                return os.environ[var]
        return None

def writedump(url, lower, upper):
        if url.startswith('sim://'):
                filename = url[6:]
                if filename[-1] == '/': filename = filename[:-1] #remove terminating slash
        else:
                raise ValueError('sim:// url required')
        f = open(filename, 'r');
        state = 'header'
        wroterev = False
        while(True):
                l = f.readline()
                if l == '': break
                if state == 'header' and l.startswith('Revision-number: '):
                        state = 'prefix'
                if state == 'prefix' and l == 'Revision-number: %s\n' % lower:
                        state = 'selection'
                if not upper == 'HEAD' and state == 'selection' and l == 'Revision-number: %s\n' % upper:
                        break;

                if state == 'header' or state == 'selection':
                        if state == 'selection': wroterev = True
                        sys.stdout.write(l)
        return wroterev

if __name__ == "__main__":
        if not (len(sys.argv) in (3, 4, 5)):
                print "usage: %s dump URL -rLOWER:UPPER"
                sys.exit(1)
        if not sys.argv[1] == 'dump': raise NotImplementedError('only "dump" is suppported.')
        url = sys.argv[2]
        r = ('0', 'HEAD')
        if len(sys.argv) == 4 and sys.argv[3][0:2] == '-r':
                r = sys.argv[3][2:].lstrip().split(':')
        if not getrevlimit() is None: r[1] = getrevlimit()
        if writedump(url, r[0], r[1]): ret = 0
        else: ret = 1
        sys.exit(ret)
