X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdatatransform.cpp;h=01d237b93daf028fb8e2f5c7b68c3e380eddc275;hb=40ab4f61eaf7fc14fc6d1c2ea5eecee21882893a;hp=e45c80a69085f4e68d51dffc8005476d7ecf206c;hpb=41fdd69eb3f7c28ba91be3699d89ba1c2328cfdf;p=builder.git diff --git a/source/datatransform.cpp b/source/datatransform.cpp index e45c80a..01d237b 100644 --- a/source/datatransform.cpp +++ b/source/datatransform.cpp @@ -1,6 +1,6 @@ #include +#include #include -#include #include #include "builder.h" #include "cache.h" @@ -16,22 +16,25 @@ DataTransform::DataTransform(Builder &b, const Component &c, const FS::Path &p): FileTarget(b, c.get_package(), p) { component = &c; + + if(FS::Stat st = FS::lstat(FS::dirname(path))) + dir_mtime = st.get_modify_time(); } void DataTransform::find_dependencies() { - list files; + vector files; Cache &cache = component->get_package().get_cache(); - // XXX Should check directory mtime as well - if(mtime dir_files; + vector dir_files; while(!in.eof()) { DataFile::Statement st = parser.parse(); @@ -41,16 +44,16 @@ void DataTransform::find_dependencies() if(dir_files.empty()) { FS::Path dir = FS::dirname(path); - builder.get_logger().log("files", format("Traversing %s", dir.str())); + builder.get_logger().log("files", "Traversing %s", dir.str()); dir_files = list_files(dir); } - for(DataFile::Statement::Arguments::const_iterator i=st.args.begin(); i!=st.args.end(); ++i) + for(const DataFile::Value &a: st.args) { - Regex re(i->get()); - for(list::const_iterator j=dir_files.begin(); j!=dir_files.end(); ++j) - if(re.match(*j)) - files.push_back(*j); + Regex re(a.get()); + for(const string &f: dir_files) + if(re.match(f)) + files.push_back(f); } } else if(st.keyword=="file" && st.args.size()==1) @@ -60,9 +63,9 @@ void DataTransform::find_dependencies() cache.set_values(this, "files", files); } - for(list::iterator i=files.begin(); i!=files.end(); ++i) + for(const string &f: files) { - FS::Path file_path = FS::dirname(path)/ *i; + FS::Path file_path = FS::dirname(path)/f; if(Target *tgt = builder.get_vfs().get_target(file_path)) add_transitive_dependency(*tgt); else