1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# Rebuild the current xapian index
def rebuild_xapian_index(terms = true, values = true, texts = true, dropfirst = true)
if dropfirst
begin
ActsAsXapian.readable_init
FileUtils.rm_r(ActsAsXapian.db_path)
rescue RuntimeError
end
ActsAsXapian.writable_init
ActsAsXapian.writable_db.close
end
parse_all_incoming_messages
# safe_rebuild=true, which involves forking to avoid memory leaks, doesn't work well with rspec.
# unsafe is significantly faster, and we can afford possible memory leaks while testing.
models = [PublicBody, User, InfoRequestEvent]
ActsAsXapian.rebuild_index(models, verbose=false, terms, values, texts, safe_rebuild=false)
end
def update_xapian_index
ActsAsXapian.update_index(flush_to_disk=false, verbose=false)
end
# Copy the xapian index created in create_fixtures_xapian_index to a temporary
# copy at the same level and point xapian at the copy
def get_fixtures_xapian_index()
# Create a base index for the fixtures if not already created
$existing_xapian_db ||= create_fixtures_xapian_index
# Store whatever the xapian db path is originally
$original_xapian_path ||= ActsAsXapian.db_path
path_array = $original_xapian_path.split(File::Separator)
path_array.pop
temp_path = File.join(path_array, 'test.temp')
FileUtils.remove_entry_secure(temp_path, force=true)
FileUtils.cp_r($original_xapian_path, temp_path)
ActsAsXapian.db_path = temp_path
end
# Create a clean xapian index based on the fixture files and the raw_email data.
def create_fixtures_xapian_index
load_raw_emails_data
rebuild_xapian_index
end
|