Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 37 additions & 4 deletions gxutil/pkgfile.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package gxutil

import (
"io/ioutil"
"encoding/json"
"fmt"
"os"
Expand All @@ -12,16 +13,18 @@ type PackageBase struct {
Name string `json:"name,omitempty"`
Author string `json:"author,omitempty"`
Description string `json:"description,omitempty"`
Keywords string `json:"keywords,omitempty"`
Keywords []string `json:"keywords,omitempty"`
Version string `json:"version,omitempty"`
Dependencies []*Dependency `json:"gxDependencies,omitempty"`
Bin string `json:"bin,omitempty"`
Build string `json:"build,omitempty"`
Test string `json:"test,omitempty"`
Language string `json:"language,omitempty"`
License string `json:"license"`
Issues string `json:"bugs"`
Issues *Issues `json:"bugs"`
GxVersion string `json:"gxVersion"`
Repository *Repository `json:"repository,omitempty"`
NonGxFields map[string]interface{} `json:"-"`
}

type Package struct {
Expand All @@ -30,6 +33,15 @@ type Package struct {
Gx json.RawMessage `json:"gx,omitempty"`
}

type Repository struct {
Type string `json:"type"`
Url string `json:"url"`
}

type Issues struct {
Url string `json:"url"`
}

// Dependency represents a dependency of a package
type Dependency struct {
Author string `json:"author,omitempty"`
Expand All @@ -50,17 +62,38 @@ func LoadPackageFile(pkg interface{}, fname string) error {
return err
}

file, err := ioutil.ReadFile(fname)
if err != nil {
return nil
}
json.Unmarshal(file, &pkg.(*Package).NonGxFields)


return nil
}

func SavePackageFile(pkg interface{}, fname string) error {
func SavePackageFile(pkg interface{}, fname string, nonGxFields map[string]interface{}) error {
fi, err := os.Create(fname)
if err != nil {
return err
}
defer fi.Close()

out, err := json.MarshalIndent(pkg, "", " ")
base, err := json.Marshal(pkg)
if (err != nil) {
return err
}
var f map[string]interface{}
json.Unmarshal(base, &f)
var g map[string]interface{} = nonGxFields
if g == nil {
g = make(map[string]interface{})
}

for v, k := range f {
g[v] = k
}
out, err := json.MarshalIndent(g, "", " ")
if err != nil {
return err
}
Expand Down
12 changes: 6 additions & 6 deletions gxutil/pm.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,11 +184,6 @@ func writePkgHook(dir, hook string) error {

func (pm *PM) InitPkg(dir, name, lang string, setup func(*Package)) error {
// check for existing packagefile
p := filepath.Join(dir, PkgFileName)
_, err := os.Stat(p)
if err == nil {
return errors.New("package file already exists in working dir")
}

username := pm.cfg.User.Name
if username == "" {
Expand All @@ -208,6 +203,11 @@ func (pm *PM) InitPkg(dir, name, lang string, setup func(*Package)) error {
GxVersion: GxVersion,
},
}
p := filepath.Join(dir, PkgFileName)
_, err := os.Stat(p)
if err == nil {
LoadPackageFile(pkg, PkgFileName)
}

if setup != nil {
setup(pkg)
Expand All @@ -216,7 +216,7 @@ func (pm *PM) InitPkg(dir, name, lang string, setup func(*Package)) error {
// check if the user has a tool installed for the selected language
CheckForHelperTools(lang)

err = SavePackageFile(pkg, p)
err = SavePackageFile(pkg, p, pkg.NonGxFields)
if err != nil {
return err
}
Expand Down
15 changes: 10 additions & 5 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ var ImportCommand = cli.Command{
}

pkg.Dependencies = append(pkg.Dependencies, ndep)
err = gx.SavePackageFile(pkg, PkgFileName)
err = gx.SavePackageFile(pkg, PkgFileName, pkg.NonGxFields)
if err != nil {
log.Fatal("writing pkgfile: %s", err)
}
Expand Down Expand Up @@ -283,7 +283,7 @@ var InstallCommand = cli.Command{
}

if save {
err := gx.SavePackageFile(pkg, PkgFileName)
err := gx.SavePackageFile(pkg, PkgFileName, pkg.NonGxFields)
if err != nil {
log.Fatal(err)
}
Expand Down Expand Up @@ -344,7 +344,12 @@ var InitCommand = cli.Command{

log.Log("initializing package %s...", pkgname)
err := pm.InitPkg(cwd, pkgname, lang, func(p *gx.Package) {
p.Issues = promptUser("where should users go to report issues?")
if p.Issues == nil {
url := promptUser("where should users go to report issues?")
p.Issues = &gx.Issues{
Url: url,
}
}
})

if err != nil {
Expand Down Expand Up @@ -444,7 +449,7 @@ continue?`, olddep.Name, olddep.Hash, npkg.Name, target)
olddep.Hash = target
olddep.Version = npkg.Version

err = gx.SavePackageFile(pkg, PkgFileName)
err = gx.SavePackageFile(pkg, PkgFileName, pkg.NonGxFields)
if err != nil {
log.Fatal("writing package file: %s", err)
}
Expand Down Expand Up @@ -513,7 +518,7 @@ EXAMPLE:
}

defer func() {
err := gx.SavePackageFile(pkg, PkgFileName)
err := gx.SavePackageFile(pkg, PkgFileName, pkg.NonGxFields)
if err != nil {
log.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion update.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func fetchAndUpdate(tofetch string, updates map[string]string, checked map[strin
}

if changed {
err := gx.SavePackageFile(pkg, filepath.Join(dir, pkg.Name, gx.PkgFileName))
err := gx.SavePackageFile(pkg, filepath.Join(dir, pkg.Name, gx.PkgFileName), pkg.NonGxFields)
if err != nil {
return "", err
}
Expand Down