source: trunk/tools/svnimport.pl@ 841

Last change on this file since 841 was 755, checked in by pfusik, 13 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.