From: Sasha Khapyorsky <sashak@voltaire.com>
To: Junio C Hamano <junkio@cox.net>
Cc: Chris Lee <chris133@gmail.com>, Git Mailing List <git@vger.kernel.org>
Subject: [PATCH] git-svnimport: support for incremental import
Date: Sun, 7 Jan 2007 02:17:19 +0200 [thread overview]
Message-ID: <20070107001719.GB16771@sashak.voltaire.com> (raw)
In-Reply-To: <204011cb0701041404g684525fdm1d057e57a57aca92@mail.gmail.com>
This adds ability to do import "in chunks" (default 1000 revisions),
after each chunk git repo will be repacked. The option -R is used to
change default value of chunk size (or how often repository will
repacked).
Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
---
Chris reported successful test with this patch.
Documentation/git-svnimport.txt | 10 +++++++++-
git-svnimport.perl | 32 +++++++++++++++++++++++++-------
2 files changed, 34 insertions(+), 8 deletions(-)
diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt
index 2c7c7da..b166cf3 100644
--- a/Documentation/git-svnimport.txt
+++ b/Documentation/git-svnimport.txt
@@ -15,7 +15,7 @@ SYNOPSIS
[ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ]
[ -s start_chg ] [ -m ] [ -r ] [ -M regex ]
[ -I <ignorefile_name> ] [ -A <author_file> ]
- [ -P <path_from_trunk> ]
+ [ -R <repack_each_revs>] [ -P <path_from_trunk> ]
<SVN_repository_URL> [ <path> ]
@@ -108,6 +108,14 @@ repository without -A.
Formerly, this option controlled how many revisions to pull,
due to SVN memory leaks. (These have been worked around.)
+-R <repack_each_revs>::
+ Specify how often git repository should be repacked.
++
+The default value is 1000. git-svnimport will do import in chunks of 1000
+revisions, after each chunk git repository will be repacked. To disable
+this behavior specify some big value here which is mote than number of
+revisions to import.
+
-P <path_from_trunk>::
Partial import of the SVN tree.
+
diff --git a/git-svnimport.perl b/git-svnimport.perl
index 071777b..afbbe63 100755
--- a/git-svnimport.perl
+++ b/git-svnimport.perl
@@ -31,12 +31,13 @@ $SIG{'PIPE'}="IGNORE";
$ENV{'TZ'}="UTC";
our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,
- $opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D,$opt_S,$opt_F,$opt_P);
+ $opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D,$opt_S,$opt_F,
+ $opt_P,$opt_R);
sub usage() {
print STDERR <<END;
Usage: ${\basename $0} # fetch/update GIT from SVN
- [-o branch-for-HEAD] [-h] [-v] [-l max_rev]
+ [-o branch-for-HEAD] [-h] [-v] [-l max_rev] [-R repack_each_revs]
[-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname]
[-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg]
[-m] [-M regex] [-A author_file] [-S] [-F] [-P project_name] [SVN_URL]
@@ -44,7 +45,7 @@ END
exit(1);
}
-getopts("A:b:C:dDFhiI:l:mM:o:rs:t:T:SP:uv") or usage();
+getopts("A:b:C:dDFhiI:l:mM:o:rs:t:T:SP:R:uv") or usage();
usage if $opt_h;
my $tag_name = $opt_t || "tags";
@@ -52,6 +53,7 @@ my $trunk_name = $opt_T || "trunk";
my $branch_name = $opt_b || "branches";
my $project_name = $opt_P || "";
$project_name = "/" . $project_name if ($project_name);
+my $repack_after = $opt_R || 1000;
@ARGV == 1 or @ARGV == 2 or usage();
@@ -938,11 +940,27 @@ if ($opt_l < $current_rev) {
exit;
}
-print "Fetching from $current_rev to $opt_l ...\n" if $opt_v;
+print "Processing from $current_rev to $opt_l ...\n" if $opt_v;
-my $pool=SVN::Pool->new;
-$svn->{'svn'}->get_log("/",$current_rev,$opt_l,0,1,1,\&commit_all,$pool);
-$pool->clear;
+my $from_rev;
+my $to_rev = $current_rev;
+
+while ($to_rev < $opt_l) {
+ $from_rev = $to_rev;
+ $to_rev = $from_rev + $repack_after;
+ $to_rev = $opt_l if $opt_l < $to_rev;
+ print "Fetching from $from_rev to $to_rev ...\n" if $opt_v;
+ my $pool=SVN::Pool->new;
+ $svn->{'svn'}->get_log("/",$from_rev,$to_rev,0,1,1,\&commit_all,$pool);
+ $pool->clear;
+ my $pid = fork();
+ die "Fork: $!\n" unless defined $pid;
+ unless($pid) {
+ exec("git-repack", "-d")
+ or die "Cannot repack: $!\n";
+ }
+ waitpid($pid, 0);
+}
unlink($git_index);
--
1.5.0.rc0.g2484-dirty
next prev parent reply other threads:[~2007-01-07 0:10 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-03 23:52 git-svnimport failed and now git-repack hates me Chris Lee
2007-01-04 1:59 ` Linus Torvalds
2007-01-04 2:06 ` Shawn O. Pearce
2007-01-04 2:35 ` Shawn O. Pearce
2007-01-04 2:36 ` Chris Lee
2007-01-04 2:45 ` Shawn O. Pearce
2007-01-04 2:53 ` Chris Lee
2007-01-04 2:57 ` Shawn O. Pearce
2007-01-04 2:58 ` Chris Lee
2007-01-04 3:05 ` Shawn O. Pearce
2007-01-04 3:06 ` Chris Lee
2007-01-04 2:16 ` Chris Lee
2007-01-04 17:56 ` Chris Lee
2007-01-04 18:30 ` Linus Torvalds
2007-01-04 18:54 ` Chris Lee
2007-01-04 2:33 ` Eric Wong
2007-01-04 2:40 ` Randal L. Schwartz
2007-01-04 3:13 ` Eric Wong
2007-01-05 2:09 ` [PATCH] git-svn: make --repack work consistently between fetch and multi-fetch Eric Wong
2007-01-04 6:25 ` git-svnimport failed and now git-repack hates me Junio C Hamano
2007-01-04 7:26 ` [PATCH] pack-check.c::verify_packfile(): don't run SHA-1 update on huge data Junio C Hamano
2007-01-04 17:58 ` git-svnimport failed and now git-repack hates me Chris Lee
2007-01-04 20:22 ` Junio C Hamano
2007-01-05 17:19 ` Chris Lee
2007-01-05 19:05 ` Junio C Hamano
2007-01-05 19:33 ` Chris Lee
2007-01-05 19:39 ` Shawn O. Pearce
2007-01-05 20:48 ` Chris Lee
2007-01-05 21:37 ` Junio C Hamano
2007-01-05 21:57 ` Linus Torvalds
2007-01-05 22:18 ` alan
2007-01-07 0:36 ` Eric Wong
2007-01-05 22:39 ` Linus Torvalds
2007-01-05 22:48 ` Junio C Hamano
2007-01-05 23:00 ` Linus Torvalds
2007-01-05 23:02 ` Linus Torvalds
2007-01-05 23:44 ` Junio C Hamano
2007-01-05 23:59 ` Linus Torvalds
2007-01-06 0:06 ` Johannes Schindelin
2007-01-05 23:03 ` Chris Lee
2007-01-05 23:09 ` Junio C Hamano
2007-01-05 23:17 ` Linus Torvalds
2007-01-05 23:58 ` Junio C Hamano
2007-01-06 0:11 ` Linus Torvalds
2007-01-06 0:15 ` Linus Torvalds
2007-01-06 0:23 ` Junio C Hamano
2007-01-06 1:22 ` Linus Torvalds
2007-01-04 19:24 ` Chris Lee
2007-01-04 21:12 ` Linus Torvalds
2007-01-04 21:31 ` Sasha Khapyorsky
2007-01-04 22:04 ` Chris Lee
2007-01-07 0:17 ` Sasha Khapyorsky [this message]
2007-01-07 18:12 ` [PATCH] git-svnimport: support for incremental import Chris Lee
2007-01-07 18:59 ` Sasha Khapyorsky
2007-01-08 2:22 ` [PATCH] git-svnimport: fix edge revisions double importing Sasha Khapyorsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070107001719.GB16771@sashak.voltaire.com \
--to=sashak@voltaire.com \
--cc=chris133@gmail.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).