1007ce764e
From https://github.com/go-gitea/gitea/issues/31018#issuecomment-2119622680. This commit removes the link to a deleted branch name because it returns a 404 while it is in this deleted state. GitHub also throws a 404 when navigating to a branch link that was just deleted, but this deleted branch is removed from the branch list after a page refresh. Since with Gitea this deleted branch would be kept around for quite some time (well, until the "cleanup deleted branches" cron job begins), it makes sense to not have this as a link that users can navigate to.
257 lines
14 KiB
Handlebars
257 lines
14 KiB
Handlebars
{{template "base/head" .}}
|
|
<div role="main" aria-label="{{.Title}}" class="page-content ui repository branches">
|
|
{{template "repo/header" .}}
|
|
<div class="ui container">
|
|
{{template "base/alert" .}}
|
|
{{template "repo/sub_menu" .}}
|
|
{{if .DefaultBranchBranch}}
|
|
<h4 class="ui top attached header">
|
|
{{ctx.Locale.Tr "repo.default_branch"}}
|
|
{{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
|
|
<a role="button" class="right" href="{{.RepoLink}}/settings/branches" data-tooltip-content="{{ctx.Locale.Tr "repo.settings.branches.switch_default_branch"}}">
|
|
{{svg "octicon-arrow-switch"}}
|
|
</a>
|
|
{{end}}
|
|
</h4>
|
|
|
|
<div class="ui attached table segment">
|
|
<table class="ui very basic striped fixed table single line">
|
|
<tbody>
|
|
<tr>
|
|
<td>
|
|
<div class="flex-text-block">
|
|
{{if .DefaultBranchBranch.IsProtected}}{{svg "octicon-shield-lock"}}{{end}}
|
|
<a class="gt-ellipsis" href="{{.RepoLink}}/src/branch/{{PathEscapeSegments .DefaultBranchBranch.DBBranch.Name}}">{{.DefaultBranchBranch.DBBranch.Name}}</a>
|
|
<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DefaultBranchBranch.DBBranch.Name}}">{{svg "octicon-copy" 14}}</button>
|
|
{{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DefaultBranchBranch.DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DefaultBranchBranch.DBBranch.CommitID)}}
|
|
</div>
|
|
<p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{.RepoLink}}/commit/{{PathEscape .DefaultBranchBranch.DBBranch.CommitID}}">{{ShortSha .DefaultBranchBranch.DBBranch.CommitID}}</a> · <span class="commit-message">{{RenderCommitMessage $.Context .DefaultBranchBranch.DBBranch.CommitMessage (.Repository.ComposeMetas ctx)}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{TimeSince .DefaultBranchBranch.DBBranch.CommitTime.AsTime ctx.Locale}}{{if .DefaultBranchBranch.DBBranch.Pusher}} {{template "shared/user/avatarlink" dict "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}</p>
|
|
</td>
|
|
<td class="right aligned middle aligned overflow-visible">
|
|
{{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
|
|
<button class="btn interact-bg show-create-branch-modal tw-p-2"
|
|
data-modal="#create-branch-modal"
|
|
data-branch-from="{{$.DefaultBranchBranch.DBBranch.Name}}"
|
|
data-branch-from-urlcomponent="{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}"
|
|
data-tooltip-content="{{ctx.Locale.Tr "repo.branch.new_branch_from" ($.DefaultBranchBranch.DBBranch.Name)}}"
|
|
>
|
|
{{svg "octicon-git-branch"}}
|
|
</button>
|
|
{{end}}
|
|
{{if .EnableFeed}}
|
|
<a role="button" class="btn interact-bg tw-p-2" href="{{$.FeedURL}}/rss/branch/{{PathEscapeSegments .DefaultBranchBranch.DBBranch.Name}}">{{svg "octicon-rss"}}</a>
|
|
{{end}}
|
|
{{if not $.DisableDownloadSourceArchives}}
|
|
<div class="ui dropdown btn interact-bg tw-p-2" data-tooltip-content="{{ctx.Locale.Tr "repo.branch.download" ($.DefaultBranchBranch.DBBranch.Name)}}">
|
|
{{svg "octicon-download"}}
|
|
<div class="menu">
|
|
<a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}.zip" rel="nofollow">{{svg "octicon-file-zip"}} ZIP</a>
|
|
<a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}.tar.gz" rel="nofollow">{{svg "octicon-file-zip"}} TAR.GZ</a>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted) (not $.IsMirror)}}
|
|
<button class="btn interact-bg tw-p-2 show-modal show-rename-branch-modal"
|
|
data-is-default-branch="true"
|
|
data-modal="#rename-branch-modal"
|
|
data-old-branch-name="{{$.DefaultBranchBranch.DBBranch.Name}}"
|
|
data-tooltip-content="{{ctx.Locale.Tr "repo.branch.rename" ($.DefaultBranchBranch.DBBranch.Name)}}"
|
|
>
|
|
{{svg "octicon-pencil"}}
|
|
</button>
|
|
{{end}}
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{{end}}
|
|
|
|
<h4 class="ui top attached header tw-flex tw-items-center tw-justify-between">
|
|
<div class="tw-flex tw-items-center">
|
|
{{ctx.Locale.Tr "repo.branches"}}
|
|
</div>
|
|
</h4>
|
|
|
|
<div class="ui attached segment">
|
|
<form class="ignore-dirty" method="get">
|
|
{{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.branch_kind")}}
|
|
</form>
|
|
</div>
|
|
|
|
<div class="ui attached table segment">
|
|
<table class="ui very basic striped fixed table single line">
|
|
<tbody>
|
|
{{range .Branches}}
|
|
<tr>
|
|
<td class="eight wide">
|
|
{{if .DBBranch.IsDeleted}}
|
|
<div class="flex-text-block">
|
|
<span class="gt-ellipsis">{{.DBBranch.Name}}</span>
|
|
<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DBBranch.Name}}">{{svg "octicon-copy" 14}}</button>
|
|
</div>
|
|
<p class="info">{{ctx.Locale.Tr "repo.branch.deleted_by" .DBBranch.DeletedBy.Name}} {{TimeSinceUnix .DBBranch.DeletedUnix ctx.Locale}}</p>
|
|
{{else}}
|
|
<div class="flex-text-block">
|
|
{{if .IsProtected}}{{svg "octicon-shield-lock"}}{{end}}
|
|
<a class="gt-ellipsis" href="{{$.RepoLink}}/src/branch/{{PathEscapeSegments .DBBranch.Name}}">{{.DBBranch.Name}}</a>
|
|
<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DBBranch.Name}}">{{svg "octicon-copy" 14}}</button>
|
|
{{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DBBranch.CommitID)}}
|
|
</div>
|
|
<p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{$.RepoLink}}/commit/{{PathEscape .DBBranch.CommitID}}">{{ShortSha .DBBranch.CommitID}}</a> · <span class="commit-message">{{RenderCommitMessage $.Context .DBBranch.CommitMessage ($.Repository.ComposeMetas ctx)}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{TimeSince .DBBranch.CommitTime.AsTime ctx.Locale}}{{if .DBBranch.Pusher}} {{template "shared/user/avatarlink" dict "user" .DBBranch.Pusher}} {{template "shared/user/namelink" .DBBranch.Pusher}}{{end}}</p>
|
|
{{end}}
|
|
</td>
|
|
<td class="two wide ui">
|
|
{{if and (not .DBBranch.IsDeleted) $.DefaultBranchBranch}}
|
|
<div class="commit-divergence">
|
|
<div class="bar-group">
|
|
<div class="count count-behind">{{.CommitsBehind}}</div>
|
|
{{/* old code bears 0/0.0 = NaN output, so it might output invalid "width: NaNpx", it just works and doesn't caues any problem. */}}
|
|
<div class="bar bar-behind" style="width: {{Eval 100 "*" .CommitsBehind "/" "(" .CommitsBehind "+" .CommitsAhead "+" 0.0 ")"}}%"></div>
|
|
</div>
|
|
<div class="bar-group">
|
|
<div class="count count-ahead">{{.CommitsAhead}}</div>
|
|
<div class="bar bar-ahead" style="width: {{Eval 100 "*" .CommitsAhead "/" "(" .CommitsBehind "+" .CommitsAhead "+" 0.0 ")"}}%"></div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
</td>
|
|
<td class="two wide right aligned">
|
|
{{if not .LatestPullRequest}}
|
|
{{if .IsIncluded}}
|
|
<span class="ui orange large label" data-tooltip-content="{{ctx.Locale.Tr "repo.branch.included_desc"}}">
|
|
{{svg "octicon-git-pull-request"}} {{ctx.Locale.Tr "repo.branch.included"}}
|
|
</span>
|
|
{{else if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
|
|
<a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}">
|
|
<button id="new-pull-request" class="ui compact basic button tw-mr-0">{{if $.CanPull}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}</button>
|
|
</a>
|
|
{{end}}
|
|
{{else if and .LatestPullRequest.HasMerged .MergeMovedOn}}
|
|
{{if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
|
|
<a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}">
|
|
<button id="new-pull-request" class="ui compact basic button tw-mr-0">{{if $.CanPull}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}</button>
|
|
</a>
|
|
{{end}}
|
|
{{else}}
|
|
<a href="{{.LatestPullRequest.Issue.Link}}" class="tw-align-middle ref-issue">{{if not .LatestPullRequest.IsSameRepo}}{{.LatestPullRequest.BaseRepo.FullName}}{{end}}#{{.LatestPullRequest.Issue.Index}}</a>
|
|
{{if .LatestPullRequest.HasMerged}}
|
|
<a href="{{.LatestPullRequest.Issue.Link}}" class="ui purple large label">{{svg "octicon-git-merge" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.pulls.merged"}}</a>
|
|
{{else if .LatestPullRequest.Issue.IsClosed}}
|
|
<a href="{{.LatestPullRequest.Issue.Link}}" class="ui red large label">{{svg "octicon-git-pull-request" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.issues.closed_title"}}</a>
|
|
{{else}}
|
|
<a href="{{.LatestPullRequest.Issue.Link}}" class="ui green large label">{{svg "octicon-git-pull-request" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.issues.open_title"}}</a>
|
|
{{end}}
|
|
{{end}}
|
|
</td>
|
|
<td class="three wide right aligned overflow-visible">
|
|
{{if and $.IsWriter (not $.Repository.IsArchived) (not .DBBranch.IsDeleted)}}
|
|
<button class="btn interact-bg tw-p-2 show-modal show-create-branch-modal"
|
|
data-branch-from="{{.DBBranch.Name}}"
|
|
data-branch-from-urlcomponent="{{PathEscapeSegments .DBBranch.Name}}"
|
|
data-tooltip-content="{{ctx.Locale.Tr "repo.branch.new_branch_from" .DBBranch.Name}}"
|
|
data-modal="#create-branch-modal" data-name="{{.DBBranch.Name}}"
|
|
>
|
|
{{svg "octicon-git-branch"}}
|
|
</button>
|
|
{{end}}
|
|
{{if $.EnableFeed}}
|
|
<a role="button" class="btn interact-bg tw-p-2" href="{{$.FeedURL}}/rss/branch/{{PathEscapeSegments .DBBranch.Name}}">{{svg "octicon-rss"}}</a>
|
|
{{end}}
|
|
{{if and (not .DBBranch.IsDeleted) (not $.DisableDownloadSourceArchives)}}
|
|
<div class="ui dropdown btn interact-bg tw-p-2" data-tooltip-content="{{ctx.Locale.Tr "repo.branch.download" (.DBBranch.Name)}}">
|
|
{{svg "octicon-download"}}
|
|
<div class="menu">
|
|
<a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments .DBBranch.Name}}.zip" rel="nofollow">{{svg "octicon-file-zip"}} ZIP</a>
|
|
<a class="item archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments .DBBranch.Name}}.tar.gz" rel="nofollow">{{svg "octicon-file-zip"}} TAR.GZ</a>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{if and $.IsWriter (not $.Repository.IsArchived) (not .DBBranch.IsDeleted) (not $.IsMirror)}}
|
|
<button class="btn interact-bg tw-p-2 show-modal show-rename-branch-modal"
|
|
data-is-default-branch="false"
|
|
data-old-branch-name="{{.DBBranch.Name}}"
|
|
data-modal="#rename-branch-modal"
|
|
data-tooltip-content="{{ctx.Locale.Tr "repo.branch.rename" (.DBBranch.Name)}}"
|
|
>
|
|
{{svg "octicon-pencil"}}
|
|
</button>
|
|
{{end}}
|
|
{{if and $.IsWriter (not $.IsMirror) (not $.Repository.IsArchived) (not .IsProtected)}}
|
|
{{if .DBBranch.IsDeleted}}
|
|
<button class="btn interact-bg tw-p-2 link-action restore-branch-button" data-url="{{$.Link}}/restore?branch_id={{.DBBranch.ID}}&name={{.DBBranch.Name}}&page={{$.Page.Paginater.Current}}" data-tooltip-content="{{ctx.Locale.Tr "repo.branch.restore" (.DBBranch.Name)}}">
|
|
<span class="text blue">
|
|
{{svg "octicon-reply"}}
|
|
</span>
|
|
</button>
|
|
{{else}}
|
|
<button class="btn interact-bg tw-p-2 delete-button delete-branch-button" data-url="{{$.Link}}/delete?name={{.DBBranch.Name}}&page={{$.Page.Paginater.Current}}" data-tooltip-content="{{ctx.Locale.Tr "repo.branch.delete" (.DBBranch.Name)}}" data-name="{{.DBBranch.Name}}">
|
|
{{svg "octicon-trash"}}
|
|
</button>
|
|
{{end}}
|
|
{{end}}
|
|
</td>
|
|
</tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{{template "base/paginate" .}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ui g-modal-confirm delete modal">
|
|
<div class="header">
|
|
{{svg "octicon-trash"}}
|
|
{{ctx.Locale.Tr "repo.branch.delete_html"}} <span class="name"></span>
|
|
</div>
|
|
<div class="content">
|
|
<p>{{ctx.Locale.Tr "repo.branch.delete_desc"}}</p>
|
|
</div>
|
|
{{template "base/modal_actions_confirm" .}}
|
|
</div>
|
|
|
|
<div class="ui mini modal" id="create-branch-modal">
|
|
<div class="header">
|
|
{{ctx.Locale.Tr "repo.branch.new_branch"}}
|
|
</div>
|
|
|
|
<form class="ui form" id="create-branch-form" action="" data-base-action="{{.Link}}/_new/branch/" method="post">
|
|
<div class="content">
|
|
{{.CsrfTokenHtml}}
|
|
<div class="field">
|
|
{{ctx.Locale.Tr "repo.branch.create_new_branch"}}
|
|
<span id="modal-create-branch-from-span"></span>
|
|
</div>
|
|
<div class="required field">
|
|
<label for="new_branch_name">{{ctx.Locale.Tr "repo.branch.name"}}</label>
|
|
<input id="new_branch_name" name="new_branch_name" required>
|
|
</div>
|
|
</div>
|
|
{{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
|
|
</form>
|
|
</div>
|
|
|
|
<div class="ui mini modal" id="rename-branch-modal">
|
|
<div class="header">
|
|
{{ctx.Locale.Tr "repo.settings.rename_branch"}}
|
|
</div>
|
|
<form class="ui form" action="{{$.Repository.Link}}/settings/rename_branch" method="post">
|
|
<div class="content">
|
|
{{.CsrfTokenHtml}}
|
|
<div class="field default-branch-warning">
|
|
<span class="text red">{{ctx.Locale.Tr "repo.branch.warning_rename_default_branch"}}</span>
|
|
</div>
|
|
<div class="field">
|
|
<span class="text" data-rename-branch-to="{{ctx.Locale.Tr "repo.branch.rename_branch_to"}}"></span>
|
|
</div>
|
|
<input name="from" type="hidden" required>
|
|
<div class="required field">
|
|
<input name="to" required>
|
|
</div>
|
|
</div>
|
|
{{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
|
|
</form>
|
|
</div>
|
|
{{template "base/footer" .}}
|