X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftar.cpp;h=07c14ce9282f3dcab5cf26bc2aaae46acc43501d;hb=1ed833343bc83b83c5f61cbfd74423bbba677a04;hp=46f95caea31c516d8fb7b6acd6a64d376f39204b;hpb=7c2db9e2b91da953701be233336c5bfa1f3c4af0;p=builder.git diff --git a/source/tar.cpp b/source/tar.cpp index 46f95ca..07c14ce 100644 --- a/source/tar.cpp +++ b/source/tar.cpp @@ -4,6 +4,7 @@ #include #include #include "builder.h" +#include "internaltask.h" #include "sourcepackage.h" #include "tar.h" #include "tarball.h" @@ -15,11 +16,12 @@ Tar::Tar(Builder &b): Tool(b, "TAR") { processing_unit = COMPONENT; + set_run_internal(&_run); } -Target *Tar::create_target(const list &sources, const string &arg) +Target *Tar::create_target(const vector &sources, const string &arg) { - if(!sources.front()->get_package()) + if(sources.empty() || !sources.front()->get_package()) throw invalid_argument("Tar::create_target"); TarBall *tarball = new TarBall(builder, *sources.front()->get_package(), arg); @@ -31,19 +33,7 @@ Target *Tar::create_target(const list &sources, const string &arg) return tarball; } -Task *Tar::run(const Target &target) const -{ - const TarBall &tarball = dynamic_cast(target); - Worker *worker = new Worker(tarball); - return new InternalTask(worker); -} - - -Tar::Worker::Worker(const TarBall &tb): - tarball(tb) -{ } - -void Tar::Worker::main() +bool Tar::_run(const TarBall &tarball) { const FS::Path &pkg_src = tarball.get_package()->get_source_directory(); FS::Path basedir = FS::basepart(FS::basename(tarball.get_path())); @@ -62,8 +52,7 @@ void Tar::Worker::main() if(rel_path.size()>99) { IO::print("Can't store %s in tar archive - too long name\n", rel_path); - status = Task::ERROR; - return; + return false; } memcpy(buf, rel_path.data(), rel_path.size()); @@ -93,10 +82,10 @@ void Tar::Worker::main() } } - status = Task::SUCCESS; + return true; } -void Tar::Worker::store_number(char *buf, unsigned value, unsigned length) +void Tar::store_number(char *buf, unsigned value, unsigned length) { for(unsigned i=length; i--;) {