// fetchSource retrieves the inputs defined by the build source into the // provided directory, or returns an error if retrieval is not possible. func fetchSource(dir string, build *api.Build, urlTimeout time.Duration, in io.Reader, git git.Git) (*s2iapi.SourceInfo, error) { hasGitSource := false // expect to receive input from STDIN if err := extractInputBinary(in, build.Spec.Source.Binary, dir); err != nil { return nil, err } // may retrieve source from Git hasGitSource, err := extractGitSource(git, build.Spec.Source.Git, build.Spec.Revision, dir, urlTimeout) if err != nil { return nil, err } var sourceInfo *s2iapi.SourceInfo if hasGitSource { sourceInfo = git.GetInfo(dir) } // a Dockerfile has been specified, create or overwrite into the destination if dockerfileSource := build.Spec.Source.Dockerfile; dockerfileSource != nil { baseDir := dir // if a context dir has been defined and we cloned source, overwrite the destination if hasGitSource && len(build.Spec.Source.ContextDir) != 0 { baseDir = filepath.Join(baseDir, build.Spec.Source.ContextDir) } return sourceInfo, ioutil.WriteFile(filepath.Join(baseDir, "Dockerfile"), []byte(*dockerfileSource), 0660) } return sourceInfo, nil }