- for(DepList::iterator itr = deplist.begin();
- itr != deplist.end();
- ++itr) {
- unsigned long one = (*itr).second.second;
- unsigned long two = lyx::sum((*itr).first.c_str());
- (*itr).second = make_pair(one, two);
- if (lyxerr.debugging()) {
- lyxerr << "update: " << (*itr).first << " "
- << one << " " << two << endl;
+ lyxerr[Debug::DEPEND] << "Updating DepTable..." << endl;
+ time_type const start_time = current_time();
+
+ DepList::iterator itr = deplist.begin();
+ while (itr != deplist.end()) {
+ dep_info &di = itr->second;
+
+ struct stat f_info;
+ if (stat(itr->first.toFilesystemEncoding().c_str(), &f_info) == 0) {
+ if (di.mtime_cur == f_info.st_mtime) {
+ di.crc_prev = di.crc_cur;
+ lyxerr[Debug::DEPEND] << itr->first << " same mtime" << endl;
+ } else {
+ di.crc_prev = di.crc_cur;
+ lyxerr[Debug::DEPEND] << itr->first << " CRC... " << flush;
+ di.crc_cur = sum(itr->first);
+ lyxerr[Debug::DEPEND] << "done" << endl;
+ }
+ } else {
+ // file doesn't exist
+ // remove stale files - if it's re-created, it
+ // will be re-inserted by deplog.
+ lyxerr[Debug::DEPEND] << itr->first
+ << " doesn't exist. removing from DepTable." << endl;
+ DepList::iterator doomed = itr++;
+ deplist.erase(doomed);
+ continue;