diff options
author | Unknwon <joe2010xtmf@163.com> | 2014-09-25 16:36:19 -0400 |
---|---|---|
committer | Unknwon <joe2010xtmf@163.com> | 2014-09-25 16:36:19 -0400 |
commit | f69761563b7a4fe9ace2a1643391cbcf9b92b372 (patch) | |
tree | 23d5bf522788895c4659c55f1e8275d9b9ab9e0b /models/repo.go | |
parent | 57d48fb6a2fb34f5da1aa702c33bc9c268e29f71 (diff) | |
download | gitea-f69761563b7a4fe9ace2a1643391cbcf9b92b372.tar.gz gitea-f69761563b7a4fe9ace2a1643391cbcf9b92b372.zip |
Fix bug on transfer repo
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/models/repo.go b/models/repo.go index c0a581b9a2..093e3b7f57 100644 --- a/models/repo.go +++ b/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. |