mirror of
https://github.com/mudler/luet.git
synced 2025-09-02 15:54:39 +00:00
Marshal JSON of package without escapes
Otherwise >, < get escaped as JSON does that in favour of browsers
This commit is contained in:
@@ -354,7 +354,6 @@ func (cs *LuetCompiler) ComputeDepTree(p CompilationSpec) (solver.PackagesAssert
|
||||
|
||||
for _, assertion := range dependencies { //highly dependent on the order
|
||||
if assertion.Value {
|
||||
|
||||
nthsolution, err := s.Install([]pkg.Package{assertion.Package})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().GetName())
|
||||
|
@@ -94,7 +94,13 @@ func (db *InMemoryDatabase) GetPackage(ID string) (Package, error) {
|
||||
|
||||
p := &DefaultPackage{}
|
||||
|
||||
if err := json.Unmarshal(enc, &p); err != nil {
|
||||
rawIn := json.RawMessage(enc)
|
||||
bytes, err := rawIn.MarshalJSON()
|
||||
if err != nil {
|
||||
return &DefaultPackage{}, err
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(bytes, &p); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return p, nil
|
||||
@@ -120,7 +126,7 @@ func (db *InMemoryDatabase) CreatePackage(p Package) (string, error) {
|
||||
return "", errors.New("InMemoryDatabase suports only DefaultPackage")
|
||||
}
|
||||
|
||||
res, err := json.Marshal(pd)
|
||||
res, err := pd.JSON()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -138,7 +144,7 @@ func (db *InMemoryDatabase) encodePackage(p Package) (string, string, error) {
|
||||
return "", "", errors.New("InMemoryDatabase suports only DefaultPackage")
|
||||
}
|
||||
|
||||
res, err := json.Marshal(pd)
|
||||
res, err := pd.JSON()
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
@@ -77,13 +77,33 @@ type Tree interface {
|
||||
|
||||
// >> Unmarshallers
|
||||
// DefaultPackageFromYaml decodes a package from yaml bytes
|
||||
func DefaultPackageFromYaml(source []byte) (DefaultPackage, error) {
|
||||
var pkg DefaultPackage
|
||||
err := yaml.Unmarshal(source, &pkg)
|
||||
func DefaultPackageFromYaml(yml []byte) (DefaultPackage, error) {
|
||||
|
||||
var unescaped DefaultPackage
|
||||
source, err := yaml.YAMLToJSON(yml)
|
||||
if err != nil {
|
||||
return pkg, err
|
||||
return DefaultPackage{}, err
|
||||
}
|
||||
return pkg, nil
|
||||
|
||||
rawIn := json.RawMessage(source)
|
||||
bytes, err := rawIn.MarshalJSON()
|
||||
if err != nil {
|
||||
return DefaultPackage{}, err
|
||||
}
|
||||
err = json.Unmarshal(bytes, &unescaped)
|
||||
if err != nil {
|
||||
return DefaultPackage{}, err
|
||||
}
|
||||
return unescaped, nil
|
||||
}
|
||||
|
||||
// Major and minor gets escaped when marshalling in JSON, making compiler fails recognizing selectors for expansion
|
||||
func (t *DefaultPackage) JSON() ([]byte, error) {
|
||||
buffer := &bytes.Buffer{}
|
||||
encoder := json.NewEncoder(buffer)
|
||||
encoder.SetEscapeHTML(false)
|
||||
err := encoder.Encode(t)
|
||||
return buffer.Bytes(), err
|
||||
}
|
||||
|
||||
// DefaultPackage represent a standard package definition
|
||||
@@ -113,7 +133,7 @@ func NewPackage(name, version string, requires []*DefaultPackage, conflicts []*D
|
||||
}
|
||||
|
||||
func (p *DefaultPackage) String() string {
|
||||
b, err := json.Marshal(p)
|
||||
b, err := p.JSON()
|
||||
if err != nil {
|
||||
return fmt.Sprintf("{ id: \"%d\", name: \"%s\" }", p.ID, p.Name)
|
||||
}
|
||||
@@ -167,7 +187,12 @@ func (p *DefaultPackage) Encode(db PackageDatabase) (string, error) {
|
||||
}
|
||||
|
||||
func (p *DefaultPackage) Yaml() ([]byte, error) {
|
||||
y, err := yaml.Marshal(p)
|
||||
j, err := p.JSON()
|
||||
if err != nil {
|
||||
|
||||
return []byte{}, err
|
||||
}
|
||||
y, err := yaml.JSONToYAML(j)
|
||||
if err != nil {
|
||||
|
||||
return []byte{}, err
|
||||
@@ -281,11 +306,19 @@ func (pack *DefaultPackage) RequiresContains(definitiondb PackageDatabase, s Pac
|
||||
p = pack //relax things
|
||||
//return false, errors.Wrap(err, "Package not found in definition db")
|
||||
}
|
||||
|
||||
w := definitiondb.World()
|
||||
for _, re := range p.GetRequires() {
|
||||
if re.Matches(s) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
packages, _ := re.Expand(&w)
|
||||
for _, pa := range packages {
|
||||
if pa.Matches(s) {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
if contains, err := re.RequiresContains(definitiondb, s); err == nil && contains {
|
||||
return true, nil
|
||||
}
|
||||
@@ -341,12 +374,14 @@ func (pack *DefaultPackage) BuildFormula(definitiondb PackageDatabase, db Packag
|
||||
if err != nil {
|
||||
// return nil, errors.Wrap(err, "Couldn't find required package in db definition")
|
||||
packages, err := requiredDef.Expand(&w)
|
||||
// Info("Expanded", packages, err)
|
||||
if err != nil || len(packages) == 0 {
|
||||
required = requiredDef
|
||||
} else {
|
||||
required = Best(packages)
|
||||
|
||||
}
|
||||
//required = &DefaultPackage{Name: "test"}
|
||||
}
|
||||
|
||||
encodedB, err := required.Encode(db)
|
||||
|
Reference in New Issue
Block a user