···527527 Active string528528 EmailToDidOrHandle map[string]string529529 Pipeline *db.Pipeline530530+ DiffOpts types.DiffOpts530531531532 // singular because it's always going to be just one532533 VerifiedCommit commitverify.VerifiedCommits···860859 Round int861860 Submission *db.PullSubmission862861 OrderedReactionKinds []db.ReactionKind862862+ DiffOpts types.DiffOpts863863}864864865865// this name is a mouthful···966964 Base string967965 Head string968966 Diff *types.NiceDiff967967+ DiffOpts types.DiffOpts969968970969 Active string971970}
···179179 {{ end }}180180 </div>181181 </details>182182- <hr class="md:hidden border-t border-gray-300 dark:border-gray-600"/>183182 {{ end }}184183 {{ end }}185184{{ end }}
+6
appview/pulls/pulls.go
···355355 return356356 }357357358358+ var diffOpts types.DiffOpts359359+ if d := r.URL.Query().Get("diff"); d == "split" {360360+ diffOpts.Split = true361361+ }362362+358363 pull, ok := r.Context().Value("pull").(*db.Pull)359364 if !ok {360365 log.Println("failed to get pull")···400395 Round: roundIdInt,401396 Submission: pull.Submissions[roundIdInt],402397 Diff: &diff,398398+ DiffOpts: diffOpts,403399 })404400405401}
+12-1
appview/repo/repo.go
···268268 protocol = "https"269269 }270270271271+ var diffOpts types.DiffOpts272272+ if d := r.URL.Query().Get("diff"); d == "split" {273273+ diffOpts.Split = true274274+ }275275+271276 if !plumbing.IsHash(ref) {272277 rp.pages.Error404(w)273278 return···326321 EmailToDidOrHandle: emailToDidOrHandle(rp, emailToDidMap),327322 VerifiedCommit: vc,328323 Pipeline: pipeline,324324+ DiffOpts: diffOpts,329325 })330330- return331326}332327333328func (rp *Repo) RepoTree(w http.ResponseWriter, r *http.Request) {···12741269 return12751270 }1276127112721272+ var diffOpts types.DiffOpts12731273+ if d := r.URL.Query().Get("diff"); d == "split" {12741274+ diffOpts.Split = true12751275+ }12761276+12771277 // if user is navigating to one of12781278 // /compare/{base}/{head}12791279 // /compare/{base}...{head}···13411331 Base: base,13421332 Head: head,13431333 Diff: &diff,13341334+ DiffOpts: diffOpts,13441335 })1345133613461337}
+26
types/diff.go
···55 "github.com/go-git/go-git/v5/plumbing/object"66)7788+type DiffOpts struct {99+ Split bool `json:"split"`1010+}1111+812type TextFragment struct {913 Header string `json:"comment"`1014 Lines []gitdiff.Line `json:"lines"`···8076 }81778278 return files7979+}8080+8181+// used by html elements as a unique ID for hrefs8282+func (d *Diff) Id() string {8383+ return d.Name.New8484+}8585+8686+func (d *Diff) Split() *SplitDiff {8787+ fragments := make([]SplitFragment, len(d.TextFragments))8888+ for i, fragment := range d.TextFragments {8989+ leftLines, rightLines := SeparateLines(&fragment)9090+ fragments[i] = SplitFragment{9191+ Header: fragment.Header(),9292+ LeftLines: leftLines,9393+ RightLines: rightLines,9494+ }9595+ }9696+9797+ return &SplitDiff{9898+ Name: d.Id(),9999+ TextFragments: fragments,100100+ }83101}