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 @@