diff options
author | SatowTakeshi <doublequotation@gmail.com> | 2021-04-18 16:13:00 +0900 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-03-08 19:27:54 +0100 |
commit | 7d8011ed63d587b87a7c182748914fe146590093 (patch) | |
tree | cde6c99c5a439e64e0a2e5c9d2f0d4b03eba6577 /hugolib | |
parent | b9a1be2f9961516a674ff15a409433606e70ac7b (diff) |
Allow rendering static files to disk and dynamic to memory in server mode
Updates #9625
Diffstat (limited to 'hugolib')
-rw-r--r-- | hugolib/filesystems/basefs.go | 13 | ||||
-rw-r--r-- | hugolib/pages_process.go | 16 | ||||
-rw-r--r-- | hugolib/site.go | 4 |
3 files changed, 23 insertions, 10 deletions
diff --git a/hugolib/filesystems/basefs.go b/hugolib/filesystems/basefs.go index 2e32932c6..1614bd0b3 100644 --- a/hugolib/filesystems/basefs.go +++ b/hugolib/filesystems/basefs.go @@ -71,6 +71,9 @@ type BaseFs struct { // A read-only filesystem starting from the project workDir. WorkDir afero.Fs + // The filesystem used for renderStaticToDisk. + PublishFsStatic afero.Fs + theBigFs *filesystemsCollector // Locks. @@ -438,15 +441,17 @@ func NewBase(p *paths.Paths, logger loggers.Logger, options ...func(*BaseFs) err publishFs := hugofs.NewBaseFileDecorator(afero.NewBasePathFs(fs.Destination, p.AbsPublishDir)) sourceFs := hugofs.NewBaseFileDecorator(afero.NewBasePathFs(fs.Source, p.WorkingDir)) + publishFsStatic := afero.NewBasePathFs(fs.Source, p.AbsPublishDir) // Same as sourceFs, but no decoration. This is what's used by os.ReadDir etc. workDir := afero.NewBasePathFs(afero.NewReadOnlyFs(fs.Source), p.WorkingDir) b := &BaseFs{ - SourceFs: sourceFs, - WorkDir: workDir, - PublishFs: publishFs, - buildMu: lockedfile.MutexAt(filepath.Join(p.WorkingDir, lockFileBuild)), + SourceFs: sourceFs, + WorkDir: workDir, + PublishFs: publishFs, + PublishFsStatic: publishFsStatic, + buildMu: lockedfile.MutexAt(filepath.Join(p.WorkingDir, lockFileBuild)), } for _, opt := range options { diff --git a/hugolib/pages_process.go b/hugolib/pages_process.go index 541c0ae3e..59b20dabc 100644 --- a/hugolib/pages_process.go +++ b/hugolib/pages_process.go @@ -33,9 +33,10 @@ func newPagesProcessor(h *HugoSites, sp *source.SourceSpec) *pagesProcessor { procs := make(map[string]pagesCollectorProcessorProvider) for _, s := range h.Sites { procs[s.Lang()] = &sitePagesProcessor{ - m: s.pageMap, - errorSender: s.h, - itemChan: make(chan interface{}, config.GetNumWorkerMultiplier()*2), + m: s.pageMap, + errorSender: s.h, + itemChan: make(chan interface{}, config.GetNumWorkerMultiplier()*2), + renderStaticToDisk: h.Cfg.GetBool("renderStaticToDisk"), } } return &pagesProcessor{ @@ -118,6 +119,8 @@ type sitePagesProcessor struct { ctx context.Context itemChan chan interface{} itemGroup *errgroup.Group + + renderStaticToDisk bool } func (p *sitePagesProcessor) Process(item interface{}) error { @@ -162,7 +165,12 @@ func (p *sitePagesProcessor) copyFile(fim hugofs.FileMetaInfo) error { defer f.Close() - return s.publish(&s.PathSpec.ProcessingStats.Files, target, f) + fs := s.PublishFs + if p.renderStaticToDisk { + fs = s.PublishFsStatic + } + + return s.publish(&s.PathSpec.ProcessingStats.Files, target, f, fs) } func (p *sitePagesProcessor) doProcess(item interface{}) error { diff --git a/hugolib/site.go b/hugolib/site.go index c76bdc141..0b8e807dd 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -1824,10 +1824,10 @@ func (s *Site) lookupTemplate(layouts ...string) (tpl.Template, bool) { return nil, false } -func (s *Site) publish(statCounter *uint64, path string, r io.Reader) (err error) { +func (s *Site) publish(statCounter *uint64, path string, r io.Reader, fs afero.Fs) (err error) { s.PathSpec.ProcessingStats.Incr(statCounter) - return helpers.WriteToDisk(filepath.Clean(path), r, s.BaseFs.PublishFs) + return helpers.WriteToDisk(filepath.Clean(path), r, fs) } func (s *Site) kindFromFileInfoOrSections(fi *fileInfo, sections []string) string { |