From 61ed8d30b754e02314098bc553a785c1dc2b53dd Mon Sep 17 00:00:00 2001 From: Stanislav Egorov Date: Fri, 28 Aug 2020 12:24:24 -0700 Subject: [PATCH] Fixed TODO in document/repo package Implemented strongly-typed errors for document/repo Change-Id: I572489b4c48ff4cd75a4e2f9a6b1d27ad1f840dd --- pkg/document/repo/errors.go | 36 ++++++++++++++++++++++++++++++++++++ pkg/document/repo/repo.go | 15 +++------------ 2 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 pkg/document/repo/errors.go diff --git a/pkg/document/repo/errors.go b/pkg/document/repo/errors.go new file mode 100644 index 000000000..41167fac2 --- /dev/null +++ b/pkg/document/repo/errors.go @@ -0,0 +1,36 @@ +/* + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package repo + +import ( + "fmt" +) + +// ErrNoOpenRepo returned if repository is not opened by git driver +type ErrNoOpenRepo struct { +} + +// ErrParseURL returned if there is error when parsing URL +type ErrParseURL struct { + URL string +} + +func (e ErrNoOpenRepo) Error() string { + return fmt.Sprintf("no open repository is stored") +} + +func (e ErrParseURL) Error() string { + return fmt.Sprintf("could not get target directory from URL: %s", e.URL) +} diff --git a/pkg/document/repo/repo.go b/pkg/document/repo/repo.go index f660d77c4..3664d386d 100644 --- a/pkg/document/repo/repo.go +++ b/pkg/document/repo/repo.go @@ -15,7 +15,6 @@ package repo import ( - "errors" "fmt" "path/filepath" @@ -32,14 +31,6 @@ import ( "opendev.org/airship/airshipctl/pkg/util" ) -//TODO(sy495p): Switch to strongly-typed errors in this file - -// variables for repository errors -var ( - ErrNoOpenRepo = errors.New("no open repository is stored") - ErrCantParseURL = errors.New("could not get target directory from url") -) - // OptionsBuilder interface provides specification for a repository implementation type OptionsBuilder interface { ToAuth() (transport.AuthMethod, error) @@ -62,7 +53,7 @@ type Repository struct { func NewRepository(basePath string, builder OptionsBuilder) (*Repository, error) { dirName := util.GitDirNameFromURL(builder.URL()) if dirName == "" { - return nil, fmt.Errorf("URL: %s, original error: %w", builder.URL(), ErrCantParseURL) + return nil, ErrParseURL{URL: builder.URL()} } fs := osfs.New(filepath.Join(basePath, dirName)) @@ -91,7 +82,7 @@ func storerFromFs(fs billy.Filesystem) (storage.Storer, error) { func (repo *Repository) Update(force bool) error { log.Debugf("Updating repository %s", repo.Name) if !repo.Driver.IsOpen() { - return ErrNoOpenRepo + return ErrNoOpenRepo{} } auth, err := repo.ToAuth() if err != nil { @@ -107,7 +98,7 @@ func (repo *Repository) Update(force bool) error { // Checkout git repository, ToCheckoutOptions method will be used go get CheckoutOptions func (repo *Repository) Checkout(enforce bool) error { if !repo.Driver.IsOpen() { - return ErrNoOpenRepo + return ErrNoOpenRepo{} } co := repo.ToCheckoutOptions(enforce) var branchHash string