From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Achleitner Subject: [RFC v2 13/16] Add a svnrdump-simulator replaying a dump file for testing. Date: Mon, 30 Jul 2012 16:31:20 +0200 Message-ID: <1343658683-10713-14-git-send-email-florian.achleitner.2.6.31@gmail.com> References: <1343287957-22040-1-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-1-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-2-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-3-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-4-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-5-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-6-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-7-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-8-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-9-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-10-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-11-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-12-git-send-email-florian.achleitner.2.6.31@gmail.com> <1343658683-10713-13-git-send-email-florian.achleitner.2.6.31@gmail.com> Cc: florian.achleitner.2.6.31@gmail.com To: Jonathan Nieder , David Michael Barr , git@vger.kernel.org X-From: git-owner@vger.kernel.org Mon Jul 30 16:39:53 2012 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Svr8S-00086y-FY for gcvg-git-2@plane.gmane.org; Mon, 30 Jul 2012 16:39:52 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754774Ab2G3Ojr (ORCPT ); Mon, 30 Jul 2012 10:39:47 -0400 Received: from mail-bk0-f46.google.com ([209.85.214.46]:39226 "EHLO mail-bk0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754756Ab2G3Ojg (ORCPT ); Mon, 30 Jul 2012 10:39:36 -0400 Received: by mail-bk0-f46.google.com with SMTP id j10so2859087bkw.19 for ; Mon, 30 Jul 2012 07:39:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=NUd8IBoaIuSmQHhGZco9DH1FVW1Ch0wrzg5rkLf2Dj8=; b=FNVqCYIR0z6eKvwgZ1RG2DmgJWTjez88spCZAc7rYGuY+WqGY6weMuYpKYmBGw2Dd4 rAqbvR7yFVFHD5fQcOBwkiY1i7VZywzNB1ao27alDlrSaka7Z2S6NAYHOnjs44dusNbj LbSLvciJDsB7Hn+K6gnSRf72Fp0XWGjXyQzknZbKeAmx8bzU6OG9pwER8yfaK1h+R+Jf FzwMzCPbF/ljHMhJ9W1CQkkD24jNJw4KsVF5ViE5kAUUPs83LUNfXqYVsvuHS52AoXZP AOj+5ZfWeG9FPybol9D5xMcrk25CGt4acfFe1McJbCqX/5zphsRJhuwYuC6I37GMPpvd gk9g== Received: by 10.205.129.10 with SMTP id hg10mr4023702bkc.78.1343659175695; Mon, 30 Jul 2012 07:39:35 -0700 (PDT) Received: from localhost.localdomain (cm56-227-93.liwest.at. [86.56.227.93]) by mx.google.com with ESMTPS id fu8sm3945866bkc.5.2012.07.30.07.39.33 (version=SSLv3 cipher=OTHER); Mon, 30 Jul 2012 07:39:34 -0700 (PDT) X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1343658683-10713-13-git-send-email-florian.achleitner.2.6.31@gmail.com> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: 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 --- 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