fix bug of multiple forks (#928)

This commit is contained in:
Lunny Xiao 2017-02-14 22:14:29 +08:00 committed by GitHub
parent d67b278a0d
commit 3a91ac51a9

View File

@ -2372,6 +2372,17 @@ func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) {
// ForkRepository forks a repository // ForkRepository forks a repository
func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Repository, err error) { func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Repository, err error) {
forkedRepo, err := oldRepo.GetUserFork(u.ID)
if err != nil {
return nil, err
}
if forkedRepo != nil {
return nil, ErrRepoAlreadyExist{
Uname: u.Name,
Name: forkedRepo.Name,
}
}
repo := &Repository{ repo := &Repository{
OwnerID: u.ID, OwnerID: u.ID,
Owner: u, Owner: u,
@ -2453,6 +2464,19 @@ func (repo *Repository) GetForks() ([]*Repository, error) {
return forks, x.Find(&forks, &Repository{ForkID: repo.ID}) return forks, x.Find(&forks, &Repository{ForkID: repo.ID})
} }
// GetUserFork return user forked repository from this repository, if not forked return nil
func (repo *Repository) GetUserFork(userID int64) (*Repository, error) {
var forkedRepo Repository
has, err := x.Where("fork_id = ?", repo.ID).And("owner_id = ?", userID).Get(&forkedRepo)
if err != nil {
return nil, err
}
if !has {
return nil, nil
}
return &forkedRepo, nil
}
// __________ .__ // __________ .__
// \______ \____________ ____ ____ | |__ // \______ \____________ ____ ____ | |__
// | | _/\_ __ \__ \ / \_/ ___\| | \ // | | _/\_ __ \__ \ / \_/ ___\| | \