@@ -56,17 +56,30 @@ func MoveRepositoryToGroup(ctx context.Context, repo *repo_model.Repository, new
5656}
5757
5858func MoveGroupItem (ctx context.Context , itemID , newParent int64 , isGroup bool , newPos int ) (err error ) {
59- ctx , committer , err := db .TxContext (ctx )
59+ var committer db.Committer
60+ ctx , committer , err = db .TxContext (ctx )
6061 if err != nil {
6162 return err
6263 }
6364 defer committer .Close ()
64-
65+ var parentGroup * group_model.Group
66+ parentGroup , err = group_model .GetGroupByID (ctx , newParent )
67+ if err != nil {
68+ return err
69+ }
70+ err = parentGroup .LoadSubgroups (ctx , false )
71+ if err != nil {
72+ return err
73+ }
6574 if isGroup {
66- group , err := group_model .GetGroupByID (ctx , itemID )
75+ var group * group_model.Group
76+ group , err = group_model .GetGroupByID (ctx , itemID )
6777 if err != nil {
6878 return err
6979 }
80+ if newPos < 0 {
81+ newPos = len (parentGroup .Subgroups )
82+ }
7083 if group .ParentGroupID != newParent || group .SortOrder != newPos {
7184 if err = group_model .MoveGroup (ctx , group , newParent , newPos ); err != nil {
7285 return err
@@ -76,10 +89,21 @@ func MoveGroupItem(ctx context.Context, itemID, newParent int64, isGroup bool, n
7689 }
7790 }
7891 } else {
79- repo , err := repo_model .GetRepositoryByID (ctx , itemID )
92+ var repo * repo_model.Repository
93+ repo , err = repo_model .GetRepositoryByID (ctx , itemID )
8094 if err != nil {
8195 return err
8296 }
97+ if newPos < 0 {
98+ var repoCount int64
99+ repoCount , err = repo_model .CountRepository (ctx , & repo_model.SearchRepoOptions {
100+ GroupID : newParent ,
101+ })
102+ if err != nil {
103+ return err
104+ }
105+ newPos = int (repoCount )
106+ }
83107 if repo .GroupID != newParent || repo .GroupSortOrder != newPos {
84108 if err = MoveRepositoryToGroup (ctx , repo , newParent , newPos ); err != nil {
85109 return err
0 commit comments