2023-06-29 13:03:20 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package v1_21 //nolint
import (
"context"
"fmt"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/timeutil"
"xorm.io/xorm"
)
func AddBranchTable ( x * xorm . Engine ) error {
type Branch struct {
ID int64
RepoID int64 ` xorm:"UNIQUE(s)" `
Name string ` xorm:"UNIQUE(s) NOT NULL" `
CommitID string
CommitMessage string ` xorm:"TEXT" `
PusherID int64
IsDeleted bool ` xorm:"index" `
DeletedByID int64
DeletedUnix timeutil . TimeStamp ` xorm:"index" `
CommitTime timeutil . TimeStamp // The commit
CreatedUnix timeutil . TimeStamp ` xorm:"created" `
UpdatedUnix timeutil . TimeStamp ` xorm:"updated" `
}
if err := x . Sync ( new ( Branch ) ) ; err != nil {
return err
}
if exist , err := x . IsTableExist ( "deleted_branches" ) ; err != nil {
return err
} else if ! exist {
return nil
}
type DeletedBranch struct {
ID int64
RepoID int64 ` xorm:"index UNIQUE(s)" `
Name string ` xorm:"UNIQUE(s) NOT NULL" `
Commit string
DeletedByID int64
DeletedUnix timeutil . TimeStamp
}
var adminUserID int64
has , err := x . Table ( "user" ) .
Select ( "id" ) .
Where ( "is_admin=?" , true ) .
Asc ( "id" ) . // Reliably get the admin with the lowest ID.
Get ( & adminUserID )
if err != nil {
return err
} else if ! has {
return fmt . Errorf ( "no admin user found" )
}
branches := make ( [ ] Branch , 0 , 100 )
if err := db . Iterate ( context . Background ( ) , nil , func ( ctx context . Context , deletedBranch * DeletedBranch ) error {
branches = append ( branches , Branch {
RepoID : deletedBranch . RepoID ,
Name : deletedBranch . Name ,
CommitID : deletedBranch . Commit ,
PusherID : adminUserID ,
IsDeleted : true ,
DeletedByID : deletedBranch . DeletedByID ,
DeletedUnix : deletedBranch . DeletedUnix ,
} )
if len ( branches ) >= 100 {
_ , err := x . Insert ( & branches )
if err != nil {
return err
}
branches = branches [ : 0 ]
}
return nil
} ) ; err != nil {
return err
}
if len ( branches ) > 0 {
if _ , err := x . Insert ( & branches ) ; err != nil {
return err
}
}
2023-07-26 03:41:33 +03:00
return x . DropTables ( new ( DeletedBranch ) )
2023-06-29 13:03:20 +03:00
}