Fixed TODO in document/repo package

Implemented strongly-typed errors for document/repo

Change-Id: I572489b4c48ff4cd75a4e2f9a6b1d27ad1f840dd
This commit is contained in:
Stanislav Egorov 2020-08-28 12:24:24 -07:00
parent 61633d30fc
commit 61ed8d30b7
2 changed files with 39 additions and 12 deletions

View File

@ -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)
}

View File

@ -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