git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Khapyorsky <sashak@voltaire.com>
To: Linus Torvalds <torvalds@osdl.org>, Chris Lee <chris133@gmail.com>
Cc: Junio C Hamano <junkio@cox.net>,
	Shawn Pearce <spearce@spearce.org>,
	Git Mailing List <git@vger.kernel.org>
Subject: Re: git-svnimport failed and now git-repack hates me
Date: Thu, 4 Jan 2007 23:31:42 +0200	[thread overview]
Message-ID: <20070104213142.GE11861@sashak.voltaire.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0701031737300.4989@woody.osdl.org>

On 17:59 Wed 03 Jan     , Linus Torvalds wrote:
> 
> However, I don't know what the proper magic is for svnimport to do that 
> sane "do it in chunks and tell when you're all done". Or even better - to 
> just make it repack properly and not keep everything in memory.

> As to who knows how to fix git-svnimport to do something saner, I have no 
> clue.. Sasha seems to have touched it last. Sasha?

I guess it should not be hard to do svnimport in incrementally with
repacking. Like this:


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);


Chris, it works fine for me with small repository (~9000 revisions), but
I don't have such huge one as yours. Could you try? Thanks.

Sasha

  parent reply	other threads:[~2007-01-04 21:24 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 [this message]
2007-01-04 22:04     ` Chris Lee
2007-01-07  0:17       ` [PATCH] git-svnimport: support for incremental import Sasha Khapyorsky
2007-01-07 18:12         ` 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=20070104213142.GE11861@sashak.voltaire.com \
    --to=sashak@voltaire.com \
    --cc=chris133@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=junkio@cox.net \
    --cc=spearce@spearce.org \
    --cc=torvalds@osdl.org \
    /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).