]> git.ipfire.org Git - thirdparty/git.git/blame - contrib/svn-fe/svnrdump_sim.py
Merge branch 'bw/format-patch-o-create-leading-dirs'
[thirdparty/git.git] / contrib / svn-fe / svnrdump_sim.py
CommitLineData
af782494 1#!/usr/bin/env python
16a71854
FA
2"""
3Simulates svnrdump by replaying an existing dump from a file, taking care
4of the specified revision range.
5To simulate incremental imports the environment variable SVNRMAX can be set
6to the highest revision that should be available.
7"""
20c4fbf9
WG
8import sys
9import os
16a71854 10
a33faf28 11if sys.hexversion < 0x02040000:
20c4fbf9
WG
12 # The limiter is the ValueError() calls. This may be too conservative
13 sys.stderr.write("svnrdump-sim.py: requires Python 2.4 or later.\n")
14 sys.exit(1)
15
16a71854
FA
16
17def getrevlimit():
20c4fbf9
WG
18 var = 'SVNRMAX'
19 if var in os.environ:
20 return os.environ[var]
21 return None
22
16a71854
FA
23
24def writedump(url, lower, upper):
20c4fbf9
WG
25 if url.startswith('sim://'):
26 filename = url[6:]
27 if filename[-1] == '/':
28 filename = filename[:-1] # remove terminating slash
29 else:
30 raise ValueError('sim:// url required')
31 f = open(filename, 'r')
32 state = 'header'
33 wroterev = False
34 while(True):
35 l = f.readline()
36 if l == '':
37 break
38 if state == 'header' and l.startswith('Revision-number: '):
39 state = 'prefix'
40 if state == 'prefix' and l == 'Revision-number: %s\n' % lower:
41 state = 'selection'
42 if not upper == 'HEAD' and state == 'selection' and \
43 l == 'Revision-number: %s\n' % upper:
44 break
16a71854 45
20c4fbf9
WG
46 if state == 'header' or state == 'selection':
47 if state == 'selection':
48 wroterev = True
49 sys.stdout.write(l)
50 return wroterev
16a71854
FA
51
52if __name__ == "__main__":
20c4fbf9
WG
53 if not (len(sys.argv) in (3, 4, 5)):
54 print("usage: %s dump URL -rLOWER:UPPER")
55 sys.exit(1)
56 if not sys.argv[1] == 'dump':
57 raise NotImplementedError('only "dump" is suppported.')
58 url = sys.argv[2]
59 r = ('0', 'HEAD')
60 if len(sys.argv) == 4 and sys.argv[3][0:2] == '-r':
61 r = sys.argv[3][2:].lstrip().split(':')
62 if not getrevlimit() is None:
63 r[1] = getrevlimit()
64 if writedump(url, r[0], r[1]):
65 ret = 0
66 else:
67 ret = 1
68 sys.exit(ret)