X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftar.cpp;h=6dee843df7ef4de8bee1baae45509a7fb2f34699;hb=HEAD;hp=d3301a0dbcb1ae1e3d0bae93689d9400c8c9c772;hpb=43bd25ffcb0b4f7882773f4676b209a99cb73c04;p=builder.git diff --git a/source/tar.cpp b/source/tar.cpp deleted file mode 100644 index d3301a0..0000000 --- a/source/tar.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include -#include -#include -#include -#include -#include "builder.h" -#include "sourcepackage.h" -#include "tar.h" -#include "tarball.h" - -using namespace std; -using namespace Msp; - -Tar::Tar(Builder &b, const TarBall &t): - InternalAction(b), - tarball(t) -{ - string basename = FS::basename(tarball.get_path()); - announce(tarball.get_package()->get_name(), "TAR ", basename); - if(builder.get_verbose()>=2) - IO::print("Create %s\n", basename); - - if(!builder.get_dry_run()) - worker = new Worker(*this); -} - - -Tar::Worker::Worker(Tar &t): - tar(t) -{ - launch(); -} - -void Tar::Worker::main() -{ - const FS::Path &pkg_src = tar.tarball.get_package()->get_source(); - FS::Path basedir = FS::basepart(FS::basename(tar.tarball.get_path())); - - IO::File out(tar.tarball.get_path().str(), IO::M_WRITE); - const TargetList &deps = tar.tarball.get_depends(); - for(TargetList::const_iterator i=deps.begin(); i!=deps.end(); ++i) - { - FileTarget *ft = dynamic_cast(*i); - if(!ft) - continue; - - char buf[4096]; - memset(buf, 0, 512); - - string rel_path = (basedir/relative(ft->get_path(), pkg_src)).str(); - if(rel_path.size()>99) - { - IO::print("Can't store %s in tar archive - too long name\n", rel_path); - error = true; - break; - } - - memcpy(buf, rel_path.data(), rel_path.size()); - - FS::Stat st = FS::stat(ft->get_path()); - store_number(buf+100, 0666, 7); - store_number(buf+108, 0, 7); - store_number(buf+116, 0, 7); - store_number(buf+124, st.get_size(), 11); - store_number(buf+136, st.get_modify_time().to_unixtime(), 11); - buf[156] = '0'; - - memset(buf+148, ' ', 8); - unsigned chk = 0; - for(unsigned j=0; j<512; ++j) - chk += static_cast(buf[j]); - store_number(buf+148, chk, 7); - buf[155] = 0; - - out.write(buf, 512); - IO::File in(ft->get_path().str()); - for(unsigned j=0; j