import.go

 1package cmd
 2
 3import (
 4	"errors"
 5
 6	"github.com/charmbracelet/soft-serve/pkg/backend"
 7	"github.com/charmbracelet/soft-serve/pkg/proto"
 8	"github.com/charmbracelet/soft-serve/pkg/task"
 9	"github.com/spf13/cobra"
10)
11
12// importCommand is the command for creating a new repository.
13func importCommand() *cobra.Command {
14	var private bool
15	var description string
16	var projectName string
17	var mirror bool
18	var hidden bool
19	var lfs bool
20	var lfsEndpoint string
21
22	cmd := &cobra.Command{
23		Use:               "import REPOSITORY REMOTE",
24		Short:             "Import a new repository from remote",
25		Args:              cobra.ExactArgs(2),
26		PersistentPreRunE: checkIfCollab,
27		RunE: func(cmd *cobra.Command, args []string) error {
28			ctx := cmd.Context()
29			be := backend.FromContext(ctx)
30			user := proto.UserFromContext(ctx)
31			name := args[0]
32			remote := args[1]
33			if _, err := be.ImportRepository(ctx, name, user, remote, proto.RepositoryOptions{
34				Private:     private,
35				Description: description,
36				ProjectName: projectName,
37				Mirror:      mirror,
38				Hidden:      hidden,
39				LFS:         lfs,
40				LFSEndpoint: lfsEndpoint,
41			}); err != nil {
42				if errors.Is(err, task.ErrAlreadyStarted) {
43					return errors.New("import already in progress")
44				}
45
46				return err //nolint:wrapcheck
47			}
48
49			return nil
50		},
51	}
52
53	cmd.Flags().BoolVarP(&lfs, "lfs", "", false, "pull Git LFS objects")
54	cmd.Flags().StringVarP(&lfsEndpoint, "lfs-endpoint", "", "", "set the Git LFS endpoint")
55	cmd.Flags().BoolVarP(&mirror, "mirror", "m", false, "mirror the repository")
56	cmd.Flags().BoolVarP(&private, "private", "p", false, "make the repository private")
57	cmd.Flags().StringVarP(&description, "description", "d", "", "set the repository description")
58	cmd.Flags().StringVarP(&projectName, "name", "n", "", "set the project name")
59	cmd.Flags().BoolVarP(&hidden, "hidden", "H", false, "hide the repository from the UI")
60
61	return cmd
62}