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}