web frontend for git (tangled's grandpa)
7
fork

Configure Feed

Select the types of activity you want to include in your feed.

git: rework diff to fetch initial commit

+70 -17
+27 -13
git/diff.go
··· 44 44 return nil, fmt.Errorf("commit object: %w", err) 45 45 } 46 46 47 - var parent *object.Commit 48 - if len(c.ParentHashes) > 0 { 49 - parent, err = c.Parent(0) 50 - if err != nil { 51 - return nil, fmt.Errorf("getting parent: %w", err) 47 + patch := &object.Patch{} 48 + commitTree, err := c.Tree() 49 + parent := &object.Commit{} 50 + if err == nil { 51 + parentTree := &object.Tree{} 52 + if c.NumParents() != 0 { 53 + parent, err = c.Parents().Next() 54 + if err == nil { 55 + parentTree, err = parent.Tree() 56 + if err == nil { 57 + patch, err = parentTree.Patch(commitTree) 58 + if err != nil { 59 + return nil, fmt.Errorf("patch: %w", err) 60 + } 61 + } 62 + } 63 + } else { 64 + patch, err = parentTree.Patch(commitTree) 65 + if err != nil { 66 + return nil, fmt.Errorf("patch: %w", err) 67 + } 52 68 } 53 - } else { 54 - parent = c 55 - } 56 - 57 - patch, err := parent.Patch(c) 58 - if err != nil { 59 - return nil, fmt.Errorf("patch: %w", err) 60 69 } 61 70 62 71 diffs, _, err := gitdiff.Parse(strings.NewReader(patch.String())) ··· 66 75 67 76 nd := NiceDiff{} 68 77 nd.Commit.This = c.Hash.String() 69 - nd.Commit.Parent = parent.Hash.String() 78 + 79 + if parent.Hash.IsZero() { 80 + nd.Commit.Parent = "" 81 + } else { 82 + nd.Commit.Parent = parent.Hash.String() 83 + } 70 84 nd.Commit.Author = c.Author 71 85 nd.Commit.Message = c.Message 72 86
+7 -3
routes/routes.go
··· 106 106 tpath := filepath.Join(d.c.Dirs.Templates, "*") 107 107 t := template.Must(template.ParseGlob(tpath)) 108 108 109 - if len(commits) >= 5 { 110 - commits = commits[:5] 109 + if len(commits) >= 3 { 110 + commits = commits[:3] 111 111 } 112 112 113 113 data := make(map[string]any) ··· 149 149 data["name"] = name 150 150 data["ref"] = ref 151 151 data["parent"] = treePath 152 + data["desc"] = getDescription(path) 152 153 153 154 d.listFiles(files, data, w) 154 155 return ··· 171 172 data := make(map[string]any) 172 173 data["name"] = name 173 174 data["ref"] = ref 175 + data["desc"] = getDescription(path) 174 176 175 177 d.showFile(contents, data, w) 176 178 return ··· 188 190 } 189 191 190 192 commits, err := gr.Commits() 191 - log.Println(len(commits)) 192 193 if err != nil { 193 194 d.Write500(w) 194 195 log.Println(err) ··· 203 204 data["meta"] = d.c.Meta 204 205 data["name"] = name 205 206 data["ref"] = ref 207 + data["desc"] = getDescription(path) 206 208 207 209 if err := t.ExecuteTemplate(w, "log", data); err != nil { 208 210 log.Println(err) ··· 239 241 data["meta"] = d.c.Meta 240 242 data["name"] = name 241 243 data["ref"] = ref 244 + data["desc"] = getDescription(path) 242 245 243 246 if err := t.ExecuteTemplate(w, "commit", data); err != nil { 244 247 log.Println(err) ··· 278 281 data["name"] = name 279 282 data["branches"] = branches 280 283 data["tags"] = tags 284 + data["desc"] = getDescription(path) 281 285 282 286 if err := t.ExecuteTemplate(w, "refs", data); err != nil { 283 287 log.Println(err)
+36 -1
static/style.css
··· 147 147 } 148 148 149 149 .diff { 150 - padding-top: 1rem; 150 + margin: 1rem 0 1rem 0; 151 + padding: 1rem 0 1rem 0; 152 + border-bottom: 1.5px solid var(--medium-gray); 151 153 } 152 154 153 155 .diff pre { ··· 162 164 color: var(--gray); 163 165 } 164 166 167 + .commit-email:before { 168 + content: '<'; 169 + } 170 + 171 + .commit-email:after { 172 + content: '>'; 173 + } 174 + 165 175 .commit pre { 166 176 padding-bottom: 1rem; 167 177 white-space: pre-wrap; ··· 182 192 183 193 .diff-noop { 184 194 color: var(--gray); 195 + } 196 + 197 + .ref { 198 + font-family: var(--display-font); 199 + font-size: 14px; 200 + color: var(--gray); 201 + display: inline-block; 202 + padding-top: 0.7em; 203 + } 204 + 205 + .refs { 206 + display: grid; 207 + grid-template-columns: 1fr 1fr; 208 + align-items: center; 209 + } 210 + 211 + .line-numbers { 212 + white-space: pre-line; 213 + } 214 + 215 + .file-wrapper { 216 + display: flex; 217 + flex-direction: row; 218 + grid-template-columns: 1rem minmax(0, 1fr); 219 + gap: 1rem; 185 220 } 186 221 187 222 @media (max-width: 600px) {