Fix pulling docs from remote branch
Currently airshipctl is not able to checkout remote branch due to using simple branch reference name instead of remote one. This patch fixes appropriate problem and allows user to specify what kind of branch to use - local or remote one (since reference name will be different in these scenarios). Change-Id: I1fea29f84097b9e7160597003d0e8961f4d3aca6 Signed-off-by: Ruslan Aliev <raliev@mirantis.com>
This commit is contained in:
parent
78e0e81bc0
commit
0e44b580f0
@ -35,6 +35,10 @@ const (
|
|||||||
HTTPBasic = "http-basic"
|
HTTPBasic = "http-basic"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// remoteName is a remote name that airshipctl work with during document pull
|
||||||
|
// TODO (raliev) consider make this variable configurable via repoCheckout options
|
||||||
|
var remoteName = git.DefaultRemoteName
|
||||||
|
|
||||||
// Repository struct holds the information for the remote sources of manifest yaml documents.
|
// Repository struct holds the information for the remote sources of manifest yaml documents.
|
||||||
// Information such as location, authentication info,
|
// Information such as location, authentication info,
|
||||||
// as well as details of what to get such as branch, tag, commit it, etc.
|
// as well as details of what to get such as branch, tag, commit it, etc.
|
||||||
@ -80,6 +84,8 @@ type RepoCheckout struct {
|
|||||||
RemoteRef string `json:"remoteRef,omitempty"`
|
RemoteRef string `json:"remoteRef,omitempty"`
|
||||||
// ForceCheckout is a boolean to indicate whether to use the `--force` option when checking out
|
// ForceCheckout is a boolean to indicate whether to use the `--force` option when checking out
|
||||||
ForceCheckout bool `json:"force"`
|
ForceCheckout bool `json:"force"`
|
||||||
|
// LocalBranch is a boolean to indicate whether the Branch is local one. False by default
|
||||||
|
LocalBranch bool `json:"localBranch"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RepoCheckout methods
|
// RepoCheckout methods
|
||||||
@ -223,7 +229,11 @@ func (repo *Repository) ToCheckoutOptions() *git.CheckoutOptions {
|
|||||||
co.Force = repo.CheckoutOptions.ForceCheckout
|
co.Force = repo.CheckoutOptions.ForceCheckout
|
||||||
switch {
|
switch {
|
||||||
case repo.CheckoutOptions.Branch != "":
|
case repo.CheckoutOptions.Branch != "":
|
||||||
co.Branch = plumbing.NewBranchReferenceName(repo.CheckoutOptions.Branch)
|
if repo.CheckoutOptions.LocalBranch {
|
||||||
|
co.Branch = plumbing.NewBranchReferenceName(repo.CheckoutOptions.Branch)
|
||||||
|
} else {
|
||||||
|
co.Branch = plumbing.NewRemoteReferenceName(remoteName, repo.CheckoutOptions.Branch)
|
||||||
|
}
|
||||||
case repo.CheckoutOptions.Tag != "":
|
case repo.CheckoutOptions.Tag != "":
|
||||||
co.Branch = plumbing.NewTagReferenceName(repo.CheckoutOptions.Tag)
|
co.Branch = plumbing.NewTagReferenceName(repo.CheckoutOptions.Tag)
|
||||||
case repo.CheckoutOptions.CommitHash != "":
|
case repo.CheckoutOptions.CommitHash != "":
|
||||||
@ -238,8 +248,9 @@ func (repo *Repository) ToCheckoutOptions() *git.CheckoutOptions {
|
|||||||
// CloneOptions describes how a clone should be performed
|
// CloneOptions describes how a clone should be performed
|
||||||
func (repo *Repository) ToCloneOptions(auth transport.AuthMethod) *git.CloneOptions {
|
func (repo *Repository) ToCloneOptions(auth transport.AuthMethod) *git.CloneOptions {
|
||||||
return &git.CloneOptions{
|
return &git.CloneOptions{
|
||||||
Auth: auth,
|
Auth: auth,
|
||||||
URL: repo.URLString,
|
URL: repo.URLString,
|
||||||
|
RemoteName: remoteName,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
pkg/config/testdata/config-string.yaml
vendored
1
pkg/config/testdata/config-string.yaml
vendored
@ -28,6 +28,7 @@ manifests:
|
|||||||
branch: ""
|
branch: ""
|
||||||
commitHash: ""
|
commitHash: ""
|
||||||
force: false
|
force: false
|
||||||
|
localBranch: false
|
||||||
tag: v1.0.1
|
tag: v1.0.1
|
||||||
url: http://dummy.url.com/manifests.git
|
url: http://dummy.url.com/manifests.git
|
||||||
targetPath: /var/tmp/
|
targetPath: /var/tmp/
|
||||||
|
1
pkg/config/testdata/manifest-string.yaml
vendored
1
pkg/config/testdata/manifest-string.yaml
vendored
@ -9,6 +9,7 @@ repositories:
|
|||||||
branch: ""
|
branch: ""
|
||||||
commitHash: ""
|
commitHash: ""
|
||||||
force: false
|
force: false
|
||||||
|
localBranch: false
|
||||||
tag: v1.0.1
|
tag: v1.0.1
|
||||||
url: http://dummy.url.com/manifests.git
|
url: http://dummy.url.com/manifests.git
|
||||||
targetPath: /var/tmp/
|
targetPath: /var/tmp/
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
branch: ""
|
branch: ""
|
||||||
commitHash: ""
|
commitHash: ""
|
||||||
force: false
|
force: false
|
||||||
|
localBranch: false
|
||||||
tag: v1.0.1
|
tag: v1.0.1
|
||||||
|
1
pkg/config/testdata/repository-string.yaml
vendored
1
pkg/config/testdata/repository-string.yaml
vendored
@ -5,5 +5,6 @@ checkout:
|
|||||||
branch: ""
|
branch: ""
|
||||||
commitHash: ""
|
commitHash: ""
|
||||||
force: false
|
force: false
|
||||||
|
localBranch: false
|
||||||
tag: v1.0.1
|
tag: v1.0.1
|
||||||
url: http://dummy.url.com/manifests.git
|
url: http://dummy.url.com/manifests.git
|
||||||
|
@ -73,6 +73,7 @@ func TestPull(t *testing.T) {
|
|||||||
name: "TestCloneRepositoriesValidOpts",
|
name: "TestCloneRepositoriesValidOpts",
|
||||||
checkoutOpts: &config.RepoCheckout{
|
checkoutOpts: &config.RepoCheckout{
|
||||||
Branch: "master",
|
Branch: "master",
|
||||||
|
LocalBranch: true,
|
||||||
ForceCheckout: false,
|
ForceCheckout: false,
|
||||||
},
|
},
|
||||||
error: nil,
|
error: nil,
|
||||||
|
Loading…
Reference in New Issue
Block a user