| @@ -12,7 +12,6 @@ import ( | |||
| "net/http" | |||
| "net/http/fcgi" | |||
| "os" | |||
| "os/signal" | |||
| "path" | |||
| "strings" | |||
| @@ -531,16 +530,6 @@ func runWeb(ctx *cli.Context) { | |||
| // Not found handler. | |||
| m.NotFound(routers.NotFound) | |||
| // Detect kill signal. | |||
| c := make(chan os.Signal, 1) | |||
| signal.Notify(c, os.Interrupt) | |||
| go func() { | |||
| for _ = range c { | |||
| fmt.Println("Kill signal detected, exiting now...") | |||
| os.Exit(0) | |||
| } | |||
| }() | |||
| // Flag for port number in case first time run conflict. | |||
| if ctx.IsSet("port") { | |||
| setting.AppUrl = strings.Replace(setting.AppUrl, setting.HttpPort, ctx.String("port"), 1) | |||
| @@ -235,6 +235,26 @@ | |||
| "outputPathIsSetByUser": 0, | |||
| "processed": 1 | |||
| }, | |||
| "\/public\/less\/_admin.less": { | |||
| "allowInsecureImports": 0, | |||
| "createSourceMap": 0, | |||
| "disableJavascript": 0, | |||
| "fileType": 1, | |||
| "ieCompatibility": 1, | |||
| "ignore": 1, | |||
| "ignoreWasSetByUser": 0, | |||
| "inputAbbreviatedPath": "\/public\/less\/_admin.less", | |||
| "outputAbbreviatedPath": "\/public\/css\/_admin.css", | |||
| "outputPathIsOutsideProject": 0, | |||
| "outputPathIsSetByUser": 0, | |||
| "outputStyle": 0, | |||
| "relativeURLS": 0, | |||
| "shouldRunAutoprefixer": 0, | |||
| "shouldRunBless": 0, | |||
| "strictImports": 0, | |||
| "strictMath": 0, | |||
| "strictUnits": 0 | |||
| }, | |||
| "\/public\/less\/_base.less": { | |||
| "allowInsecureImports": 0, | |||
| "createSourceMap": 0, | |||
| @@ -58,4 +58,8 @@ If you see the following error: | |||
| checkVersion()] [E] Binary and template file version does not match | |||
| ``` | |||
| Run `rm -fr /var/gogs/gogs/templates/` should fix this it. Just remember to backup templates file if you have made modifications youself. | |||
| Run `rm -fr /var/gogs/gogs/templates/` should fix this it. Just remember to backup templates file if you have made modifications youself. | |||
| ## Known Issues | |||
| - [Use ctrl+c when clone through SSH makes Docker exit unexpectedly](https://github.com/gogits/gogs/issues/1499) | |||
| @@ -0,0 +1,18 @@ | |||
| .admin { | |||
| padding-top: 15px; | |||
| padding-bottom: @footer-margin * 3; | |||
| .table.segment { | |||
| padding: 0; | |||
| font-size: 13px; | |||
| th { | |||
| padding-top: 5px; | |||
| padding-bottom: 5px; | |||
| } | |||
| th, td { | |||
| &:first-child { | |||
| padding-left: 15px; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -4,4 +4,5 @@ | |||
| @import "_home"; | |||
| @import "_install"; | |||
| @import "_form"; | |||
| @import "_repository"; | |||
| @import "_repository"; | |||
| @import "_admin"; | |||
| @@ -1,74 +1,65 @@ | |||
| {{template "ng/base/head" .}} | |||
| {{template "ng/base/header" .}} | |||
| <div id="admin-wrapper"> | |||
| <div id="setting-wrapper" class="main-wrapper"> | |||
| <div id="admin-setting" class="container clear"> | |||
| {{template "admin/nav" .}} | |||
| <div class="grid-4-5 left"> | |||
| <div class="setting-content"> | |||
| {{template "ng/base/alert" .}} | |||
| <div id="setting-content"> | |||
| <div class="panel panel-radius"> | |||
| <div class="panel-header"> | |||
| <strong>{{.i18n.Tr "admin.monitor.cron"}}</strong> | |||
| </div> | |||
| <div class="panel-body admin-panel"> | |||
| <table class="table table-striped"> | |||
| <thead> | |||
| <tr> | |||
| <th>{{.i18n.Tr "admin.monitor.name"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.schedule"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.next"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.previous"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.execute_times"}}</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody> | |||
| {{range .Entries}} | |||
| <tr> | |||
| <td>{{.Description}}</td> | |||
| <td>{{.Spec}}</td> | |||
| <td>{{.Next}}</td> | |||
| <td>{{.Prev}}</td> | |||
| <td>{{.ExecTimes}}</td> | |||
| </tr> | |||
| {{end}} | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| <br> | |||
| <div class="panel panel-radius"> | |||
| <div class="panel-header"> | |||
| <strong>{{.i18n.Tr "admin.monitor.process"}}</strong> | |||
| </div> | |||
| <div class="panel-body admin-panel"> | |||
| <table class="table table-striped"> | |||
| <thead> | |||
| <tr> | |||
| <th>Pid</th> | |||
| <th>{{.i18n.Tr "admin.monitor.desc"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.start"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.execute_time"}}</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody> | |||
| {{range .Processes}} | |||
| <tr> | |||
| <td>{{.Pid}}</td> | |||
| <td>{{.Description}}</td> | |||
| <td>{{.Start}}</td> | |||
| <td>{{TimeSince .Start $.Lang}}</td> | |||
| </tr> | |||
| {{end}} | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "base/head" .}} | |||
| <div class="admin monitor"> | |||
| <div class="ui container"> | |||
| <div class="ui grid"> | |||
| {{template "admin/navbar" .}} | |||
| <div class="twelve wide column content"> | |||
| {{template "base/alert" .}} | |||
| <h4 class="ui top attached header"> | |||
| {{.i18n.Tr "admin.monitor.cron"}} | |||
| </h4> | |||
| <div class="ui attached table segment"> | |||
| <table class="ui very basic striped table"> | |||
| <thead> | |||
| <tr> | |||
| <th>{{.i18n.Tr "admin.monitor.name"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.schedule"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.next"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.previous"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.execute_times"}}</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody> | |||
| {{range .Entries}} | |||
| <tr> | |||
| <td>{{.Description}}</td> | |||
| <td>{{.Spec}}</td> | |||
| <td>{{DateFmtLong .Next}}</td> | |||
| <td>{{if gt .Prev.Year 1 }}{{DateFmtLong .Prev}}{{else}}N/A{{end}}</td> | |||
| <td>{{.ExecTimes}}</td> | |||
| </tr> | |||
| {{end}} | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| <h4 class="ui top attached header"> | |||
| {{.i18n.Tr "admin.monitor.process"}} | |||
| </h4> | |||
| <div class="ui attached table segment"> | |||
| <table class="ui very basic striped table"> | |||
| <thead> | |||
| <tr> | |||
| <th>Pid</th> | |||
| <th>{{.i18n.Tr "admin.monitor.desc"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.start"}}</th> | |||
| <th>{{.i18n.Tr "admin.monitor.execute_time"}}</th> | |||
| </tr> | |||
| </thead> | |||
| <tbody> | |||
| {{range .Processes}} | |||
| <tr> | |||
| <td>{{.Pid}}</td> | |||
| <td>{{.Description}}</td> | |||
| <td>{{DateFmtLong .Start}}</td> | |||
| <td>{{TimeSince .Start $.Lang}}</td> | |||
| </tr> | |||
| {{end}} | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "ng/base/footer" .}} | |||
| {{template "base/footer" .}} | |||
| @@ -0,0 +1,29 @@ | |||
| <div class="four wide column"> | |||
| <div class="ui vertical menu"> | |||
| <div class="header item">{{.i18n.Tr "admin_panel"}}</div> | |||
| <a class="{{if .PageIsAdminDashboard}}active{{end}} item" href="{{AppSubUrl}}/admin"> | |||
| {{.i18n.Tr "admin.dashboard"}} | |||
| </a> | |||
| <a class="{{if .PageIsAdminUsers}}active{{end}} item" href="{{AppSubUrl}}/admin/users"> | |||
| {{.i18n.Tr "admin.users"}} | |||
| </a> | |||
| <a class="{{if .PageIsAdminOrganizations}}active{{end}} item" href="{{AppSubUrl}}/admin/orgs"> | |||
| {{.i18n.Tr "admin.organizations"}} | |||
| </a> | |||
| <a class="{{if .PageIsAdminRepositories}}active{{end}} item" href="{{AppSubUrl}}/admin/repos"> | |||
| {{.i18n.Tr "admin.repositories"}} | |||
| </a> | |||
| <a class="{{if .PageIsAdminAuthentications}}active{{end}} item" href="{{AppSubUrl}}/admin/auths"> | |||
| {{.i18n.Tr "admin.authentication"}} | |||
| </a> | |||
| <a class="{{if .PageIsAdminConfig}}active{{end}} item" href="{{AppSubUrl}}/admin/config"> | |||
| {{.i18n.Tr "admin.config"}} | |||
| </a> | |||
| <a class="{{if .PageIsAdminNotices}}active{{end}} item" href="{{AppSubUrl}}/admin/notices"> | |||
| {{.i18n.Tr "admin.notices"}} | |||
| </a> | |||
| <a class="{{if .PageIsAdminMonitor}}active{{end}} item" href="{{AppSubUrl}}/admin/monitor"> | |||
| {{.i18n.Tr "admin.monitor"}} | |||
| </a> | |||
| </div> | |||
| </div> | |||
| @@ -2,73 +2,73 @@ | |||
| <div class="repository settings"> | |||
| {{template "repo/header" .}} | |||
| <div class="ui container"> | |||
| <div class="ui grid"> | |||
| {{template "repo/settings/navbar" .}} | |||
| <div class="twelve wide column content"> | |||
| {{template "base/alert" .}} | |||
| <h4 class="ui top attached header"> | |||
| {{.i18n.Tr "repo.settings.deploy_keys"}} | |||
| <div class="ui right"> | |||
| <div id="add-deploy-key" class="ui blue tiny button">{{.i18n.Tr "repo.settings.add_deploy_key"}}</div> | |||
| </div> | |||
| </h4> | |||
| <div class="ui attached segment"> | |||
| {{if .Deploykeys}} | |||
| <div class="ui key list"> | |||
| {{range .Deploykeys}} | |||
| <div class="item ui grid"> | |||
| <div class="one wide column"> | |||
| <i class="ssh-key-state-indicator fa fa-circle{{if .HasRecentActivity}} active invert poping up{{else}}-o{{end}}" {{if .HasRecentActivity}}data-content="{{$.i18n.Tr "settings.key_state_desc"}}" data-variation="inverted"{{end}}></i> | |||
| </div> | |||
| <div class="one wide column"> | |||
| <i class="mega-octicon octicon-key left"></i> | |||
| </div> | |||
| <div class="eleven wide column"> | |||
| <strong>{{.Name}}</strong> | |||
| <div class="print meta"> | |||
| {{.Fingerprint}} | |||
| <div class="ui grid"> | |||
| {{template "repo/settings/navbar" .}} | |||
| <div class="twelve wide column content"> | |||
| {{template "base/alert" .}} | |||
| <h4 class="ui top attached header"> | |||
| {{.i18n.Tr "repo.settings.deploy_keys"}} | |||
| <div class="ui right"> | |||
| <div id="add-deploy-key" class="ui blue tiny button">{{.i18n.Tr "repo.settings.add_deploy_key"}}</div> | |||
| </div> | |||
| </h4> | |||
| <div class="ui attached segment"> | |||
| {{if .Deploykeys}} | |||
| <div class="ui key list"> | |||
| {{range .Deploykeys}} | |||
| <div class="item ui grid"> | |||
| <div class="one wide column"> | |||
| <i class="ssh-key-state-indicator fa fa-circle{{if .HasRecentActivity}} active invert poping up{{else}}-o{{end}}" {{if .HasRecentActivity}}data-content="{{$.i18n.Tr "settings.key_state_desc"}}" data-variation="inverted"{{end}}></i> | |||
| </div> | |||
| <div class="activity meta"> | |||
| <i>{{$.i18n.Tr "settings.add_on"}} <span>{{DateFmtShort .Created}}</span> — <i class="octicon octicon-info"></i> {{if .HasUsed}}{{$.i18n.Tr "settings.last_used"}} <span>{{DateFmtShort .Updated}}</span>{{else}}{{$.i18n.Tr "settings.no_activity"}}{{end}}</i> | |||
| <div class="one wide column"> | |||
| <i class="mega-octicon octicon-key left"></i> | |||
| </div> | |||
| <div class="eleven wide column"> | |||
| <strong>{{.Name}}</strong> | |||
| <div class="print meta"> | |||
| {{.Fingerprint}} | |||
| </div> | |||
| <div class="activity meta"> | |||
| <i>{{$.i18n.Tr "settings.add_on"}} <span>{{DateFmtShort .Created}}</span> — <i class="octicon octicon-info"></i> {{if .HasUsed}}{{$.i18n.Tr "settings.last_used"}} <span>{{DateFmtShort .Updated}}</span>{{else}}{{$.i18n.Tr "settings.no_activity"}}{{end}}</i> | |||
| </div> | |||
| </div> | |||
| <div class="two wide column"> | |||
| <button class="ui red tiny button delete-button" data-url="{{$.Link}}/delete" data-id="{{.ID}}"> | |||
| {{$.i18n.Tr "settings.delete_key"}} | |||
| </button> | |||
| </div> | |||
| </div> | |||
| <div class="two wide column"> | |||
| <button class="ui red tiny button delete-button" data-url="{{$.Link}}/delete" data-id="{{.ID}}"> | |||
| {{$.i18n.Tr "settings.delete_key"}} | |||
| </button> | |||
| </div> | |||
| {{end}} | |||
| </div> | |||
| {{else}} | |||
| {{.i18n.Tr "repo.settings.no_deploy_keys"}} | |||
| {{end}} | |||
| </div> | |||
| {{else}} | |||
| {{.i18n.Tr "repo.settings.no_deploy_keys"}} | |||
| {{end}} | |||
| </div> | |||
| <br> | |||
| <div {{if not .HasError}}class="hide"{{end}} id="add-deploy-key-panel"> | |||
| <h4 class="ui top attached header"> | |||
| {{.i18n.Tr "repo.settings.add_deploy_key"}} | |||
| </h4> | |||
| <div class="ui attached segment"> | |||
| <form class="ui form" action="{{.Link}}" method="post"> | |||
| {{.CsrfTokenHtml}} | |||
| <div class="field {{if .Err_Title}}error{{end}}"> | |||
| <label>{{.i18n.Tr "repo.settings.title"}}</label> | |||
| <input name="title" value="{{.title}}" autofocus required> | |||
| </div> | |||
| <div class="field {{if .Err_Content}}error{{end}}"> | |||
| <label>{{.i18n.Tr "repo.settings.deploy_key_content"}}</label> | |||
| <textarea name="content" required>{{.content}}</textarea> | |||
| </div> | |||
| <button class="ui green button"> | |||
| {{.i18n.Tr "repo.settings.add_deploy_key"}} | |||
| </button> | |||
| </form> | |||
| <br> | |||
| <div {{if not .HasError}}class="hide"{{end}} id="add-deploy-key-panel"> | |||
| <h4 class="ui top attached header"> | |||
| {{.i18n.Tr "repo.settings.add_deploy_key"}} | |||
| </h4> | |||
| <div class="ui attached segment"> | |||
| <form class="ui form" action="{{.Link}}" method="post"> | |||
| {{.CsrfTokenHtml}} | |||
| <div class="field {{if .Err_Title}}error{{end}}"> | |||
| <label>{{.i18n.Tr "repo.settings.title"}}</label> | |||
| <input name="title" value="{{.title}}" autofocus required> | |||
| </div> | |||
| <div class="field {{if .Err_Content}}error{{end}}"> | |||
| <label>{{.i18n.Tr "repo.settings.deploy_key_content"}}</label> | |||
| <textarea name="content" required>{{.content}}</textarea> | |||
| </div> | |||
| <button class="ui green button"> | |||
| {{.i18n.Tr "repo.settings.add_deploy_key"}} | |||
| </button> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="ui small basic delete modal"> | |||