From 3a8b63b456c3fea4b1d299697a32630a108d8f48 Mon Sep 17 00:00:00 2001 From: ruslandoga Date: Fri, 24 Oct 2025 14:46:42 +0300 Subject: [PATCH 1/3] delete first --- lib/hexdocs/queue.ex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/hexdocs/queue.ex b/lib/hexdocs/queue.ex index 9d86bdc..456ad22 100644 --- a/lib/hexdocs/queue.ex +++ b/lib/hexdocs/queue.ex @@ -342,6 +342,8 @@ defmodule Hexdocs.Queue do defp update_search_index(key, package, version, files) do case Hexdocs.Search.find_search_items(package, version, files) do {proglang, items} -> + Logger.info("DELETING SEARCH INDEX #{key}") + Hexdocs.Search.delete(package, version) Logger.info("UPDATING SEARCH INDEX #{key}") Hexdocs.Search.index(package, version, proglang, items) Logger.info("UPDATED SEARCH INDEX #{key}") From aaeb35275f6506f4708f303362369b1db7ccda09 Mon Sep 17 00:00:00 2001 From: ruslandoga Date: Fri, 24 Oct 2025 15:03:16 +0300 Subject: [PATCH 2/3] allow indexing Elixir main and co --- lib/hexdocs/queue.ex | 27 ++++++++++++--------------- test/hexdocs/search_test.exs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/lib/hexdocs/queue.ex b/lib/hexdocs/queue.ex index 456ad22..7894521 100644 --- a/lib/hexdocs/queue.ex +++ b/lib/hexdocs/queue.ex @@ -167,23 +167,20 @@ defmodule Hexdocs.Queue do end defp process_search(key, package, version, body, start) do - case Version.parse(version) do - {:ok, version} -> - case Hexdocs.Tar.unpack(body, package: package, version: version) do - {:ok, files} -> - update_search_index(key, package, version, files) - - elapsed = System.os_time(:millisecond) - start - Logger.info("FINISHED INDEXING DOCS #{key} #{elapsed}ms") + version = + case Version.parse(version) do + {:ok, version} -> version + :error when package in @special_package_names -> version + end - {:error, reason} -> - Logger.error("Failed unpack #{package} #{version}: #{reason}") - end + case Hexdocs.Tar.unpack(body, package: package, version: version) do + {:ok, files} -> + update_search_index(key, package, version, files) + elapsed = System.os_time(:millisecond) - start + Logger.info("FINISHED INDEXING DOCS #{key} #{elapsed}ms") - :error when package in @special_package_names -> - # Skip for special packages, it's probably a tag push that's not valid semver - # and we don't need to index those - :ok + {:error, reason} -> + Logger.error("Failed unpack #{package} #{version}: #{reason}") end end diff --git a/test/hexdocs/search_test.exs b/test/hexdocs/search_test.exs index 51c9859..b6c35ec 100644 --- a/test/hexdocs/search_test.exs +++ b/test/hexdocs/search_test.exs @@ -117,6 +117,36 @@ defmodule Hexdocs.SearchTest do }) end + test "prunes previous docs before updating search index", %{package: _package} do + package = "elixir" + version = "1.18" + + run_upload(package, version, [ + {"index.html", "contents"}, + {"dist/search_data-0F918FFD.js", + """ + searchData={"items":[\ + {"type":"function","title":"Example.old_test/4","doc":"does old example things","ref":"Example.html#old_test/4"},\ + {"type":"module","title":"Example","doc":"example text","ref":"Example.html"}\ + ],"content_type":"text/markdown","producer":{"name":"ex_doc","version":[48,46,51,52,46,50]}}\ + """} + ]) + + run_upload(package, version, [ + {"index.html", "contents"}, + {"dist/search_data-0F918FFD.js", + """ + searchData={"items":[\ + {"type":"function","title":"Example.new_test/4","doc":"does new example things","ref":"Example.html#new_test/4"},\ + {"type":"module","title":"Example","doc":"example text","ref":"Example.html"}\ + ],"content_type":"text/markdown","producer":{"name":"ex_doc","version":[48,46,51,52,46,50]}}\ + """} + ]) + + assert [%{"document" => %{"title" => "Example.new_test/4"}}] = + typesense_search(%{"q" => "test", "query_by" => "title"}) + end + test "logs an info message if search_data is not found", %{package: package} do original_log_level = Logger.level() Logger.configure(level: :info) From d9ebf24f8a94f7327a9a1341e1ee2b0877153b58 Mon Sep 17 00:00:00 2001 From: ruslandoga Date: Fri, 24 Oct 2025 15:04:17 +0300 Subject: [PATCH 3/3] use elixir main in test --- test/hexdocs/search_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/hexdocs/search_test.exs b/test/hexdocs/search_test.exs index b6c35ec..0b784a0 100644 --- a/test/hexdocs/search_test.exs +++ b/test/hexdocs/search_test.exs @@ -119,7 +119,7 @@ defmodule Hexdocs.SearchTest do test "prunes previous docs before updating search index", %{package: _package} do package = "elixir" - version = "1.18" + version = "main" run_upload(package, version, [ {"index.html", "contents"},