source: trunk/tools/svnimport.pl @ 789

Last change on this file since 789 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.