]> Sergey Matveev's repositories - public-inbox.git/commitdiff
convert: copy description and git config from v1 repo
authorEric Wong <e@80x24.org>
Fri, 20 Apr 2018 07:21:56 +0000 (07:21 +0000)
committerEric Wong <e@80x24.org>
Fri, 20 Apr 2018 09:13:15 +0000 (09:13 +0000)
I noticed I lost a $GIT_DIR/description in a conversion, so we
should preserve it.  While we're at it, we ought to copy any
config in the old repo to the new one.

We will need to warn about cloneurl since it's unfortunately
not an automatic process to update.  Oh well..

script/public-inbox-convert

index 2742be79fe1d47b4d0ef79c76ab95660a7e18d11..2979a0c80b06ac365885c707fae7112a4bd1435f 100755 (executable)
@@ -11,6 +11,7 @@ use PublicInbox::V2Writable;
 use PublicInbox::Import;
 use PublicInbox::Spawn qw(spawn);
 use Cwd 'abs_path';
+use File::Copy 'cp'; # preserves permissions:
 my $usage = "Usage: public-inbox-convert OLD NEW\n";
 my $jobs;
 my $index = 1;
@@ -50,16 +51,22 @@ $new->{version} = 2;
 $new = PublicInbox::InboxWritable->new($new);
 my $v2w;
 $old->umask_prepare;
+
+sub link_or_copy ($$) {
+       my ($src, $dst) = @_;
+       link($src, $dst) and return;
+       $!{EXDEV} or warn "link $src, $dst failed: $!, trying cp\n";
+       cp($src, $dst) or die "cp $src, $dst failed: $!\n";
+}
+
 $old->with_umask(sub {
-       local $ENV{GIT_CONFIG} = "$old->{mainrepo}/config";
+       my $old_cfg = "$old->{mainrepo}/config";
+       local $ENV{GIT_CONFIG} = $old_cfg;
+       my $new_cfg = "$new->{mainrepo}/all.git/config";
        $v2w = PublicInbox::V2Writable->new($new, 1);
        $v2w->init_inbox($jobs);
-       chomp(my $sr = $old->git->qx('config', 'core.sharedRepository'));
-       if ($sr ne '') {
-               PublicInbox::Import::run_die(['git', 'config',
-                       "--file=$new->{mainrepo}/all.git/config",
-                       'core.sharedRepository', $sr]);
-       }
+       unlink $new_cfg;
+       link_or_copy($old_cfg, $new_cfg);
        if (my $alt = $new->{altid}) {
                require PublicInbox::AltId;
                foreach my $i (0..$#$alt) {
@@ -70,6 +77,14 @@ $old->with_umask(sub {
                        $src->mm_alt->{dbh}->sqlite_backup_to_file($dst);
                }
        }
+       my $desc = "$old->{mainrepo}/description";
+       link_or_copy($desc, "$new->{mainrepo}/description") if -e $desc;
+       my $clone = "$old->{mainrepo}/cloneurl";
+       if (-e $clone) {
+               warn <<"";
+$clone may not be valid after migrating to v2, not copying
+
+       }
 });
 my $state = '';
 my ($prev, $from);