Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).

knotserver/xrpc: return last commit info in tree responses

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 696ec397 c356948c

verified
+50 -7
+11 -1
knotserver/git/tree.go
··· 48 48 func (g *GitRepo) makeNiceTree(ctx context.Context, subtree *object.Tree, parent string) []types.NiceTree { 49 49 nts := []types.NiceTree{} 50 50 51 - times, err := g.calculateCommitTimeIn(ctx, subtree, parent, 2*time.Second) 51 + entries := make([]string, len(subtree.Entries)) 52 + for _, e := range subtree.Entries { 53 + entries = append(entries, e.Name) 54 + } 55 + 56 + lastCommitDir := lastCommitDir{ 57 + dir: parent, 58 + entries: entries, 59 + } 60 + 61 + times, err := g.lastCommitDirIn(ctx, lastCommitDir, 2*time.Second) 52 62 if err != nil { 53 63 return nts 54 64 }
+4 -6
knotserver/xrpc/repo_blob.go
··· 147 147 ctx, cancel := context.WithTimeout(r.Context(), 2*time.Second) 148 148 defer cancel() 149 149 150 - lastCommit, err := gr.GetLastCommitForPath(ctx, treePath) 150 + lastCommit, err := gr.LastCommitFile(ctx, treePath) 151 151 if err == nil && lastCommit != nil { 152 - shortHash := lastCommit.Hash.String()[:8] 153 152 response.LastCommit = &tangled.RepoBlob_LastCommit{ 154 - Hash: lastCommit.Hash.String(), 155 - ShortHash: &shortHash, 156 - Message: lastCommit.Message, 157 - When: lastCommit.When.Format(time.RFC3339), 153 + Hash: lastCommit.Hash.String(), 154 + Message: lastCommit.Message, 155 + When: lastCommit.When.Format(time.RFC3339), 158 156 } 159 157 160 158 // try to get author information
+35
knotserver/xrpc/repo_tree.go
··· 9 9 "tangled.org/core/api/tangled" 10 10 "tangled.org/core/appview/pages/markup" 11 11 "tangled.org/core/knotserver/git" 12 + "tangled.org/core/types" 12 13 xrpcerr "tangled.org/core/xrpc/errors" 13 14 ) 14 15 ··· 106 105 Filename: readmeFileName, 107 106 Contents: readmeContents, 108 107 }, 108 + } 109 + 110 + // calculate lastCommit for the directory as a whole 111 + var lastCommitTree *types.LastCommitInfo 112 + for _, e := range files { 113 + if e.LastCommit == nil { 114 + continue 115 + } 116 + 117 + if lastCommitTree == nil { 118 + lastCommitTree = e.LastCommit 119 + continue 120 + } 121 + 122 + if lastCommitTree.When.After(e.LastCommit.When) { 123 + lastCommitTree = e.LastCommit 124 + } 125 + } 126 + 127 + if lastCommitTree != nil { 128 + response.LastCommit = &tangled.RepoTree_LastCommit{ 129 + Hash: lastCommitTree.Hash.String(), 130 + Message: lastCommitTree.Message, 131 + When: lastCommitTree.When.Format(time.RFC3339), 132 + } 133 + 134 + // try to get author information 135 + commit, err := gr.Commit(lastCommitTree.Hash) 136 + if err == nil { 137 + response.LastCommit.Author = &tangled.RepoTree_Signature{ 138 + Name: commit.Author.Name, 139 + Email: commit.Author.Email, 140 + } 141 + } 109 142 } 110 143 111 144 writeJson(w, response)