github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/modules/cmd-get.go (about) 1 package modules 2 3 import ( 4 "errors" 5 "fmt" 6 "strings" 7 8 "github.com/lmorg/murex/config/profile" 9 "github.com/lmorg/murex/lang" 10 "github.com/lmorg/murex/utils" 11 "github.com/lmorg/murex/utils/cd" 12 ) 13 14 func getModule(p *lang.Process) error { 15 modulePath := profile.ModulePath() 16 17 db, err := readPackagesFile(modulePath + profile.PackagesFile) 18 if err != nil { 19 return err 20 } 21 22 uri, err := p.Parameters.String(1) 23 if err != nil { 24 return err 25 } 26 27 err = cd.Chdir(p, modulePath) 28 if err != nil { 29 return fmt.Errorf("unable to get package: %s", err.Error()) 30 } 31 32 pack, protocol, err := getPackage(p, uri) 33 if err != nil { 34 return err 35 } 36 37 db = append(db, packageDb{ 38 Package: pack, 39 URI: uri, 40 Protocol: protocol, 41 }) 42 43 var message string 44 45 err = writePackagesFile(&db) 46 if err != nil { 47 message += err.Error() + utils.NewLineString 48 } 49 50 _, err = profile.LoadPackage(modulePath+pack, true) 51 if err != nil { 52 message += err.Error() + utils.NewLineString 53 } 54 55 if message != "" { 56 return errors.New(strings.TrimSpace(message)) 57 } 58 59 return nil 60 } 61 62 func getPackage(p *lang.Process, uri string) (pack, protocol string, err error) { 63 write(p, "Getting package from '%s'....", uri) 64 65 protocol, err = detectProtocol(uri) 66 if err != nil { 67 return "", "", err 68 } 69 70 switch protocol { 71 case "git": 72 pack, err = gitGet(p, uri) 73 if err != nil { 74 return "", protocol, fmt.Errorf("unable to update package: %s", err.Error()) 75 } 76 77 case "https": 78 return "", protocol, errors.New("protocol handler for HTTPS has not yet been written. Please use git in the mean time (you can do this by specifying a git extension in the uri)") 79 80 default: 81 return "", "", fmt.Errorf("this is weird, protocol detected as `%s` but no handler has been written", protocol) 82 } 83 84 return 85 }