From 2812ca20e70f9baa5a0e4537c0f3241094e19b35 Mon Sep 17 00:00:00 2001 From: Chris Merris Date: Mon, 25 Jun 2018 16:29:52 -0600 Subject: [PATCH] Added GIT_SYNC_ONE_TIME environment variable When true, fetch only happens once and program terminates. When false, fetch happens continually, as before, using the GIT_SYNC_WAIT environment variable as a polling interval. --- README.md | 1 + main.go | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a073593..dab13b8 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ docker run --name git-sync -d \ -e GIT_SYNC_BRANCH=master \ -e GIT_SYNC_REV=FETCH_HEAD \ -e GIT_SYNC_WAIT=10 \ + -e GIT_SYNC_ONE_TIME=false \ -v website_sources:/git openweb/git-sync:0.0.1 docker run --name nginx \ diff --git a/main.go b/main.go index fafa4ba..92f5a65 100644 --- a/main.go +++ b/main.go @@ -35,6 +35,7 @@ var flBranch = flag.String("branch", envString("GIT_SYNC_BRANCH", "master"), "gi var flRev = flag.String("rev", envString("GIT_SYNC_REV", "HEAD"), "git rev") var flDest = flag.String("dest", envString("GIT_SYNC_DEST", ""), "destination path") var flWait = flag.Int("wait", envInt("GIT_SYNC_WAIT", 0), "number of seconds to wait before exit") +var flOneTime = flag.Bool("onetime", envBool("GIT_SYNC_ONE_TIME", false), "run once instead of polling for changes (overrides wait when true)") func envString(key, def string) string { if env := os.Getenv(key); env != "" { @@ -55,7 +56,19 @@ func envInt(key string, def int) int { return def } -const usage = "usage: GIT_SYNC_REPO= GIT_SYNC_DEST= [GIT_SYNC_BRANCH= GIT_SYNC_WAIT=] git-sync -repo GIT_REPO_URL -dest PATH [-branch -wait]" +func envBool(key string, def bool) bool { + if env := os.Getenv(key); env != "" { + val, err := strconv.ParseBool(env) + if err != nil { + log.Printf("invalid value for %q: using default: %t", key, def) + return def + } + return val + } + return def +} + +const usage = "usage: GIT_SYNC_REPO= GIT_SYNC_DEST= [GIT_SYNC_BRANCH= GIT_SYNC_WAIT= GIT_SYNC_ONE_TIME=] git-sync -repo GIT_REPO_URL -dest PATH [-branch -wait]" func main() { flag.Parse() @@ -70,6 +83,11 @@ func main() { if err := syncRepo(*flRepo, *flDest, *flBranch, *flRev); err != nil { log.Fatalf("error syncing repo: %v", err) } + + if *flOneTime { + break + } + log.Printf("wait %d seconds", *flWait) time.Sleep(time.Duration(*flWait) * time.Second) log.Println("done") @@ -120,4 +138,4 @@ func syncRepo(repo, dest, branch, rev string) error { } return nil -} \ No newline at end of file +}