forgejo/modules/appstate/db.go
wxiaoguang 83df0caf15
Sync gitea app path for git hooks and authorized keys when starting ()
Gitea writes its own AppPath into git hook scripts. If Gitea's AppPath changes, then the git push will fail.

This PR:

* Introduce an AppState module, it can persist app states into database
* During GlobalInit, Gitea will check if the current AppPath is the same as last one. If they don't match, Gitea will sync git hooks.
* Refactor some code to make them more clear.
* Also, "Detect if gitea binary's name changed"  is related, we call models.RewriteAllPublicKeys to update ssh authorized_keys file
2021-10-21 17:22:43 +08:00

37 lines
885 B
Go

// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package appstate
import (
"code.gitea.io/gitea/models/appstate"
"code.gitea.io/gitea/modules/json"
"github.com/yuin/goldmark/util"
)
// DBStore can be used to store app state items in local filesystem
type DBStore struct {
}
// Get reads the state item
func (f *DBStore) Get(item StateItem) error {
content, err := appstate.GetAppStateContent(item.Name())
if err != nil {
return err
}
if content == "" {
return nil
}
return json.Unmarshal(util.StringToReadOnlyBytes(content), item)
}
// Set saves the state item
func (f *DBStore) Set(item StateItem) error {
b, err := json.Marshal(item)
if err != nil {
return err
}
return appstate.SaveAppStateContent(item.Name(), util.BytesToReadOnlyString(b))
}