From 8b421f2cf010459ace979988fbf6d40471d27c67 Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Sat, 27 Oct 2018 15:33:54 +0000 Subject: [PATCH] Implements basic version guessing --- README.md | 4 ++++ main.go | 32 +++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0cbe35f..c153667 100644 --- a/README.md +++ b/README.md @@ -44,3 +44,7 @@ If you already have Go, Qemu and Docker installed, there's cross-platform instal Test only with one kernel: $ out-of-tree pew --kernel='Ubuntu:4.10.0-30-generic' + +Guess work kernels: + + $ out-of-tree pew --guess diff --git a/main.go b/main.go index a64e91b..6fd6c34 100644 --- a/main.go +++ b/main.go @@ -95,6 +95,11 @@ const ( var distroTypeStrings = [...]string{"Ubuntu", "CentOS", "Debian"} +func newDistroType(dType string) (dt distroType, err error) { + err = dt.UnmarshalTOML([]byte(dType)) + return +} + func (dt distroType) String() string { return distroTypeStrings[dt] } @@ -407,7 +412,7 @@ func exists(path string) bool { return true } -func pewHandler(workPath, kcfgPath, overridedKernel string) (err error) { +func pewHandler(workPath, kcfgPath, ovrrdKrnl string, guess bool) (err error) { ka, err := readArtifactConfig(workPath + "/.out-of-tree.toml") if err != nil { return @@ -417,14 +422,14 @@ func pewHandler(workPath, kcfgPath, overridedKernel string) (err error) { ka.SourcePath = workPath } - if overridedKernel != "" { - parts := strings.Split(overridedKernel, ":") + if ovrrdKrnl != "" { + parts := strings.Split(ovrrdKrnl, ":") if len(parts) != 2 { return errors.New("Kernel is not 'distroType:regex'") } var dt distroType - err = dt.UnmarshalTOML([]byte(parts[0])) + dt, err = newDistroType(parts[0]) if err != nil { return } @@ -433,6 +438,20 @@ func pewHandler(workPath, kcfgPath, overridedKernel string) (err error) { ka.SupportedKernels = []kernelMask{km} } + if guess { + ka.SupportedKernels = []kernelMask{} + for _, dType := range distroTypeStrings { + var dt distroType + dt, err = newDistroType(dType) + if err != nil { + return + } + + km := kernelMask{DistroType: dt, ReleaseMask: ".*"} + ka.SupportedKernels = append(ka.SupportedKernels, km) + } + } + kcfg, err := readKernelConfig(kcfgPath) if err != nil { return @@ -465,10 +484,13 @@ func main() { pewKernelFlag := pewCommand.Flag("kernel", "Override kernel regex") pewKernel := pewKernelFlag.String() + pewGuessFlag := pewCommand.Flag("guess", "Try all defined kernels") + pewGuess := pewGuessFlag.Bool() + var err error switch kingpin.MustParse(app.Parse(os.Args[1:])) { case pewCommand.FullCommand(): - err = pewHandler(*path, *kcfg, *pewKernel) + err = pewHandler(*path, *kcfg, *pewKernel, *pewGuess) } if err != nil {