From b5856c443729c6825618595a0e746202553aa95c Mon Sep 17 00:00:00 2001 From: zeripath Date: Mon, 27 Sep 2021 16:55:12 +0100 Subject: Create doctor command to fix repo_units broken by dumps from 1.14.3-1.14.6 (#17136) There was a serious issue with the `gitea dump` command in 1.14.3-1.14.6 which led to corruption of the `config` field of the `repo_unit` table. This PR adds a doctor command to attempt to fix the broken repo_units. Users affected by #16961 should run: ``` gitea doctor --fix --run fix-broken-repo-units ``` Fix #16961 Signed-off-by: Andrew Thornton --- models/helper.go | 2 +- models/repo_unit.go | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'models') diff --git a/models/helper.go b/models/helper.go index c499b5512d..710c15a978 100644 --- a/models/helper.go +++ b/models/helper.go @@ -51,7 +51,7 @@ func JSONUnmarshalHandleDoubleEncode(bs []byte, v interface{}) error { rs = append(rs, temp...) } if ok { - if rs[0] == 0xff && rs[1] == 0xfe { + if len(rs) > 1 && rs[0] == 0xff && rs[1] == 0xfe { rs = rs[2:] } err = json.Unmarshal(rs, v) diff --git a/models/repo_unit.go b/models/repo_unit.go index 7061119bd8..474f65bf03 100644 --- a/models/repo_unit.go +++ b/models/repo_unit.go @@ -220,3 +220,9 @@ func getUnitsByRepoID(e db.Engine, repoID int64) (units []*RepoUnit, err error) return units, nil } + +// UpdateRepoUnit updates the provided repo unit +func UpdateRepoUnit(unit *RepoUnit) error { + _, err := db.GetEngine(db.DefaultContext).ID(unit.ID).Update(unit) + return err +} -- cgit v1.2.3