diff --git a/roundup/indexer.py b/roundup/indexer.py
index 9cd0cdc6bc67e8e46346b226c037692271c18961..74bfcafb9e3176ed17e632e75866354b82d18049 100644 (file)
--- a/roundup/indexer.py
+++ b/roundup/indexer.py
# that promote freedom, but obviously am giving up any rights
# to compel such.
#
-#$Id: indexer.py,v 1.8 2002-07-09 21:53:38 gmcm Exp $
+#$Id: indexer.py,v 1.12 2002-07-19 03:36:33 richard Exp $
'''
This module provides an indexer class, RoundupIndexer, that stores text
indices in a roundup instance. This class makes searching the content of
self.changed = 0
# see if we need to reindex because of a change in code
+ version = os.path.join(self.indexdb_path, 'version')
if (not os.path.exists(self.indexdb_path) or
- not os.path.exists(os.path.join(self.indexdb_path, 'version'))):
- # TODO: if the version file exists (in the future) we'll want to
- # check the value in it - for now the file itself is a flag
+ not os.path.exists(version)):
+ # for now the file itself is a flag
self.force_reindex()
+ elif os.path.exists(version):
+ version = open(version).read()
+ # check the value and reindex if it's not the latest
+ if version.strip() != '1':
+ self.force_reindex()
def force_reindex(self):
'''Force a reindex condition
try:
f = open(self.indexdb + segment, 'rb')
except IOError, error:
- if error.errno != errno.ENOENT:
- raise
+ # probably just nonexistent segment index file
+ if error.errno != errno.ENOENT: raise
else:
pickle_str = zlib.decompress(f.read())
f.close()
for segment in self.segments:
try:
os.remove(self.indexdb + segment)
- except OSError:
+ except OSError, error:
# probably just nonexistent segment index file
- # TODO: make sure it's an EEXIST
- pass
+ if error.errno != errno.ENOENT: raise
# First write the much simpler filename/fileid dictionaries
dbfil = {'WORDS':None, 'FILES':self.files, 'FILEIDS':self.fileids}
def purge_entry(self, identifier):
''' Remove a file from file index and word index
'''
+ self.load_index()
+
if not self.files.has_key(identifier):
return
#
#$Log: not supported by cvs2svn $
+#Revision 1.11 2002/07/18 11:17:30 gmcm
+#Add Number and Boolean types to hyperdb.
+#Add conversion cases to web, mail & admin interfaces.
+#Add storage/serialization cases to back_anydbm & back_metakit.
+#
+#Revision 1.10 2002/07/14 23:17:24 richard
+#oops
+#
+#Revision 1.9 2002/07/14 06:11:16 richard
+#Some TODOs
+#
+#Revision 1.8 2002/07/09 21:53:38 gmcm
+#Optimize Class.find so that the propspec can contain a set of ids to match.
+#This is used by indexer.search so it can do just one find for all the index matches.
+#This was already confusing code, but for common terms (lots of index matches),
+#it is enormously faster.
+#
#Revision 1.7 2002/07/09 21:38:43 richard
#Only save the index if the thing is loaded and changed. Also, don't load
#the index just for a save.