package cmd import ( "encoding/json" "errors" "gitea.com/jolheiser/beaver" "gitea.com/jolheiser/gpm/modules/config" "github.com/urfave/cli/v2" "io/ioutil" "net/http" "strings" ) var Import = cli.Command{ Name: "import", Usage: "Import JSON for local packages", Flags: []cli.Flag{ &cli.BoolFlag{ Name: "force", Aliases: []string{"f"}, Usage: "Overwrite any existing packages without prompt", }, }, Action: doImport, } func doImport(ctx *cli.Context) error { if ctx.NArg() == 0 { return errors.New("must point to either a JSON file or gpm server export endpoint") } arg := ctx.Args().First() isJSON := strings.HasSuffix(arg, ".json") isHTTP := strings.HasPrefix(arg, "http") if !isJSON && !isHTTP { return errors.New("must point to either a JSON file or gpm server export endpoint") } var data []byte var err error if isJSON { data, err = ioutil.ReadFile(arg) if err != nil { return err } } else if isHTTP { resp, err := http.Get(arg) if err != nil { return err } data, err = ioutil.ReadAll(resp.Body) if err != nil { return err } defer resp.Body.Close() } var cfg config.Config if err := json.Unmarshal(data, &cfg); err != nil { return err } config.AddPackages(ctx.Bool("force"), cfg.Packages...) if err := config.Save(); err != nil { return err } beaver.Info("Import complete") return nil }