URI: 
       modules/npm: Preserve the original package.json if it exists - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 214afe4c1bb9c37bc6159e659d66ba9a268a2849
   DIR parent cd830bb0275fc39240861627ef26e146985b5c86
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Mon, 14 Sep 2020 17:09:34 +0200
       
       modules/npm: Preserve the original package.json if it exists
       
       Fixes #7690
       
       Diffstat:
         M common/hugio/copy.go                |      21 +++++++++++----------
         M hugolib/hugo_modules_test.go        |      12 ++++++++++--
         M modules/npm/package_builder.go      |       9 ++++++++-
       
       3 files changed, 29 insertions(+), 13 deletions(-)
       ---
   DIR diff --git 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
        }
        
   DIR diff --git 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"
        }`
       +
                        })
       +
                })
        
        }
   DIR diff --git 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.