mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-01 03:59:59 -05:00
modules: Improve "hugo mod clean"
* Only clean project modules * Optional glob pattern of module paths to clean Closes #6907
This commit is contained in:
parent
0b96aba022
commit
dce210ab56
3 changed files with 62 additions and 22 deletions
|
@ -49,6 +49,30 @@ func (c *modCmd) newVerifyCmd() *cobra.Command {
|
||||||
return verifyCmd
|
return verifyCmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *modCmd) newCleanCmd() *cobra.Command {
|
||||||
|
var pattern string
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "clean",
|
||||||
|
Short: "Delete the Hugo Module cache for the current project.",
|
||||||
|
Long: `Delete the Hugo Module cache for the current project.
|
||||||
|
|
||||||
|
Note that after you run this command, all of your dependencies will be re-downloaded next time you run "hugo".
|
||||||
|
|
||||||
|
Also note that if you configure a positive maxAge for the "modules" file cache, it will also be cleaned as part of "hugo --gc".
|
||||||
|
|
||||||
|
`,
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
return c.withModsClient(true, func(c *modules.Client) error {
|
||||||
|
return c.Clean(pattern)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.Flags().StringVarP(&pattern, "pattern", "", "", `pattern matching module paths to clean (all if not set), e.g. "**hugo*"`)
|
||||||
|
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
func (b *commandsBuilder) newModCmd() *modCmd {
|
func (b *commandsBuilder) newModCmd() *modCmd {
|
||||||
|
|
||||||
c := &modCmd{}
|
c := &modCmd{}
|
||||||
|
@ -215,27 +239,7 @@ If a module is vendored, that is where Hugo will look for it's dependencies.
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&cobra.Command{
|
c.newCleanCmd(),
|
||||||
Use: "clean",
|
|
||||||
Short: "Delete the entire Hugo Module cache.",
|
|
||||||
Long: `Delete the entire Hugo Module cache.
|
|
||||||
|
|
||||||
Note that after you run this command, all of your dependencies will be re-downloaded next time you run "hugo".
|
|
||||||
|
|
||||||
Also note that if you configure a positive maxAge for the "modules" file cache, it will also be cleaned as part of "hugo --gc".
|
|
||||||
|
|
||||||
`,
|
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
|
||||||
com, err := c.initConfig(true)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = com.hugo().FileCaches.ModulesCache().Prune(true)
|
|
||||||
return err
|
|
||||||
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
c.baseBuilderCmd = b.newBuilderCmd(cmd)
|
c.baseBuilderCmd = b.newBuilderCmd(cmd)
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
package hugofs
|
package hugofs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -97,7 +98,7 @@ func isWrite(flag int) bool {
|
||||||
func MakeReadableAndRemoveAllModulePkgDir(fs afero.Fs, dir string) (int, error) {
|
func MakeReadableAndRemoveAllModulePkgDir(fs afero.Fs, dir string) (int, error) {
|
||||||
// Safe guard
|
// Safe guard
|
||||||
if !strings.Contains(dir, "pkg") {
|
if !strings.Contains(dir, "pkg") {
|
||||||
panic("invalid dir")
|
panic(fmt.Sprint("invalid dir:", dir))
|
||||||
}
|
}
|
||||||
|
|
||||||
counter := 0
|
counter := 0
|
||||||
|
|
|
@ -26,6 +26,9 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
|
"github.com/gobwas/glob"
|
||||||
|
hglob "github.com/gohugoio/hugo/hugofs/glob"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/hugofs"
|
"github.com/gohugoio/hugo/hugofs"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/hugofs/files"
|
"github.com/gohugoio/hugo/hugofs/files"
|
||||||
|
@ -339,6 +342,38 @@ func (c *Client) Verify(clean bool) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) Clean(pattern string) error {
|
||||||
|
mods, err := c.listGoMods()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var g glob.Glob
|
||||||
|
|
||||||
|
if pattern != "" {
|
||||||
|
var err error
|
||||||
|
g, err = hglob.GetGlob(pattern)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, m := range mods {
|
||||||
|
if m.Replace != nil || m.Main {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if g != nil && !g.Match(m.Path) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
_, err = hugofs.MakeReadableAndRemoveAllModulePkgDir(c.fs, m.Dir)
|
||||||
|
if err == nil {
|
||||||
|
c.logger.FEEDBACK.Printf("hugo: cleaned module cache for %q", m.Path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) runVerify() error {
|
func (c *Client) runVerify() error {
|
||||||
return c.runGo(context.Background(), ioutil.Discard, "mod", "verify")
|
return c.runGo(context.Background(), ioutil.Discard, "mod", "verify")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue