diff --git a/installer/step/dryrun.go b/installer/step/dryrun.go new file mode 100644 index 0000000..98c1aaf --- /dev/null +++ b/installer/step/dryrun.go @@ -0,0 +1,64 @@ +// SPDX-FileCopyrightText: Fabio Forni +// SPDX-License-Identifier: MPL-2.0 + +package step + +import ( + "bufio" + "fmt" + "strings" + + "github.com/livingsilver94/backee/service" +) + +type DryRun struct{} + +func (DryRun) Setup(script string) error { + return printLines(script) +} + +func (DryRun) InstallPackages(fullCmd []string) error { + return printf("Will run %q", strings.Join(fullCmd, " ")) +} + +func (DryRun) SymlinkFile(dst service.FilePath, src string) error { + return printSourceDest(dst, src) +} + +func (DryRun) CopyFile(dst service.FilePath, src string) error { + return printSourceDest(dst, src) +} + +func (DryRun) Finalize(script string) error { + return printLines(script) +} + +func printLine(str string) error { + _, err := fmt.Println("\t" + str) + return err +} + +func printLines(str string) error { + lines := bufio.NewScanner(strings.NewReader(str)) + for lines.Scan() { + err := printLine(lines.Text()) + if err != nil { + return err + } + } + return nil +} + +func printf(format string, args ...any) error { + _, err := fmt.Printf("\t"+format+"\n", args) + return err +} + +func printSourceDest(dst service.FilePath, src string) error { + buf := strings.Builder{} + fmt.Fprintf(&buf, "%s → %s", src, dst.Path) + if dst.Mode != 0 { + fmt.Fprintf(&buf, " With permission %o", dst.Mode) + } + return printLine(buf.String()) +} diff --git a/installer/step/step.go b/installer/step/step.go new file mode 100644 index 0000000..f715141 --- /dev/null +++ b/installer/step/step.go @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: Fabio Forni +// SPDX-License-Identifier: MPL-2.0 + +package step + +import "github.com/livingsilver94/backee/service" + +type Performer interface { + Setup(script string) error + InstallPackages(fullCmd []string) error + SymlinkFile(dst service.FilePath, src string) error + CopyFile(dst service.FilePath, src string) error + Finalize(script string) error +}