| 15 | ) |
| 16 | |
| 17 | func createPackageResolver(baseDir string) spec.PackageResolver { |
| 18 | return func(pkgTmpl string) (tag string, err error) { |
| 19 | var pkgValue string |
| 20 | switch { |
| 21 | case len(pkgTmpl) == 0, pkgTmpl[0:1] != templateFlag: |
| 22 | pkgValue = pkgTmpl |
| 23 | case strings.HasPrefix(pkgTmpl, templateFlag+templatePkg): |
| 24 | pkgPath := strings.TrimPrefix(pkgTmpl, templateFlag+templatePkg) |
| 25 | piBase := pkglib.NewPkgInfo() |
| 26 | |
| 27 | var pkgs []pkglib.Pkg |
| 28 | pkgConfig := pkglib.PkglibConfig{ |
| 29 | BuildYML: defaultPkgBuildYML, |
| 30 | HashCommit: defaultPkgCommit, |
| 31 | Tag: piBase.Tag, |
| 32 | } |
| 33 | pkgs, err = pkglib.NewFromConfig(pkgConfig, path.Join(baseDir, pkgPath)) |
| 34 | if err != nil { |
| 35 | return tag, err |
| 36 | } |
| 37 | if len(pkgs) == 0 { |
| 38 | return tag, fmt.Errorf("no packages found") |
| 39 | } |
| 40 | if len(pkgs) > 1 { |
| 41 | return tag, fmt.Errorf("multiple packages found") |
| 42 | } |
| 43 | pkgValue = pkgs[0].FullTag() |
| 44 | } |
| 45 | return pkgValue, nil |
| 46 | } |
| 47 | } |