centralize skippedNames computation to add dbdir always

This commit is contained in:
dockes 2006-10-24 09:09:36 +00:00
parent c78a055bb2
commit d8f8dd851e
4 changed files with 31 additions and 23 deletions

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: rclconfig.cpp,v 1.31 2006-10-16 15:33:08 dockes Exp $ (C) 2004 J.F.Dockes"; static char rcsid[] = "@(#$Id: rclconfig.cpp,v 1.32 2006-10-24 09:09:36 dockes Exp $ (C) 2004 J.F.Dockes";
#endif #endif
/* /*
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -313,6 +313,26 @@ string RclConfig::getDbDir()
return dbdir; return dbdir;
} }
list<string> RclConfig::getSkippedNames()
{
list<string> skpl;
string skipped;
if (getConfParam("skippedNames", skipped)) {
stringToStrings(skipped, skpl);
}
// If current keydir is dbdir's ancestor, add dbdir name to skipped
// This is mainly for the real-time monitor that will otherwise go
// into a loop
// We'd prefer to do it for the direct ancestor only, but getSkippedNames()
// is only called for the topdirs, so this doesn't work
string kd = path_canon(getKeyDir());
string dbd = path_canon(getDbDir());
if (dbd.find(kd) == 0) {
skpl.push_back(path_getsimple(dbd));
}
return skpl;
}
// Look up an executable filter. We look in $RECOLL_FILTERSDIR, // Look up an executable filter. We look in $RECOLL_FILTERSDIR,
// filtersdir in config file, then let the system use the PATH // filtersdir in config file, then let the system use the PATH

View File

@ -16,7 +16,7 @@
*/ */
#ifndef _RCLCONFIG_H_INCLUDED_ #ifndef _RCLCONFIG_H_INCLUDED_
#define _RCLCONFIG_H_INCLUDED_ #define _RCLCONFIG_H_INCLUDED_
/* @(#$Id: rclconfig.h,v 1.23 2006-10-16 15:33:08 dockes Exp $ (C) 2004 J.F.Dockes */ /* @(#$Id: rclconfig.h,v 1.24 2006-10-24 09:09:36 dockes Exp $ (C) 2004 J.F.Dockes */
#include <list> #include <list>
#include <string> #include <string>
@ -74,6 +74,9 @@ class RclConfig {
/** Get database directory */ /** Get database directory */
string getDbDir(); string getDbDir();
/** Get list of skipped names for current keydir */
list<string> getSkippedNames();
/** /**
* Get list of ignored suffixes from mimemap * Get list of ignored suffixes from mimemap
* *

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: indexer.cpp,v 1.39 2006-10-22 14:47:13 dockes Exp $ (C) 2004 J.F.Dockes"; static char rcsid[] = "@(#$Id: indexer.cpp,v 1.40 2006-10-24 09:09:36 dockes Exp $ (C) 2004 J.F.Dockes";
#endif #endif
/* /*
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -96,13 +96,7 @@ bool DbIndexer::indexDb(bool resetbefore, list<string> *topdirs)
// Set up skipped patterns for this subtree. This probably should be // Set up skipped patterns for this subtree. This probably should be
// done in the directory change code in processone() instead. // done in the directory change code in processone() instead.
m_walker.clearSkippedNames(); m_walker.setSkippedNames(m_config->getSkippedNames());
string skipped;
if (m_config->getConfParam("skippedNames", skipped)) {
list<string> skpl;
stringToStrings(skipped, skpl);
m_walker.setSkippedNames(skpl);
}
// Walk the directory tree // Walk the directory tree
if (m_walker.walk(*it, *this) != FsTreeWalker::FtwOk) { if (m_walker.walk(*it, *this) != FsTreeWalker::FtwOk) {
@ -238,11 +232,8 @@ bool DbIndexer::indexFiles(const list<string> &filenames)
static list<string> skpl; static list<string> skpl;
if (lstdir.compare(dir)) { if (lstdir.compare(dir)) {
LOGDEB(("Recomputing list of skipped names\n")); LOGDEB(("Recomputing list of skipped names\n"));
string skipped; skpl = m_config->getSkippedNames();
if (m_config->getConfParam("skippedNames", skipped)) { lstdir = dir;
stringToStrings(skipped, skpl);
lstdir = dir;
}
} }
if (!skpl.empty()) { if (!skpl.empty()) {
list<string>::const_iterator skit; list<string>::const_iterator skit;

View File

@ -1,7 +1,7 @@
#include "autoconfig.h" #include "autoconfig.h"
#ifdef RCL_MONITOR #ifdef RCL_MONITOR
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: rclmonrcv.cpp,v 1.5 2006-10-23 15:01:12 dockes Exp $ (C) 2006 J.F.Dockes"; static char rcsid[] = "@(#$Id: rclmonrcv.cpp,v 1.6 2006-10-24 09:09:36 dockes Exp $ (C) 2006 J.F.Dockes";
#endif #endif
/* /*
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -129,13 +129,7 @@ void *rclMonRcvRun(void *q)
for (list<string>::iterator it = tdl.begin(); it != tdl.end(); it++) { for (list<string>::iterator it = tdl.begin(); it != tdl.end(); it++) {
queue->getConfig()->setKeyDir(*it); queue->getConfig()->setKeyDir(*it);
// Adjust the skipped names according to config // Adjust the skipped names according to config
walker.clearSkippedNames(); walker.setSkippedNames(queue->getConfig()->getSkippedNames());
string skipped;
if (queue->getConfig()->getConfParam("skippedNames", skipped)) {
list<string> skpl;
stringToStrings(skipped, skpl);
walker.setSkippedNames(skpl);
}
LOGDEB(("rclMonRcvRun: walking %s\n", it->c_str())); LOGDEB(("rclMonRcvRun: walking %s\n", it->c_str()));
walker.walk(*it, walkcb); walker.walk(*it, walkcb);
} }