source: trunk/tools/svnimport.pl @ 1806

Comments

    Last change on this file since 1806 was 755, checked in by pfusik, 12 years ago

    svnimport: quick-and-dirty script I used for importing old ASMAa to SVN.

    File size: 4.1 KB
    Line 
    1# TODO: svn mv --parents Various/Swierszcz_Piotr/Energy_1_2.sap Various/Swierszcz_Piotr/Last_World.sap
    2
    3use File::Basename;
    4use File::Find;
    5use POSIX qw(strftime);
    6
    7#my $repo = 'file:///C:/0/a8/asap/aasma/import/repo';
    8my $repo = 'svn://asma.scene.pl/asma';
    9my $globopt = '--username pfusik';
    10
    11my @dirs;
    12
    13sub wanted() {
    14        push @dirs, $File::Find::name if -d;
    15}
    16
    17sub dirs($) {
    18        my ($dir) = @_;
    19        @dirs = ();
    20        find(\&wanted, $dir);
    21        shift @dirs;
    22        return map { s!^\Q$dir\E/!!; $_; } @dirs;
    23}
    24
    25sub indir($\@) {
    26        my ($file, $dirs) = @_;
    27        my @r = grep $file =~ m!^$_/!, @$dirs;
    28        return pop @r;
    29}
    30
    31sub shell($) {
    32        print @_, "\n";
    33#       system @_;
    34}
    35
    36sub commit($$$$) {
    37        my ($d, $log, $tag, $taglog) = @_;
    38        shell "svn commit $globopt -m '$log' ..";
    39        my $f = (-e "$d/Docs/Asma.txt") ? "$d/Docs/Asma.txt" : "$d/Docs/Readme.txt";
    40        my $t = POSIX::strftime('%FT%T.000000Z', localtime((stat $f)[9]));
    41        shell "svn propset $globopt svn:date --revprop -r HEAD $t";
    42        shell "svn cp $globopt -m '$taglog' $repo/trunk/asma $repo/tags/$tag";
    43        shell "svn propset $globopt svn:date --revprop -r HEAD $t";
    44}
    45
    46if (0) {
    47        shell "rm -rf trunk repo";
    48        shell "svnadmin create --fs-type fsfs repo";
    49        shell "touch repo/hooks/pre-revprop-change.bat";
    50        shell "svn mkdir -m 'Repository init' $repo/trunk $repo/tags $repo/branches";
    51        shell "svn co $repo/trunk trunk";
    52}
    53shell 'set -e';
    54shell 'cd trunk';
    55shell 'mkdir asma && svn add asma && cd asma';
    56shell "cp -r ../../ASMA05/* .";
    57shell "svn add *";
    58commit('ASMA05', 'Imported ASMA 0.5', 'asma-0.5', 'PRE-RELEASE ASMA 0.5');
    59my $p = 'ASMA05';
    60for my $d ('ASMA06' .. 'ASMA35') {
    61        shell "echo -------- $d --------";
    62        my @pd = dirs($p);
    63        my @cd = dirs($d);
    64        my %pd = map { $_ => 1 } @pd;
    65        my %cd = map { $_ => 1 } @cd;
    66        my @rd = grep !$cd{$_}, @pd;
    67        my @ad = grep !$pd{$_}, @cd;
    68        my %md;
    69        my %nd;
    70        my @g = `git diff -M -l99999 --name-status $p $d`;
    71        my @a;
    72        if ($d eq 'ASMA29') {
    73                shell "svn mv Docs/Update1$_.txt Docs/Update2$_.txt" for 0 .. 8;
    74                shell "svn mv Docs/Update0$_.txt Docs/Update1$_.txt" for 1 .. 9;
    75        }
    76        elsif ($d eq 'ASMA33') {
    77                shell "svn mv Various Composers";
    78                shell "svn mv Composers/Benoth_Sukkor Composers/Stanik_Krzysztof";
    79                $md{'Composers/Benoth_Sukkor'} = 'Composers/Stanik_Krzysztof';
    80                shell "svn mv Composers/Trokowicz_B Composers/Trokowicz_Bartolomiej";
    81                $md{'Composers/Trokowicz_B'} = 'Composers/Trokowicz_Bartolomiej';
    82                shell "svn mv Composers/Zur-soft Composers/Zur_soft";
    83                $md{'Various/Zur-soft'} = 'Composers/Zur_soft';
    84        }
    85        for (@g) {
    86                if ($d eq 'ASMA29' && m!^(A\t$d|D\t$p)/Docs/Update\d\d\.txt$!) {
    87                }
    88                if (m!^A\t$d/(.+)$!) {
    89                        push @a, $1 if $1 ne 'Various/Ramzes/Endless_Dream_5.sap';
    90                }
    91                elsif (m!^R0*(\d+)\t$p/(.+?)\t$d/(.+)$!) {
    92                        my ($perc, $rf, $af) = ($1, $2, $3);
    93                        my $rd = indir($rf, @rd);
    94                        my $ad = indir($af, @ad);
    95                        if (defined($rd) && defined($ad)
    96                                && $ad ne 'Various/Grayscale' && $ad ne 'Composers/Kuczek_Ireneusz/Worktunes'
    97                                && $rd ne 'Unsorted' && $rd ne 'Demos' && $rd ne 'Games/Various') {
    98                                if (exists($md{$rd})) {
    99                                        die $_ if $md{$rd} ne $ad;
    100                                }
    101                                else {
    102                                        $md{$rd} = $ad;
    103                                        shell "svn mv --parents $rd $ad" unless "$rd $ad" =~ m!^Various/(.+?) Composers/\1$!;
    104                                }
    105                                $rf =~ s/^$rd/$ad/;
    106                                shell "svn mv $rf $af # RENAME $perc%" if $rf ne $af;
    107                        }
    108                        else {
    109                                if ($af eq 'Demos/Ray_of_Hope_2.sap') {
    110                                        push @a, $af;
    111                                        $af = 'Various/Ramzes/Endless_Dream_5.sap' ;
    112                                }
    113                                if ($af eq 'Various/Szpilowski_Michal/Sej-mik.sap') {
    114                                        push @a, $af;
    115                                        shell "svn rm $rf";
    116                                        next;
    117                                }
    118                                # --parents does this
    119                                #$ad = dirname($af);
    120                                #unless ($nd{$ad} || -d "$p/$ad") {
    121                                #       shell "mkdir -p $ad && svn add $ad";
    122                                #       $nd{$ad} = 1;
    123                                #}
    124                                $rf =~ s/^.*?'.*$/"$&"/;
    125                                shell "svn mv --parents $rf $af # $perc%";
    126                        }
    127                }
    128                elsif (m!^D\t$p/(.+)$!) {
    129                        my $f = $1;
    130                        shell "svn rm $f" unless defined indir($f, @rd);
    131                }
    132                elsif (m!^M!) {
    133                }
    134                else {
    135                        die $_;
    136                }
    137        }
    138        shell "cp -r ../../$d/* .";
    139        exists($md{$_}) || shell "svn rm $_" for @rd;
    140        s/^.*?'.*$/"$&"/, shell "svn add --parents $_" for @a;
    141        $d =~ /(\d)(\d)/;
    142        my $r = "$1.$2";
    143        my $pre = $1 ? '' : 'PRE-';
    144        commit($d, "Imported ASMA $r", "asma-$r", "${pre}RELEASE ASMA $r");
    145        $p = $d;
    146        shell "svn up";
    147}
    Note: See TracBrowser for help on using the repository browser.