@@ -10,6 +10,7 @@ import (
10
10
"os"
11
11
"strings"
12
12
13
+ "github.com/Unknwon/com"
13
14
"github.com/go-xorm/builder"
14
15
"github.com/go-xorm/xorm"
15
16
)
@@ -224,23 +225,63 @@ func DeleteOrganization(org *User) (err error) {
224
225
return err
225
226
}
226
227
227
- if err = deleteBeans (sess ,
228
- & Team {OrgID : org .ID },
229
- & OrgUser {OrgID : org .ID },
230
- & TeamUser {OrgID : org .ID },
228
+ if err = deleteOrg (sess , org ); err != nil {
229
+ if IsErrUserOwnRepos (err ) {
230
+ return err
231
+ } else if err != nil {
232
+ return fmt .Errorf ("deleteOrg: %v" , err )
233
+ }
234
+ }
235
+
236
+ if err = sess .Commit (); err != nil {
237
+ return err
238
+ }
239
+
240
+ return nil
241
+ }
242
+
243
+ func deleteOrg (e * xorm.Session , u * User ) error {
244
+ if ! u .IsOrganization () {
245
+ return fmt .Errorf ("You can't delete none organization user: %s" , u .Name )
246
+ }
247
+
248
+ // Check ownership of repository.
249
+ count , err := getRepositoryCount (e , u )
250
+ if err != nil {
251
+ return fmt .Errorf ("GetRepositoryCount: %v" , err )
252
+ } else if count > 0 {
253
+ return ErrUserOwnRepos {UID : u .ID }
254
+ }
255
+
256
+ if err := deleteBeans (e ,
257
+ & Team {OrgID : u .ID },
258
+ & OrgUser {OrgID : u .ID },
259
+ & TeamUser {OrgID : u .ID },
231
260
); err != nil {
232
261
return fmt .Errorf ("deleteBeans: %v" , err )
233
262
}
234
263
235
- if err = deleteUser ( sess , org ); err != nil {
236
- return fmt .Errorf ("deleteUser : %v" , err )
264
+ if _ , err = e . Id ( u . ID ). Delete ( new ( User ) ); err != nil {
265
+ return fmt .Errorf ("Delete : %v" , err )
237
266
}
238
267
239
- if err = sess .Commit (); err != nil {
240
- return err
268
+ // FIXME: system notice
269
+ // Note: There are something just cannot be roll back,
270
+ // so just keep error logs of those operations.
271
+ path := UserPath (u .Name )
272
+
273
+ if err := os .RemoveAll (path ); err != nil {
274
+ return fmt .Errorf ("Fail to RemoveAll %s: %v" , path , err )
275
+ }
276
+
277
+ avatarPath := u .CustomAvatarPath ()
278
+ if com .IsExist (avatarPath ) {
279
+ if err := os .Remove (avatarPath ); err != nil {
280
+ return fmt .Errorf ("Fail to remove %s: %v" , avatarPath , err )
281
+ }
241
282
}
242
283
243
- return RewriteAllPublicKeys ()
284
+ return nil
244
285
}
245
286
246
287
// ________ ____ ___
0 commit comments