@@ -742,6 +742,28 @@ func (repo *Repository) CanUserFork(user *User) (bool, error) {
742
742
return false , nil
743
743
}
744
744
745
+ // CanUserDelete returns true if user could delete the repository
746
+ func (repo * Repository ) CanUserDelete (user * User ) (bool , error ) {
747
+ if user .IsAdmin || user .ID == repo .OwnerID {
748
+ return true , nil
749
+ }
750
+
751
+ if err := repo .GetOwner (); err != nil {
752
+ return false , err
753
+ }
754
+
755
+ if repo .Owner .IsOrganization () {
756
+ isOwner , err := repo .Owner .IsOwnedBy (user .ID )
757
+ if err != nil {
758
+ return false , err
759
+ } else if isOwner {
760
+ return true , nil
761
+ }
762
+ }
763
+
764
+ return false , nil
765
+ }
766
+
745
767
// CanEnablePulls returns true if repository meets the requirements of accepting pulls.
746
768
func (repo * Repository ) CanEnablePulls () bool {
747
769
return ! repo .IsMirror && ! repo .IsEmpty
@@ -1430,15 +1452,9 @@ func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err err
1430
1452
t , err := u .getOwnerTeam (e )
1431
1453
if err != nil {
1432
1454
return fmt .Errorf ("getOwnerTeam: %v" , err )
1433
- } else if err = t .addRepository (e , repo ); err != nil {
1455
+ }
1456
+ if err = t .addRepository (e , repo ); err != nil {
1434
1457
return fmt .Errorf ("addRepository: %v" , err )
1435
- } else if err = prepareWebhooks (e , repo , HookEventRepository , & api.RepositoryPayload {
1436
- Action : api .HookRepoCreated ,
1437
- Repository : repo .innerAPIFormat (e , AccessModeOwner , false ),
1438
- Organization : u .APIFormat (),
1439
- Sender : doer .APIFormat (),
1440
- }); err != nil {
1441
- return fmt .Errorf ("prepareWebhooks: %v" , err )
1442
1458
}
1443
1459
} else if err = repo .recalculateAccesses (e ); err != nil {
1444
1460
// Organization automatically called this in addRepository method.
@@ -1522,11 +1538,6 @@ func CreateRepository(doer, u *User, opts CreateRepoOptions) (_ *Repository, err
1522
1538
return nil , err
1523
1539
}
1524
1540
1525
- // Add to hook queue for created repo after session commit.
1526
- if u .IsOrganization () {
1527
- go HookQueue .Add (repo .ID )
1528
- }
1529
-
1530
1541
return repo , err
1531
1542
}
1532
1543
@@ -2044,18 +2055,6 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
2044
2055
return fmt .Errorf ("Commit: %v" , err )
2045
2056
}
2046
2057
2047
- if org .IsOrganization () {
2048
- if err = PrepareWebhooks (repo , HookEventRepository , & api.RepositoryPayload {
2049
- Action : api .HookRepoDeleted ,
2050
- Repository : repo .APIFormat (AccessModeOwner ),
2051
- Organization : org .APIFormat (),
2052
- Sender : doer .APIFormat (),
2053
- }); err != nil {
2054
- return err
2055
- }
2056
- go HookQueue .Add (repo .ID )
2057
- }
2058
-
2059
2058
if len (repo .Avatar ) > 0 {
2060
2059
avatarPath := repo .CustomAvatarPath ()
2061
2060
if com .IsExist (avatarPath ) {
@@ -2065,7 +2064,6 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
2065
2064
}
2066
2065
}
2067
2066
2068
- DeleteRepoFromIndexer (repo )
2069
2067
return nil
2070
2068
}
2071
2069
@@ -2521,22 +2519,22 @@ func HasForkedRepo(ownerID, repoID int64) (*Repository, bool) {
2521
2519
}
2522
2520
2523
2521
// ForkRepository forks a repository
2524
- func ForkRepository (doer , u * User , oldRepo * Repository , name , desc string ) (_ * Repository , err error ) {
2525
- forkedRepo , err := oldRepo .GetUserFork (u .ID )
2522
+ func ForkRepository (doer , owner * User , oldRepo * Repository , name , desc string ) (_ * Repository , err error ) {
2523
+ forkedRepo , err := oldRepo .GetUserFork (owner .ID )
2526
2524
if err != nil {
2527
2525
return nil , err
2528
2526
}
2529
2527
if forkedRepo != nil {
2530
2528
return nil , ErrForkAlreadyExist {
2531
- Uname : u .Name ,
2529
+ Uname : owner .Name ,
2532
2530
RepoName : oldRepo .FullName (),
2533
2531
ForkName : forkedRepo .FullName (),
2534
2532
}
2535
2533
}
2536
2534
2537
2535
repo := & Repository {
2538
- OwnerID : u .ID ,
2539
- Owner : u ,
2536
+ OwnerID : owner .ID ,
2537
+ Owner : owner ,
2540
2538
Name : name ,
2541
2539
LowerName : strings .ToLower (name ),
2542
2540
Description : desc ,
@@ -2553,17 +2551,17 @@ func ForkRepository(doer, u *User, oldRepo *Repository, name, desc string) (_ *R
2553
2551
return nil , err
2554
2552
}
2555
2553
2556
- if err = createRepository (sess , doer , u , repo ); err != nil {
2554
+ if err = createRepository (sess , doer , owner , repo ); err != nil {
2557
2555
return nil , err
2558
2556
}
2559
2557
2560
2558
if _ , err = sess .Exec ("UPDATE `repository` SET num_forks=num_forks+1 WHERE id=?" , oldRepo .ID ); err != nil {
2561
2559
return nil , err
2562
2560
}
2563
2561
2564
- repoPath := RepoPath (u .Name , repo .Name )
2562
+ repoPath := RepoPath (owner .Name , repo .Name )
2565
2563
_ , stderr , err := process .GetManager ().ExecTimeout (10 * time .Minute ,
2566
- fmt .Sprintf ("ForkRepository(git clone): %s/%s" , u .Name , repo .Name ),
2564
+ fmt .Sprintf ("ForkRepository(git clone): %s/%s" , owner .Name , repo .Name ),
2567
2565
git .GitExecutable , "clone" , "--bare" , oldRepo .repoPath (sess ), repoPath )
2568
2566
if err != nil {
2569
2567
return nil , fmt .Errorf ("git clone: %v" , stderr )
@@ -2586,24 +2584,6 @@ func ForkRepository(doer, u *User, oldRepo *Repository, name, desc string) (_ *R
2586
2584
return nil , err
2587
2585
}
2588
2586
2589
- oldMode , _ := AccessLevel (doer , oldRepo )
2590
- mode , _ := AccessLevel (doer , repo )
2591
-
2592
- if err = PrepareWebhooks (oldRepo , HookEventFork , & api.ForkPayload {
2593
- Forkee : oldRepo .APIFormat (oldMode ),
2594
- Repo : repo .APIFormat (mode ),
2595
- Sender : doer .APIFormat (),
2596
- }); err != nil {
2597
- log .Error ("PrepareWebhooks [repo_id: %d]: %v" , oldRepo .ID , err )
2598
- } else {
2599
- go HookQueue .Add (oldRepo .ID )
2600
- }
2601
-
2602
- // Add to hook queue for created repo after session commit.
2603
- if u .IsOrganization () {
2604
- go HookQueue .Add (repo .ID )
2605
- }
2606
-
2607
2587
if err = repo .UpdateSize (); err != nil {
2608
2588
log .Error ("Failed to update size for repository: %v" , err )
2609
2589
}
@@ -2612,20 +2592,19 @@ func ForkRepository(doer, u *User, oldRepo *Repository, name, desc string) (_ *R
2612
2592
sess2 := x .NewSession ()
2613
2593
defer sess2 .Close ()
2614
2594
if err = sess2 .Begin (); err != nil {
2615
- return nil , err
2595
+ return repo , err
2616
2596
}
2617
2597
2618
2598
var lfsObjects []* LFSMetaObject
2619
-
2620
2599
if err = sess2 .Where ("repository_id=?" , oldRepo .ID ).Find (& lfsObjects ); err != nil {
2621
- return nil , err
2600
+ return repo , err
2622
2601
}
2623
2602
2624
2603
for _ , v := range lfsObjects {
2625
2604
v .ID = 0
2626
2605
v .RepositoryID = repo .ID
2627
2606
if _ , err = sess2 .Insert (v ); err != nil {
2628
- return nil , err
2607
+ return repo , err
2629
2608
}
2630
2609
}
2631
2610
0 commit comments