this repo has no description smallweb.run
smallweb
at main 103 lines 2.6 kB view raw
1package cmd 2 3import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "path/filepath" 8 "strings" 9 10 "github.com/spf13/cobra" 11) 12 13func NewCmdGitReceivePack() *cobra.Command { 14 cmd := &cobra.Command{ 15 Use: "git-receive-pack <git-dir>", 16 Hidden: true, 17 Short: "Git receive-pack", 18 Args: cobra.ExactArgs(1), 19 RunE: func(cmd *cobra.Command, args []string) error { 20 if !strings.HasSuffix(args[0], ".git") { 21 return fmt.Errorf("invalid path") 22 } 23 24 reposDir := filepath.Join(k.String("dir"), ".smallweb", "repos") 25 if err := os.MkdirAll(reposDir, 0755); err != nil { 26 return err 27 } 28 29 repoDir := filepath.Join(reposDir, args[0]) 30 if filepath.Dir(repoDir) != reposDir { 31 return fmt.Errorf("invalid path") 32 } 33 34 if _, err := os.Stat(repoDir); os.IsNotExist(err) { 35 initCmd := exec.Command("git", "init", repoDir, "--bare", "--initial-branch=main") 36 if err := initCmd.Run(); err != nil { 37 return err 38 } 39 } else if err != nil { 40 return err 41 } 42 43 gitReceiveCmd := exec.Command("git-receive-pack", repoDir) 44 45 gitReceiveCmd.Stdin = cmd.InOrStdin() 46 gitReceiveCmd.Stdout = cmd.OutOrStdout() 47 gitReceiveCmd.Stderr = cmd.ErrOrStderr() 48 49 if err := gitReceiveCmd.Run(); err != nil { 50 return err 51 } 52 53 appName := strings.TrimSuffix(filepath.Base(repoDir), ".git") 54 appDir := filepath.Join(k.String("dir"), appName) 55 if _, err := os.Stat(appDir); os.IsNotExist(err) { 56 if err := os.MkdirAll(appDir, 0755); err != nil { 57 fmt.Fprintln(cmd.ErrOrStderr(), err) 58 return err 59 } 60 } else if err != nil { 61 fmt.Fprintln(cmd.ErrOrStderr(), err) 62 return err 63 } 64 65 gitCheckOutCmd := exec.Command("git", "--git-dir", repoDir, "--work-tree", appDir, "checkout", "HEAD", "--", ".") 66 gitCheckOutCmd.Stderr = cmd.ErrOrStderr() 67 if err := gitCheckOutCmd.Run(); err != nil { 68 return err 69 } 70 71 cmd.PrintErrf("\nYour app is available at https://%s.%s\n\n", filepath.Base(appDir), k.String("domain")) 72 73 return nil 74 }, 75 } 76 77 return cmd 78} 79 80func NewCmdGitUploadPack() *cobra.Command { 81 cmd := &cobra.Command{ 82 Use: "git-upload-pack <git-dir>", 83 Hidden: true, 84 Short: "Git upload-pack", 85 Args: cobra.ExactArgs(1), 86 RunE: func(cmd *cobra.Command, args []string) error { 87 repoDir := filepath.Join(k.String("dir"), ".smallweb", "repos", args[0]) 88 uploadCmd := exec.Command("git-upload-pack", repoDir) 89 90 uploadCmd.Stdin = cmd.InOrStdin() 91 uploadCmd.Stdout = cmd.OutOrStdout() 92 uploadCmd.Stderr = cmd.ErrOrStderr() 93 94 if err := uploadCmd.Run(); err != nil { 95 return err 96 } 97 98 return nil 99 }, 100 } 101 102 return cmd 103}