From a62e7cf1e06f44c4a8136d4ed825e1416d6ce4ef Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Wed, 28 Nov 2018 18:43:43 +0900 Subject: [PATCH] worker/base: allow running without `git` installed genuinetools/img#195 Signed-off-by: Akihiro Suda --- source/git/gitsource.go | 13 ++++++++----- worker/base/worker.go | 20 ++++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/source/git/gitsource.go b/source/git/gitsource.go index 47d304b7..6e7d4a46 100644 --- a/source/git/gitsource.go +++ b/source/git/gitsource.go @@ -37,17 +37,20 @@ type gitSource struct { locker *locker.Locker } +// Supported returns nil if the system supports Git source +func Supported() error { + if err := exec.Command("git", "version").Run(); err != nil { + return errors.Wrap(err, "failed to find git binary") + } + return nil +} + func NewSource(opt Opt) (source.Source, error) { gs := &gitSource{ md: opt.MetadataStore, cache: opt.CacheAccessor, locker: locker.New(), } - - if err := exec.Command("git", "version").Run(); err != nil { - return nil, errors.Wrap(err, "failed to find git binary") - } - return gs, nil } diff --git a/worker/base/worker.go b/worker/base/worker.go index 2c666ef1..5593f0e4 100644 --- a/worker/base/worker.go +++ b/worker/base/worker.go @@ -46,6 +46,7 @@ import ( ocispec "github.com/opencontainers/image-spec/specs-go/v1" specs "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" + "github.com/sirupsen/logrus" "golang.org/x/sync/errgroup" ) @@ -118,16 +119,19 @@ func NewWorker(opt WorkerOpt) (*Worker, error) { sm.Register(is) - gs, err := git.NewSource(git.Opt{ - CacheAccessor: cm, - MetadataStore: opt.MetadataStore, - }) - if err != nil { - return nil, err + if err := git.Supported(); err == nil { + gs, err := git.NewSource(git.Opt{ + CacheAccessor: cm, + MetadataStore: opt.MetadataStore, + }) + if err != nil { + return nil, err + } + sm.Register(gs) + } else { + logrus.Warnf("git source cannot be enabled: %v", err) } - sm.Register(gs) - hs, err := http.NewSource(http.Opt{ CacheAccessor: cm, MetadataStore: opt.MetadataStore,