mugit/internal/cli/repo.go(view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
package cli
import (
"context"
"fmt"
"os"
"strings"
securejoin "github.com/cyphar/filepath-securejoin"
"github.com/urfave/cli/v3"
"olexsmir.xyz/mugit/internal/git"
)
func (c *Cli) repoNewAction(ctx context.Context, cmd *cli.Command) error {
name := cmd.StringArg("name")
if name == "" {
return fmt.Errorf("no name provided")
}
name = strings.TrimRight(name, ".git") + ".git"
path, err := securejoin.SecureJoin(c.cfg.Repo.Dir, name)
if err != nil {
return err
}
if _, err := os.Stat(path); err == nil {
return fmt.Errorf("repository already exists: %s", name)
}
if err := git.Init(path); err != nil {
return err
}
mirrorURL := cmd.String("mirror")
if mirrorURL != "" {
if !strings.HasPrefix(mirrorURL, "http") {
return fmt.Errorf("only http and https remotes are supported")
}
repo, err := git.Open(path, "")
if err != nil {
return fmt.Errorf("failed to open repo for mirror setup: %w", err)
}
if err := repo.SetMirrorRemote(mirrorURL); err != nil {
return fmt.Errorf("failed to set mirror remote: %w", err)
}
}
return nil
}
func (c *Cli) repoDescriptionAction(ctx context.Context, cmd *cli.Command) error {
name := cmd.StringArg("name")
if name == "" {
return fmt.Errorf("no name provided")
}
name = strings.TrimRight(name, ".git") + ".git"
repo, err := c.openRepo(name)
if err != nil {
return fmt.Errorf("failed to open repo: %w", err)
}
newDesc := cmd.Args().Get(0)
if newDesc != "" {
if err := repo.SetDescription(newDesc); err != nil {
return fmt.Errorf("failed to set description: %w", err)
}
}
desc, err := repo.Description()
if err != nil {
return fmt.Errorf("failed to get description: %w", err)
}
if desc == "" {
fmt.Println("No description set")
} else {
fmt.Println(desc)
}
return nil
}
|