Skip to content
Snippets Groups Projects
Commit 1e3d934a authored by Tomasz Maczukin's avatar Tomasz Maczukin
Browse files

Merge branch '2011-git-no-checkout' into 'master'

Add handling for GIT_CHECKOUT variable to skip checkout

Closes #2011

See merge request !585
parents e86452b8 865f80b7
No related branches found
No related tags found
No related merge requests found
......@@ -463,6 +463,23 @@ func (b *Build) GetGitStrategy() GitStrategy {
}
}
func (b *Build) GetGitCheckout() bool {
if b.GetGitStrategy() == GitNone {
return false
}
strCheckout := b.GetAllVariables().Get("GIT_CHECKOUT")
if len(strCheckout) == 0 {
return true
}
checkout, err := strconv.ParseBool(strCheckout)
if err != nil {
return true
}
return checkout
}
func (b *Build) GetSubmoduleStrategy() SubmoduleStrategy {
if b.GetGitStrategy() == GitNone {
return SubmoduleNone
......
......@@ -212,11 +212,36 @@ func TestBuildWithGitStrategyFetch(t *testing.T) {
out, err := runBuildReturningOutput(t, build)
assert.NoError(t, err)
assert.Contains(t, out, "Cloning repository")
assert.Regexp(t, "Checking out [a-f0-9]+ as", out)
out, err = runBuildReturningOutput(t, build)
assert.NoError(t, err)
assert.Contains(t, out, "Fetching changes")
assert.Regexp(t, "Checking out [a-f0-9]+ as", out)
assert.Contains(t, out, "pre-clone-script")
})
}
func TestBuildWithGitStrategyFetchNoCheckout(t *testing.T) {
onEachShell(t, func(t *testing.T, shell string) {
successfulBuild, err := common.GetSuccessfulBuild()
assert.NoError(t, err)
build, cleanup := newBuild(t, successfulBuild, shell)
defer cleanup()
build.Runner.PreCloneScript = "echo pre-clone-script"
build.Variables = append(build.Variables, common.JobVariable{Key: "GIT_STRATEGY", Value: "fetch"})
build.Variables = append(build.Variables, common.JobVariable{Key: "GIT_CHECKOUT", Value: "false"})
out, err := runBuildReturningOutput(t, build)
assert.NoError(t, err)
assert.Contains(t, out, "Cloning repository")
assert.Contains(t, out, "Skippping Git checkout")
out, err = runBuildReturningOutput(t, build)
assert.NoError(t, err)
assert.Contains(t, out, "Fetching changes")
assert.Contains(t, out, "Skippping Git checkout")
assert.Contains(t, out, "pre-clone-script")
})
}
......@@ -238,7 +263,30 @@ func TestBuildWithGitStrategyClone(t *testing.T) {
out, err = runBuildReturningOutput(t, build)
assert.NoError(t, err)
assert.Contains(t, out, "Cloning repository")
assert.Regexp(t, "Checking out [a-f0-9]+ as", out)
assert.Contains(t, out, "pre-clone-script")
})
}
func TestBuildWithGitStrategyCloneNoCheckout(t *testing.T) {
onEachShell(t, func(t *testing.T, shell string) {
successfulBuild, err := common.GetSuccessfulBuild()
assert.NoError(t, err)
build, cleanup := newBuild(t, successfulBuild, shell)
defer cleanup()
build.Runner.PreCloneScript = "echo pre-clone-script"
build.Variables = append(build.Variables, common.JobVariable{Key: "GIT_STRATEGY", Value: "clone"})
build.Variables = append(build.Variables, common.JobVariable{Key: "GIT_CHECKOUT", Value: "false"})
out, err := runBuildReturningOutput(t, build)
assert.NoError(t, err)
assert.Contains(t, out, "Cloning repository")
out, err = runBuildReturningOutput(t, build)
assert.NoError(t, err)
assert.Contains(t, out, "Cloning repository")
assert.Contains(t, out, "Skippping Git checkout")
assert.Contains(t, out, "pre-clone-script")
})
}
......
......@@ -248,20 +248,21 @@ func (b *AbstractShell) writeCloneFetchCmds(w ShellWriter, info common.ShellScri
switch info.Build.GetGitStrategy() {
case common.GitFetch:
b.writeFetchCmd(w, build, projectDir, gitDir)
b.writeCheckoutCmd(w, build)
case common.GitClone:
b.writeCloneCmd(w, build, projectDir)
b.writeCheckoutCmd(w, build)
case common.GitNone:
w.Notice("Skipping Git repository setup")
w.MkDir(projectDir)
default:
return errors.New("unknown GIT_STRATEGY")
}
if info.Build.GetGitCheckout() {
b.writeCheckoutCmd(w, build)
} else {
w.Notice("Skippping Git checkout")
}
return nil
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment