Skip to content

Commit

Permalink
test/builder.Step name is optional
Browse files Browse the repository at this point in the history
Allow the name of a tb.Step to be optional. A name can be specified by
using the StepOp, tb.StepName(), e.g.,
tb.Step("image", tb.StepName("step-name"))

Fixes #1823
  • Loading branch information
fraenkel authored and tekton-robot committed Jan 20, 2020
1 parent 75917cb commit b859371
Show file tree
Hide file tree
Showing 25 changed files with 85 additions and 81 deletions.
4 changes: 2 additions & 2 deletions pkg/reconciler/pipelinerun/pipelinerun_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ func TestReconcile_PipelineSpecTaskSpec(t *testing.T) {
tb.TaskRunLabel("tekton.dev/pipeline", "test-pipeline"),
tb.TaskRunLabel("tekton.dev/pipelineRun", "test-pipeline-run-success"),
tb.TaskRunLabel(pipeline.GroupName+pipeline.PipelineTaskLabelKey, "unit-test-task-spec"),
tb.TaskRunSpec(tb.TaskRunTaskSpec(tb.Step("mystep", "myimage"))),
tb.TaskRunSpec(tb.TaskRunTaskSpec(tb.Step("myimage", tb.StepName("mystep")))),
)

// ignore IgnoreUnexported ignore both after and before steps fields
Expand Down Expand Up @@ -1610,7 +1610,7 @@ func makeExpectedTr(condName, ccName string, labels map[string]string) *v1alpha1
tb.TaskRunAnnotation("PipelineRunAnnotation", "PipelineRunValue"),
tb.TaskRunSpec(
tb.TaskRunTaskSpec(
tb.Step("condition-check-"+condName, "foo", tb.StepArgs("bar")),
tb.Step("foo", tb.StepName("condition-check-"+condName), tb.StepArgs("bar")),
tb.TaskInputs(),
),
tb.TaskRunServiceAccountName("test-sa"),
Expand Down
12 changes: 6 additions & 6 deletions pkg/reconciler/taskrun/taskrun_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ var (
cloudEventTarget1 = "https://foo"
cloudEventTarget2 = "https://bar"

simpleStep = tb.Step("simple-step", "foo", tb.StepCommand("/mycmd"))
simpleStep = tb.Step("foo", tb.StepName("simple-step"), tb.StepCommand("/mycmd"))
simpleTask = tb.Task("test-task", "foo", tb.TaskSpec(simpleStep))
clustertask = tb.ClusterTask("test-cluster-task", tb.ClusterTaskSpec(simpleStep))

Expand All @@ -97,7 +97,7 @@ var (
tb.TaskOutputs(tb.OutputsResource(gitResource.Name, v1alpha1.PipelineResourceTypeGit)),
))

saTask = tb.Task("test-with-sa", "foo", tb.TaskSpec(tb.Step("sa-step", "foo", tb.StepCommand("/mycmd"))))
saTask = tb.Task("test-with-sa", "foo", tb.TaskSpec(tb.Step("foo", tb.StepName("sa-step"), tb.StepCommand("/mycmd"))))

templatedTask = tb.Task("test-task-with-substitution", "foo", tb.TaskSpec(
tb.TaskInputs(
Expand All @@ -107,13 +107,13 @@ var (
tb.InputsParamSpec("configmapname", v1alpha1.ParamTypeString),
),
tb.TaskOutputs(tb.OutputsResource("myimage", v1alpha1.PipelineResourceTypeImage)),
tb.Step("mycontainer", "myimage", tb.StepCommand("/mycmd"), tb.StepArgs(
tb.Step("myimage", tb.StepName("mycontainer"), tb.StepCommand("/mycmd"), tb.StepArgs(
"--my-arg=$(inputs.params.myarg)",
"--my-arg-with-default=$(inputs.params.myarghasdefault)",
"--my-arg-with-default2=$(inputs.params.myarghasdefault2)",
"--my-additional-arg=$(outputs.resources.myimage.url)",
)),
tb.Step("myothercontainer", "myotherimage", tb.StepCommand("/mycmd"), tb.StepArgs(
tb.Step("myotherimage", tb.StepName("myothercontainer"), tb.StepCommand("/mycmd"), tb.StepArgs(
"--my-other-arg=$(inputs.resources.workspace.url)",
)),
tb.TaskVolume("volume-configmap", tb.VolumeSource(corev1.VolumeSource{
Expand Down Expand Up @@ -461,7 +461,7 @@ func TestReconcile(t *testing.T) {
tb.InputsResource("workspace", v1alpha1.PipelineResourceTypeGit),
tb.InputsParamSpec("myarg", v1alpha1.ParamTypeString, tb.ParamSpecDefault("mydefault")),
),
tb.Step("mycontainer", "myimage", tb.StepCommand("/mycmd"),
tb.Step("myimage", tb.StepName("mycontainer"), tb.StepCommand("/mycmd"),
tb.StepArgs("--my-arg=$(inputs.params.myarg)"),
),
),
Expand All @@ -483,7 +483,7 @@ func TestReconcile(t *testing.T) {
tb.TaskRunTaskSpec(
tb.TaskInputs(
tb.InputsResource("workspace", v1alpha1.PipelineResourceTypeGit)),
tb.Step("mystep", "ubuntu", tb.StepCommand("/mycmd")),
tb.Step("ubuntu", tb.StepName("mystep"), tb.StepCommand("/mycmd")),
),
))

Expand Down
8 changes: 4 additions & 4 deletions pkg/reconciler/taskrun/validate_resources_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (
func TestValidateResolvedTaskResources_ValidResources(t *testing.T) {
rtr := tb.ResolvedTaskResources(
tb.ResolvedTaskResourcesTaskSpec(
tb.Step("mystep", "myimage", tb.StepCommand("mycmd")),
tb.Step("myimage", tb.StepCommand("mycmd")),
tb.TaskInputs(
tb.InputsResource("resource-to-build", v1alpha1.PipelineResourceTypeGit),
tb.InputsResource("optional-resource-to-build", v1alpha1.PipelineResourceTypeGit, tb.ResourceOptional(true)),
Expand Down Expand Up @@ -59,7 +59,7 @@ func TestValidateResolvedTaskResources_ValidResources(t *testing.T) {

func TestValidateResolvedTaskResources_ValidParams(t *testing.T) {
rtr := tb.ResolvedTaskResources(tb.ResolvedTaskResourcesTaskSpec(
tb.Step("mystep", "myimage", tb.StepCommand("mycmd")),
tb.Step("myimage", tb.StepCommand("mycmd")),
tb.TaskInputs(tb.InputsParamSpec("foo", v1alpha1.ParamTypeString), tb.InputsParamSpec("bar", v1alpha1.ParamTypeString)),
))
p := []v1alpha1.Param{{
Expand All @@ -82,7 +82,7 @@ func TestValidateResolvedTaskResources_InvalidParams(t *testing.T) {
}{{
name: "missing-params",
rtr: tb.ResolvedTaskResources(tb.ResolvedTaskResourcesTaskSpec(
tb.Step("mystep", "myimage", tb.StepCommand("mycmd")),
tb.Step("myimage", tb.StepCommand("mycmd")),
tb.TaskInputs(tb.InputsParamSpec("foo", v1alpha1.ParamTypeString)),
)),
params: []v1alpha1.Param{{
Expand All @@ -92,7 +92,7 @@ func TestValidateResolvedTaskResources_InvalidParams(t *testing.T) {
}, {
name: "missing-params",
rtr: tb.ResolvedTaskResources(tb.ResolvedTaskResourcesTaskSpec(
tb.Step("mystep", "myimage", tb.StepCommand("mycmd")),
tb.Step("myimage", tb.StepCommand("mycmd")),
tb.TaskInputs(tb.InputsParamSpec("foo", v1alpha1.ParamTypeString)),
)),
params: []v1alpha1.Param{{
Expand Down
2 changes: 1 addition & 1 deletion pkg/reconciler/timeout_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import (

var (
testNs = "foo"
simpleStep = tb.Step("simple-step", testNs, tb.StepCommand("/mycmd"))
simpleStep = tb.Step(testNs, tb.StepCommand("/mycmd"))
simpleTask = tb.Task("test-task", testNs, tb.TaskSpec(simpleStep))
)

Expand Down
10 changes: 5 additions & 5 deletions test/artifact_bucket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func TestStorageBucketPipelineRun(t *testing.T) {
SecretName: bucketSecretName,
},
})),
tb.Step("step1", "google/cloud-sdk:alpine",
tb.Step("google/cloud-sdk:alpine", tb.StepName("step1"),
tb.StepCommand("/bin/bash"),
tb.StepArgs("-c", fmt.Sprintf("gcloud auth activate-service-account --key-file /var/secret/bucket-secret/bucket-secret-key && gsutil mb gs://%s", bucketName)),
tb.StepVolumeMount("bucket-secret-volume", fmt.Sprintf("/var/secret/%s", bucketSecretName)),
Expand Down Expand Up @@ -132,10 +132,10 @@ func TestStorageBucketPipelineRun(t *testing.T) {
addFileTask := tb.Task(addFileTaskName, namespace, tb.TaskSpec(
tb.TaskInputs(tb.InputsResource(helloworldResourceName, v1alpha1.PipelineResourceTypeGit)),
tb.TaskOutputs(tb.OutputsResource(helloworldResourceName, v1alpha1.PipelineResourceTypeGit)),
tb.Step("addfile", "ubuntu", tb.StepCommand("/bin/bash"),
tb.Step("ubuntu", tb.StepName("addfile"), tb.StepCommand("/bin/bash"),
tb.StepArgs("-c", "'#!/bin/bash\necho hello' > /workspace/helloworldgit/newfile"),
),
tb.Step("make-executable", "ubuntu", tb.StepCommand("chmod"),
tb.Step("ubuntu", tb.StepName("make-executable"), tb.StepCommand("chmod"),
tb.StepArgs("+x", "/workspace/helloworldgit/newfile")),
))
if _, err := c.TaskClient.Create(addFileTask); err != nil {
Expand All @@ -145,7 +145,7 @@ func TestStorageBucketPipelineRun(t *testing.T) {
t.Logf("Creating Task %s", runFileTaskName)
readFileTask := tb.Task(runFileTaskName, namespace, tb.TaskSpec(
tb.TaskInputs(tb.InputsResource(helloworldResourceName, v1alpha1.PipelineResourceTypeGit)),
tb.Step("runfile", "ubuntu", tb.StepCommand("/workspace/helloworld/newfile")),
tb.Step("ubuntu", tb.StepName("runfile"), tb.StepCommand("/workspace/helloworld/newfile")),
))
if _, err := c.TaskClient.Create(readFileTask); err != nil {
t.Fatalf("Failed to create Task `%s`: %s", runFileTaskName, err)
Expand Down Expand Up @@ -238,7 +238,7 @@ func runTaskToDeleteBucket(c *clients, t *testing.T, namespace, bucketName, buck
SecretName: bucketSecretName,
},
})),
tb.Step("step1", "google/cloud-sdk:alpine",
tb.Step("google/cloud-sdk:alpine", tb.StepName("step1"),
tb.StepCommand("/bin/bash"),
tb.StepArgs("-c", fmt.Sprintf("gcloud auth activate-service-account --key-file /var/secret/bucket-secret/bucket-secret-key && gsutil rm -r gs://%s", bucketName)),
tb.StepVolumeMount("bucket-secret-volume", fmt.Sprintf("/var/secret/%s", bucketSecretName)),
Expand Down
8 changes: 4 additions & 4 deletions test/builder/examples_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ var t *testing.T

func ExampleTask() {
// You can declare re-usable modifiers
myStep := tb.Step("my-step", "myimage")
myStep := tb.Step("myimage")
// … and use them in a Task definition
myTask := tb.Task("my-task", "namespace", tb.TaskSpec(
tb.Step("simple-step", "myotherimage", tb.StepCommand("/mycmd")),
tb.Step("myotherimage", tb.StepCommand("/mycmd")),
myStep,
))
// … and another one.
Expand All @@ -58,7 +58,7 @@ func ExampleTask() {

func ExampleClusterTask() {
myClusterTask := tb.ClusterTask("my-task", tb.ClusterTaskSpec(
tb.Step("simple-step", "myotherimage", tb.StepCommand("/mycmd")),
tb.Step("myotherimage", tb.StepCommand("/mycmd")),
))
expectedClusterTask := &v1alpha1.Task{
// […]
Expand All @@ -85,7 +85,7 @@ func ExampleTaskRun() {
tb.InputsResource("workspace", v1alpha1.PipelineResourceTypeGit),
tb.InputsParamSpec("myarg", v1alpha1.ParamTypeString, tb.ParamSpecDefault("mydefault")),
),
tb.Step("mycontainer", "myimage", tb.StepCommand("/mycmd"),
tb.Step("myimage", tb.StepCommand("/mycmd"),
tb.StepArgs("--my-arg=$(inputs.params.myarg)"),
),
),
Expand Down
7 changes: 7 additions & 0 deletions test/builder/step.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ import (
// StepOp is an operation which modifies a Container struct.
type StepOp func(*v1alpha1.Step)

// StepName sets the name of the step.
func StepName(name string) StepOp {
return func(step *v1alpha1.Step) {
step.Name = name
}
}

// StepCommand sets the command to the Container (step in this case).
func StepCommand(args ...string) StepOp {
return func(step *v1alpha1.Step) {
Expand Down
3 changes: 1 addition & 2 deletions test/builder/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,13 +138,12 @@ func TaskSpec(ops ...TaskSpecOp) TaskOp {

// Step adds a step with the specified name and image to the TaskSpec.
// Any number of Container modifier can be passed to transform it.
func Step(name, image string, ops ...StepOp) TaskSpecOp {
func Step(image string, ops ...StepOp) TaskSpecOp {
return func(spec *v1alpha1.TaskSpec) {
if spec.Steps == nil {
spec.Steps = []v1alpha1.Step{}
}
step := v1alpha1.Step{Container: corev1.Container{
Name: name,
Image: image,
}}
for _, op := range ops {
Expand Down
14 changes: 5 additions & 9 deletions test/builder/task_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ func TestTask(t *testing.T) {
tb.OutputsResource("myotherimage", v1alpha1.PipelineResourceTypeImage),
tb.OutputsResource("myoptionalimage", v1alpha1.PipelineResourceTypeImage, tb.ResourceOptional(true)),
),
tb.Step("mycontainer", "myimage", tb.StepCommand("/mycmd"), tb.StepArgs(
tb.Step("myimage", tb.StepName("mycontainer"), tb.StepCommand("/mycmd"), tb.StepArgs(
"--my-other-arg=$(inputs.resources.workspace.url)",
)),
tb.Step("mycontainer2", "myimage2", tb.StepScript("echo foo")),
tb.Step("myimage2", tb.StepScript("echo foo")),
tb.TaskVolume("foo", tb.VolumeSource(corev1.VolumeSource{
HostPath: &corev1.HostPathVolumeSource{Path: "/foo/bar"},
})),
Expand All @@ -73,7 +73,6 @@ func TestTask(t *testing.T) {
Command: []string{"/mycmd"},
Args: []string{"--my-other-arg=$(inputs.resources.workspace.url)"},
}}, {Script: "echo foo", Container: corev1.Container{
Name: "mycontainer2",
Image: "myimage2",
}}},
Inputs: &v1alpha1.Inputs{
Expand Down Expand Up @@ -140,15 +139,14 @@ func TestTask(t *testing.T) {

func TestClusterTask(t *testing.T) {
task := tb.ClusterTask("test-clustertask", tb.ClusterTaskSpec(
tb.Step("mycontainer", "myimage", tb.StepCommand("/mycmd"), tb.StepArgs(
tb.Step("myimage", tb.StepCommand("/mycmd"), tb.StepArgs(
"--my-other-arg=$(inputs.resources.workspace.url)",
)),
))
expectedTask := &v1alpha1.ClusterTask{
ObjectMeta: metav1.ObjectMeta{Name: "test-clustertask"},
Spec: v1alpha1.TaskSpec{
Steps: []v1alpha1.Step{{Container: corev1.Container{
Name: "mycontainer",
Image: "myimage",
Command: []string{"/mycmd"},
Args: []string{"--my-other-arg=$(inputs.resources.workspace.url)"},
Expand Down Expand Up @@ -295,7 +293,7 @@ func TestTaskRunWithTaskRef(t *testing.T) {
func TestTaskRunWithTaskSpec(t *testing.T) {
taskRun := tb.TaskRun("test-taskrun", "foo", tb.TaskRunSpec(
tb.TaskRunTaskSpec(
tb.Step("step", "image", tb.StepCommand("/mycmd")),
tb.Step("image", tb.StepCommand("/mycmd")),
tb.TaskInputs(tb.InputsResource("workspace", v1alpha1.PipelineResourceTypeGit, tb.ResourceOptional(true))),
),
tb.TaskRunServiceAccountName("sa"),
Expand All @@ -310,7 +308,6 @@ func TestTaskRunWithTaskSpec(t *testing.T) {
Spec: v1alpha1.TaskRunSpec{
TaskSpec: &v1alpha1.TaskSpec{
Steps: []v1alpha1.Step{{Container: corev1.Container{
Name: "step",
Image: "image",
Command: []string{"/mycmd"},
}}},
Expand All @@ -337,15 +334,14 @@ func TestTaskRunWithTaskSpec(t *testing.T) {
func TestResolvedTaskResources(t *testing.T) {
resolvedTaskResources := tb.ResolvedTaskResources(
tb.ResolvedTaskResourcesTaskSpec(
tb.Step("step", "image", tb.StepCommand("/mycmd")),
tb.Step("image", tb.StepCommand("/mycmd")),
),
tb.ResolvedTaskResourcesInputs("foo", tb.PipelineResource("bar", "baz")),
tb.ResolvedTaskResourcesOutputs("qux", tb.PipelineResource("quux", "quuz")),
)
expectedResolvedTaskResources := &resources.ResolvedTaskResources{
TaskSpec: &v1alpha1.TaskSpec{
Steps: []v1alpha1.Step{{Container: corev1.Container{
Name: "step",
Image: "image",
Command: []string{"/mycmd"},
}}},
Expand Down
2 changes: 1 addition & 1 deletion test/cancel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func TestTaskRunPipelineRunCancel(t *testing.T) {

t.Logf("Creating Task in namespace %s", namespace)
task := tb.Task("banana", namespace, tb.TaskSpec(
tb.Step("foo", "ubuntu", tb.StepCommand("/bin/bash"), tb.StepArgs("-c", "sleep 5000")),
tb.Step("ubuntu", tb.StepCommand("/bin/bash"), tb.StepArgs("-c", "sleep 5000")),
))
if _, err := c.TaskClient.Create(task); err != nil {
t.Fatalf("Failed to create Task `banana`: %s", err)
Expand Down
7 changes: 4 additions & 3 deletions test/cluster_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,14 @@ func getClusterResourceTask(namespace, name, configName string) *v1alpha1.Task {
},
},
})),
tb.Step("check-file-existence", "ubuntu",
tb.Step("ubuntu", tb.StepName("check-file-existence"),
tb.StepCommand("cat"), tb.StepArgs("/workspace/helloworld-cluster/kubeconfig"),
),
tb.Step("check-config-data", "ubuntu", tb.StepCommand("cat"), tb.StepArgs("/config/test.data"),
tb.Step("ubuntu", tb.StepName("check-config-data"),
tb.StepCommand("cat"), tb.StepArgs("/config/test.data"),
tb.StepVolumeMount("config-vol", "/config"),
),
tb.Step("check-contents", "ubuntu",
tb.Step("ubuntu", tb.StepName("check-contents"),
tb.StepCommand("bash"), tb.StepArgs("-c", "cmp -b /workspace/helloworld-cluster/kubeconfig /config/test.data"),
tb.StepVolumeMount("config-vol", "/config"),
),
Expand Down
4 changes: 2 additions & 2 deletions test/dag_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ func TestDAGPipelineRun(t *testing.T) {
tb.InputsParamSpec("text", v1alpha1.ParamTypeString, tb.ParamSpecDescription("The text that should be echoed")),
),
tb.TaskOutputs(tb.OutputsResource("repo", v1alpha1.PipelineResourceTypeGit)),
tb.Step("echo-text", "busybox", tb.StepCommand("echo"), tb.StepArgs("$(inputs.params.text)")),
tb.Step("ln", "busybox", tb.StepCommand("ln"), tb.StepArgs("-s", "$(inputs.resources.repo.path)", "$(outputs.resources.repo.path)")),
tb.Step("busybox", tb.StepCommand("echo"), tb.StepArgs("$(inputs.params.text)")),
tb.Step("busybox", tb.StepCommand("ln"), tb.StepArgs("-s", "$(inputs.resources.repo.path)", "$(outputs.resources.repo.path)")),
))
if _, err := c.TaskClient.Create(echoTask); err != nil {
t.Fatalf("Failed to create echo Task: %s", err)
Expand Down
2 changes: 1 addition & 1 deletion test/duplicate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func TestDuplicatePodTaskRun(t *testing.T) {
t.Logf("Creating taskrun %q.", taskrunName)

taskrun := tb.TaskRun(taskrunName, namespace, tb.TaskRunSpec(
tb.TaskRunTaskSpec(tb.Step("echo", "busybox",
tb.TaskRunTaskSpec(tb.Step("busybox",
tb.StepCommand("/bin/echo"),
tb.StepArgs("simple"),
)),
Expand Down
4 changes: 2 additions & 2 deletions test/embed_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ func getEmbeddedTask(namespace string, args []string) *v1alpha1.Task {
return tb.Task(embedTaskName, namespace,
tb.TaskSpec(
tb.TaskInputs(tb.InputsResource("docs", v1alpha1.PipelineResourceTypeGit)),
tb.Step("read", "ubuntu",
tb.Step("ubuntu",
tb.StepCommand("/bin/bash"),
tb.StepArgs("-c", "cat /workspace/docs/LICENSE"),
),
tb.Step("helloworld-busybox", "busybox", tb.StepCommand(args...)),
tb.Step("busybox", tb.StepCommand(args...)),
))
}

Expand Down
4 changes: 2 additions & 2 deletions test/entrypoint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ func TestEntrypointRunningStepsInOrder(t *testing.T) {

t.Logf("Creating Task and TaskRun in namespace %s", namespace)
task := tb.Task(epTaskName, namespace, tb.TaskSpec(
tb.Step("step1", "ubuntu", tb.StepArgs("-c", "sleep 3 && touch foo")),
tb.Step("step2", "ubuntu", tb.StepArgs("-c", "ls", "foo")),
tb.Step("ubuntu", tb.StepArgs("-c", "sleep 3 && touch foo")),
tb.Step("ubuntu", tb.StepArgs("-c", "ls", "foo")),
))
if _, err := c.TaskClient.Create(task); err != nil {
t.Fatalf("Failed to create Task: %s", err)
Expand Down
2 changes: 1 addition & 1 deletion test/git_checkout_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ func getGitPipelineResource(namespace, revision string) *v1alpha1.PipelineResour
func getGitCheckTask(namespace string) *v1alpha1.Task {
return tb.Task(gitTestTaskName, namespace, tb.TaskSpec(
tb.TaskInputs(tb.InputsResource("gitsource", v1alpha1.PipelineResourceTypeGit)),
tb.Step("git", "alpine/git", tb.StepArgs("--git-dir=/workspace/gitsource/.git", "show")),
tb.Step("alpine/git", tb.StepArgs("--git-dir=/workspace/gitsource/.git", "show")),
))
}

Expand Down
Loading

0 comments on commit b859371

Please sign in to comment.