code.gitea.io/gitea@v1.21.7/models/migrations/v1_10/v88.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_10 //nolint 5 6 import ( 7 "crypto/sha1" 8 "fmt" 9 10 "xorm.io/xorm" 11 ) 12 13 func hashContext(context string) string { 14 return fmt.Sprintf("%x", sha1.Sum([]byte(context))) 15 } 16 17 func AddCommitStatusContext(x *xorm.Engine) error { 18 type CommitStatus struct { 19 ID int64 `xorm:"pk autoincr"` 20 ContextHash string `xorm:"char(40) index"` 21 Context string `xorm:"TEXT"` 22 } 23 24 if err := x.Sync(new(CommitStatus)); err != nil { 25 return err 26 } 27 28 sess := x.NewSession() 29 defer sess.Close() 30 31 start := 0 32 for { 33 statuses := make([]*CommitStatus, 0, 100) 34 err := sess.OrderBy("id").Limit(100, start).Find(&statuses) 35 if err != nil { 36 return err 37 } 38 if len(statuses) == 0 { 39 break 40 } 41 42 if err = sess.Begin(); err != nil { 43 return err 44 } 45 46 for _, status := range statuses { 47 status.ContextHash = hashContext(status.Context) 48 if _, err := sess.ID(status.ID).Cols("context_hash").Update(status); err != nil { 49 return err 50 } 51 } 52 53 if err := sess.Commit(); err != nil { 54 return err 55 } 56 57 if len(statuses) < 100 { 58 break 59 } 60 61 start += len(statuses) 62 } 63 64 return nil 65 }