Mercurial > hg > nginx-vendor-import
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 } |