(e Engine, repo *Repository, recalculate bool)
| 151 | } |
| 152 | |
| 153 | func (t *Team) removeRepository(e Engine, repo *Repository, recalculate bool) (err error) { |
| 154 | if err = removeTeamRepo(e, t.ID, repo.ID); err != nil { |
| 155 | return err |
| 156 | } |
| 157 | |
| 158 | t.NumRepos-- |
| 159 | if _, err = e.ID(t.ID).AllCols().Update(t); err != nil { |
| 160 | return err |
| 161 | } |
| 162 | |
| 163 | // Don't need to recalculate when delete a repository from organization. |
| 164 | if recalculate { |
| 165 | if err = repo.recalculateTeamAccesses(e, t.ID); err != nil { |
| 166 | return err |
| 167 | } |
| 168 | } |
| 169 | |
| 170 | if err = t.getMembers(e); err != nil { |
| 171 | return errors.Newf("get team members: %v", err) |
| 172 | } |
| 173 | |
| 174 | // TODO: Delete me when this method is migrated to use GORM. |
| 175 | userAccessMode := func(e Engine, userID int64, repo *Repository) (AccessMode, error) { |
| 176 | mode := AccessModeNone |
| 177 | // Everyone has read access to public repository |
| 178 | if !repo.IsPrivate { |
| 179 | mode = AccessModeRead |
| 180 | } |
| 181 | |
| 182 | if userID <= 0 { |
| 183 | return mode, nil |
| 184 | } |
| 185 | |
| 186 | if userID == repo.OwnerID { |
| 187 | return AccessModeOwner, nil |
| 188 | } |
| 189 | |
| 190 | access := &Access{ |
| 191 | UserID: userID, |
| 192 | RepoID: repo.ID, |
| 193 | } |
| 194 | if has, err := e.Get(access); !has || err != nil { |
| 195 | return mode, err |
| 196 | } |
| 197 | return access.Mode, nil |
| 198 | } |
| 199 | |
| 200 | hasAccess := func(e Engine, userID int64, repo *Repository, testMode AccessMode) (bool, error) { |
| 201 | mode, err := userAccessMode(e, userID, repo) |
| 202 | return mode >= testMode, err |
| 203 | } |
| 204 | |
| 205 | for _, member := range t.Members { |
| 206 | has, err := hasAccess(e, member.ID, repo, AccessModeRead) |
| 207 | if err != nil { |
| 208 | return err |
| 209 | } else if has { |
| 210 | continue |
no test coverage detected