diff options
author | Runxi Yu <me@runxiyu.org> | 2025-03-25 02:40:58 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-03-25 02:40:58 +0800 |
commit | 677a0b051f025992b74fe01ebd282df9fe4dd2ee (patch) | |
tree | 1cba347fee6e932185c72c21cf8ed7c720abdafa /http_handle_repo_tree.go | |
parent | Cache commit logs on the repo index page (diff) | |
download | forge-677a0b051f025992b74fe01ebd282df9fe4dd2ee.tar.gz forge-677a0b051f025992b74fe01ebd282df9fe4dd2ee.tar.zst forge-677a0b051f025992b74fe01ebd282df9fe4dd2ee.zip |
Cache dir view in tree view
Diffstat (limited to 'http_handle_repo_tree.go')
-rw-r--r-- | http_handle_repo_tree.go | 81 |
1 files changed, 50 insertions, 31 deletions
diff --git a/http_handle_repo_tree.go b/http_handle_repo_tree.go index 91d7e68..41ae93e 100644 --- a/http_handle_repo_tree.go +++ b/http_handle_repo_tree.go @@ -5,6 +5,7 @@ package main import ( "bytes" + "fmt" "html/template" "net/http" "path" @@ -39,38 +40,44 @@ func httpHandleRepoTree(writer http.ResponseWriter, request *http.Request, param } refHashSlice = refHash[:] + cacheHandle := append(refHashSlice, []byte(pathSpec)...) + + fmt.Printf("%#v", string(cacheHandle)) + + if value, found := treeReadmeCache.Get(cacheHandle); found { + params["files"] = value.DisplayTree + params["readme_filename"] = value.ReadmeFilename + params["readme"] = value.ReadmeRendered + renderTemplate(writer, "repo_tree_dir", params) + return + } + var target *object.Tree if pathSpec == "" { - if value, found := treeReadmeCache.Get(refHashSlice); found { - params["files"] = value.DisplayTree - params["readme_filename"] = value.ReadmeFilename - params["readme"] = value.ReadmeRendered - } else { - if commitObject, err = repo.CommitObject(refHash); err != nil { - errorPage500(writer, params, "Error getting commit object: "+err.Error()) - return - } - if tree, err = commitObject.Tree(); err != nil { - errorPage500(writer, params, "Error getting file tree: "+err.Error()) - return - } - - start := time.Now() - displayTree := makeDisplayTree(tree) - readmeFilename, readmeRendered := renderReadmeAtTree(tree) - cost := time.Since(start).Nanoseconds() - - params["files"] = displayTree - params["readme_filename"] = readmeFilename - params["readme"] = readmeRendered - - entry := treeReadmeCacheEntry{ - DisplayTree: displayTree, - ReadmeFilename: readmeFilename, - ReadmeRendered: readmeRendered, - } - treeReadmeCache.Set(refHashSlice, entry, cost) + if commitObject, err = repo.CommitObject(refHash); err != nil { + errorPage500(writer, params, "Error getting commit object: "+err.Error()) + return + } + if tree, err = commitObject.Tree(); err != nil { + errorPage500(writer, params, "Error getting file tree: "+err.Error()) + return + } + + start := time.Now() + displayTree := makeDisplayTree(tree) + readmeFilename, readmeRendered := renderReadmeAtTree(tree) + cost := time.Since(start).Nanoseconds() + + params["files"] = displayTree + params["readme_filename"] = readmeFilename + params["readme"] = readmeRendered + + entry := treeReadmeCacheEntry{ + DisplayTree: displayTree, + ReadmeFilename: readmeFilename, + ReadmeRendered: readmeRendered, } + treeReadmeCache.Set(cacheHandle, entry, cost) renderTemplate(writer, "repo_tree_dir", params) return @@ -131,8 +138,20 @@ func httpHandleRepoTree(writer http.ResponseWriter, request *http.Request, param return } - params["readme_filename"], params["readme"] = renderReadmeAtTree(target) - params["files"] = makeDisplayTree(target) + start := time.Now() + displayTree := makeDisplayTree(target) + readmeFilename, readmeRendered := renderReadmeAtTree(target) + cost := time.Since(start).Nanoseconds() + + entry := treeReadmeCacheEntry{ + DisplayTree: displayTree, + ReadmeFilename: readmeFilename, + ReadmeRendered: readmeRendered, + } + treeReadmeCache.Set(cacheHandle, entry, cost) + + params["readme_filename"], params["readme"] = readmeFilename, readmeRendered + params["files"] = displayTree renderTemplate(writer, "repo_tree_dir", params) } |