import.go

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