Mercurial > hg > nginx-vendor-import
view 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 |
line wrap: on
line source
#!/usr/bin/perl -w # Import nginx source history into Mercurial repo. # perl -nle 'BEGIN { $/ = "\n\nChanges with nginx "; }; m/^([\d.]+)\s+/gs && print "$1 -- \n\n$_\n\n--\n\n"' CHANGES | less use HTTP::Date qw/ str2time /; use POSIX qw/ strftime /; use Getopt::Long; my $changes = 'CHANGES'; my $stopat; my $startat; my $userepo; { GetOptions( 'changes=s' => \$changes, 'userepo=s' => \$userepo, 'stopat=s' => \$stopat, 'startat=s' => \$startat, ); } # Auto detect $stopat if repo specified. if ($userepo) { my $log = `hg -R $userepo log --limit 1`; if ($log =~ /Added tag NGINX_(\d+)_(\d+)_(\d+) for changeset/) { $stopat = "$1.$2.$3"; print "stopat: $stopat\n"; } } # Read CHANGES file for commit logs. push @ARGV, $changes; my @changes; my ($version, $date, $log, $started); while (<>) { if (/^Changes with nginx ([\d.]+)\s+(\d\d \S+ \d+)/) { if ($version && $started) { $log =~ s/\s+$//s; unshift @changes, { version => $version, date => $date, log => $log }; } $version = $1; $date = $2; $log = "nginx $version\n"; if (defined $stopat && $version eq $stopat) { undef $version; last; } if (!$started && (!defined $startat or ($version eq $startat))) { $started = 1; } } else { $log .= $_; } } if ($version) { unshift @changes, { version => $version, date => $date, log => $log }; } my $prev = $userepo; my $user = 'Igor Sysoev <http://sysoev.ru>'; foreach (@changes) { print "version => $_->{version}, date => $_->{date}\n"; #print "log:\n$_->{log}\n"; my $date = str2time($_->{date}); $date = strftime("%F", localtime $date); my $tag = 'NGINX_' . $_->{version}; $tag =~ s/\./_/g; my $curr = "nginx-$_->{version}"; `tar zxf $curr.tar.gz`; if (!defined $prev) { `hg init $curr`; } else { `mv -v -f $prev/.hg $prev/.hgtags $curr/`; } open L, '>templog' or die "unable to open templog: $!\n"; print L $_->{log}; close L; `cd $curr/ && hg addremove -s 99 && hg ci -d "$date" -u "$user" -l ../templog && hg tag -d "$date" -u "$user" $tag`; $prev = $curr; } if ($userepo) { `mv $prev/.hg $prev/.hgtags $userepo/`; }