]> git.tdb.fi Git - builder.git/blobdiff - source/datatransform.cpp
Adapt to changes in mspcore
[builder.git] / source / datatransform.cpp
index e45c80a69085f4e68d51dffc8005476d7ecf206c..7b221b3c0bc7e16c4cf4088873d12770bfced578 100644 (file)
@@ -1,4 +1,5 @@
 #include <msp/fs/dir.h>
+#include <msp/fs/stat.h>
 #include <msp/fs/utils.h>
 #include <msp/strings/format.h>
 #include <msp/strings/regex.h>
@@ -16,14 +17,17 @@ 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<string> files;
        Cache &cache = component->get_package().get_cache();
-       // XXX Should check directory mtime as well
-       if(mtime<cache.get_mtime() && cache.has_key(this, "files"))
+       const Time::TimeStamp &cache_mtime = cache.get_mtime();
+       if(mtime<cache_mtime && dir_mtime<cache_mtime && cache.has_key(this, "files"))
                files = cache.get_values(this, "files");
        else
        {
@@ -31,7 +35,7 @@ void DataTransform::find_dependencies()
                IO::File in(path.str());
                DataFile::Parser parser(in, path.str());
 
-               list<string> dir_files;
+               vector<string> dir_files;
                while(!in.eof())
                {
                        DataFile::Statement st = parser.parse();
@@ -48,7 +52,7 @@ void DataTransform::find_dependencies()
                                for(DataFile::Statement::Arguments::const_iterator i=st.args.begin(); i!=st.args.end(); ++i)
                                {
                                        Regex re(i->get<string>());
-                                       for(list<string>::const_iterator j=dir_files.begin(); j!=dir_files.end(); ++j)
+                                       for(vector<string>::const_iterator j=dir_files.begin(); j!=dir_files.end(); ++j)
                                                if(re.match(*j))
                                                        files.push_back(*j);
                                }