Add Porting/make_snapshot.pl
[perl.git] / Porting / make_snapshot.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 use File::Path;
5 use Cwd;
6
7 use POSIX qw(strftime);
8 sub isotime { strftime "%Y-%m-%d.%H:%M:%S",gmtime(shift||time) }
9
10 my ($abbr,$sha1,$tstamp);
11 $sha1= shift || "HEAD";
12 my $zip_root= $ENV{PERL_SNAPSHOT_ZIP_ROOT} || "/gitcommon/branches/snapshot";
13 my $gitdir= shift || `git rev-parse --git-dir`
14     or die "Not a git repo!\n";
15 chomp $gitdir;
16 my $workdir= $gitdir;
17 if ( $workdir =~ s!/\.git\z!! ) {
18     chdir $workdir 
19         or die "Failed to chdir to $workdir\n";
20 } else {
21     chdir $workdir
22         or die "Failed to chdir to bare repo $workdir\n";
23 }
24
25 ($sha1, $abbr,$tstamp)= split /\s+/, `git log --pretty='format:%H %h %ct' -1 $sha1`
26     or die "Failed to parse '$sha1'\n";
27 chomp($sha1,$abbr,$tstamp);
28
29 #die "'$sha1','$abbr'\n";
30
31 my $path= join "/", $zip_root, substr($sha1,0,2), substr($sha1,0,4);
32 my $tar_file= "$sha1.tar.$$";
33 my $gz_file= "$sha1.tgz";
34 my $prefix= "perl-$abbr/";
35
36 if (!-e "$path/$gz_file") {
37     mkpath $path if !-d $path;
38
39     system("git archive --format=tar --prefix=$prefix $sha1 > $path/$tar_file");
40     my @branches=(
41               'origin/blead',
42               'origin/maint-5.10',
43               'origin/maint-5.8',
44               'origin/maint-5.8-dor',
45               'origin/maint-5.6',
46               'origin/maint-5.005',
47               'origin/maint-5.004',
48     );
49     my $branch;
50     foreach my $b (@branches) {
51         $branch= $b and last 
52             if `git log --pretty='format:%H' $b | grep $sha1`;
53     }
54
55     $branch ||= "unknown-branch";
56     chomp(my $describe= `git describe`);
57     chdir $path;
58     {
59         open my $fh,">","$path/$$.patch" or die "Failed to open $$.patch for writing\n";
60         print $fh join(" ", $branch, $tstamp, $sha1, $describe) . "\n";
61         close $fh;
62     }
63     system("tar -f $tar_file --transform='s,^$$,$prefix,g' --owner=root --group=root --mode=664 --append $$.patch");
64     system("gzip -S .gz -9 $tar_file");
65     rename "$tar_file.gz", "$gz_file";
66 }
67 print "$path/$gz_file", -t STDOUT ? "\n" :"";
68