Skip to content

Commit 485ea6f

Browse files
committed
models: make code change for session issue with SQLite3 gogs#739
1 parent 28580ae commit 485ea6f

File tree

4 files changed

+60
-52
lines changed

4 files changed

+60
-52
lines changed

models/models.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ import (
2323
type Engine interface {
2424
Delete(interface{}) (int64, error)
2525
Exec(string, ...interface{}) (sql.Result, error)
26+
Get(interface{}) (bool, error)
2627
Insert(...interface{}) (int64, error)
28+
Id(interface{}) *xorm.Session
29+
Where(string, ...interface{}) *xorm.Session
2730
}
2831

2932
var (

models/org.go

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"strings"
1313

1414
"github.com/Unknwon/com"
15-
"github.com/go-xorm/xorm"
1615

1716
"github.com/gogits/gogs/modules/base"
1817
)
@@ -391,7 +390,7 @@ func RemoveOrgUser(orgId, uid int64) error {
391390
return err
392391
}
393392
for _, t := range ts {
394-
if err = removeTeamMemberWithSess(org.Id, t.Id, u.Id, sess); err != nil {
393+
if err = removeTeamMember(sess, org.Id, t.Id, u.Id); err != nil {
395394
return err
396395
}
397396
}
@@ -486,18 +485,18 @@ func (t *Team) RemoveMember(uid int64) error {
486485
}
487486

488487
// addAccessWithAuthorize inserts or updates access with given mode.
489-
func addAccessWithAuthorize(sess *xorm.Session, access *Access, mode AccessType) error {
490-
has, err := x.Get(access)
488+
func addAccessWithAuthorize(e Engine, access *Access, mode AccessType) error {
489+
has, err := e.Get(access)
491490
if err != nil {
492491
return fmt.Errorf("fail to get access: %v", err)
493492
}
494493
access.Mode = mode
495494
if has {
496-
if _, err = sess.Id(access.Id).Update(access); err != nil {
495+
if _, err = e.Id(access.Id).Update(access); err != nil {
497496
return fmt.Errorf("fail to update access: %v", err)
498497
}
499498
} else {
500-
if _, err = sess.Insert(access); err != nil {
499+
if _, err = e.Insert(access); err != nil {
501500
return fmt.Errorf("fail to insert access: %v", err)
502501
}
503502
}
@@ -536,7 +535,7 @@ func (t *Team) AddRepository(repo *Repository) (err error) {
536535
mode := AuthorizeToAccessType(t.Authorize)
537536

538537
for _, u := range t.Members {
539-
auth, err := GetHighestAuthorize(t.OrgId, u.Id, repo.Id, t.Id)
538+
auth, err := getHighestAuthorize(sess, t.OrgId, u.Id, repo.Id, t.Id)
540539
if err != nil {
541540
sess.Rollback()
542541
return err
@@ -552,7 +551,7 @@ func (t *Team) AddRepository(repo *Repository) (err error) {
552551
return err
553552
}
554553
}
555-
if err = WatchRepo(u.Id, repo.Id, true); err != nil {
554+
if err = watchRepo(sess, u.Id, repo.Id, true); err != nil {
556555
sess.Rollback()
557556
return err
558557
}
@@ -593,7 +592,7 @@ func (t *Team) RemoveRepository(repoId int64) error {
593592

594593
// Remove access to team members.
595594
for _, u := range t.Members {
596-
auth, err := GetHighestAuthorize(t.OrgId, u.Id, repo.Id, t.Id)
595+
auth, err := getHighestAuthorize(sess, t.OrgId, u.Id, repo.Id, t.Id)
597596
if err != nil {
598597
sess.Rollback()
599598
return err
@@ -607,7 +606,7 @@ func (t *Team) RemoveRepository(repoId int64) error {
607606
if _, err = sess.Delete(access); err != nil {
608607
sess.Rollback()
609608
return fmt.Errorf("fail to delete access: %v", err)
610-
} else if err = WatchRepo(u.Id, repo.Id, false); err != nil {
609+
} else if err = watchRepo(sess, u.Id, repo.Id, false); err != nil {
611610
sess.Rollback()
612611
return err
613612
}
@@ -678,10 +677,9 @@ func GetTeam(orgId int64, name string) (*Team, error) {
678677
return t, nil
679678
}
680679

681-
// GetTeamById returns team by given ID.
682-
func GetTeamById(teamId int64) (*Team, error) {
680+
func getTeamById(e Engine, teamId int64) (*Team, error) {
683681
t := new(Team)
684-
has, err := x.Id(teamId).Get(t)
682+
has, err := e.Id(teamId).Get(t)
685683
if err != nil {
686684
return nil, err
687685
} else if !has {
@@ -690,9 +688,13 @@ func GetTeamById(teamId int64) (*Team, error) {
690688
return t, nil
691689
}
692690

693-
// GetHighestAuthorize returns highest repository authorize level for given user and team.
694-
func GetHighestAuthorize(orgId, uid, repoId, teamId int64) (AuthorizeType, error) {
695-
ts, err := GetUserTeams(orgId, uid)
691+
// GetTeamById returns team by given ID.
692+
func GetTeamById(teamId int64) (*Team, error) {
693+
return getTeamById(x, teamId)
694+
}
695+
696+
func getHighestAuthorize(e Engine, orgId, uid, repoId, teamId int64) (AuthorizeType, error) {
697+
ts, err := getUserTeams(e, orgId, uid)
696698
if err != nil {
697699
return 0, err
698700
}
@@ -714,6 +716,11 @@ func GetHighestAuthorize(orgId, uid, repoId, teamId int64) (AuthorizeType, error
714716
return auth, nil
715717
}
716718

719+
// GetHighestAuthorize returns highest repository authorize level for given user and team.
720+
func GetHighestAuthorize(orgId, uid, repoId, teamId int64) (AuthorizeType, error) {
721+
return getHighestAuthorize(x, orgId, uid, repoId, teamId)
722+
}
723+
717724
// UpdateTeam updates information of team.
718725
func UpdateTeam(t *Team, authChanged bool) (err error) {
719726
if !IsLegalName(t.Name) {
@@ -866,10 +873,14 @@ type TeamUser struct {
866873
TeamId int64
867874
}
868875

876+
func isTeamMember(e Engine, orgId, teamId, uid int64) bool {
877+
has, _ := e.Where("uid=?", uid).And("org_id=?", orgId).And("team_id=?", teamId).Get(new(TeamUser))
878+
return has
879+
}
880+
869881
// IsTeamMember returns true if given user is a member of team.
870882
func IsTeamMember(orgId, teamId, uid int64) bool {
871-
has, _ := x.Where("uid=?", uid).And("org_id=?", orgId).And("team_id=?", teamId).Get(new(TeamUser))
872-
return has
883+
return isTeamMember(x, orgId, teamId, uid)
873884
}
874885

875886
// GetTeamMembers returns all members in given team of organization.
@@ -879,17 +890,16 @@ func GetTeamMembers(orgId, teamId int64) ([]*User, error) {
879890
return us, err
880891
}
881892

882-
// GetUserTeams returns all teams that user belongs to in given organization.
883-
func GetUserTeams(orgId, uid int64) ([]*Team, error) {
893+
func getUserTeams(e Engine, orgId, uid int64) ([]*Team, error) {
884894
tus := make([]*TeamUser, 0, 5)
885-
if err := x.Where("uid=?", uid).And("org_id=?", orgId).Find(&tus); err != nil {
895+
if err := e.Where("uid=?", uid).And("org_id=?", orgId).Find(&tus); err != nil {
886896
return nil, err
887897
}
888898

889899
ts := make([]*Team, len(tus))
890900
for i, tu := range tus {
891901
t := new(Team)
892-
has, err := x.Id(tu.TeamId).Get(t)
902+
has, err := e.Id(tu.TeamId).Get(t)
893903
if err != nil {
894904
return nil, err
895905
} else if !has {
@@ -900,6 +910,11 @@ func GetUserTeams(orgId, uid int64) ([]*Team, error) {
900910
return ts, nil
901911
}
902912

913+
// GetUserTeams returns all teams that user belongs to in given organization.
914+
func GetUserTeams(orgId, uid int64) ([]*Team, error) {
915+
return getUserTeams(x, orgId, uid)
916+
}
917+
903918
// AddTeamMember adds new member to given team of given organization.
904919
func AddTeamMember(orgId, teamId, uid int64) error {
905920
if IsTeamMember(orgId, teamId, uid) {
@@ -956,7 +971,7 @@ func AddTeamMember(orgId, teamId, uid int64) error {
956971
// Give access to team repositories.
957972
mode := AuthorizeToAccessType(t.Authorize)
958973
for _, repo := range t.Repos {
959-
auth, err := GetHighestAuthorize(t.OrgId, u.Id, repo.Id, teamId)
974+
auth, err := getHighestAuthorize(sess, t.OrgId, u.Id, repo.Id, teamId)
960975
if err != nil {
961976
sess.Rollback()
962977
return err
@@ -993,13 +1008,13 @@ func AddTeamMember(orgId, teamId, uid int64) error {
9931008
return sess.Commit()
9941009
}
9951010

996-
func removeTeamMemberWithSess(orgId, teamId, uid int64, sess *xorm.Session) error {
997-
if !IsTeamMember(orgId, teamId, uid) {
1011+
func removeTeamMember(e Engine, orgId, teamId, uid int64) error {
1012+
if !isTeamMember(e, orgId, teamId, uid) {
9981013
return nil
9991014
}
10001015

10011016
// Get team and its repositories.
1002-
t, err := GetTeamById(teamId)
1017+
t, err := getTeamById(e, teamId)
10031018
if err != nil {
10041019
return err
10051020
}
@@ -1033,19 +1048,16 @@ func removeTeamMemberWithSess(orgId, teamId, uid int64, sess *xorm.Session) erro
10331048
TeamId: teamId,
10341049
}
10351050

1036-
if _, err := sess.Delete(tu); err != nil {
1037-
sess.Rollback()
1051+
if _, err := e.Delete(tu); err != nil {
10381052
return err
1039-
} else if _, err = sess.Id(t.Id).AllCols().Update(t); err != nil {
1040-
sess.Rollback()
1053+
} else if _, err = e.Id(t.Id).AllCols().Update(t); err != nil {
10411054
return err
10421055
}
10431056

10441057
// Delete access to team repositories.
10451058
for _, repo := range t.Repos {
1046-
auth, err := GetHighestAuthorize(t.OrgId, u.Id, repo.Id, teamId)
1059+
auth, err := getHighestAuthorize(e, t.OrgId, u.Id, repo.Id, teamId)
10471060
if err != nil {
1048-
sess.Rollback()
10491061
return err
10501062
}
10511063

@@ -1055,35 +1067,30 @@ func removeTeamMemberWithSess(orgId, teamId, uid int64, sess *xorm.Session) erro
10551067
}
10561068
// Delete access if this is the last team user belongs to.
10571069
if auth == 0 {
1058-
if _, err = sess.Delete(access); err != nil {
1059-
sess.Rollback()
1070+
if _, err = e.Delete(access); err != nil {
10601071
return fmt.Errorf("fail to delete access: %v", err)
1061-
} else if err = WatchRepo(u.Id, repo.Id, false); err != nil {
1062-
sess.Rollback()
1072+
} else if err = watchRepo(e, u.Id, repo.Id, false); err != nil {
10631073
return err
10641074
}
10651075
} else if auth < t.Authorize {
10661076
// Downgrade authorize level.
1067-
if err = addAccessWithAuthorize(sess, access, AuthorizeToAccessType(auth)); err != nil {
1068-
sess.Rollback()
1077+
if err = addAccessWithAuthorize(e, access, AuthorizeToAccessType(auth)); err != nil {
10691078
return err
10701079
}
10711080
}
10721081
}
10731082

10741083
// This must exist.
10751084
ou := new(OrgUser)
1076-
_, err = sess.Where("uid=?", uid).And("org_id=?", org.Id).Get(ou)
1085+
_, err = e.Where("uid=?", uid).And("org_id=?", org.Id).Get(ou)
10771086
if err != nil {
1078-
sess.Rollback()
10791087
return err
10801088
}
10811089
ou.NumTeams--
10821090
if t.IsOwnerTeam() {
10831091
ou.IsOwner = false
10841092
}
1085-
if _, err = sess.Id(ou.Id).AllCols().Update(ou); err != nil {
1086-
sess.Rollback()
1093+
if _, err = e.Id(ou.Id).AllCols().Update(ou); err != nil {
10871094
return err
10881095
}
10891096
return nil
@@ -1096,7 +1103,8 @@ func RemoveTeamMember(orgId, teamId, uid int64) error {
10961103
if err := sess.Begin(); err != nil {
10971104
return err
10981105
}
1099-
if err := removeTeamMemberWithSess(orgId, teamId, uid, sess); err != nil {
1106+
if err := removeTeamMember(sess, orgId, teamId, uid); err != nil {
1107+
sess.Rollback()
11001108
return err
11011109
}
11021110
return sess.Commit()

models/repo.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,7 @@ func IsWatching(uid, repoId int64) bool {
12961296
return has
12971297
}
12981298

1299-
func watchRepoWithEngine(e Engine, uid, repoId int64, watch bool) (err error) {
1299+
func watchRepo(e Engine, uid, repoId int64, watch bool) (err error) {
13001300
if watch {
13011301
if IsWatching(uid, repoId) {
13021302
return nil
@@ -1319,7 +1319,7 @@ func watchRepoWithEngine(e Engine, uid, repoId int64, watch bool) (err error) {
13191319

13201320
// Watch or unwatch repository.
13211321
func WatchRepo(uid, repoId int64, watch bool) (err error) {
1322-
return watchRepoWithEngine(x, uid, repoId, watch)
1322+
return watchRepo(x, uid, repoId, watch)
13231323
}
13241324

13251325
// GetWatchers returns all watchers of given repository.
@@ -1507,14 +1507,14 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (*Repositor
15071507
log.Error(4, "GetMembers: %v", err)
15081508
} else {
15091509
for _, u := range t.Members {
1510-
if err = watchRepoWithEngine(sess, u.Id, repo.Id, true); err != nil {
1510+
if err = watchRepo(sess, u.Id, repo.Id, true); err != nil {
15111511
log.Error(4, "WatchRepo2: %v", err)
15121512
}
15131513
}
15141514
}
15151515
}
15161516
} else {
1517-
if err = watchRepoWithEngine(sess, u.Id, repo.Id, true); err != nil {
1517+
if err = watchRepo(sess, u.Id, repo.Id, true); err != nil {
15181518
log.Error(4, "WatchRepo3: %v", err)
15191519
}
15201520
}

routers/org/teams.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,8 @@ func TeamsRepoAction(ctx *middleware.Context) {
138138
}
139139

140140
if err != nil {
141-
log.Error(3, "Action(%s): %v", ctx.Params(":action"), err)
142-
ctx.JSON(200, map[string]interface{}{
143-
"ok": false,
144-
"err": err.Error(),
145-
})
141+
log.Error(3, "Action(%s): '%s' %v", ctx.Params(":action"), ctx.Org.Team.Name, err)
142+
ctx.Handle(500, "TeamsRepoAction", err)
146143
return
147144
}
148145
ctx.Redirect(ctx.Org.OrgLink + "/teams/" + ctx.Org.Team.LowerName + "/repositories")

0 commit comments

Comments
 (0)