summaryrefslogtreecommitdiff
path: root/tests/archive.pl
diff options
context:
space:
mode:
authorarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-07-19 09:46:30 +0000
committerarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-07-19 09:46:30 +0000
commit86ac39edb09647b83784c078f9ea3bd3b7a7d4e8 (patch)
tree92f089139901176b1321bafb81613b003408b96c /tests/archive.pl
parent18055b5bfa47ba7a53b5e893fbc3f5efdb1bf379 (diff)
Release archiving now converts newlines to Unix style in tar archives
git-svn-id: http://pugixml.googlecode.com/svn/trunk@606 99668b35-9821-0410-8761-19e4c4f06640
Diffstat (limited to 'tests/archive.pl')
-rw-r--r--tests/archive.pl60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/archive.pl b/tests/archive.pl
new file mode 100644
index 0000000..240dd02
--- /dev/null
+++ b/tests/archive.pl
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+use Archive::Tar;
+use Archive::Zip;
+
+my $target = shift @ARGV;
+my @sources = @ARGV;
+
+my $zip = $target =~ /\.zip$/;
+
+my $arch = $zip ? Archive::Zip->new : Archive::Tar->new;
+
+for $source (sort {$a cmp $b} @sources)
+{
+ my $contents = &readfile_contents($source);
+ my $meta = &readfile_meta($source);
+
+ if ($zip)
+ {
+ my $path = $source;
+ $arch->addDirectory($path) if $path =~ s/\/[^\/]+$/\// && !defined($arch->memberNamed($path));
+
+ my $member = $arch->addString($contents, $source);
+
+ $member->desiredCompressionMethod(COMPRESSION_DEFLATED);
+ $member->desiredCompressionLevel(9);
+
+ $member->setLastModFileDateTimeFromUnix($$meta{mtime});
+ }
+ else
+ {
+ # tgz releases are for Unix people, Unix people like Unix newlines
+ $contents =~ s/\r//g if (-T $source);
+
+ $arch->add_data($source, $contents, $meta);
+ }
+}
+
+$zip ? $arch->overwriteAs($target) : $arch->write($target, 9);
+
+sub readfile_contents
+{
+ my $file = shift;
+
+ open FILE, $file or die "Can't open $file: $!";
+ binmode FILE;
+ my @contents = <FILE>;
+ close FILE;
+
+ return join('', @contents);
+}
+
+sub readfile_meta
+{
+ my $file = shift;
+
+ my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($file);
+
+ return {mtime => $mtime};
+}