commands: Add "hugo mod verify"

See #6907
This commit is contained in:
Bjørn Erik Pedersen 2020-02-19 10:39:36 +01:00
parent fa520a2d98
commit 0b96aba022
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
4 changed files with 85 additions and 13 deletions

View file

@ -24,6 +24,9 @@ import (
"os"
"os/exec"
"path/filepath"
"regexp"
"github.com/gohugoio/hugo/hugofs"
"github.com/gohugoio/hugo/hugofs/files"
@ -308,6 +311,38 @@ func (c *Client) Init(path string) error {
return nil
}
var verifyErrorDirRe = regexp.MustCompile(`dir has been modified \((.*?)\)`)
// Verify checks that the dependencies of the current module,
// which are stored in a local downloaded source cache, have not been
// modified since being downloaded.
func (c *Client) Verify(clean bool) error {
// TODO1 add path to mod clean
err := c.runVerify()
if err != nil {
if clean {
m := verifyErrorDirRe.FindAllStringSubmatch(err.Error(), -1)
if m != nil {
for i := 0; i < len(m); i++ {
c, err := hugofs.MakeReadableAndRemoveAllModulePkgDir(c.fs, m[i][1])
if err != nil {
return err
}
fmt.Println("Cleaned", c)
}
}
// Try to verify it again.
err = c.runVerify()
}
}
return err
}
func (c *Client) runVerify() error {
return c.runGo(context.Background(), ioutil.Discard, "mod", "verify")
}
func isProbablyModule(path string) bool {
return module.CheckPath(path) == nil
}