diff --git a/appview/pulls/pull2.go b/appview/pulls/pull2.go index bfc0a69e..589aa0be 100644 --- a/appview/pulls/pull2.go +++ b/appview/pulls/pull2.go @@ -14,6 +14,7 @@ import ( "tangled.org/core/api/tangled" "tangled.org/core/appview/models" "tangled.org/core/appview/pages" + gitmirrorv1 "tangled.org/core/gitmirror/proto/gen" "tangled.org/core/types" ) @@ -21,7 +22,6 @@ import ( // you will have to check if object exist in context "just in case" // so it's better to make helper function that can read the url pattern instead. - // A -- B -- C // (master) (pr/123/0) // @@ -200,16 +200,48 @@ func (s *Pulls) PullDiff(w http.ResponseWriter, r *http.Request) { // htmx fragment. render diff between commits func (s *Pulls) PullDiffFragment(w http.ResponseWriter, r *http.Request) { - // var ( - // base = r.URL.Query().Get("base") // base commit ID - // head = r.URL.Query().Get("head") // head commit ID - // unified = r.URL.Query().Get("view") == "unified" - // ) + var ( + repoRaw = r.URL.Query().Get("repo") + base = r.URL.Query().Get("base") // base commit ID + head = r.URL.Query().Get("head") // head commit ID + unified = r.URL.Query().Get("view") == "unified" + ) + repo, err := syntax.ParseDID(repoRaw) + if err != nil { + http.Error(w, fmt.Sprintf("invalid repo DID: %q", repoRaw), http.StatusBadRequest) + return + } - // 1. get commit object - // 2. get diff between parent..commit (knotmirror), parse that diff - // 3. fetch each file entries (& run syntax highlight) <- skip this part for stage 1. we will do this at stage 2. - // 4. render diff + ctx := r.Context() + + stream, err := s.gitmirror.Diff(ctx, &gitmirrorv1.DiffRequest{ + Repo: repo.String(), + Base: base, + Head: head, + }) + if err != nil { + panic("unimplemented") + } + + diff, err := stream.Recv() + if err != nil { + panic("unimplemented") + } + + _ = diff + + // // 1. fetch each blob in parallel + // baseBlob, err := s.gitmirror.GetBlob(ctx, ...) + // headBlob, err := s.gitmirror.GetBlob(ctx, ...) + + // 2. render diff by merging diff & blob content + if unified { + // render unified diff + // var lines []string + } else { + // render split diff + // var leftLines, rightLines []string + } } // htmx fragment. render interdiff between changes diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index 99764cdb..e9dac606 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -18,6 +18,7 @@ import ( "tangled.org/core/appview/oauth" "tangled.org/core/appview/pages" "tangled.org/core/appview/reporesolver" + knotmirror "tangled.org/core/gitmirror/proto/gen" "tangled.org/core/idresolver" "tangled.org/core/ogre" "tangled.org/core/patchutil" @@ -40,6 +41,7 @@ type Pulls struct { logger *slog.Logger indexer *pulls_indexer.Indexer ogreClient *ogre.Client + gitmirror knotmirror.GitMirrorServiceClient } func New(