gopkg.in/openshift/source-to-image.v1@v1.2.0/pkg/scm/scm.go (about) 1 package scm 2 3 import ( 4 "github.com/openshift/source-to-image/pkg/build" 5 "github.com/openshift/source-to-image/pkg/errors" 6 "github.com/openshift/source-to-image/pkg/scm/downloaders/empty" 7 "github.com/openshift/source-to-image/pkg/scm/downloaders/file" 8 gitdownloader "github.com/openshift/source-to-image/pkg/scm/downloaders/git" 9 "github.com/openshift/source-to-image/pkg/scm/git" 10 "github.com/openshift/source-to-image/pkg/util/cmd" 11 "github.com/openshift/source-to-image/pkg/util/fs" 12 utillog "github.com/openshift/source-to-image/pkg/util/log" 13 ) 14 15 var log = utillog.StderrLog 16 17 // DownloaderForSource determines what SCM plugin should be used for downloading 18 // the sources from the repository. 19 func DownloaderForSource(fs fs.FileSystem, s *git.URL, forceCopy bool) (build.Downloader, error) { 20 log.V(4).Infof("DownloadForSource %s", s) 21 22 if s == nil { 23 return &empty.Noop{}, nil 24 } 25 26 if s.IsLocal() { 27 if forceCopy { 28 return &file.File{FileSystem: fs}, nil 29 } 30 31 isLocalNonBareGitRepo, err := git.IsLocalNonBareGitRepository(fs, s.LocalPath()) 32 if err != nil { 33 return nil, err 34 } 35 if !isLocalNonBareGitRepo { 36 return &file.File{FileSystem: fs}, nil 37 } 38 39 isEmpty, err := git.LocalNonBareGitRepositoryIsEmpty(fs, s.LocalPath()) 40 if err != nil { 41 return nil, err 42 } 43 if isEmpty { 44 return nil, errors.NewEmptyGitRepositoryError(s.LocalPath()) 45 } 46 47 if !git.HasGitBinary() { 48 return &file.File{FileSystem: fs}, nil 49 } 50 } 51 52 return &gitdownloader.Clone{Git: git.New(fs, cmd.NewCommandRunner()), FileSystem: fs}, nil 53 }