mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
modules/npm: Preserve the original package.json if it exists
Fixes #7690
This commit is contained in:
parent
cd830bb027
commit
214afe4c1b
3 changed files with 31 additions and 15 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
}`
|
}`
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue