modules/npm: Preserve the original package.json if it exists

Fixes #7690
This commit is contained in:
Bjørn Erik Pedersen 2020-09-14 17:09:34 +02:00
parent cd830bb027
commit 214afe4c1b
3 changed files with 31 additions and 15 deletions

View file

@ -26,28 +26,29 @@ import (
// CopyFile copies a file. // CopyFile copies a file.
func CopyFile(fs afero.Fs, from, to string) error { func CopyFile(fs afero.Fs, from, to string) error {
sf, err := os.Open(from) sf, err := fs.Open(from)
if err != nil { if err != nil {
return err return err
} }
defer sf.Close() defer sf.Close()
df, err := os.Create(to) df, err := fs.Create(to)
if err != nil { if err != nil {
return err return err
} }
defer df.Close() defer df.Close()
_, err = io.Copy(df, sf) _, err = io.Copy(df, sf)
if err == nil { if err != nil {
si, err := os.Stat(from) return err
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
}
}
return nil return nil
} }

View file

@ -201,14 +201,16 @@ JS imported in module: |
b, clean := newTestBuilder(t, "") b, clean := newTestBuilder(t, "")
defer clean() defer clean()
b.WithSourceFile("package.json", `{ const origPackageJSON = `{
"name": "mypack", "name": "mypack",
"version": "1.2.3", "version": "1.2.3",
"scripts": {}, "scripts": {},
"dependencies": { "dependencies": {
"moo": "1.2.3" "moo": "1.2.3"
} }
}`) }`
b.WithSourceFile("package.json", origPackageJSON)
b.Build(BuildCfg{}) b.Build(BuildCfg{})
b.Assert(npm.Pack(b.H.BaseFs.SourceFs, b.H.BaseFs.Assets.Dirs), qt.IsNil) 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" "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) { t.Run("Create package.json, no default, no package.json", func(t *testing.T) {
@ -281,7 +287,9 @@ JS imported in module: |
"name": "myhugosite", "name": "myhugosite",
"version": "0.1.0" "version": "0.1.0"
}` }`
}) })
}) })
} }

View file

@ -18,6 +18,8 @@ import (
"fmt" "fmt"
"io" "io"
"github.com/gohugoio/hugo/common/hugio"
"github.com/gohugoio/hugo/hugofs/files" "github.com/gohugoio/hugo/hugofs/files"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -51,7 +53,12 @@ func Pack(fs afero.Fs, fis []hugofs.FileMetaInfo) error {
if err != nil { if err != nil {
// Have a package.json? // Have a package.json?
fi, err = fs.Stat(packageJSONName) 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. // Create one.
name := "project" name := "project"
// Use the Hugo site's folder name as the default name. // Use the Hugo site's folder name as the default name.