Hi… I am well aware that this diff view is very suboptimal. It will be fixed when the refactored server comes along!
Show branches
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-FileContributor: Runxi Yu <https://runxiyu.org> package main import ( "net/http" "strings" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/storer"
"github.com/go-git/go-git/v5/plumbing/object"
)
func handle_repo_index(w http.ResponseWriter, r *http.Request, params map[string]any) {
var repo *git.Repository
var repo_name string
var group_path []string
var ref_hash plumbing.Hash
var err error
var recent_commits []*object.Commit
var commit_object *object.Commit
var tree *object.Tree
var notes []string
var branches []string var branches_ storer.ReferenceIter
repo, repo_name, group_path = params["repo"].(*git.Repository), params["repo_name"].(string), params["group_path"].([]string)
if strings.Contains(repo_name, "\n") || slice_contains_newline(group_path) {
notes = append(notes, "Path contains newlines; HTTP Git access impossible")
}
ref_hash, err = get_ref_hash_from_type_and_name(repo, params["ref_type"].(string), params["ref_name"].(string))
if err != nil {
goto no_ref
}
branches_, err = repo.Branches()
if err != nil {}
err = branches_.ForEach(func (branch *plumbing.Reference) error {
branches = append(branches, branch.Name().Short())
return nil
})
if err != nil {}
params["branches"] = branches
if recent_commits, err = get_recent_commits(repo, ref_hash, 3); err != nil {
goto no_ref
}
params["commits"] = recent_commits
if commit_object, err = repo.CommitObject(ref_hash); err != nil {
goto no_ref
}
if tree, err = commit_object.Tree(); err != nil {
goto no_ref
}
params["files"] = build_display_git_tree(tree)
params["readme_filename"], params["readme"] = render_readme_at_tree(tree)
no_ref:
params["http_clone_url"] = generate_http_remote_url(group_path, repo_name)
params["ssh_clone_url"] = generate_ssh_remote_url(group_path, repo_name)
params["notes"] = notes
render_template(w, "repo_index", params)
}
{{/*
SPDX-License-Identifier: AGPL-3.0-only
SPDX-FileContributor: Runxi Yu <https://runxiyu.org>
*/}}
{{- define "repo_index" -}}
<!DOCTYPE html>
<html lang="en">
<head>
{{- template "head_common" . -}}
<title>{{ .repo_name }} – {{ template "group_path_plain" .group_path }} – {{ .global.forge_title -}}</title>
</head>
<body class="repo-index">
{{- template "header" . -}}
<div class="padding-wrapper">
<table id="repo-info-table" class="rounded">
<thead>
<tr class="title-row">
<th colspan="2">Repo info</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Name</th>
<td>{{- .repo_name -}}</td>
</tr>
{{- if .repo_description -}}
<tr>
<th scope="row">Description</th>
<td>{{- .repo_description -}}</td>
</tr>
{{- end -}}
<tr>
<th scope="row">SSH remote</th>
<td><code>{{- .ssh_clone_url -}}</code></td>
</tr>
{{- if .notes -}}
<tr>
<th scope="row">Notes</th>
<td><ul>{{- range .notes -}}<li>{{- . -}}</li>{{- end -}}</ul></td>
</tr>
{{- end -}}
</tbody>
</table>
</div>
<div class="padding-wrapper">
<table id="branches" class="rounded">
<thead>
<tr class="title-row">
<th colspan="1">Branches</th>
</tr>
</thead>
<tbody>
{{ range .branches }}
<tr>
<td>
<a href="./?branch={{ . }}">{{ . }}</a>
</td>
</tr>
{{ end }}
</tbody>
</table>
</div>
<div class="padding-wrapper">
<p>
<a href="contrib/" class="btn-normal">Merge requests</a>
</p>
</div>
{{- if .commits -}}
<div class="padding-wrapper scroll">
<table id="recent-commits" class="wide rounded">
<thead>
<tr class="title-row">
<th colspan="3">Recent commits (<a href="log/{{- if .ref_type -}}?{{- .ref_type -}}={{- .ref_name -}}{{- end -}}">see all</a>)</th>
</tr>
<tr>
<th scope="col">Title</th>
<th scope="col">Author</th>
<th scope="col">Author Date</th>
</tr>
</thead>
<tbody>
{{- range .commits -}}
<tr>
<td class="commit-title"><a href="commit/{{- .ID -}}">{{- .Message | first_line -}}</a></td>
<td class="commit-author">
<a class="email-name" href="mailto:{{- .Author.Email -}}">{{- .Author.Name -}}</a>
</td>
<td class="commit-time">
{{- .Author.When.Format "2006-01-02 15:04:05 -0700" -}}
</td>
</tr>
{{- end -}}
</tbody>
</table>
</div>
{{- end -}}
{{- if .files -}}
<div class="padding-wrapper scroll">
<table id="file-tree" class="wide rounded">
<thead>
<tr class="title-row">
<th colspan="3">/{{- if .ref_name -}} on {{- .ref_name -}}{{- end -}}</th>
</tr>
<tr>
<th scope="col">Mode</th>
<th scope="col">Filename</th>
<th scope="col">Size</th>
</tr>
</thead>
<tbody>
{{- $ref_type := .ref_type -}}
{{- $ref := .ref_name -}}
{{- range .files -}}
<tr>
<td class="file-mode">{{- .Mode -}}</td>
<td class="file-name"><a href="tree/{{- .Name -}}{{- if not .Is_file -}}/{{- end -}}{{- if $ref_type -}}?{{- $ref_type -}}={{- $ref -}}{{- end -}}">{{- .Name -}}</a>{{- if not .Is_file -}}/{{- end -}}</td>
<td class="file-size">{{- .Size -}}</td>
</tr>
{{- end -}}
</tbody>
</table>
</div>
{{- end -}}
{{- if .readme -}}
<div class="padding-wrapper" id="readme">
{{- .readme -}}
</div>
{{- end -}}
<footer>
{{- template "footer" . -}}
</footer>
</body>
</html>
{{- end -}}