Marshal JSON of package without escapes

Otherwise >, < get escaped as JSON does that in favour of browsers
This commit is contained in:
Ettore Di Giacinto
2019-11-29 19:01:50 +01:00
parent fa46601638
commit 4031a4ae81
3 changed files with 51 additions and 11 deletions

View File

@@ -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())

View File

@@ -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
}

View File

@@ -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)