aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorUnknwon <joe2010xtmf@163.com>2014-09-25 16:36:19 -0400
committerUnknwon <joe2010xtmf@163.com>2014-09-25 16:36:19 -0400
commitf69761563b7a4fe9ace2a1643391cbcf9b92b372 (patch)
tree23d5bf522788895c4659c55f1e8275d9b9ab9e0b /models
parent57d48fb6a2fb34f5da1aa702c33bc9c268e29f71 (diff)
downloadgitea-f69761563b7a4fe9ace2a1643391cbcf9b92b372.tar.gz
gitea-f69761563b7a4fe9ace2a1643391cbcf9b92b372.zip
Fix bug on transfer repo
Diffstat (limited to 'models')
-rw-r--r--models/action.go4
-rw-r--r--models/repo.go40
2 files changed, 31 insertions, 13 deletions
diff --git a/models/action.go b/models/action.go
index 18c956bda1..46500a9260 100644
--- a/models/action.go
+++ b/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
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.