]> git.lyx.org Git - lyx.git/blobdiff - src/DepTable.C
John's Layout Tabular UI improvements and Martins fixes to clearing the
[lyx.git] / src / DepTable.C
index e493d794aaab18d137bd5057ae5ef6efce5372cc..b8abc816dce3ff46c38993b92153708cd42369e7 100644 (file)
@@ -3,9 +3,9 @@
  * 
  *           LyX, The Document Processor
  *          Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
+ *           Copyright 1995-2001 The LyX Team.
  *
- *           This file is Copyright 1996-2000
+ *           This file is Copyright 1996-2001
  *           Lars Gullik Bjønnes
  *
  * ====================================================== 
 #endif
 
 #include "DepTable.h"
+#include "debug.h"
+
 #include "support/lyxlib.h"
 #include "support/filetools.h"
+#include "support/lstrings.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
 #include <fstream>
 
 using std::make_pair;
@@ -35,11 +43,23 @@ void DepTable::insert(string const & fi,
        // not quite sure if this is the correct place for MakeAbsPath
        string f = MakeAbsPath(fi);
        if (deplist.find(f) == deplist.end()) {
+               long mtime = 0;
                if (upd) {
                        one = two;
                        two = lyx::sum(f);
+                       struct stat f_info;
+                       stat(fi.c_str(), &f_info);
+                       mtime = f_info.st_mtime;
                }
+               dep_info di;
+               di.first = one;
+               di.second = two;
+               di.mtime = mtime;
+#if 0          
                deplist[f] = make_pair(one, two);
+#else
+               deplist[f] = di;
+#endif
        }
 }
                
@@ -49,11 +69,29 @@ void DepTable::update()
        for (DepList::iterator itr = deplist.begin();
            itr != deplist.end();
            ++itr) {
-               unsigned long const one = (*itr).second.second;
-               unsigned long const two = lyx::sum((*itr).first);
-               (*itr).second = make_pair(one, two);
+               unsigned long const one = itr->second.second;
+               unsigned long two = one;
+               long mtime = itr->second.mtime;
+               struct stat f_info;
+               stat(itr->first.c_str(), &f_info);
+
+               if (mtime != f_info.st_mtime) {
+                       two = lyx::sum(itr->first);
+                       mtime = f_info.st_mtime;
+               }
+               
+#if 0
+               itr->second = make_pair(one, two);
+#else
+               dep_info di;
+               di.first = one;
+               di.second = two;
+               di.mtime = mtime;
+               
+               itr->second = di;
+#endif
                if (lyxerr.debugging(Debug::DEPEND)) {
-                       lyxerr << "Update dep: " << (*itr).first << " "
+                       lyxerr << "Update dep: " << itr->first << " "
                               << one << " " << two;
                        if (one != two)
                                lyxerr << " +";
@@ -68,7 +106,7 @@ bool DepTable::sumchange() const
        for (DepList::const_iterator cit = deplist.begin();
             cit != deplist.end();
             ++cit) {
-               if ((*cit).second.first != (*cit).second.second) return true;
+               if ((*cit).second.first != cit->second.second) return true;
        }
        return false;
 }
@@ -80,8 +118,8 @@ bool DepTable::haschanged(string const & f) const
        string fil = MakeAbsPath(f);
        DepList::const_iterator cit = deplist.find(fil);
        if (cit != deplist.end()) {
-               if ((*cit).second.first != (*cit).second.second
-                   && (*cit).second.second != 0)
+               if (cit->second.first != cit->second.second
+                   && cit->second.second != 0)
                        return true;
        }
        return false;
@@ -93,8 +131,8 @@ bool DepTable::extchanged(string const & ext) const
        for (DepList::const_iterator cit = deplist.begin();
             cit != deplist.end();
             ++cit) {
-               if (suffixIs((*cit).first, ext)) {
-                       if ((*cit).second.first != (*cit).second.second)
+               if (suffixIs(cit->first, ext)) {
+                       if (cit->second.first != cit->second.second)
                                return true;
                }
        }
@@ -113,10 +151,11 @@ bool DepTable::exist(string const & fil) const
 void DepTable::remove_files_with_extension(string const & suf)
 {
        DepList tmp;
-       for (DepList::const_iterator cit = deplist.begin();
+       // we want const_iterator (Lgb)
+       for (DepList::iterator cit = deplist.begin();
             cit != deplist.end(); ++cit) {
-               if (!suffixIs((*cit).first, suf))
-                       tmp[(*cit).first] = (*cit).second;
+               if (!suffixIs(cit->first, suf))
+                       tmp[cit->first] = cit->second;
        }
        deplist.swap(tmp);
 }
@@ -129,13 +168,15 @@ void DepTable::write(string const & f) const
             cit != deplist.end(); ++cit) {
                if (lyxerr.debugging(Debug::DEPEND)) {
                        lyxerr << "Write dep: "
-                              << (*cit).first << " "
-                              << (*cit).second.first << " "
-                              << (*cit).second.second << endl;
+                              << cit->first << " "
+                              << cit->second.first << " "
+                              << cit->second.second << " "
+                              << cit->second.mtime << endl;
                }
-               ofs << (*cit).first << " "
-                   << (*cit).second.first << " "
-                   << (*cit).second.second << endl;
+               ofs << cit->first << " "
+                   << cit->second.first << " "
+                   << cit->second.second << " "
+                   << cit->second.mtime << endl;
        }
 }
 
@@ -146,13 +187,24 @@ void DepTable::read(string const & f)
        string nome;
        unsigned long one = 0;
        unsigned long two = 0;
-       while(ifs >> nome >> one >> two) {
+       unsigned long mtime = 0;
+       
+       while (ifs >> nome >> one >> two >> mtime) {
                if (lyxerr.debugging(Debug::DEPEND)) {
                        lyxerr << "Read dep: "
                               << nome << " "
                               << one << " "
-                              << two << endl;
+                              << two << " "
+                              << mtime << endl;
                }
+               dep_info di;
+               di.first = one;
+               di.second = two;
+               di.mtime = mtime;
+#if 0          
                deplist[nome] = make_pair(one, two);
+#else
+               deplist[nome] = di;
+#endif
        }
 }