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

[PATCH/RFC v4 14/16] Add a svnrdump-simulator replaying a dump file for testing.

From
Florian Achleitner <florian.achleitner.2.6.31@gmail.com>
Date
Aug 17, 2012, 20:25 UTC
Message-ID
<1345235157-702-15-git-send-email-florian.achleitner.2.6.31@gmail.com>
In-Reply-To
<1345235157-702-14-git-send-email-florian.achleitner.2.6.31@gmail.com>

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://. Start and end revisions are evaluated. If the requested revision doesn't exist, as it is the case with incremental imports, if no new commit was added, it returns 1 (like svnrdump). To allow using the same dump file for simulating multiple incremental imports the highest revision can be limited by setting the environment variable SVNRMAX to that value. This simulates 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..ab4ccf1
--- /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)
-- 
1.7.9.5
Previous: Florian AchleitnerNext: Florian Achleitner
Message 15 of 26 in “GSOC remote-svn”
  1. 01/16 GSOC remote-svnFlorian Achleitner, Aug 17, 2012
  2. 01/16 Implement a remote helper for svn in C.Florian Achleitner, Aug 17, 2012
  3. 02/16 Integrate remote-svn into svn-fe/Makefile.Florian Achleitner, Aug 17, 2012
  4. 03/16 Add svndump_init_fd to allow reading dumps from arbitrary FDs.Florian Achleitner, Aug 17, 2012
  5. 04/16 Add argv_array_detach and argv_array_free_detached.Florian Achleitner, Aug 17, 2012
  6. 05/16 Connect fast-import to the remote-helper via pipe, adding 'bidi-import' capability.Florian Achleitner, Aug 17, 2012
  7. 06/16 Add documentation for the 'bidi-import' capability of remote-helpers.Florian Achleitner, Aug 17, 2012
  8. 07/16 When debug==1, start fast-import with "--stats" instead of "--quiet".Florian Achleitner, Aug 17, 2012
  9. 08/16 remote-svn, vcs-svn: Enable fetching to private refs.Florian Achleitner, Aug 17, 2012
  10. 09/16 Allow reading svn dumps from files via file:// urls.Florian Achleitner, Aug 17, 2012
  11. 10/16 vcs-svn: add fast_export_note to create notesFlorian Achleitner, Aug 17, 2012
  12. 11/16 Create a note for every imported commit containing svn metadata.Florian Achleitner, Aug 17, 2012
  13. 12/16 remote-svn: Activate import/export-marks for fast-import.Florian Achleitner, Aug 17, 2012
  14. 13/16 remote-svn: add incremental import.Florian Achleitner, Aug 17, 2012
  15. 14/16 Add a svnrdump-simulator replaying a dump file for testing.Florian Achleitner, Aug 17, 2012
  16. 15/16 remote-svn: add marks-file regeneration.Florian Achleitner, Aug 17, 2012
  17. 16/16 Add a test script for remote-svn.Florian Achleitner, Aug 17, 2012
  18. Junio C HamanoAug 18, 2012
  19. Florian AchleitnerAug 18, 2012
  20. Junio C HamanoAug 18, 2012
  21. Junio C HamanoAug 19, 2012
  22. Florian AchleitnerAug 20, 2012
  23. Junio C HamanoAug 20, 2012
  24. Florian AchleitnerAug 20, 2012
  25. Junio C HamanoAug 20, 2012
  26. Jonathan NiederAug 20, 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.