summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-09-14 17:09:34 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-09-15 01:04:31 +0200
commit214afe4c1bb9c37bc6159e659d66ba9a268a2849 (patch)
tree86545eb1b2a4f09f7e2dfc850fe6f4251a569a32
parentcd830bb0275fc39240861627ef26e146985b5c86 (diff)
modules/npm: Preserve the original package.json if it exists
Fixes #7690
-rw-r--r--common/hugio/copy.go21
-rw-r--r--hugolib/hugo_modules_test.go12
-rw-r--r--modules/npm/package_builder.go9
3 files changed, 29 insertions, 13 deletions
diff --git a/common/hugio/copy.go b/common/hugio/copy.go
index 2b756cb44..be4506f4c 100644
--- a/common/hugio/copy.go
+++ b/common/hugio/copy.go
@@ -26,28 +26,29 @@ import (
// CopyFile copies a file.
func CopyFile(fs afero.Fs, from, to string) error {
- sf, err := os.Open(from)
+ sf, err := fs.Open(from)
if err != nil {
return err
}
defer sf.Close()
- df, err := os.Create(to)
+ df, err := fs.Create(to)
if err != nil {
return err
}
defer df.Close()
_, err = io.Copy(df, sf)
- if err == nil {
- si, err := os.Stat(from)
- if err != nil {
- err = os.Chmod(to, si.Mode())
+ if err != nil {
+ return err
+ }
+ si, err := fs.Stat(from)
+ if err != nil {
+ err = fs.Chmod(to, si.Mode())
- if err != nil {
- return err
- }
+ if err != nil {
+ return err
}
-
}
+
return nil
}
diff --git a/hugolib/hugo_modules_test.go b/hugolib/hugo_modules_test.go
index c3358a0c2..87cddf086 100644
--- a/hugolib/hugo_modules_test.go
+++ b/hugolib/hugo_modules_test.go
@@ -201,14 +201,16 @@ JS imported in module: |
b, clean := newTestBuilder(t, "")
defer clean()
- b.WithSourceFile("package.json", `{
+ const origPackageJSON = `{
"name": "mypack",
"version": "1.2.3",
"scripts": {},
"dependencies": {
"moo": "1.2.3"
}
-}`)
+}`
+
+ b.WithSourceFile("package.json", origPackageJSON)
b.Build(BuildCfg{})
b.Assert(npm.Pack(b.H.BaseFs.SourceFs, b.H.BaseFs.Assets.Dirs), qt.IsNil)
@@ -244,6 +246,10 @@ JS imported in module: |
"version": "1.2.3"
}`
})
+
+ // https://github.com/gohugoio/hugo/issues/7690
+ b.AssertFileContent("package.hugo.json", origPackageJSON)
+
})
t.Run("Create package.json, no default, no package.json", func(t *testing.T) {
@@ -281,7 +287,9 @@ JS imported in module: |
"name": "myhugosite",
"version": "0.1.0"
}`
+
})
+
})
}
diff --git a/modules/npm/package_builder.go b/modules/npm/package_builder.go
index 23aac7246..c0a5b0dad 100644
--- a/modules/npm/package_builder.go
+++ b/modules/npm/package_builder.go
@@ -18,6 +18,8 @@ import (
"fmt"
"io"
+ "github.com/gohugoio/hugo/common/hugio"
+
"github.com/gohugoio/hugo/hugofs/files"
"github.com/pkg/errors"
@@ -51,7 +53,12 @@ func Pack(fs afero.Fs, fis []hugofs.FileMetaInfo) error {
if err != nil {
// Have a package.json?
fi, err = fs.Stat(packageJSONName)
- if err != nil {
+ if err == nil {
+ // Preserve the original in package.hugo.json.
+ if err = hugio.CopyFile(fs, packageJSONName, files.FilenamePackageHugoJSON); err != nil {
+ return errors.Wrap(err, "npm pack: failed to copy package file")
+ }
+ } else {
// Create one.
name := "project"
// Use the Hugo site's folder name as the default name.