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