gemini-search

A simple search engine for Geminispace
git clone git://git.laack.co/gemini-search.git
Log | Files | Refs | README

commit 2b577b37ebf92d224ba8657506e0ef0e99f039de
parent 2033e803e9fad5b8326c2776b57bc331bee3e382
Author: Andrew Laack <andrew@laack.co>
Date:   Mon,  4 May 2026 21:19:02 -0500

Uniqueness constraints, continue gracefully

Diffstat:
Mmain.go | 22++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/main.go b/main.go @@ -13,8 +13,7 @@ import ( func index(currentUrl string) (string, []string) { - u, err := url.Parse(currentUrl) - baseUrl := fmt.Sprintf("%s://%s", u.Scheme, u.Host) + base, err := url.Parse(currentUrl) if err != nil { panic(err) @@ -70,7 +69,14 @@ func index(currentUrl string) (string, []string) { } if strings.Contains(item, "://") == false { // relative link - geminiLinks = append(geminiLinks, baseUrl + item[0:indexOfSpace]) + + u, err := url.Parse(item[0:indexOfSpace]) + + if err != nil { + panic(err) + } + + geminiLinks = append(geminiLinks, base.ResolveReference(u).String()) } } @@ -93,7 +99,7 @@ func main() { defer db.Close() - createDb := "CREATE TABLE IF NOT EXISTS link (source, destination);" + createDb := "CREATE TABLE IF NOT EXISTS link (source, destination, CONSTRAINT unq UNIQUE (source, destination));" _, err = db.Exec(createDb) @@ -102,7 +108,7 @@ func main() { } - currentUrl := "gemini://tlgs.one/known-hosts" + currentUrl := "gemini://blog.laack.co" body, forwardGeminiLinks := index(currentUrl) err = os.WriteFile("outputs/" + url.PathEscape(currentUrl), []byte(body), 0644) @@ -121,10 +127,14 @@ func main() { fmt.Printf("Inserting link %d into table\n", index) if err != nil { + if strings.Compare(err.Error(), "UNIQUE constraint failed: link.source, link.destination") == 0 { + fmt.Println("Link already exists; continuing") + continue + } + panic(err) } } tx.Commit() - }