#! /usr/bin/perl use Cwd; my $startdir = cwd(); my $topdir = $startdir; my $tardir = "$startdir/testtar"; $prefix = "$startdir/install" if ! defined $prefix; $topdir =~ s!/tools/!/!; $gpath = $ENV{'GPT_LOCATION'}; use Config; @INC = ("$gpath/lib/perl", "$gpath/lib/perl/$Config{'archname'}", @INC); my @filelist; create_testdir(); create_tarball_with_system_tar(); create_tarball_with_Archive_Tar(); check_tarball("systemtest.tar.gz"); check_tarball("ArchiveTartest.tar.gz"); open BADTAR, "badtar.tar.gz"; print BADTAR "oops\n"; close BADTAR; check_tarball("badtar.tar.gz"); sub create_testdir { system("mkdir -p $tardir"); open FILE,">$tardir/testfile"; for my $l (100) { print FILE "Filler for the test file\n"; } close FILE; chdir $tardir; my $result = system("ln -s testfile link1"); $result = system("ln -s link1 link2"); chdir $startdir; @filelist = ("testfile", "link1", "link2"); } sub create_tarball_with_system_tar { #push @INC,"/var/db/gpt"; #require Grid::GPT::LocalEnv; print "Creating tarball with system tar\n"; chdir $tardir; #my $tar = Grid::GPT::LocalEnv::get_tool_location("gtar"); #my $gzip = Grid::GPT::LocalEnv::get_tool_location("gzip"); my $result = system("tar -cf $startdir/systemtest.tar *"); $result = system("gzip -f $startdir/systemtest.tar"); chdir $startdir; } sub create_tarball_with_Archive_Tar { require Archive::Tar; print "Creating tarball with ArchiveTar version $Archive::Tar::VERSION\n"; chdir $tardir; print "BEFORE:\n", join(" \n",@filelist), "\n"; my $tar = Archive::Tar->new(); my @result = $tar->add_files(@filelist); print "RESULT:", join("\n",map(($_->{'prefix'} . "/" . $_->{'name'} . " " . $_->{'linkname'} . " " . $_->{'size'}), @result)), " ", (defined $tar->error() ? $tar->error() : ""), " \n"; my @files = $tar->list_files(['name', 'prefix', 'linkname', 'size']); $got_some_files++ if @files; print "AFTER:\n", join("\n",map(($_->{'prefix'} . "/" . $_->{'name'} . " " . $_->{'linkname'} . " " . $_->{'size'}), @files)), "\n"; $tar->write("$startdir/ArchiveTartest.tar.gz",9); chdir $startdir; } sub check_tarball { my $tarfile=shift; print "Checking: $tarfile\n"; my $tar = Archive::Tar->new(); my $ret = $tar->read($tarfile); my @tarfiles = $tar->list_files(['name', 'prefix', 'linkname', 'size']); print "FILES:\n", join("\n",map(($_->{'prefix'} . "/" . $_->{'name'} . " " . $_->{'linkname'} . " " . $_->{'size'}), @tarfiles)), "\n"; }