mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-21 01:59:07 +00:00
Merge pull request #3819 from giggsoff/dirty-fix
Append dirty tag with content hash
This commit is contained in:
commit
fc060cac15
@ -3,10 +3,13 @@ package pkglib
|
|||||||
// Thin wrappers around git CLI invocations
|
// Thin wrappers around git CLI invocations
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -83,6 +86,32 @@ func (g git) isWorkTree(pkg string) (bool, error) {
|
|||||||
return false, fmt.Errorf("unexpected output from git rev-parse --is-inside-work-tree: %s", tf)
|
return false, fmt.Errorf("unexpected output from git rev-parse --is-inside-work-tree: %s", tf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g git) contentHash() (string, error) {
|
||||||
|
hash := sha256.New()
|
||||||
|
out, err := g.commandStdout(nil, "ls-files")
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
scanner := bufio.NewScanner(strings.NewReader(strings.TrimSpace(out)))
|
||||||
|
for scanner.Scan() {
|
||||||
|
f, err := os.Open(filepath.Join(g.dir, scanner.Text()))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if _, err := io.Copy(hash, f); err != nil {
|
||||||
|
_ = f.Close()
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if err = f.Close(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err = scanner.Err(); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%x", hash.Sum(nil)), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (g git) treeHash(pkg, commit string) (string, error) {
|
func (g git) treeHash(pkg, commit string) (string, error) {
|
||||||
// we have to check if pkg is at the top level of the git tree,
|
// we have to check if pkg is at the top level of the git tree,
|
||||||
// if that's the case we need to use tree hash from the commit itself
|
// if that's the case we need to use tree hash from the commit itself
|
||||||
|
@ -250,7 +250,15 @@ func NewFromCLI(fs *flag.FlagSet, args ...string) ([]Pkg, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if dirty {
|
if dirty {
|
||||||
pkgHash += "-dirty"
|
contentHash, err := git.contentHash()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(contentHash) < 7 {
|
||||||
|
return nil, fmt.Errorf("unexpected hash len: %d", len(contentHash))
|
||||||
|
}
|
||||||
|
// construct <ls-tree>-dirty-<content hash> tag
|
||||||
|
pkgHash += fmt.Sprintf("-dirty-%s", contentHash[0:7])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user