mirror of
https://github.com/Jguer/yay
synced 2024-10-05 23:59:13 +00:00
refactor(diff): move diff functions to dedicated file
This commit is contained in:
parent
522247dca2
commit
1c96fd2d9d
|
@ -2,25 +2,78 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
|
||||
"github.com/Jguer/yay/v10/pkg/dep"
|
||||
"github.com/Jguer/yay/v10/pkg/multierror"
|
||||
"github.com/Jguer/yay/v10/pkg/text"
|
||||
)
|
||||
|
||||
const gitDiffRefName = "AUR_SEEN"
|
||||
|
||||
// Update the YAY_DIFF_REVIEW ref to HEAD. We use this ref to determine which diff were
|
||||
// reviewed by the user
|
||||
func gitUpdateSeenRef(path, name string) error {
|
||||
_, stderr, err := config.Runtime.CmdRunner.Capture(
|
||||
config.Runtime.CmdBuilder.BuildGitCmd(
|
||||
filepath.Join(path, name), "update-ref", gitDiffRefName, "HEAD"), 0)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s %s", stderr, err)
|
||||
func showPkgbuildDiffs(bases []dep.Base, cloned map[string]bool) error {
|
||||
var errMulti multierror.MultiError
|
||||
for _, base := range bases {
|
||||
pkg := base.Pkgbase()
|
||||
dir := filepath.Join(config.BuildDir, pkg)
|
||||
start, err := getLastSeenHash(config.BuildDir, pkg)
|
||||
if err != nil {
|
||||
errMulti.Add(err)
|
||||
continue
|
||||
}
|
||||
|
||||
if cloned[pkg] {
|
||||
start = gitEmptyTree
|
||||
} else {
|
||||
hasDiff, err := gitHasDiff(config.BuildDir, pkg)
|
||||
if err != nil {
|
||||
errMulti.Add(err)
|
||||
continue
|
||||
}
|
||||
|
||||
if !hasDiff {
|
||||
text.Warnln(gotext.Get("%s: No changes -- skipping", text.Cyan(base.String())))
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
args := []string{
|
||||
"diff",
|
||||
start + "..HEAD@{upstream}", "--src-prefix",
|
||||
dir + "/", "--dst-prefix", dir + "/", "--", ".", ":(exclude).SRCINFO",
|
||||
}
|
||||
if text.UseColor {
|
||||
args = append(args, "--color=always")
|
||||
} else {
|
||||
args = append(args, "--color=never")
|
||||
}
|
||||
_ = config.Runtime.CmdRunner.Show(config.Runtime.CmdBuilder.BuildGitCmd(dir, args...))
|
||||
}
|
||||
return nil
|
||||
|
||||
return errMulti.Return()
|
||||
}
|
||||
|
||||
// Check whether or not a diff exists between the last reviewed diff and
|
||||
// HEAD@{upstream}
|
||||
func gitHasDiff(path, name string) (bool, error) {
|
||||
if gitHasLastSeenRef(path, name) {
|
||||
stdout, stderr, err := config.Runtime.CmdRunner.Capture(
|
||||
config.Runtime.CmdBuilder.BuildGitCmd(filepath.Join(path, name), "rev-parse", gitDiffRefName, "HEAD@{upstream}"), 0)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("%s%s", stderr, err)
|
||||
}
|
||||
|
||||
lines := strings.Split(stdout, "\n")
|
||||
lastseen := lines[0]
|
||||
upstream := lines[1]
|
||||
return lastseen != upstream, nil
|
||||
}
|
||||
// If YAY_DIFF_REVIEW does not exists, we have never reviewed a diff for this package
|
||||
// and should display it.
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// Return wether or not we have reviewed a diff yet. It checks for the existence of
|
||||
|
@ -49,47 +102,16 @@ func getLastSeenHash(path, name string) (string, error) {
|
|||
return gitEmptyTree, nil
|
||||
}
|
||||
|
||||
// Check whether or not a diff exists between the last reviewed diff and
|
||||
// HEAD@{upstream}
|
||||
func gitHasDiff(path, name string) (bool, error) {
|
||||
if gitHasLastSeenRef(path, name) {
|
||||
stdout, stderr, err := config.Runtime.CmdRunner.Capture(
|
||||
config.Runtime.CmdBuilder.BuildGitCmd(filepath.Join(path, name), "rev-parse", gitDiffRefName, "HEAD@{upstream}"), 0)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("%s%s", stderr, err)
|
||||
}
|
||||
|
||||
lines := strings.Split(stdout, "\n")
|
||||
lastseen := lines[0]
|
||||
upstream := lines[1]
|
||||
return lastseen != upstream, nil
|
||||
}
|
||||
// If YAY_DIFF_REVIEW does not exists, we have never reviewed a diff for this package
|
||||
// and should display it.
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func gitDownload(url, path, name string) (bool, error) {
|
||||
_, err := os.Stat(filepath.Join(path, name, ".git"))
|
||||
if os.IsNotExist(err) {
|
||||
cmd := config.Runtime.CmdBuilder.BuildGitCmd(path, "clone", "--no-progress", url, name)
|
||||
_, stderr, errCapture := config.Runtime.CmdRunner.Capture(cmd, 0)
|
||||
if errCapture != nil {
|
||||
return false, fmt.Errorf(gotext.Get("error cloning %s: %s", name, stderr))
|
||||
}
|
||||
|
||||
return true, nil
|
||||
} else if err != nil {
|
||||
return false, fmt.Errorf(gotext.Get("error reading %s", filepath.Join(path, name, ".git")))
|
||||
}
|
||||
|
||||
cmd := config.Runtime.CmdBuilder.BuildGitCmd(filepath.Join(path, name), "fetch")
|
||||
_, stderr, err := config.Runtime.CmdRunner.Capture(cmd, 0)
|
||||
// Update the YAY_DIFF_REVIEW ref to HEAD. We use this ref to determine which diff were
|
||||
// reviewed by the user
|
||||
func gitUpdateSeenRef(path, name string) error {
|
||||
_, stderr, err := config.Runtime.CmdRunner.Capture(
|
||||
config.Runtime.CmdBuilder.BuildGitCmd(
|
||||
filepath.Join(path, name), "update-ref", gitDiffRefName, "HEAD"), 0)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf(gotext.Get("error fetching %s: %s", name, stderr))
|
||||
return fmt.Errorf("%s %s", stderr, err)
|
||||
}
|
||||
|
||||
return false, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func gitMerge(path, name string) error {
|
Loading…
Reference in a new issue