}
func (r *rootCommand) HugFromConfig(conf *commonConfig) (*hugolib.HugoSites, error) {
+ if conf == nil {
+ return nil, fmt.Errorf("conf must be set")
+ }
k := configKey{counter: r.configVersionID.Load()}
h, _, err := r.hugoSites.GetOrCreate(k, func(key configKey) (*hugolib.HugoSites, error) {
depsCfg := r.newDepsConfig(conf)
type hugoBuilder struct {
r *rootCommand
- confmu sync.Mutex
- conf *commonConfig
+ confmu sync.Mutex
+ confOld *commonConfig
+ conf *commonConfig
// May be nil.
s *serverCommand
fn(c.conf)
}
+func (c *hugoBuilder) withConfOrOldConf(fn func(conf *commonConfig)) {
+ c.confmu.Lock()
+ defer c.confmu.Unlock()
+ if c.conf != nil {
+ fn(c.conf)
+ } else if c.confOld != nil {
+ fn(c.confOld)
+ }
+}
+
+func (c *hugoBuilder) withConfOrOldConfE(fn func(conf *commonConfig) error) error {
+ c.confmu.Lock()
+ defer c.confmu.Unlock()
+ if c.conf != nil {
+ return fn(c.conf)
+ } else if c.confOld != nil {
+ return fn(c.confOld)
+ }
+ return errConfigNotSet
+}
+
type hugoBuilderErrState struct {
mu sync.Mutex
paused bool
}
c.conf = conf
+ c.confOld = conf
if c.onConfigLoaded != nil {
if err := c.onConfigLoaded(false); err != nil {
return err
c.r.resetLogs()
c.r.configVersionID.Add(1)
- if err := c.withConfE(func(conf *commonConfig) error {
+ if err := c.withConfOrOldConfE(func(conf *commonConfig) error {
oldConf := conf
+ c.conf = nil
newConf, err := c.r.ConfigFromConfig(configKey{counter: c.r.configVersionID.Load()}, conf)
if err != nil {
return err
}
port = 1313
- f.c.withConf(func(conf *commonConfig) {
+ f.c.withConfOrOldConf(func(conf *commonConfig) {
if lrport := conf.configs.GetFirstLanguageConfig().BaseURLLiveReload().Port(); lrport != 0 {
port = lrport
}
"io"
"os"
"strings"
+ "sync"
"time"
"github.com/bep/logg"
)
l := logger.WithLevel(opts.Level)
+ logMu := &sync.Mutex{}
reset := func() {
+ logMu.Lock()
+ defer logMu.Unlock()
logCounters.mu.Lock()
defer logCounters.mu.Unlock()
logCounters.counters = make(map[logg.Level]int)
}
return &logAdapter{
+ mu: logMu,
logCounters: logCounters,
errors: errorsw,
reset: reset,
}
type logAdapter struct {
+ mu *sync.Mutex
logCounters *logLevelCounter
errors *strings.Builder
reset func()
}
func (l *logAdapter) Errors() string {
+ l.mu.Lock()
+ defer l.mu.Unlock()
return l.errors.String()
}
if err != nil {
ts.Fatalf("failed to read file %v", err)
}
- newContent := bytes.Replace(oldContent, []byte(args[1]), []byte(args[2]), -1)
+ old, new := args[1], args[2]
+
+ newContent := bytes.Replace(oldContent, []byte(old), []byte(new), -1)
err = os.WriteFile(filename, newContent, 0o644)
if err != nil {
ts.Fatalf("failed to write file: %v", err)