shithub: hugo

ref: f023dfd7636f73b11c94e86a05c6273941d52c58
dir: /hugolib/hugo_sites.go/

View raw version
// Copyright 2016-present The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package hugolib

import (
	"time"

	"github.com/fsnotify/fsnotify"

	jww "github.com/spf13/jwalterweatherman"
)

// HugoSites represents the sites to build. Each site represents a language.
type HugoSites []*Site

// Reset resets the sites, making it ready for a full rebuild.
// TODO(bep) multilingo
func (h HugoSites) Reset() {
	for i, s := range h {
		h[i] = s.Reset()
	}
}

// Build builds all sites.
func (h HugoSites) Build(watching, printStats bool) error {
	t0 := time.Now()

	for _, site := range h {
		t1 := time.Now()

		site.RunMode.Watching = watching

		if err := site.Build(); err != nil {
			return err
		}
		if printStats {
			site.Stats(t1)
		}
	}

	if printStats {
		jww.FEEDBACK.Printf("total in %v ms\n", int(1000*time.Since(t0).Seconds()))
	}

	return nil

}

// Rebuild rebuilds all sites.
func (h HugoSites) Rebuild(events []fsnotify.Event, printStats bool) error {
	t0 := time.Now()

	for _, site := range h {
		t1 := time.Now()

		if err := site.ReBuild(events); err != nil {
			return err
		}

		if printStats {
			site.Stats(t1)
		}
	}

	if printStats {
		jww.FEEDBACK.Printf("total in %v ms\n", int(1000*time.Since(t0).Seconds()))
	}

	return nil

}