func deleteRun()

in commands/project/delete/delete.go [61:118]


func deleteRun(opts *DeleteOpts) error {
	labClient, err := opts.Lab()
	if err != nil {
		return err
	}

	baseRepo, baseRepoErr := opts.BaseRepo() // don't handle error yet
	if len(opts.Args) == 1 {
		opts.RepoName = opts.Args[0]

		if !strings.ContainsRune(opts.RepoName, '/') {
			namespace := ""
			if baseRepoErr == nil {
				namespace = baseRepo.RepoOwner()
			} else {
				currentUser, err := api.CurrentUser(labClient)
				if err != nil {
					return err
				}
				namespace = currentUser.Username
			}
			opts.RepoName = fmt.Sprintf("%s/%s", namespace, opts.RepoName)
		}
	} else {
		if baseRepoErr != nil {
			return baseRepoErr
		}
		opts.RepoName = baseRepo.FullName()
	}

	if !opts.ForceDelete && !opts.IO.PromptEnabled() {
		return &cmdutils.FlagError{Err: fmt.Errorf("--yes or -y flag is required when not running interactively.")}
	}

	if !opts.ForceDelete && opts.IO.PromptEnabled() {
		fmt.Fprintf(opts.IO.StdErr, "This action will permanently delete %s immediately, including its repositories and all content: issues and merge requests.\n\n", opts.RepoName)
		err = prompt.Confirm(&opts.ForceDelete, fmt.Sprintf("Are you ABSOLUTELY SURE you wish to delete %s?", opts.RepoName), false)
		if err != nil {
			return err
		}
	}

	if opts.ForceDelete {
		if opts.IO.IsErrTTY && opts.IO.IsaTTY {
			fmt.Fprintf(opts.IO.StdErr, "- Deleting project %s\n", opts.RepoName)
		}
		resp, err := api.DeleteProject(labClient, opts.RepoName)
		if err != nil && resp == nil {
			return err
		}
		if resp.StatusCode == http.StatusUnauthorized {
			return fmt.Errorf("you are not authorized to delete %s.\nCheck your token used for glab. Make sure it has the `api` and `write_repository` scopes enabled.", opts.RepoName)
		}
		return err
	}
	fmt.Fprintln(opts.IO.StdErr, "aborted by user")
	return nil
}