diff options
author | Yves Orton <demerphq@gemini.(none)> | 2009-07-28 10:51:56 +0200 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2009-08-03 20:52:12 +0100 |
commit | c04726a7844bcf17b4f5d106cc8bbb6ecbdaf4d1 (patch) | |
tree | fe844c73fb7abf3b90de4d235a869c72f833d6fc /Porting/make_snapshot.pl | |
parent | 8d1562cb93d7d83c3fb6f961628b0722db7031e0 (diff) | |
download | perl-c04726a7844bcf17b4f5d106cc8bbb6ecbdaf4d1.tar.gz |
Add Porting/make_snapshot.pl
Which should have been included with the corresponding MANIFEST change
in the previous commit.
(cherry picked from commit a23cb041bc3354bdcb49e0dd42a3683d9850d471)
Diffstat (limited to 'Porting/make_snapshot.pl')
-rwxr-xr-x | Porting/make_snapshot.pl | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Porting/make_snapshot.pl b/Porting/make_snapshot.pl new file mode 100755 index 0000000000..6ff3c93858 --- /dev/null +++ b/Porting/make_snapshot.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl +use strict; +use warnings; +use File::Path; +use Cwd; + +use POSIX qw(strftime); +sub isotime { strftime "%Y-%m-%d.%H:%M:%S",gmtime(shift||time) } + +my ($abbr,$sha1,$tstamp); +$sha1= shift || "HEAD"; +my $zip_root= $ENV{PERL_SNAPSHOT_ZIP_ROOT} || "/gitcommon/branches/snapshot"; +my $gitdir= shift || `git rev-parse --git-dir` + or die "Not a git repo!\n"; +chomp $gitdir; +my $workdir= $gitdir; +if ( $workdir =~ s!/\.git\z!! ) { + chdir $workdir + or die "Failed to chdir to $workdir\n"; +} else { + chdir $workdir + or die "Failed to chdir to bare repo $workdir\n"; +} + +($sha1, $abbr,$tstamp)= split /\s+/, `git log --pretty='format:%H %h %ct' -1 $sha1` + or die "Failed to parse '$sha1'\n"; +chomp($sha1,$abbr,$tstamp); + +#die "'$sha1','$abbr'\n"; + +my $path= join "/", $zip_root, substr($sha1,0,2), substr($sha1,0,4); +my $tar_file= "$sha1.tar.$$"; +my $gz_file= "$sha1.tgz"; +my $prefix= "perl-$abbr/"; + +if (!-e "$path/$gz_file") { + mkpath $path if !-d $path; + + system("git archive --format=tar --prefix=$prefix $sha1 > $path/$tar_file"); + my @branches=( + 'origin/blead', + 'origin/maint-5.10', + 'origin/maint-5.8', + 'origin/maint-5.8-dor', + 'origin/maint-5.6', + 'origin/maint-5.005', + 'origin/maint-5.004', + ); + my $branch; + foreach my $b (@branches) { + $branch= $b and last + if `git log --pretty='format:%H' $b | grep $sha1`; + } + + $branch ||= "unknown-branch"; + chomp(my $describe= `git describe`); + chdir $path; + { + open my $fh,">","$path/$$.patch" or die "Failed to open $$.patch for writing\n"; + print $fh join(" ", $branch, $tstamp, $sha1, $describe) . "\n"; + close $fh; + } + system("tar -f $tar_file --transform='s,^$$,$prefix,g' --owner=root --group=root --mode=664 --append $$.patch"); + system("gzip -S .gz -9 $tar_file"); + rename "$tar_file.gz", "$gz_file"; +} +print "$path/$gz_file", -t STDOUT ? "\n" :""; + |