diff --git a/.drone.yml b/.drone.yml index 1e3db35d..b93de21b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,4 +1,6 @@ image: go1.2 +git: + path: github.com/drone/drone env: - GOROOT=/usr/local/go script: diff --git a/server/queue/worker.go b/server/queue/worker.go index 3fb11cd8..aa9a0d66 100644 --- a/server/queue/worker.go +++ b/server/queue/worker.go @@ -170,6 +170,9 @@ func (w *worker) execute(task *BuildTask) error { } func (w *worker) runBuild(task *BuildTask, buf io.Writer) (bool, error) { + var path = filepath.Join(task.Repo.Host, task.Repo.Owner, task.Repo.Name) + path = git.GitPath(task.Script.Git, path) + repo := &r.Repo{ Name: task.Repo.Host + task.Repo.Owner + task.Repo.Name, Path: task.Repo.CloneURL, @@ -177,7 +180,7 @@ func (w *worker) runBuild(task *BuildTask, buf io.Writer) (bool, error) { Commit: task.Commit.Sha, PR: task.Commit.PullRequest, //TODO the builder should handle this - Dir: filepath.Join("/var/cache/drone/src", task.Repo.Host, task.Repo.Owner, task.Repo.Name), + Dir: filepath.Join("/var/cache/drone/src", path), Depth: git.GitDepth(task.Script.Git), } diff --git a/shared/build/git/git.go b/shared/build/git/git.go index 36e67f13..74e711cc 100644 --- a/shared/build/git/git.go +++ b/shared/build/git/git.go @@ -13,10 +13,7 @@ type Git struct { Depth *int `yaml:"depth,omitempty"` // The name of a directory to clone into. - // TODO this still needs to be implemented. this field is - // critical for forked Go projects, that need to clone - // to a specific repository. - Path string `yaml:"path,omitempty"` + Path *string `yaml:"path,omitempty"` } // GitDepth returns GitDefaultDepth @@ -29,3 +26,14 @@ func GitDepth(g *Git) int { } return *g.Depth } + +// GitPath returns the given default path +// when Git.Path is empty. +// GitPath returns Git.Path +// when it is not empty. +func GitPath(g *Git, defaultPath string) string { + if g == nil || g.Path == nil { + return defaultPath + } + return *g.Path +}