github.com/jfrog/jfrog-cli-core/v2@v2.51.0/artifactory/commands/repository/delete.go (about)

     1  package repository
     2  
     3  import (
     4  	"path/filepath"
     5  	"strings"
     6  
     7  	rtUtils "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
     8  	"github.com/jfrog/jfrog-cli-core/v2/utils/config"
     9  	"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
    10  	"github.com/jfrog/jfrog-client-go/artifactory"
    11  )
    12  
    13  type RepoDeleteCommand struct {
    14  	serverDetails *config.ServerDetails
    15  	repoPattern   string
    16  	quiet         bool
    17  }
    18  
    19  func NewRepoDeleteCommand() *RepoDeleteCommand {
    20  	return &RepoDeleteCommand{}
    21  }
    22  
    23  func (rdc *RepoDeleteCommand) SetRepoPattern(repoPattern string) *RepoDeleteCommand {
    24  	rdc.repoPattern = repoPattern
    25  	return rdc
    26  }
    27  
    28  func (rdc *RepoDeleteCommand) SetQuiet(quiet bool) *RepoDeleteCommand {
    29  	rdc.quiet = quiet
    30  	return rdc
    31  }
    32  
    33  func (rdc *RepoDeleteCommand) SetServerDetails(serverDetails *config.ServerDetails) *RepoDeleteCommand {
    34  	rdc.serverDetails = serverDetails
    35  	return rdc
    36  }
    37  
    38  func (rdc *RepoDeleteCommand) ServerDetails() (*config.ServerDetails, error) {
    39  	return rdc.serverDetails, nil
    40  }
    41  
    42  func (rdc *RepoDeleteCommand) CommandName() string {
    43  	return "rt_repo_delete"
    44  }
    45  
    46  func (rdc *RepoDeleteCommand) Run() (err error) {
    47  	servicesManager, err := rtUtils.CreateServiceManager(rdc.serverDetails, -1, 0, false)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	// A single repo to be deleted
    53  	if !strings.Contains(rdc.repoPattern, "*") {
    54  		return rdc.deleteRepo(&servicesManager, rdc.repoPattern)
    55  	}
    56  
    57  	// A pattern for the repo name was received
    58  	repos, err := servicesManager.GetAllRepositories()
    59  	if err != nil {
    60  		return err
    61  	}
    62  	for _, repo := range *repos {
    63  		matched, err := filepath.Match(rdc.repoPattern, repo.Key)
    64  		if err != nil {
    65  			return err
    66  		}
    67  		if matched {
    68  			if err := rdc.deleteRepo(&servicesManager, repo.Key); err != nil {
    69  				return err
    70  			}
    71  		}
    72  	}
    73  	return nil
    74  }
    75  
    76  func (rdc *RepoDeleteCommand) deleteRepo(servicesManager *artifactory.ArtifactoryServicesManager, repoKey string) error {
    77  	if !rdc.quiet && !coreutils.AskYesNo("Are you sure you want to permanently delete the repository "+repoKey+" including all of its content?", false) {
    78  		return nil
    79  	}
    80  	return (*servicesManager).DeleteRepository(repoKey)
    81  }