Pārlūkot izejas kodu

Fix bug on transfer repo

Unknwon 10 gadi atpakaļ
vecāks
revīzija
f69761563b

+ 3 - 0
.gitignore

@@ -39,3 +39,6 @@ __pycache__
 output*
 config.codekit
 .brackets.json
+docker/fig.yml
+docker/docker/Dockerfile
+docker/docker/init_gogs.sh

+ 2 - 1
cmd/web.go

@@ -190,7 +190,8 @@ func runWeb(*cli.Context) {
 		r.Get("/logout", user.SignOut)
 	})
 
-	m.Get("/user/:username", ignSignIn, user.Profile) // TODO: Legacy
+	// FIXME: Legacy
+	m.Get("/user/:username", ignSignIn, user.Profile)
 
 	// Gravatar service.
 	avt := avatar.CacheServer("public/img/avatar/", "public/img/avatar_default.jpg")

+ 1 - 0
conf/locale/locale_en-US.ini

@@ -565,6 +565,7 @@ create_repo = created repository <a href="%s/%s">%s</a>
 commit_repo = pushed to <a href="%s/%s/src/%s">%s</a> at <a href="%s/%s">%s</a>
 create_issue = opened issue <a href="%s/%s/issues/%s">%s#%s</a>
 comment_issue = commented on issue <a href="%s/%s/issues/%s">%s#%s</a>
+transfer_repo = transfered repository <code>%s</code> to <a href="%s%s">%s</a>
 
 [tool]
 ago = ago

+ 1 - 0
conf/locale/locale_zh-CN.ini

@@ -563,6 +563,7 @@ create_repo = 创建了仓库 <a href="%s/%s">%s</a>
 commit_repo = 推送了 <a href="%s/%s/src/%s">%s</a> 分支的代码到 <a href="%s/%s">%s</a>
 create_issue = 创建了工单 <a href="%s/%s/issues/%s">%s#%s</a>
 comment_issue = 评论了工单 <a href="%s/%s/issues/%s">%s#%s</a>
+transfer_repo = 将仓库 <code>%s</code> 转移至 <a href="%s%s">%s</a>
 
 [tool]
 ago = 之前

+ 1 - 1
gogs.go

@@ -17,7 +17,7 @@ import (
 	"github.com/gogits/gogs/modules/setting"
 )
 
-const APP_VER = "0.5.4.0924 Beta"
+const APP_VER = "0.5.4.0925 Beta"
 
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())

+ 2 - 2
models/action.go

@@ -351,8 +351,8 @@ func NewRepoAction(u *User, repo *Repository) (err error) {
 // TransferRepoAction adds new action for transfering repository.
 func TransferRepoAction(u, newUser *User, repo *Repository) (err error) {
 	if err = NotifyWatchers(&Action{ActUserId: u.Id, ActUserName: u.Name, ActEmail: u.Email,
-		OpType: TRANSFER_REPO, RepoId: repo.Id, RepoUserName: repo.Owner.Name,
-		RepoName: repo.Name, Content: newUser.Name,
+		OpType: TRANSFER_REPO, RepoId: repo.Id, RepoUserName: newUser.Name,
+		RepoName:  repo.Name,
 		IsPrivate: repo.IsPrivate}); err != nil {
 		log.Error(4, "NotifyWatchers: %d/%s", u.Id, repo.Name)
 		return err

+ 29 - 11
models/repo.go

@@ -669,15 +669,23 @@ func TransferOwnership(u *User, newOwner string, repo *Repository) error {
 		return err
 	}
 
-	if _, err = sess.Where("repo_name = ?", u.LowerName+"/"+repo.LowerName).
-		And("user_name = ?", u.LowerName).Update(&Access{UserName: newUser.LowerName}); err != nil {
-		sess.Rollback()
-		return err
+	curRepoLink := path.Join(u.LowerName, repo.LowerName)
+	// Delete all access first if current owner is an organization.
+	if u.IsOrganization() {
+		if _, err = sess.Where("repo_name=?", curRepoLink).Delete(new(Access)); err != nil {
+			sess.Rollback()
+			return fmt.Errorf("fail to delete current accesses: %v", err)
+		}
+	} else {
+		if _, err = sess.Where("repo_name=?", curRepoLink).And("user_name=?", u.LowerName).
+			Update(&Access{UserName: newUser.LowerName}); err != nil {
+			sess.Rollback()
+			return err
+		}
 	}
 
-	if _, err = sess.Where("repo_name = ?", u.LowerName+"/"+repo.LowerName).Update(&Access{
-		RepoName: newUser.LowerName + "/" + repo.LowerName,
-	}); err != nil {
+	if _, err = sess.Where("repo_name=?", curRepoLink).
+		Update(&Access{RepoName: path.Join(newUser.LowerName, repo.LowerName)}); err != nil {
 		sess.Rollback()
 		return err
 	}
@@ -700,12 +708,12 @@ func TransferOwnership(u *User, newOwner string, repo *Repository) error {
 		return err
 	}
 
+	mode := WRITABLE
+	if repo.IsMirror {
+		mode = READABLE
+	}
 	// New owner is organization.
 	if newUser.IsOrganization() {
-		mode := WRITABLE
-		if repo.IsMirror {
-			mode = READABLE
-		}
 		access := &Access{
 			RepoName: path.Join(newUser.LowerName, repo.LowerName),
 			Mode:     mode,
@@ -737,6 +745,16 @@ func TransferOwnership(u *User, newOwner string, repo *Repository) error {
 			sess.Rollback()
 			return err
 		}
+	} else {
+		access := &Access{
+			RepoName: path.Join(newUser.LowerName, repo.LowerName),
+			UserName: newUser.LowerName,
+			Mode:     mode,
+		}
+		if _, err = sess.Insert(access); err != nil {
+			sess.Rollback()
+			return err
+		}
 	}
 
 	// Change repository directory name.

+ 3 - 5
modules/base/template.go

@@ -149,14 +149,12 @@ type Actioner interface {
 // and returns a icon class name.
 func ActionIcon(opType int) string {
 	switch opType {
-	case 1: // Create repository.
+	case 1, 8: // Create, transfer repository.
 		return "repo"
 	case 5, 9: // Commit repository.
 		return "git-commit"
 	case 6: // Create issue.
 		return "issue-opened"
-	case 8: // Transfer repository.
-		return "share"
 	case 10: // Comment issue.
 		return "comment"
 	default:
@@ -164,7 +162,7 @@ func ActionIcon(opType int) string {
 	}
 }
 
-// TODO: Legacy
+// FIXME: Legacy
 const (
 	TPL_CREATE_REPO    = `<a href="%s/user/%s">%s</a> created repository <a href="%s">%s</a>`
 	TPL_COMMIT_REPO    = `<a href="%s/user/%s">%s</a> pushed to <a href="%s/src/%s">%s</a> at <a href="%s">%s</a>%s`
@@ -197,7 +195,7 @@ func ActionContent2Commits(act Actioner) *PushCommits {
 	return push
 }
 
-// TODO: Legacy
+// FIXME: Legacy
 // ActionDesc accepts int that represents action operation type
 // and returns the description.
 func ActionDesc(act Actioner) string {

+ 1 - 1
templates/.VERSION

@@ -1 +1 @@
-0.5.4.0924 Beta
+0.5.4.0925 Beta

+ 2 - 0
templates/user/dashboard/dashboard.tmpl

@@ -20,6 +20,8 @@
                         {{else if eq .GetOpType 6}}
                         {{ $index := index .GetIssueInfos 0}}
                         {{$.i18n.Tr "action.create_issue" AppSubUrl .GetRepoLink $index .GetRepoLink $index | Str2html}}
+                        {{else if eq .GetOpType 8}}
+                        {{$.i18n.Tr "action.transfer_repo" .GetRepoName AppSubUrl .GetRepoLink .GetRepoLink | Str2html}}
                         {{else if eq .GetOpType 10}}
                         {{ $index := index .GetIssueInfos 0}}
                         {{$.i18n.Tr "action.comment_issue" AppSubUrl .GetRepoLink $index .GetRepoLink $index | Str2html}}