Give the git step the optional `into` parameter to clone into a specific directory
This commit is contained in:
parent
7b2dfdb749
commit
80425ec62b
|
@ -23,3 +23,10 @@ parameters:
|
||||||
type: string
|
type: string
|
||||||
description: |
|
description: |
|
||||||
A git branch to clone instead of the default.
|
A git branch to clone instead of the default.
|
||||||
|
|
||||||
|
- name: into
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
description: |
|
||||||
|
Path into which the clone should be performed, can be used as `.` to
|
||||||
|
clone into the current working directory
|
||||||
|
|
|
@ -10,6 +10,7 @@ use url::Url;
|
||||||
struct Parameters {
|
struct Parameters {
|
||||||
url: Url,
|
url: Url,
|
||||||
branch: Option<String>,
|
branch: Option<String>,
|
||||||
|
into: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,21 +33,23 @@ fn main() -> std::io::Result<()> {
|
||||||
let invoke: Invocation<Parameters> =
|
let invoke: Invocation<Parameters> =
|
||||||
invocation_from_args(&args).expect("Failed to deserialize the invocation for the step");
|
invocation_from_args(&args).expect("Failed to deserialize the invocation for the step");
|
||||||
|
|
||||||
if let Some(path) = repo_from_url(&invoke.parameters.url) {
|
let clone_path = match invoke.parameters.into {
|
||||||
println!("Clone!");
|
Some(into) => into,
|
||||||
let mut builder = git2::build::RepoBuilder::new();
|
None => repo_from_url(&invoke.parameters.url).expect("Failed to determine local path to clone"),
|
||||||
|
};
|
||||||
|
|
||||||
if let Some(branch) = &invoke.parameters.branch {
|
println!("Clone!");
|
||||||
builder.branch(&branch);
|
let mut builder = git2::build::RepoBuilder::new();
|
||||||
}
|
|
||||||
let _repo = match builder.clone(&invoke.parameters.url.into_string(), Path::new(&path)) {
|
if let Some(branch) = &invoke.parameters.branch {
|
||||||
Ok(repo) => repo,
|
builder.branch(&branch);
|
||||||
Err(e) => panic!("failed to clone: {}", e),
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
println!("Failed to determine the right local path to clone the repository into");
|
|
||||||
std::process::exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _repo = match builder.clone(&invoke.parameters.url.into_string(), Path::new(&clone_path)) {
|
||||||
|
Ok(repo) => repo,
|
||||||
|
Err(e) => panic!("failed to clone: {}", e),
|
||||||
|
};
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
INVOCATION_FILE=tmp_gittest_invocation_file.json
|
INVOCATION_FILE=$PWD/tmp_gittest_invocation_file.json
|
||||||
|
|
||||||
oneTimeTearDown() {
|
oneTimeTearDown() {
|
||||||
rm -f $INVOCATION_FILE
|
rm -f $INVOCATION_FILE
|
||||||
|
@ -52,4 +52,29 @@ EOF
|
||||||
rm -rf otto-test-repository
|
rm -rf otto-test-repository
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test_clone_into() {
|
||||||
|
cat > $INVOCATION_FILE<<EOF
|
||||||
|
{
|
||||||
|
"configuration" : {
|
||||||
|
"pipeline" : "2265b5d0-1f70-46de-bf50-f1050e9fac9a",
|
||||||
|
"uuid" : "5599cffb-f23a-4e0f-a0b9-f74654641b2b",
|
||||||
|
"ipc" : "unix:///dev/null",
|
||||||
|
"endpoints" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parameters" : {
|
||||||
|
"url" : "https://git.brokenco.de/rtyler/otto-test-repository",
|
||||||
|
"into" : "."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkdir work-dir
|
||||||
|
pushd work-dir
|
||||||
|
output=$(git-step $INVOCATION_FILE)
|
||||||
|
assertTrue "step should be able to clone the given url: ${output}" $?
|
||||||
|
assertTrue "step should have cloned the repo into $PWD" "test -f README.adoc"
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
. $(dirname $0)/../../../contrib/shunit2/shunit2
|
. $(dirname $0)/../../../contrib/shunit2/shunit2
|
||||||
|
|
Loading…
Reference in New Issue