changeset 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
files .hgignore nginx-vendor-import.pl
diffstat 2 files changed, 113 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/.hgignore
@@ -0,0 +1,1 @@
+glob:*
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 <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/`;
+}