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 }