From ed1a7b3b39c281bff752c7c0e02f2cb091336589 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Sat, 3 Aug 2019 10:23:31 +1200 Subject: [PATCH] Add updater --- goptimize.go | 4 ++-- main.go | 54 +++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/goptimize.go b/goptimize.go index 17ee5bf..999c0ec 100644 --- a/goptimize.go +++ b/goptimize.go @@ -170,7 +170,7 @@ func Goptimize(file string) { return } - if preserveModificationTimes { + if preserveModTimes { // transfer original modification times if err := os.Chtimes(dstFile, atime, mtime); err != nil { fmt.Printf("Error setting file timestamp: %v\n", err) @@ -199,7 +199,7 @@ func Goptimize(file string) { return } - if preserveModificationTimes { + if preserveModTimes { // transfer original modification times if err := os.Chtimes(dstFile, atime, mtime); err != nil { fmt.Printf("Error setting file timestamp: %v\n", err) diff --git a/main.go b/main.go index 412fb7b..36dd102 100644 --- a/main.go +++ b/main.go @@ -7,19 +7,22 @@ import ( "os/exec" "regexp" "strconv" + + "github.com/axllent/gitrel" ) var ( - quality int - maxWidth int - maxHeight int - outputDir string - preserveModificationTimes bool - jpegoptim string - jpegtran string - optipng string - pngquant string - gifsicle string + quality int + maxWidth int + maxHeight int + outputDir string + preserveModTimes bool + jpegoptim string + jpegtran string + optipng string + pngquant string + gifsicle string + version = "dev" ) func main() { @@ -44,11 +47,14 @@ func main() { } var maxSizes string + var update, showversion bool flag.IntVar(&quality, "q", 75, "quality - JPEG only") flag.StringVar(&outputDir, "o", "", "output directory (default overwrites original)") - flag.BoolVar(&preserveModificationTimes, "p", true, "preserve file modification times") + flag.BoolVar(&preserveModTimes, "p", true, "preserve file modification times") flag.StringVar(&maxSizes, "m", "", "downscale to a maximum width & height in pixels (x)") + flag.BoolVar(&update, "u", false, "update to latest release") + flag.BoolVar(&showversion, "v", false, "show version number") // third-party optimizers flag.StringVar(&gifsicle, "gifsicle", "gifsicle", "gifsicle binary") @@ -67,9 +73,28 @@ func main() { optipng, _ = exec.LookPath(optipng) pngquant, _ = exec.LookPath(pngquant) + if showversion { + fmt.Println(fmt.Sprintf("Version: %s", version)) + latest, _, _, err := gitrel.Latest("axllent/goptimize", "goptimize") + if err == nil && latest != version { + fmt.Printf("Update available: %s\nRun `%s -u` to update.\n", latest, os.Args[0]) + } + return + } + + if update { + rel, err := gitrel.Update("axllent/goptimize", "goptimize", version) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + fmt.Printf("Updated %s to version %s", os.Args[0], rel) + return + } + if len(flag.Args()) < 1 { flag.Usage() - return + os.Exit(1) } if maxSizes != "" { @@ -79,7 +104,7 @@ func main() { if len(matches) != 4 { flag.Usage() - return + os.Exit(1) } maxWidth, _ = strconv.Atoi(matches[1]) @@ -95,7 +120,7 @@ func main() { err := os.MkdirAll(outputDir, os.ModePerm) if err != nil { fmt.Printf("Cannot create output directory: %s\n", outputDir) - return + os.Exit(1) } } } @@ -109,7 +134,6 @@ func main() { func displayDelectedOptimizer(name, bin string) error { exe, err := exec.LookPath(bin) if err != nil { - // fmt.Printf(" - %s: [undetected]\n", name) return err }