diff --git a/models/user_mail.go b/models/user_mail.go index 7244ec378..8bf74b81b 100755 --- a/models/user_mail.go +++ b/models/user_mail.go @@ -293,6 +293,16 @@ func MakeEmailPrimary(email *EmailAddress) error { } user.Email = email.Email + + has, err = sess.Where("id!=?", user.ID). + And("type=?", user.Type). + And("email=?", strings.ToLower(user.Email)). + Get(new(User)) + if err != nil { + return err + } else if has { + return ErrEmailAlreadyUsed{user.Email} + } if _, err = sess.ID(user.ID).Cols("email").Update(user); err != nil { return err } diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 4138e702f..2e5e3d2e3 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -1,8 +1,10 @@ package repo import ( + "bufio" "encoding/json" "errors" + "io" "net/http" "os" "os/exec" @@ -499,6 +501,45 @@ func downloadCode(repo *models.Repository, codePath string) error { return err } + configFile, err := os.OpenFile(codePath + "/.git/config", os.O_RDWR, 0666) + if err != nil { + log.Error("open file(%s) failed:%v", codePath + "/,git/config", err) + return err + } + + defer configFile.Close() + + pos := int64(0) + reader := bufio.NewReader(configFile) + for { + line, err := reader.ReadString('\n') + if err != nil { + if err == io.EOF { + log.Error("not find the remote-url") + return nil + } else { + log.Error("read error: %v", err) + return err + } + } + + if strings.Contains(line, "url") && strings.Contains(line, ".git"){ + originUrl := "\turl = " + repo.CloneLink().HTTPS + "\n" + if len(line) > len(originUrl) { + originUrl += strings.Repeat( " ", len(line) - len(originUrl)) + } + bytes := []byte(originUrl) + _, err := configFile.WriteAt(bytes, pos) + if err != nil { + log.Error("WriteAt failed:%v", err) + return err + } + break + } + + pos += int64(len(line)) + } + return nil } diff --git a/routers/user/setting/account.go b/routers/user/setting/account.go index 27f0bf1c8..6165bfc5b 100644 --- a/routers/user/setting/account.go +++ b/routers/user/setting/account.go @@ -80,6 +80,12 @@ func EmailPost(ctx *context.Context, form auth.AddEmailForm) { // Make emailaddress primary. if ctx.Query("_method") == "PRIMARY" { if err := models.MakeEmailPrimary(&models.EmailAddress{ID: ctx.QueryInt64("id")}); err != nil { + if _, ok := err.(models.ErrEmailAlreadyUsed); ok { + ctx.Flash.Error(ctx.Tr("form.email_been_used")) + ctx.Redirect(setting.AppSubURL + "/user/settings/account") + return + } + ctx.ServerError("MakeEmailPrimary", err) return } diff --git a/templates/repo/cloudbrain/new.tmpl b/templates/repo/cloudbrain/new.tmpl index 7f3e35642..dbbc8a0ad 100755 --- a/templates/repo/cloudbrain/new.tmpl +++ b/templates/repo/cloudbrain/new.tmpl @@ -116,6 +116,9 @@
{{template "base/alert" .}} +
+

+
{{.CsrfTokenHtml}}

@@ -162,7 +165,7 @@
- + {{range .images}} @@ -240,18 +243,24 @@ let form = document.getElementById('form_id'); let value_image = $("input[name='image']").val() console.log("value_image",$("input[name='image']").val()) + + $('#messageInfo').css('display','none') + form.onsubmit = function(e){ let value_task = $("input[name='job_name']").val() let value_image = $("input[name='image']").val() - let re = /^[a-zA-Z0-9-.]+$/ + let re = /^[a-z0-9][a-z0-9-_]{1,36}$/ let flag = re.test(value_task) if(!flag){ - alert("任务名称只能包含字母,数字,'-',和'.'") + $('#messageInfo').css('display','block') + let str = '只能以小写字母或数字开头且只包含小写字母、数字、_和-、最长36个字符。' + $('#messageInfo p').text(str) return false } if(!value_image){ - alert("镜像为空") + + return false } let min_value_task = value_task.toLowerCase() diff --git a/web_src/js/components/Images.vue b/web_src/js/components/Images.vue index 40a2ff18f..b6a246fb3 100644 --- a/web_src/js/components/Images.vue +++ b/web_src/js/components/Images.vue @@ -13,7 +13,7 @@
- + 搜索
@@ -44,7 +44,7 @@ @@ -55,14 +55,14 @@ + @@ -99,7 +102,7 @@
- + 搜索
@@ -132,7 +135,7 @@ @@ -143,7 +146,7 @@ + @@ -315,7 +321,7 @@ export default { }, - handleCurrentChange1(){ + handleCurrentChange1(val){ this.params1.page = val this.getImageList1() @@ -365,6 +371,37 @@ export default { } + }, + filters:{ + + + + + clearP(value){ + console.log("sorce value",value) + if(!value) return '' + const reg = /\<\/?p\>/g; + value = value.replace(reg,'') + console.log("repalace:",value) + return value + + }, + transformTimestamp(timestamp){ + console.log("timestamp",timestamp) + let a = new Date(timestamp).getTime(); + const date = new Date(a); + const Y = date.getFullYear() + '-'; + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + const D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' '; + const h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':'; + const m = (date.getMinutes() <10 ? '0'+date.getMinutes() : date.getMinutes()) + ':' ; + const s = (date.getSeconds() <10 ? '0'+date.getSeconds() : date.getSeconds()) ; // 秒 + const dateString = Y + M + D + h + m + s; + // console.log('dateString', dateString); // > dateString 2021-07-06 14:23 + return dateString; + }, + + }, watch:{ search(val){ @@ -407,8 +444,57 @@ export default { .el-table thead{ background-color: #f5f5f6; } +/deep/ .el-tabs__item:hover{ + color: #000; + font-weight: 500; + +} +/deep/ .el-tabs__item.is-active { + color: #000; + font-weight: 500; +} +/deep/ .el-tabs__active-bar{ + background-color:#000 +} + +/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active { + background-color: #5bb973; + color: #FFF; +} +/deep/ .el-pagination.is-background .el-pager li.active { + color: #fff; + cursor: default; +} +/deep/ .el-pagination.is-background .el-pager li:hover { + color: #5bb973; +} +/deep/ .el-pagination.is-background .el-pager li:not(.disabled):hover { + color: #5bb973; +} +/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active:hover { + background-color: #5bb973; + color: #FFF; +} + +/deep/ .el-pager li.active { + color: #08C0B9; + cursor: default; +} +/deep/ .el-pagination .el-pager li:hover { + color: #08C0B9; +} +/deep/ .el-pagination .el-pager li:not(.disabled):hover { + color: #08C0B9; +} +/* /deep/ .el-pagination.is-background .el-pager li:not(.disabled).active{ + background-color: #5bb973; + color: #000; +} */ +/* /deep/ .el-pager li:hover{ + color: #000; +} */ #success{ - background-color: #4093ff; + background-color: #5bb973; color: white; } .text-over{