annotate nginx-vendor-import.pl @ 0:0272fd3371b2

Import script I use to create nginx mercurial repositories.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 04 Aug 2008 01:01:04 +0400
parents
children 216d6c84d918
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl -w
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # Import nginx source history into Mercurial repo.
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # perl -nle 'BEGIN { $/ = "\n\nChanges with nginx "; }; m/^([\d.]+)\s+/gs && print "$1 -- \n\n$_\n\n--\n\n"' CHANGES | less
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 use HTTP::Date qw/ str2time /;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8 use POSIX qw/ strftime /;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use Getopt::Long;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11 my $changes = 'CHANGES';
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 my $stopat;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 my $startat;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 my $userepo;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 GetOptions(
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 'changes=s' => \$changes,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 'userepo=s' => \$userepo,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 'stopat=s' => \$stopat,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 'startat=s' => \$startat,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 );
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 # Auto detect $stopat if repo specified.
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 if ($userepo) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 my $log = `hg -R $userepo log --limit 1`;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 if ($log =~ /Added tag NGINX_(\d+)_(\d+)_(\d+) for changeset/) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 $stopat = "$1.$2.$3";
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 print "stopat: $stopat\n";
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 # Read CHANGES file for commit logs.
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 push @ARGV, $changes;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 my @changes;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 my ($version, $date, $log, $started);
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 while (<>) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 if (/^Changes with nginx ([\d.]+)\s+(\d\d \S+ \d+)/) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 if ($version && $started) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 $log =~ s/\s+$//s;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 unshift @changes, {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 version => $version,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 date => $date,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 log => $log
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 };
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 $version = $1;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 $date = $2;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 $log = "nginx $version\n";
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 if (defined $stopat && $version eq $stopat) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 undef $version;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 last;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 if (!$started && (!defined $startat
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 or ($version eq $startat)))
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 $started = 1;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 } else {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 $log .= $_;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 if ($version) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 unshift @changes, {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 version => $version,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 date => $date,
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 log => $log
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 };
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 my $prev = $userepo;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 my $user = 'Igor Sysoev <http://sysoev.ru>';
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 foreach (@changes) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 print "version => $_->{version}, date => $_->{date}\n";
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 #print "log:\n$_->{log}\n";
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 my $date = str2time($_->{date});
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 $date = strftime("%F", localtime $date);
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 my $tag = 'NGINX_' . $_->{version};
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 $tag =~ s/\./_/g;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 my $curr = "nginx-$_->{version}";
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 `tar zxf $curr.tar.gz`;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 if (!defined $prev) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 `hg init $curr`;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 } else {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 `mv -v -f $prev/.hg $prev/.hgtags $curr/`;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 open L, '>templog' or die "unable to open templog: $!\n";
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 print L $_->{log};
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 close L;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 `cd $curr/ && hg addremove -s 99 && hg ci -d "$date" -u "$user" -l ../templog && hg tag -d "$date" -u "$user" $tag`;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 $prev = $curr;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 }
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 if ($userepo) {
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 `mv $prev/.hg $prev/.hgtags $userepo/`;
0272fd3371b2 Import script I use to create nginx mercurial repositories.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 }