summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--git/diff.go40
-rw-r--r--routes/routes.go10
-rw-r--r--static/style.css37
3 files changed, 70 insertions, 17 deletions
diff --git a/git/diff.go b/git/diff.go
index 4b42b9a..38c00f2 100644
--- a/git/diff.go
+++ b/git/diff.go
@@ -44,19 +44,28 @@ func (g *GitRepo) Diff() (*NiceDiff, error) {
return nil, fmt.Errorf("commit object: %w", err)
}
- var parent *object.Commit
- if len(c.ParentHashes) > 0 {
- parent, err = c.Parent(0)
- if err != nil {
- return nil, fmt.Errorf("getting parent: %w", err)
+ patch := &object.Patch{}
+ commitTree, err := c.Tree()
+ parent := &object.Commit{}
+ if err == nil {
+ parentTree := &object.Tree{}
+ if c.NumParents() != 0 {
+ parent, err = c.Parents().Next()
+ if err == nil {
+ parentTree, err = parent.Tree()
+ if err == nil {
+ patch, err = parentTree.Patch(commitTree)
+ if err != nil {
+ return nil, fmt.Errorf("patch: %w", err)
+ }
+ }
+ }
+ } else {
+ patch, err = parentTree.Patch(commitTree)
+ if err != nil {
+ return nil, fmt.Errorf("patch: %w", err)
+ }
}
- } else {
- parent = c
- }
-
- patch, err := parent.Patch(c)
- if err != nil {
- return nil, fmt.Errorf("patch: %w", err)
}
diffs, _, err := gitdiff.Parse(strings.NewReader(patch.String()))
@@ -66,7 +75,12 @@ func (g *GitRepo) Diff() (*NiceDiff, error) {
nd := NiceDiff{}
nd.Commit.This = c.Hash.String()
- nd.Commit.Parent = parent.Hash.String()
+
+ if parent.Hash.IsZero() {
+ nd.Commit.Parent = ""
+ } else {
+ nd.Commit.Parent = parent.Hash.String()
+ }
nd.Commit.Author = c.Author
nd.Commit.Message = c.Message
diff --git a/routes/routes.go b/routes/routes.go
index 7e2e897..920e66c 100644
--- a/routes/routes.go
+++ b/routes/routes.go
@@ -106,8 +106,8 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) {
tpath := filepath.Join(d.c.Dirs.Templates, "*")
t := template.Must(template.ParseGlob(tpath))
- if len(commits) >= 5 {
- commits = commits[:5]
+ if len(commits) >= 3 {
+ commits = commits[:3]
}
data := make(map[string]any)
@@ -149,6 +149,7 @@ func (d *deps) RepoTree(w http.ResponseWriter, r *http.Request) {
data["name"] = name
data["ref"] = ref
data["parent"] = treePath
+ data["desc"] = getDescription(path)
d.listFiles(files, data, w)
return
@@ -171,6 +172,7 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) {
data := make(map[string]any)
data["name"] = name
data["ref"] = ref
+ data["desc"] = getDescription(path)
d.showFile(contents, data, w)
return
@@ -188,7 +190,6 @@ func (d *deps) Log(w http.ResponseWriter, r *http.Request) {
}
commits, err := gr.Commits()
- log.Println(len(commits))
if err != nil {
d.Write500(w)
log.Println(err)
@@ -203,6 +204,7 @@ func (d *deps) Log(w http.ResponseWriter, r *http.Request) {
data["meta"] = d.c.Meta
data["name"] = name
data["ref"] = ref
+ data["desc"] = getDescription(path)
if err := t.ExecuteTemplate(w, "log", data); err != nil {
log.Println(err)
@@ -239,6 +241,7 @@ func (d *deps) Diff(w http.ResponseWriter, r *http.Request) {
data["meta"] = d.c.Meta
data["name"] = name
data["ref"] = ref
+ data["desc"] = getDescription(path)
if err := t.ExecuteTemplate(w, "commit", data); err != nil {
log.Println(err)
@@ -278,6 +281,7 @@ func (d *deps) Refs(w http.ResponseWriter, r *http.Request) {
data["name"] = name
data["branches"] = branches
data["tags"] = tags
+ data["desc"] = getDescription(path)
if err := t.ExecuteTemplate(w, "refs", data); err != nil {
log.Println(err)
diff --git a/static/style.css b/static/style.css
index 0b0664f..340635e 100644
--- a/static/style.css
+++ b/static/style.css
@@ -147,7 +147,9 @@ a:hover {
}
.diff {
- padding-top: 1rem;
+ margin: 1rem 0 1rem 0;
+ padding: 1rem 0 1rem 0;
+ border-bottom: 1.5px solid var(--medium-gray);
}
.diff pre {
@@ -162,6 +164,14 @@ a:hover {
color: var(--gray);
}
+.commit-email:before {
+ content: '<';
+}
+
+.commit-email:after {
+ content: '>';
+}
+
.commit pre {
padding-bottom: 1rem;
white-space: pre-wrap;
@@ -184,6 +194,31 @@ a:hover {
color: var(--gray);
}
+.ref {
+ font-family: var(--display-font);
+ font-size: 14px;
+ color: var(--gray);
+ display: inline-block;
+ padding-top: 0.7em;
+}
+
+.refs {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ align-items: center;
+}
+
+.line-numbers {
+ white-space: pre-line;
+}
+
+.file-wrapper {
+ display: flex;
+ flex-direction: row;
+ grid-template-columns: 1rem minmax(0, 1fr);
+ gap: 1rem;
+}
+
@media (max-width: 600px) {
.index {
grid-row-gap: 0.8em;