github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/builder/get.go (about)

     1  package builder
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	src "github.com/nevalang/neva/internal/compiler/sourcecode"
     8  )
     9  
    10  func (b Builder) Get(wd, path, version string) (string, error) {
    11  	ref := src.ModuleRef{
    12  		Path:    path,
    13  		Version: version,
    14  	}
    15  
    16  	release, err := acquireLockFile()
    17  	if err != nil {
    18  		return "", fmt.Errorf("failed to acquire lock file: %w", err)
    19  	}
    20  	defer release()
    21  
    22  	downloadPath, actualVersion, err := b.downloadDep(ref)
    23  	if err != nil {
    24  		return "", err
    25  	}
    26  
    27  	manifest, _, err := b.getNearestManifest(wd)
    28  	if err != nil {
    29  		return "", fmt.Errorf("Retrieve manifest: %w", err)
    30  	}
    31  
    32  	existing, ok := manifest.Deps[path]
    33  	if ok && existing.Version != actualVersion {
    34  		return "", errors.New(
    35  			"Several versions of the same dependency not yet supported.",
    36  		)
    37  	}
    38  
    39  	manifest.Deps[path] = src.ModuleRef{
    40  		Path:    path,
    41  		Version: actualVersion,
    42  	}
    43  
    44  	if err := b.writeManifest(manifest, wd); err != nil {
    45  		return "", err
    46  	}
    47  
    48  	return downloadPath, nil
    49  }