git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Add a svnrdump-simulator replaying a dump file for testing.

From
Florian Achleitner <florian.achleitner.2.6.31@gmail.com>
Date
Jul 23, 2012, 20:08 UTC
Message-ID
<1343074107-23262-1-git-send-email-florian.achleitner.2.6.31@gmail.com>
In-Reply-To
<7v4noyo6tc.fsf@alter.siamese.dyndns.org>

To ease testing without depending on a reachable svn server, this compact python script mimics parts of svnrdumps behaviour. It requires the remote url to start with sim://. Eventual slashes at the end of the url are stripped. The url specifies the path of the svn dump file (as created by svnrdump). Selectable parts of it, or the whole file, are written to stdout. The part is selectable by giving start and end revision on the command line.

Start and end revisions can be specified on the command line (-rSTART:END, like for svnrdump). Only revisions between START and excluding END are replayed from the dumpfile specified by the url. END can also be HEAD.

If the start revision specified on the command line doesn't exist in the dump file, it returns 1. This emulates the behaviour of svnrdump when START>HEAD, i.e. the requested start revision doesn't exist on the server.

To allow using the same dump file for simulating multiple incremental imports the highest visible revision can be limited by setting the environment variable SVNRMAX to that value. This effectively limits HEAD to simulate the situation where higher revs don't exist yet.

Signed-off-by: Florian Achleitner <florian.achleitner.2.6.31@gmail.com>
---
 contrib/svn-fe/svnrdump_sim.py |   53 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100755 contrib/svn-fe/svnrdump_sim.py
diff --git a/contrib/svn-fe/svnrdump_sim.py b/contrib/svn-fe/svnrdump_sim.py
new file mode 100755
index 0000000..4701d76
--- /dev/null
+++ b/contrib/svn-fe/svnrdump_sim.py
@@ -0,0 +1,53 @@
+#!/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)
\ No newline at end of file
-- 
1.7.9.5
Previous: Junio C HamanoNext: Junio C Hamano
Message 14 of 21 in “GSOC remote-svn”
  1. Florian AchleitnerJul 22, 2012
  2. Jonathan NiederJul 22, 2012
  3. Florian AchleitnerJul 23, 2012
  4. Jonathan NiederJul 23, 2012
  5. Add a svnrdump-simulator replaying a dump file for testing.Florian Achleitner, Jul 23, 2012
  6. Jonathan NiederJul 23, 2012
  7. Florian AchleitnerJul 23, 2012
  8. Florian AchleitnerJul 23, 2012
  9. Matthieu MoyJul 23, 2012
  10. Florian AchleitnerJul 23, 2012
  11. Matthieu MoyJul 23, 2012
  12. Jeff KingJul 23, 2012
  13. Junio C HamanoJul 23, 2012
  14. Add a svnrdump-simulator replaying a dump file for testing.Florian Achleitner, Jul 23, 2012
  15. Junio C HamanoJul 23, 2012
  16. Jonathan NiederJul 24, 2012
  17. Florian AchleitnerJul 25, 2012
  18. Erik Faye-LundJul 24, 2012
  19. Matthieu MoyJul 23, 2012
  20. Jonathan NiederJul 23, 2012
  21. Florian AchleitnerJul 23, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.