view nginx-vendor-import.pl @ 1:216d6c84d918 default tip

Make it a bit more pretty (i.e. not so ugly).
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 04 Aug 2008 01:14:31 +0400
parents 0272fd3371b2
children
line wrap: on
line source

#!/usr/bin/perl -w

# (C) Maxim Dounin

# Import nginx source history into Mercurial repo.

###############################################################################

use strict;
use warnings;

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,
		'repo=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/`;
}

###############################################################################