enhancement: make hashes available as a value and print out for cmd

This commit is contained in:
Mustafa Gezen 2021-09-04 23:33:08 +02:00
parent 825228e627
commit fff8896c47
Signed by: mustafa
GPG Key ID: DCDF010D946438C1
2 changed files with 36 additions and 35 deletions

View File

@ -21,8 +21,10 @@
package main package main
import ( import (
"encoding/json"
"github.com/rocky-linux/srpmproc/pkg/srpmproc" "github.com/rocky-linux/srpmproc/pkg/srpmproc"
"log" "log"
"os"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -84,10 +86,16 @@ func mn(_ *cobra.Command, _ []string) {
log.Fatal(err) log.Fatal(err)
} }
err = srpmproc.ProcessRPM(pd) latestHashForBranch, err := srpmproc.ProcessRPM(pd)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
err = json.NewEncoder(os.Stdout).Encode(latestHashForBranch)
if err != nil {
log.Fatal(err)
}
} }
func main() { func main() {

View File

@ -22,7 +22,6 @@ package srpmproc
import ( import (
"encoding/hex" "encoding/hex"
"encoding/json"
"fmt" "fmt"
"github.com/go-git/go-billy/v5" "github.com/go-git/go-billy/v5"
"github.com/go-git/go-git/v5/plumbing/transport/ssh" "github.com/go-git/go-git/v5/plumbing/transport/ssh"
@ -33,7 +32,6 @@ import (
"github.com/rocky-linux/srpmproc/pkg/modes" "github.com/rocky-linux/srpmproc/pkg/modes"
"io/ioutil" "io/ioutil"
"log" "log"
"os"
"os/user" "os/user"
"path/filepath" "path/filepath"
"regexp" "regexp"
@ -240,10 +238,10 @@ func NewProcessData(req *ProcessDataRequest) (*data.ProcessData, error) {
// source files goes into -> SOURCES // source files goes into -> SOURCES
// all files that are remote goes into .gitignore // all files that are remote goes into .gitignore
// all ignored files' hash goes into .{Name}.metadata // all ignored files' hash goes into .{Name}.metadata
func ProcessRPM(pd *data.ProcessData) error { func ProcessRPM(pd *data.ProcessData) (map[string]string, error) {
md, err := pd.Importer.RetrieveSource(pd) md, err := pd.Importer.RetrieveSource(pd)
if err != nil { if err != nil {
return err return nil, err
} }
md.BlobCache = map[string][]byte{} md.BlobCache = map[string][]byte{}
@ -262,7 +260,7 @@ func ProcessRPM(pd *data.ProcessData) error {
if pd.NoDupMode { if pd.NoDupMode {
repo, err := git.Init(memory.NewStorage(), memfs.New()) repo, err := git.Init(memory.NewStorage(), memfs.New())
if err != nil { if err != nil {
return fmt.Errorf("could not init git repo: %v", err) return nil, fmt.Errorf("could not init git repo: %v", err)
} }
remoteUrl := fmt.Sprintf("%s/%s/%s.git", pd.UpstreamPrefix, remotePrefix, gitlabify(md.Name)) remoteUrl := fmt.Sprintf("%s/%s/%s.git", pd.UpstreamPrefix, remotePrefix, gitlabify(md.Name))
refspec := config.RefSpec("+refs/heads/*:refs/remotes/origin/*") refspec := config.RefSpec("+refs/heads/*:refs/remotes/origin/*")
@ -273,7 +271,7 @@ func ProcessRPM(pd *data.ProcessData) error {
Fetch: []config.RefSpec{refspec}, Fetch: []config.RefSpec{refspec},
}) })
if err != nil { if err != nil {
return fmt.Errorf("could not create remote: %v", err) return nil, fmt.Errorf("could not create remote: %v", err)
} }
list, err := remote.List(&git.ListOptions{ list, err := remote.List(&git.ListOptions{
@ -348,17 +346,17 @@ func ProcessRPM(pd *data.ProcessData) error {
createdFs, err := pd.FsCreator(md.PushBranch) createdFs, err := pd.FsCreator(md.PushBranch)
if err != nil { if err != nil {
return err return nil, err
} }
// create new Repo for final dist // create new Repo for final dist
repo, err := git.Init(memory.NewStorage(), createdFs) repo, err := git.Init(memory.NewStorage(), createdFs)
if err != nil { if err != nil {
return fmt.Errorf("could not create new dist Repo: %v", err) return nil, fmt.Errorf("could not create new dist Repo: %v", err)
} }
w, err := repo.Worktree() w, err := repo.Worktree()
if err != nil { if err != nil {
return fmt.Errorf("could not get dist Worktree: %v", err) return nil, fmt.Errorf("could not get dist Worktree: %v", err)
} }
shouldContinue := true shouldContinue := true
@ -384,7 +382,7 @@ func ProcessRPM(pd *data.ProcessData) error {
Fetch: []config.RefSpec{refspec}, Fetch: []config.RefSpec{refspec},
}) })
if err != nil { if err != nil {
return fmt.Errorf("could not create remote: %v", err) return nil, fmt.Errorf("could not create remote: %v", err)
} }
err = repo.Fetch(&git.FetchOptions{ err = repo.Fetch(&git.FetchOptions{
@ -404,7 +402,7 @@ func ProcessRPM(pd *data.ProcessData) error {
if err != nil { if err != nil {
h := plumbing.NewSymbolicReference(plumbing.HEAD, refName) h := plumbing.NewSymbolicReference(plumbing.HEAD, refName)
if err := repo.Storer.CheckAndSetReference(h, nil); err != nil { if err := repo.Storer.CheckAndSetReference(h, nil); err != nil {
return fmt.Errorf("could not set reference: %v", err) return nil, fmt.Errorf("could not set reference: %v", err)
} }
} else { } else {
err = w.Checkout(&git.CheckoutOptions{ err = w.Checkout(&git.CheckoutOptions{
@ -413,13 +411,13 @@ func ProcessRPM(pd *data.ProcessData) error {
Force: true, Force: true,
}) })
if err != nil { if err != nil {
return fmt.Errorf("could not checkout: %v", err) return nil, fmt.Errorf("could not checkout: %v", err)
} }
} }
err = pd.Importer.WriteSource(pd, md) err = pd.Importer.WriteSource(pd, md)
if err != nil { if err != nil {
return err return nil, err
} }
data.CopyFromFs(md.Worktree.Filesystem, w.Filesystem, ".") data.CopyFromFs(md.Worktree.Filesystem, w.Filesystem, ".")
@ -429,12 +427,12 @@ func ProcessRPM(pd *data.ProcessData) error {
if pd.ModuleMode { if pd.ModuleMode {
err := patchModuleYaml(pd, md) err := patchModuleYaml(pd, md)
if err != nil { if err != nil {
return err return nil, err
} }
} else { } else {
err := executePatchesRpm(pd, md) err := executePatchesRpm(pd, md)
if err != nil { if err != nil {
return err return nil, err
} }
} }
@ -442,7 +440,7 @@ func ProcessRPM(pd *data.ProcessData) error {
metadataFile := fmt.Sprintf(".%s.metadata", md.Name) metadataFile := fmt.Sprintf(".%s.metadata", md.Name)
metadata, err := w.Filesystem.Create(metadataFile) metadata, err := w.Filesystem.Create(metadataFile)
if err != nil { if err != nil {
return fmt.Errorf("could not create metadata file: %v", err) return nil, fmt.Errorf("could not create metadata file: %v", err)
} }
for _, source := range md.SourcesToIgnore { for _, source := range md.SourcesToIgnore {
sourcePath := source.Name sourcePath := source.Name
@ -454,23 +452,23 @@ func ProcessRPM(pd *data.ProcessData) error {
sourceFile, err := w.Filesystem.Open(sourcePath) sourceFile, err := w.Filesystem.Open(sourcePath)
if err != nil { if err != nil {
return fmt.Errorf("could not open ignored source file %s: %v", sourcePath, err) return nil, fmt.Errorf("could not open ignored source file %s: %v", sourcePath, err)
} }
sourceFileBts, err := ioutil.ReadAll(sourceFile) sourceFileBts, err := ioutil.ReadAll(sourceFile)
if err != nil { if err != nil {
return fmt.Errorf("could not read the whole of ignored source file: %v", err) return nil, fmt.Errorf("could not read the whole of ignored source file: %v", err)
} }
source.HashFunction.Reset() source.HashFunction.Reset()
_, err = source.HashFunction.Write(sourceFileBts) _, err = source.HashFunction.Write(sourceFileBts)
if err != nil { if err != nil {
return fmt.Errorf("could not write bytes to hash function: %v", err) return nil, fmt.Errorf("could not write bytes to hash function: %v", err)
} }
checksum := hex.EncodeToString(source.HashFunction.Sum(nil)) checksum := hex.EncodeToString(source.HashFunction.Sum(nil))
checksumLine := fmt.Sprintf("%s %s\n", checksum, sourcePath) checksumLine := fmt.Sprintf("%s %s\n", checksum, sourcePath)
_, err = metadata.Write([]byte(checksumLine)) _, err = metadata.Write([]byte(checksumLine))
if err != nil { if err != nil {
return fmt.Errorf("could not write to metadata file: %v", err) return nil, fmt.Errorf("could not write to metadata file: %v", err)
} }
if data.StrContains(alreadyUploadedBlobs, checksum) { if data.StrContains(alreadyUploadedBlobs, checksum) {
@ -485,7 +483,7 @@ func ProcessRPM(pd *data.ProcessData) error {
_, err = w.Add(metadataFile) _, err = w.Add(metadataFile)
if err != nil { if err != nil {
return fmt.Errorf("could not add metadata file: %v", err) return nil, fmt.Errorf("could not add metadata file: %v", err)
} }
lastFilesToAdd := []string{".gitignore", "SPECS"} lastFilesToAdd := []string{".gitignore", "SPECS"}
@ -494,7 +492,7 @@ func ProcessRPM(pd *data.ProcessData) error {
if err == nil { if err == nil {
_, err := w.Add(f) _, err := w.Add(f)
if err != nil { if err != nil {
return fmt.Errorf("could not add %s: %v", f, err) return nil, fmt.Errorf("could not add %s: %v", f, err)
} }
} }
} }
@ -505,7 +503,7 @@ func ProcessRPM(pd *data.ProcessData) error {
err = pd.Importer.PostProcess(md) err = pd.Importer.PostProcess(md)
if err != nil { if err != nil {
return err return nil, err
} }
// show status // show status
@ -519,7 +517,7 @@ func ProcessRPM(pd *data.ProcessData) error {
path := strings.TrimPrefix(trimmed, "D ") path := strings.TrimPrefix(trimmed, "D ")
_, err := w.Remove(path) _, err := w.Remove(path)
if err != nil { if err != nil {
return fmt.Errorf("could not delete extra file %s: %v", path, err) return nil, fmt.Errorf("could not delete extra file %s: %v", path, err)
} }
} }
} }
@ -549,12 +547,12 @@ func ProcessRPM(pd *data.ProcessData) error {
Parents: hashes, Parents: hashes,
}) })
if err != nil { if err != nil {
return fmt.Errorf("could not commit object: %v", err) return nil, fmt.Errorf("could not commit object: %v", err)
} }
obj, err := repo.CommitObject(commit) obj, err := repo.CommitObject(commit)
if err != nil { if err != nil {
return fmt.Errorf("could not get commit object: %v", err) return nil, fmt.Errorf("could not get commit object: %v", err)
} }
log.Printf("committed:\n%s", obj.String()) log.Printf("committed:\n%s", obj.String())
@ -569,7 +567,7 @@ func ProcessRPM(pd *data.ProcessData) error {
SignKey: nil, SignKey: nil,
}) })
if err != nil { if err != nil {
return fmt.Errorf("could not create tag: %v", err) return nil, fmt.Errorf("could not create tag: %v", err)
} }
pushRefspecs = append(pushRefspecs, config.RefSpec("HEAD:"+plumbing.NewTagReferenceName(newTag))) pushRefspecs = append(pushRefspecs, config.RefSpec("HEAD:"+plumbing.NewTagReferenceName(newTag)))
@ -581,17 +579,12 @@ func ProcessRPM(pd *data.ProcessData) error {
Force: true, Force: true,
}) })
if err != nil { if err != nil {
return fmt.Errorf("could not push to remote: %v", err) return nil, fmt.Errorf("could not push to remote: %v", err)
} }
hashString := obj.Hash.String() hashString := obj.Hash.String()
latestHashForBranch[md.PushBranch] = hashString latestHashForBranch[md.PushBranch] = hashString
} }
err = json.NewEncoder(os.Stdout).Encode(latestHashForBranch) return latestHashForBranch, nil
if err != nil {
return fmt.Errorf("could not print hashes")
}
return nil
} }