]> sipb.mit.edu Git - sipb-www.git/blobdiff - import-trac
Accept PATH_INFO on gitweb.cgi
[sipb-www.git] / import-trac
index 53f747896ca42a5fec9597d304281f4373f19b1c..b86a5358686dea9abe707c8617d4013ef8000af5 100755 (executable)
@@ -1,7 +1,20 @@
-#!/usr/bin/perl
+#!/usr/bin/perl -w
 use DBI;
 use IPC::Open2;
 
 use DBI;
 use IPC::Open2;
 
+system('mkdir doc') && die;
+chdir('doc');
+qx{git init};
+
+open AUTHORS, '../trac-authors' or die $!;
+my %authors = ();
+while (chomp ($line = <AUTHORS>)) {
+    my ($username, $name);
+    ($username, $name) = split / /, $line, 2;
+    print "$username $name\n";
+    $authors{$username} = $name;
+}
+
 $password = qx(perl -F= -lane 'print \$F[1] if (\$F[0] eq "password")' \\
                /mit/sipb-www/.my.cnf);
 chomp $password;
 $password = qx(perl -F= -lane 'print \$F[1] if (\$F[0] eq "password")' \\
                /mit/sipb-www/.my.cnf);
 chomp $password;
@@ -12,21 +25,33 @@ foreach $row (@$rows) {
   next if $row->{author} eq 'trac';
   print "Processing revision $row->{version} of $row->{name} by $row->{author}...";
 
   next if $row->{author} eq 'trac';
   print "Processing revision $row->{version} of $row->{name} by $row->{author}...";
 
+  ($text = $row->{text}) =~ s/\r\n/\n/g;
+
   $pid = open2(OUT, IN, qw(git hash-object -w --stdin));
   $pid = open2(OUT, IN, qw(git hash-object -w --stdin));
-  print IN $row->{text};
+  print IN $text;
   close(IN);
   chomp($blob = <OUT>);
   waitpid $pid, 0;
 
   $pid = open2(OUT, IN, qw(git mktree));
   close(IN);
   chomp($blob = <OUT>);
   waitpid $pid, 0;
 
   $pid = open2(OUT, IN, qw(git mktree));
-  print IN `git ls-tree $head | grep -v $row->{name}` if $head;
+  print IN `git ls-tree $head:doc | grep -v $row->{name}` if $head;
   print IN "100644 blob $blob\t$row->{name}\n";
   close(IN);
   chomp($tree = <OUT>);
   waitpid $pid, 0;
 
   print IN "100644 blob $blob\t$row->{name}\n";
   close(IN);
   chomp($tree = <OUT>);
   waitpid $pid, 0;
 
-  $ENV{GIT_AUTHOR_NAME} = "$row->{author} via Trac";
+  $pid = open2(OUT, IN, qw(git mktree));
+  print IN "040000 tree $tree\tdoc\n";
+  close(IN);
+  chomp($tree = <OUT>);
+  waitpid $pid, 0;
+
+  $name = $authors{$row->{author}};
+
+  $ENV{GIT_AUTHOR_NAME} = "$name";
   $ENV{GIT_AUTHOR_EMAIL} = "$row->{author}\@mit.edu";
   $ENV{GIT_AUTHOR_EMAIL} = "$row->{author}\@mit.edu";
+  $ENV{GIT_COMMITTER_NAME} = "Trac";
+  $ENV{GIT_COMMITTER_EMAIL} = "sipb-www\@mit.edu";
   $ENV{GIT_AUTHOR_DATE} = $row->{time};
   $pid = open2(OUT, IN, qw{git commit-tree}, $tree, $head ? ('-p', $head) : ());
   print IN $row->{comment};
   $ENV{GIT_AUTHOR_DATE} = $row->{time};
   $pid = open2(OUT, IN, qw{git commit-tree}, $tree, $head ? ('-p', $head) : ());
   print IN $row->{comment};