mirror of
https://github.com/mudler/luet.git
synced 2025-09-04 16:50:50 +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
|
for _, assertion := range dependencies { //highly dependent on the order
|
||||||
if assertion.Value {
|
if assertion.Value {
|
||||||
|
|
||||||
nthsolution, err := s.Install([]pkg.Package{assertion.Package})
|
nthsolution, err := s.Install([]pkg.Package{assertion.Package})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().GetName())
|
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{}
|
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 nil, err
|
||||||
}
|
}
|
||||||
return p, nil
|
return p, nil
|
||||||
@@ -120,7 +126,7 @@ func (db *InMemoryDatabase) CreatePackage(p Package) (string, error) {
|
|||||||
return "", errors.New("InMemoryDatabase suports only DefaultPackage")
|
return "", errors.New("InMemoryDatabase suports only DefaultPackage")
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := json.Marshal(pd)
|
res, err := pd.JSON()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -138,7 +144,7 @@ func (db *InMemoryDatabase) encodePackage(p Package) (string, string, error) {
|
|||||||
return "", "", errors.New("InMemoryDatabase suports only DefaultPackage")
|
return "", "", errors.New("InMemoryDatabase suports only DefaultPackage")
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := json.Marshal(pd)
|
res, err := pd.JSON()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
@@ -77,13 +77,33 @@ type Tree interface {
|
|||||||
|
|
||||||
// >> Unmarshallers
|
// >> Unmarshallers
|
||||||
// DefaultPackageFromYaml decodes a package from yaml bytes
|
// DefaultPackageFromYaml decodes a package from yaml bytes
|
||||||
func DefaultPackageFromYaml(source []byte) (DefaultPackage, error) {
|
func DefaultPackageFromYaml(yml []byte) (DefaultPackage, error) {
|
||||||
var pkg DefaultPackage
|
|
||||||
err := yaml.Unmarshal(source, &pkg)
|
var unescaped DefaultPackage
|
||||||
|
source, err := yaml.YAMLToJSON(yml)
|
||||||
if err != nil {
|
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
|
// DefaultPackage represent a standard package definition
|
||||||
@@ -113,7 +133,7 @@ func NewPackage(name, version string, requires []*DefaultPackage, conflicts []*D
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *DefaultPackage) String() string {
|
func (p *DefaultPackage) String() string {
|
||||||
b, err := json.Marshal(p)
|
b, err := p.JSON()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Sprintf("{ id: \"%d\", name: \"%s\" }", p.ID, p.Name)
|
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) {
|
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 {
|
if err != nil {
|
||||||
|
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
@@ -281,11 +306,19 @@ func (pack *DefaultPackage) RequiresContains(definitiondb PackageDatabase, s Pac
|
|||||||
p = pack //relax things
|
p = pack //relax things
|
||||||
//return false, errors.Wrap(err, "Package not found in definition db")
|
//return false, errors.Wrap(err, "Package not found in definition db")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
w := definitiondb.World()
|
||||||
for _, re := range p.GetRequires() {
|
for _, re := range p.GetRequires() {
|
||||||
if re.Matches(s) {
|
if re.Matches(s) {
|
||||||
return true, nil
|
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 {
|
if contains, err := re.RequiresContains(definitiondb, s); err == nil && contains {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
@@ -341,12 +374,14 @@ func (pack *DefaultPackage) BuildFormula(definitiondb PackageDatabase, db Packag
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
// return nil, errors.Wrap(err, "Couldn't find required package in db definition")
|
// return nil, errors.Wrap(err, "Couldn't find required package in db definition")
|
||||||
packages, err := requiredDef.Expand(&w)
|
packages, err := requiredDef.Expand(&w)
|
||||||
|
// Info("Expanded", packages, err)
|
||||||
if err != nil || len(packages) == 0 {
|
if err != nil || len(packages) == 0 {
|
||||||
required = requiredDef
|
required = requiredDef
|
||||||
} else {
|
} else {
|
||||||
required = Best(packages)
|
required = Best(packages)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//required = &DefaultPackage{Name: "test"}
|
||||||
}
|
}
|
||||||
|
|
||||||
encodedB, err := required.Encode(db)
|
encodedB, err := required.Encode(db)
|
||||||
|
Reference in New Issue
Block a user