mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			269 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Handlebars
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			15 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">
 | |
| 									<a class="gt-ellipsis branch-name" href="{{.RepoLink}}/src/branch/{{PathEscapeSegments .DefaultBranchBranch.DBBranch.Name}}">{{.DefaultBranchBranch.DBBranch.Name}}</a>
 | |
| 									{{if .DefaultBranchBranch.IsProtected}}
 | |
| 										<span data-tooltip-content="{{ctx.Locale.Tr "repo.settings.protected_branch"}}">{{svg "octicon-shield-lock"}}</span>
 | |
| 									{{end}}
 | |
| 									<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DefaultBranchBranch.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_branch"}}">{{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">{{ctx.RenderUtils.RenderCommitMessage .DefaultBranchBranch.DBBranch.CommitMessage .Repository}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DefaultBranchBranch.DBBranch.CommitTime}}{{if .DefaultBranchBranch.DBBranch.Pusher}}  {{template "shared/user/avatarlink" dict "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}</p>
 | |
| 							</td>
 | |
| 							{{/* FIXME: here and below, the tw-overflow-visible is not quite right but it is still needed the moment: to show the important buttons when the width is narrow */}}
 | |
| 							<td class="tw-text-right tw-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="{{$.RepoLink}}/rss/branch/{{PathEscapeSegments .DefaultBranchBranch.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "rss_feed"}}">{{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 branch-name">{{.DBBranch.Name}}</span>
 | |
| 									<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_branch"}}">{{svg "octicon-copy" 14}}</button>
 | |
| 								</div>
 | |
| 								<p class="info">{{ctx.Locale.Tr "repo.branch.deleted_by" .DBBranch.DeletedBy.Name}} {{DateUtils.TimeSince .DBBranch.DeletedUnix}}</p>
 | |
| 							{{else}}
 | |
| 								<div class="flex-text-block">
 | |
| 									<a class="gt-ellipsis branch-name" href="{{$.RepoLink}}/src/branch/{{PathEscapeSegments .DBBranch.Name}}">{{.DBBranch.Name}}</a>
 | |
| 									{{if .IsProtected}}
 | |
| 										<span data-tooltip-content="{{ctx.Locale.Tr "repo.settings.protected_branch"}}">{{svg "octicon-shield-lock"}}</span>
 | |
| 									{{end}}
 | |
| 									<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_branch"}}">{{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">{{ctx.RenderUtils.RenderCommitMessage .DBBranch.CommitMessage $.Repository}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DBBranch.CommitTime}}{{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}}
 | |
| 								{{$tooltipDivergence := ""}}
 | |
| 								{{if or .CommitsBehind .CommitsAhead}}
 | |
| 									{{$tooltipDivergence = ctx.Locale.Tr "repo.branch.commits_divergence_from" .CommitsBehind .CommitsAhead $.DefaultBranchBranch.DBBranch.Name}}
 | |
| 								{{else}}
 | |
| 									{{$tooltipDivergence = ctx.Locale.Tr "repo.branch.commits_no_divergence" $.DefaultBranchBranch.DBBranch.Name}}
 | |
| 								{{end}}
 | |
| 								<div class="commit-divergence" data-tooltip-content="{{$tooltipDivergence}}">
 | |
| 									<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 cause 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 tw-text-right">
 | |
| 								{{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}}?expand=1">
 | |
| 										<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}}?expand=1">
 | |
| 										<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-closed" 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>
 | |
| 							{{/* FIXME: here and above, the tw-overflow-visible is not quite right */}}
 | |
| 							<td class="three wide tw-text-right tw-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="{{$.RepoLink}}/rss/branch/{{PathEscapeSegments .DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "rss_feed"}}">{{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}}/branches/rename" 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" .}}
 |