# HG changeset patch # User Maxim Dounin # Date 1217797264 -14400 # Node ID 0272fd3371b2c225f41e40102c6d0f1fdacce6ff Import script I use to create nginx mercurial repositories. diff --git a/.hgignore b/.hgignore new file mode 100644 --- /dev/null +++ b/.hgignore @@ -0,0 +1,1 @@ +glob:* diff --git a/nginx-vendor-import.pl b/nginx-vendor-import.pl new file mode 100755 --- /dev/null +++ b/nginx-vendor-import.pl @@ -0,0 +1,112 @@ +#!/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 '; + +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/`; +}