github.com/drone/runner-go@v1.12.0/internal/clone.go (about)

     1  // Copyright 2019 Drone.IO Inc. All rights reserved.
     2  // Use of this source code is governed by the Polyform License
     3  // that can be found in the LICENSE file.
     4  
     5  package internal
     6  
     7  import "github.com/drone/drone-go/drone"
     8  
     9  // CloneRepo returns a copy of the Repository.
    10  func CloneRepo(src *drone.Repo) *drone.Repo {
    11  	dst := new(drone.Repo)
    12  	*dst = *src
    13  	return dst
    14  }
    15  
    16  // CloneBuild returns a copy of the Build.
    17  func CloneBuild(src *drone.Build) *drone.Build {
    18  	dst := new(drone.Build)
    19  	*dst = *src
    20  	dst.Stages = append(src.Stages[:0:0], src.Stages...)
    21  	dst.Params = map[string]string{}
    22  	for k, v := range src.Params {
    23  		dst.Params[k] = v
    24  	}
    25  	for i, v := range src.Stages {
    26  		dst.Stages[i] = CloneStage(v)
    27  	}
    28  	return dst
    29  }
    30  
    31  // CloneStage returns a copy of the Stage.
    32  func CloneStage(src *drone.Stage) *drone.Stage {
    33  	dst := new(drone.Stage)
    34  	*dst = *src
    35  	dst.DependsOn = append(src.DependsOn[:0:0], src.DependsOn...)
    36  	dst.Steps = append(src.Steps[:0:0], src.Steps...)
    37  	dst.Labels = map[string]string{}
    38  	for k, v := range src.Labels {
    39  		dst.Labels[k] = v
    40  	}
    41  	for i, v := range src.Steps {
    42  		dst.Steps[i] = CloneStep(v)
    43  	}
    44  	return dst
    45  }
    46  
    47  // CloneStep returns a copy of the Step.
    48  func CloneStep(src *drone.Step) *drone.Step {
    49  	dst := new(drone.Step)
    50  	*dst = *src
    51  	return dst
    52  }