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 }