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}