forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
Monorepo for Tangled
fork
Configure Feed
Select the types of activity you want to include in your feed.
1package types
2
3import (
4 "github.com/bluekeyes/go-gitdiff/gitdiff"
5 "github.com/go-git/go-git/v5/plumbing/object"
6)
7
8type DiffOpts struct {
9 Split bool `json:"split"`
10}
11
12type TextFragment struct {
13 Header string `json:"comment"`
14 Lines []gitdiff.Line `json:"lines"`
15}
16
17type Diff struct {
18 Name struct {
19 Old string `json:"old"`
20 New string `json:"new"`
21 } `json:"name"`
22 TextFragments []gitdiff.TextFragment `json:"text_fragments"`
23 IsBinary bool `json:"is_binary"`
24 IsNew bool `json:"is_new"`
25 IsDelete bool `json:"is_delete"`
26 IsCopy bool `json:"is_copy"`
27 IsRename bool `json:"is_rename"`
28}
29
30type DiffStat struct {
31 Insertions int64
32 Deletions int64
33}
34
35func (d *Diff) Stats() DiffStat {
36 var stats DiffStat
37 for _, f := range d.TextFragments {
38 stats.Insertions += f.LinesAdded
39 stats.Deletions += f.LinesDeleted
40 }
41 return stats
42}
43
44// A nicer git diff representation.
45type NiceDiff struct {
46 Commit struct {
47 Message string `json:"message"`
48 Author object.Signature `json:"author"`
49 This string `json:"this"`
50 Parent string `json:"parent"`
51 PGPSignature string `json:"pgp_signature"`
52 Committer object.Signature `json:"committer"`
53 Tree string `json:"tree"`
54 ChangedId string `json:"change_id"`
55 } `json:"commit"`
56 Stat struct {
57 FilesChanged int `json:"files_changed"`
58 Insertions int `json:"insertions"`
59 Deletions int `json:"deletions"`
60 } `json:"stat"`
61 Diff []Diff `json:"diff"`
62}
63
64type DiffTree struct {
65 Rev1 string `json:"rev1"`
66 Rev2 string `json:"rev2"`
67 Patch string `json:"patch"`
68 Diff []*gitdiff.File `json:"diff"`
69}
70
71func (d *NiceDiff) ChangedFiles() []string {
72 files := make([]string, len(d.Diff))
73
74 for i, f := range d.Diff {
75 if f.IsDelete {
76 files[i] = f.Name.Old
77 } else {
78 files[i] = f.Name.New
79 }
80 }
81
82 return files
83}
84
85// used by html elements as a unique ID for hrefs
86func (d *Diff) Id() string {
87 return d.Name.New
88}
89
90func (d *Diff) Split() *SplitDiff {
91 fragments := make([]SplitFragment, len(d.TextFragments))
92 for i, fragment := range d.TextFragments {
93 leftLines, rightLines := SeparateLines(&fragment)
94 fragments[i] = SplitFragment{
95 Header: fragment.Header(),
96 LeftLines: leftLines,
97 RightLines: rightLines,
98 }
99 }
100
101 return &SplitDiff{
102 Name: d.Id(),
103 TextFragments: fragments,
104 }
105}