Skip to content

Commit ee06931

Browse files
committed
Add resource vendoring
Fixes #13309
1 parent e08d9af commit ee06931

File tree

24 files changed

+492
-123
lines changed

24 files changed

+492
-123
lines changed

‎commands/commandeer.go‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,11 @@ func (r *rootCommand) Name() string {
365365
}
366366

367367
func (r *rootCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, args []string) error {
368-
b := newHugoBuilder(r, nil)
368+
var vendor bool
369+
if vendorCmd, ok := cd.Command.(vendoredCommand); ok {
370+
vendor = vendorCmd.IsVendorCommand()
371+
}
372+
b := newHugoBuilder(r, nil, vendor)
369373

370374
if !r.buildWatch {
371375
defer b.postBuild("Total", time.Now())

‎commands/commands.go‎

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ import (
2323
func newExec() (*simplecobra.Exec, error) {
2424
rootCmd := &rootCommand{
2525
commands: []simplecobra.Commander{
26-
newHugoBuildCmd(),
26+
newHugoBuildCmd(false),
27+
newHugoBuildCmd(true),
2728
newVersionCmd(),
2829
newEnvCommand(),
2930
newServerCommand(),
@@ -42,26 +43,40 @@ func newExec() (*simplecobra.Exec, error) {
4243
return simplecobra.New(rootCmd)
4344
}
4445

45-
func newHugoBuildCmd() simplecobra.Commander {
46-
return &hugoBuildCommand{}
46+
func newHugoBuildCmd(vendor bool) simplecobra.Commander {
47+
return &hugoBuildCommand{
48+
vendor: vendor,
49+
}
4750
}
4851

4952
// hugoBuildCommand just delegates to the rootCommand.
5053
type hugoBuildCommand struct {
5154
rootCmd *rootCommand
55+
vendor bool
5256
}
5357

5458
func (c *hugoBuildCommand) Commands() []simplecobra.Commander {
5559
return nil
5660
}
5761

5862
func (c *hugoBuildCommand) Name() string {
63+
if c.vendor {
64+
return "vendor"
65+
}
5966
return "build"
6067
}
6168

69+
type vendoredCommand interface {
70+
IsVendorCommand() bool
71+
}
72+
73+
func (c *hugoBuildCommand) IsVendorCommand() bool {
74+
return c.vendor
75+
}
76+
6277
func (c *hugoBuildCommand) Init(cd *simplecobra.Commandeer) error {
6378
c.rootCmd = cd.Root.Command.(*rootCommand)
64-
return c.rootCmd.initRootCommand("build", cd)
79+
return c.rootCmd.initRootCommand(c.Name(), cd)
6580
}
6681

6782
func (c *hugoBuildCommand) PreRun(cd, runner *simplecobra.Commandeer) error {

‎commands/hugobuilder.go‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ type hugoBuilder struct {
7373
showErrorInBrowser bool
7474

7575
errState hugoBuilderErrState
76+
77+
vendor bool
7678
}
7779

7880
var errConfigNotSet = errors.New("config not set")
@@ -1046,11 +1048,11 @@ func (c *hugoBuilder) loadConfig(cd *simplecobra.Commandeer, running bool) error
10461048
}
10471049
}
10481050
cfg.Set("environment", c.r.environment)
1049-
10501051
cfg.Set("internal", maps.Params{
10511052
"running": running,
10521053
"watch": watch,
10531054
"verbose": c.r.isVerbose(),
1055+
"vendor": c.vendor,
10541056
"fastRenderMode": c.fastRenderMode,
10551057
})
10561058

‎commands/server.go‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,15 @@ const (
8484
configChangeGoWork = "go work file"
8585
)
8686

87-
func newHugoBuilder(r *rootCommand, s *serverCommand, onConfigLoaded ...func(reloaded bool) error) *hugoBuilder {
87+
func newHugoBuilder(r *rootCommand, s *serverCommand, vendor bool, onConfigLoaded ...func(reloaded bool) error) *hugoBuilder {
8888
var visitedURLs *types.EvictingQueue[string]
8989
if s != nil && !s.disableFastRender {
9090
visitedURLs = types.NewEvictingQueue[string](20)
9191
}
9292
return &hugoBuilder{
9393
r: r,
9494
s: s,
95+
vendor: vendor,
9596
visitedURLs: visitedURLs,
9697
fullRebuildSem: semaphore.NewWeighted(1),
9798
debounce: debounce.New(4 * time.Second),
@@ -563,6 +564,7 @@ func (c *serverCommand) PreRun(cd, runner *simplecobra.Commandeer) error {
563564
c.hugoBuilder = newHugoBuilder(
564565
c.r,
565566
c,
567+
false,
566568
func(reloaded bool) error {
567569
if !reloaded {
568570
if err := c.createServerPorts(cd); err != nil {

‎common/hugio/writers.go‎

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,25 @@ func NewMultiWriteCloser(writeClosers ...io.WriteCloser) io.WriteCloser {
5050
return multiWriteCloser{Writer: io.MultiWriter(writers...), closers: writeClosers}
5151
}
5252

53+
// NewWriteCloser creates a new io.WriteCloser with the given writer and closer.
54+
func NewWriteCloser(w io.Writer, closer io.Closer) io.WriteCloser {
55+
return struct {
56+
io.Writer
57+
io.Closer
58+
}{
59+
w,
60+
closer,
61+
}
62+
}
63+
5364
// ToWriteCloser creates an io.WriteCloser from the given io.Writer.
5465
// If it's not already, one will be created with a Close method that does nothing.
5566
func ToWriteCloser(w io.Writer) io.WriteCloser {
5667
if rw, ok := w.(io.WriteCloser); ok {
5768
return rw
5869
}
5970

60-
return struct {
61-
io.Writer
62-
io.Closer
63-
}{
64-
w,
65-
io.NopCloser(nil),
66-
}
71+
return NewWriteCloser(w, io.NopCloser(nil))
6772
}
6873

6974
// ToReadCloser creates an io.ReadCloser from the given io.Reader.

‎common/hugo/hugo.go‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ func (i HugoInfo) IsExtended() bool {
109109
return IsExtended
110110
}
111111

112+
// IsVendor returns whether we're running as `hugo vendor`.
113+
func (i HugoInfo) IsVendor() bool {
114+
return i.conf.Vendor()
115+
}
116+
112117
// WorkingDir returns the project working directory.
113118
func (i HugoInfo) WorkingDir() string {
114119
return i.conf.WorkingDir()
@@ -166,6 +171,7 @@ type ConfigProvider interface {
166171
WorkingDir() string
167172
IsMultihost() bool
168173
IsMultilingual() bool
174+
Vendor() bool
169175
}
170176

171177
// NewInfo creates a new Hugo Info object.

‎config/allconfig/allconfig.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ type InternalConfig struct {
6969
Watch bool
7070
FastRenderMode bool
7171
LiveReloadPort int
72+
Vendor bool
7273
}
7374

7475
// All non-params config keys for language.

‎config/allconfig/configlanguage.go‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ func (c ConfigLanguage) Watching() bool {
137137
return c.m.Base.Internal.Watch
138138
}
139139

140+
func (c ConfigLanguage) Vendor() bool {
141+
return c.m.Base.Internal.Vendor
142+
}
143+
140144
func (c ConfigLanguage) NewIdentityManager(name string, opts ...identity.ManagerOption) identity.Manager {
141145
if !c.Watching() {
142146
return identity.NopManager

‎config/commonConfig.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ func (b BuildConfig) clone() BuildConfig {
131131
return b
132132
}
133133

134+
// TODO1 remove, but first add a deprecation warning somewhere.
134135
func (b BuildConfig) UseResourceCache(err error) bool {
135136
if b.UseResourceCacheWhen == "never" {
136137
return false

‎config/configProvider.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type AllProvider interface {
5858
BuildDrafts() bool
5959
Running() bool
6060
Watching() bool
61+
Vendor() bool
6162
NewIdentityManager(name string, opts ...identity.ManagerOption) identity.Manager
6263
FastRenderMode() bool
6364
PrintUnusedTemplates() bool

0 commit comments

Comments
 (0)