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  }