diff --git a/src/index/checkretryfailed.cpp b/src/index/checkretryfailed.cpp index a3242bc8..dd5c9a2c 100644 --- a/src/index/checkretryfailed.cpp +++ b/src/index/checkretryfailed.cpp @@ -16,25 +16,51 @@ */ #include "autoconfig.h" +#include "checkretryfailed.h" + +#include "safesysstat.h" + #include #include #include "rclconfig.h" #include "execmd.h" #include "log.h" -#include "checkretryfailed.h" +#include "pathut.h" +#include "recollindex.h" using namespace std; bool checkRetryFailed(RclConfig *conf, bool record) { #ifdef _WIN32 - return true; + // Under Windows we only retry if the recollindex program is newer + // than the index + struct stat st; + string path(thisprog); + if (path_suffix(path).empty()) { + path = path + ".exe"; + } + if (path_fileprops(path, &st) != 0) { + LOGERR("checkRetryFailed: can't stat the program file: " << + thisprog << endl); + return false; + } + time_t exetime = st.st_mtime; + if (path_fileprops(conf->getDbDir(), &st) != 0) { + // Maybe it just does not exist. + LOGDEB("checkRetryFailed: can't stat the index directory: " << + conf->getDbDir() << endl); + return false; + } + time_t dbtime = st.st_mtime; + return exetime > dbtime; #else string cmd; if (!conf->getConfParam("checkneedretryindexscript", cmd)) { - LOGDEB("checkRetryFailed: 'checkneedretryindexscript' not set in config\n" ); + LOGDEB("checkRetryFailed: 'checkneedretryindexscript' " + "not set in config\n"); // We could toss a dice ? Say no retry in this case. return false; } diff --git a/src/index/recollindex.cpp b/src/index/recollindex.cpp index 65961938..5a49486d 100644 --- a/src/index/recollindex.cpp +++ b/src/index/recollindex.cpp @@ -427,7 +427,7 @@ bool runWebFilesMoverScript(RclConfig *config) } -static const char *thisprog; +string thisprog; static const char usage [] = "\n" @@ -483,7 +483,7 @@ static void Usage(FILE *where = stderr) { FILE *fp = (op_flags & OPT_h) ? stdout : stderr; - fprintf(fp, "%s: Usage: %s", thisprog, usage); + fprintf(fp, "%s: Usage: %s", path_getsimple(thisprog).c_str(), usage); fprintf(fp, "Recoll version: %s\n", Rcl::version_string().c_str()); exit((op_flags & OPT_h)==0); } @@ -565,7 +565,7 @@ int main(int argc, char **argv) o_reexec->init(argc, argv); #endif - thisprog = argv[0]; + thisprog = path_absolute(argv[0]); argc--; argv++; while (argc > 0 && **argv == '-') { @@ -697,7 +697,10 @@ int main(int argc, char **argv) indexerFlags &= ~ConfIndexer::IxFNoRetryFailed; } else { if (checkRetryFailed(config, false)) { + LOGDEB("recollindex: files in error will be retried\n"); indexerFlags &= ~ConfIndexer::IxFNoRetryFailed; + } else { + LOGDEB("recollindex: files in error will not be retried\n"); } } diff --git a/src/index/recollindex.h b/src/index/recollindex.h index 272719a2..4f838d32 100644 --- a/src/index/recollindex.h +++ b/src/index/recollindex.h @@ -43,5 +43,6 @@ extern void addIdxReason(std::string who, std::string reason); class ReExec; extern ReExec *o_reexec; +extern std::string thisprog; #endif /* _recollindex_h_included_ */ diff --git a/src/windows/qmkrecoll/librecoll.pro b/src/windows/qmkrecoll/librecoll.pro index b3ceb1ec..a564df26 100644 --- a/src/windows/qmkrecoll/librecoll.pro +++ b/src/windows/qmkrecoll/librecoll.pro @@ -39,7 +39,6 @@ SOURCES += \ ../../common/utf8fn.cpp \ ../../index/webqueue.cpp \ ../../index/webqueuefetcher.cpp \ -../../index/checkretryfailed.cpp \ ../../index/fetcher.cpp \ ../../index/exefetcher.cpp \ ../../index/fsfetcher.cpp \ diff --git a/src/windows/qmkrecoll/recollindex.pro b/src/windows/qmkrecoll/recollindex.pro index 7a216b10..81f1800a 100644 --- a/src/windows/qmkrecoll/recollindex.pro +++ b/src/windows/qmkrecoll/recollindex.pro @@ -15,6 +15,7 @@ DEFINES += RCL_MONITOR SOURCES += \ ../../index/recollindex.cpp \ +../../index/checkretryfailed.cpp \ ../../index/rclmonprc.cpp \ ../../index/rclmonrcv.cpp