(e *xorm.Session, doer, owner *User, repo *Repository)
| 1131 | } |
| 1132 | |
| 1133 | func createRepository(e *xorm.Session, doer, owner *User, repo *Repository) (err error) { |
| 1134 | if err = isRepoNameAllowed(repo.Name); err != nil { |
| 1135 | return err |
| 1136 | } |
| 1137 | |
| 1138 | has, err := isRepositoryExist(e, owner, repo.Name) |
| 1139 | if err != nil { |
| 1140 | return errors.Newf("IsRepositoryExist: %v", err) |
| 1141 | } else if has { |
| 1142 | return ErrRepoAlreadyExist{args: errutil.Args{"ownerID": owner.ID, "name": repo.Name}} |
| 1143 | } |
| 1144 | |
| 1145 | if _, err = e.Insert(repo); err != nil { |
| 1146 | return err |
| 1147 | } |
| 1148 | |
| 1149 | _, err = e.Exec(dbutil.Quote("UPDATE %s SET num_repos = num_repos + 1 WHERE id = ?", "user"), owner.ID) |
| 1150 | if err != nil { |
| 1151 | return errors.Wrap(err, "increase owned repository count") |
| 1152 | } |
| 1153 | |
| 1154 | // Give access to all members in owner team. |
| 1155 | if owner.IsOrganization() { |
| 1156 | t, err := owner.getOwnerTeam(e) |
| 1157 | if err != nil { |
| 1158 | return errors.Newf("getOwnerTeam: %v", err) |
| 1159 | } else if err = t.addRepository(e, repo); err != nil { |
| 1160 | return errors.Newf("addRepository: %v", err) |
| 1161 | } |
| 1162 | } else { |
| 1163 | // Organization automatically called this in addRepository method. |
| 1164 | if err = repo.recalculateAccesses(e); err != nil { |
| 1165 | return errors.Newf("recalculateAccesses: %v", err) |
| 1166 | } |
| 1167 | } |
| 1168 | |
| 1169 | if err = watchRepo(e, owner.ID, repo.ID, true); err != nil { |
| 1170 | return errors.Newf("watchRepo: %v", err) |
| 1171 | } |
| 1172 | |
| 1173 | // FIXME: This is identical to Actions.NewRepo but we are not yet able to wrap |
| 1174 | // transaction with different ORM objects, should delete this once migrated to |
| 1175 | // GORM for this part of logic. |
| 1176 | newRepoAction := func(e Engine, doer *User, repo *Repository) (err error) { |
| 1177 | opType := ActionCreateRepo |
| 1178 | if repo.IsFork { |
| 1179 | opType = ActionForkRepo |
| 1180 | } |
| 1181 | |
| 1182 | return notifyWatchers(e, &Action{ |
| 1183 | ActUserID: doer.ID, |
| 1184 | ActUserName: doer.Name, |
| 1185 | OpType: opType, |
| 1186 | RepoID: repo.ID, |
| 1187 | RepoUserName: repo.Owner.Name, |
| 1188 | RepoName: repo.Name, |
| 1189 | IsPrivate: repo.IsPrivate || repo.IsUnlisted, |
| 1190 | CreatedUnix: time.Now().Unix(), |
no test coverage detected