Skip to content

Commit 8328400

Browse files
authored
Prune index for <package>-<version> before updating (#61)
1 parent 0244f6e commit 8328400

File tree

2 files changed

+44
-15
lines changed

2 files changed

+44
-15
lines changed

lib/hexdocs/queue.ex

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -167,23 +167,20 @@ defmodule Hexdocs.Queue do
167167
end
168168

169169
defp process_search(key, package, version, body, start) do
170-
case Version.parse(version) do
171-
{:ok, version} ->
172-
case Hexdocs.Tar.unpack(body, package: package, version: version) do
173-
{:ok, files} ->
174-
update_search_index(key, package, version, files)
175-
176-
elapsed = System.os_time(:millisecond) - start
177-
Logger.info("FINISHED INDEXING DOCS #{key} #{elapsed}ms")
170+
version =
171+
case Version.parse(version) do
172+
{:ok, version} -> version
173+
:error when package in @special_package_names -> version
174+
end
178175

179-
{:error, reason} ->
180-
Logger.error("Failed unpack #{package} #{version}: #{reason}")
181-
end
176+
case Hexdocs.Tar.unpack(body, package: package, version: version) do
177+
{:ok, files} ->
178+
update_search_index(key, package, version, files)
179+
elapsed = System.os_time(:millisecond) - start
180+
Logger.info("FINISHED INDEXING DOCS #{key} #{elapsed}ms")
182181

183-
:error when package in @special_package_names ->
184-
# Skip for special packages, it's probably a tag push that's not valid semver
185-
# and we don't need to index those
186-
:ok
182+
{:error, reason} ->
183+
Logger.error("Failed unpack #{package} #{version}: #{reason}")
187184
end
188185
end
189186

@@ -342,6 +339,8 @@ defmodule Hexdocs.Queue do
342339
defp update_search_index(key, package, version, files) do
343340
case Hexdocs.Search.find_search_items(package, version, files) do
344341
{proglang, items} ->
342+
Logger.info("DELETING SEARCH INDEX #{key}")
343+
Hexdocs.Search.delete(package, version)
345344
Logger.info("UPDATING SEARCH INDEX #{key}")
346345
Hexdocs.Search.index(package, version, proglang, items)
347346
Logger.info("UPDATED SEARCH INDEX #{key}")

test/hexdocs/search_test.exs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,36 @@ defmodule Hexdocs.SearchTest do
117117
})
118118
end
119119

120+
test "prunes previous docs before updating search index", %{package: _package} do
121+
package = "elixir"
122+
version = "main"
123+
124+
run_upload(package, version, [
125+
{"index.html", "contents"},
126+
{"dist/search_data-0F918FFD.js",
127+
"""
128+
searchData={"items":[\
129+
{"type":"function","title":"Example.old_test/4","doc":"does old example things","ref":"Example.html#old_test/4"},\
130+
{"type":"module","title":"Example","doc":"example text","ref":"Example.html"}\
131+
],"content_type":"text/markdown","producer":{"name":"ex_doc","version":[48,46,51,52,46,50]}}\
132+
"""}
133+
])
134+
135+
run_upload(package, version, [
136+
{"index.html", "contents"},
137+
{"dist/search_data-0F918FFD.js",
138+
"""
139+
searchData={"items":[\
140+
{"type":"function","title":"Example.new_test/4","doc":"does new example things","ref":"Example.html#new_test/4"},\
141+
{"type":"module","title":"Example","doc":"example text","ref":"Example.html"}\
142+
],"content_type":"text/markdown","producer":{"name":"ex_doc","version":[48,46,51,52,46,50]}}\
143+
"""}
144+
])
145+
146+
assert [%{"document" => %{"title" => "Example.new_test/4"}}] =
147+
typesense_search(%{"q" => "test", "query_by" => "title"})
148+
end
149+
120150
test "logs an info message if search_data is not found", %{package: package} do
121151
original_log_level = Logger.level()
122152
Logger.configure(level: :info)

0 commit comments

Comments
 (0)