Carve out the other references to legacy config
This is a really, really awkward hack job. I'm certain that this breaks
at least some of the functionality here in ways that aren't necessary.
It was simply too much work to grok all of these changes in context;
it'll be necessary to circle back around on them as part of the later
porting work.
I've placed TODOs/FIXMEs at some particularly crucial spots to assist
with this.
diff --git a/action/config_wizard.go b/action/config_wizard.go
index 1257980..1cc6da7 100644
--- a/action/config_wizard.go
+++ b/action/config_wizard.go
@@ -13,10 +13,14 @@
gpath "github.com/Masterminds/glide/path"
"github.com/Masterminds/semver"
"github.com/Masterminds/vcs"
+ "github.com/sdboyer/gps"
)
// ConfigWizard reads configuration from a glide.yaml file and attempts to suggest
// improvements. The wizard is interactive.
+//
+// TODO(sdboyer) the Dependency.Reference -> Dependency.Constraint conversion is
+// really awkward here and needs to be revisited
func ConfigWizard(base string) {
_, err := gpath.Glide()
glidefile := gpath.GlideFile
@@ -76,7 +80,7 @@
// First check, ask if the tag should be used instead of the commit id for it.
cur := cache.MemCurrent(remote)
- if cur != "" && cur != dep.Reference {
+ if cur != "" && cur != dep.Constraint.String() {
wizardSugOnce()
var dres bool
asked, use, val := wizardOnce("current")
@@ -93,15 +97,16 @@
}
if dres {
- msg.Info("Updating %s to use the tag %s instead of commit id %s", dep.Name, cur, dep.Reference)
- dep.Reference = cur
+ msg.Info("Updating %s to use the tag %s instead of commit id %s", dep.Name, cur, dep.Constraint)
+ // FIXME just wrong; have to disambiguate branches and versions
+ dep.Constraint = gps.NewVersion(cur)
changes++
}
}
// Second check, if no version is being used and there's a semver release ask about latest.
memlatest := cache.MemLatest(remote)
- if dep.Reference == "" && memlatest != "" {
+ if dep.Constraint == nil && memlatest != "" {
wizardSugOnce()
var dres bool
asked, use, val := wizardOnce("latest")
@@ -119,14 +124,14 @@
if dres {
msg.Info("Updating %s to use the release %s instead of no release", dep.Name, memlatest)
- dep.Reference = memlatest
+ dep.Constraint = gps.NewVersion(memlatest)
changes++
}
}
// Third check, if the version is semver offer to use a range instead.
- sv, err := semver.NewVersion(dep.Reference)
- if err == nil {
+ if v, ok := dep.Constraint.(gps.Version); ok && v.Type() == "semver" {
+ sv, _ := semver.NewVersion(v.String())
wizardSugOnce()
var res string
asked, use, val := wizardOnce("range")
@@ -144,13 +149,13 @@
if res == "m" {
r := "^" + sv.String()
- msg.Info("Updating %s to use the range %s instead of commit id %s", dep.Name, r, dep.Reference)
- dep.Reference = r
+ msg.Info("Updating %s to use the range %s instead of commit id %s", dep.Name, r, dep.Constraint)
+ dep.Constraint, _ = gps.NewSemverConstraint(r)
changes++
} else if res == "p" {
r := "~" + sv.String()
- msg.Info("Updating %s to use the range %s instead of commit id %s", dep.Name, r, dep.Reference)
- dep.Reference = r
+ msg.Info("Updating %s to use the range %s instead of commit id %s", dep.Name, r, dep.Constraint)
+ dep.Constraint, _ = gps.NewSemverConstraint(r)
changes++
}
}
@@ -229,7 +234,7 @@
}
func wizardAskCurrent(cur string, d *cfg.Dependency) bool {
- msg.Info("The package %s is currently set to use the version %s.", d.Name, d.Reference)
+ msg.Info("The package %s is currently set to use the version %s.", d.Name, d.Constraint)
msg.Info("There is an equivalent semantic version (http://semver.org) release of %s. Would", cur)
msg.Info("you like to use that instead? Yes (Y) or No (N)")
return msg.PromptUntilYorN()
@@ -243,7 +248,7 @@
}
func wizardLookInto(d *cfg.Dependency) bool {
- _, err := semver.NewConstraint(d.Reference)
+ _, err := semver.NewConstraint(d.Constraint.String())
// The existing version is already a valid semver constraint so we skip suggestions.
if err == nil {
@@ -302,7 +307,7 @@
if found := createGitParseVersion.FindString(ti); found != "" {
tg := strings.TrimPrefix(strings.TrimSuffix(found, "^{}"), "tags/")
cache.MemPut(remote, tg)
- if d.Reference != "" && strings.HasPrefix(ti, d.Reference) {
+ if d.Constraint != nil && strings.HasPrefix(ti, d.Constraint.String()) {
cache.MemSetCurrent(remote, tg)
}
}
@@ -332,15 +337,17 @@
cache.MemPut(remote, v)
}
}
- if d.Reference != "" && repo.IsReference(d.Reference) {
- tgs, err = repo.TagsFromCommit(d.Reference)
- if err != nil {
- msg.Debug("Problem getting tags for commit: %s", err)
- } else {
- if len(tgs) > 0 {
- for _, v := range tgs {
- if !(repo.Vcs() == vcs.Hg && v == "tip") {
- cache.MemSetCurrent(remote, v)
+ if d.Constraint != nil {
+ if rev, ok := d.Constraint.(gps.Revision); ok {
+ tgs, err = repo.TagsFromCommit(string(rev))
+ if err != nil {
+ msg.Debug("Problem getting tags for commit: %s", err)
+ } else {
+ if len(tgs) > 0 {
+ for _, v := range tgs {
+ if !(repo.Vcs() == vcs.Hg && v == "tip") {
+ cache.MemSetCurrent(remote, v)
+ }
}
}
}
diff --git a/action/create.go b/action/create.go
index 5d42199..e6cf2e4 100644
--- a/action/create.go
+++ b/action/create.go
@@ -129,32 +129,20 @@
for _, pa := range sortable {
n := strings.TrimPrefix(pa, vpath)
- root, subpkg := util.NormalizeName(n)
+ root, _ := util.NormalizeName(n)
if !config.Imports.Has(root) && root != config.Name {
msg.Info("--> Found reference to %s\n", n)
d := &cfg.Dependency{
Name: root,
}
- if len(subpkg) > 0 {
- d.Subpackages = []string{subpkg}
- }
config.Imports = append(config.Imports, d)
- } else if config.Imports.Has(root) {
- if len(subpkg) > 0 {
- subpkg = strings.TrimPrefix(subpkg, "/")
- d := config.Imports.Get(root)
- if !d.HasSubpackage(subpkg) {
- msg.Info("--> Adding sub-package %s to %s\n", subpkg, root)
- d.Subpackages = append(d.Subpackages, subpkg)
- }
- }
}
}
for _, pa := range testSortable {
n := strings.TrimPrefix(pa, vpath)
- root, subpkg := util.NormalizeName(n)
+ root, _ := util.NormalizeName(n)
if config.Imports.Has(root) && root != config.Name {
msg.Debug("--> Found test reference to %s already listed as an import", n)
@@ -163,19 +151,7 @@
d := &cfg.Dependency{
Name: root,
}
- if len(subpkg) > 0 {
- d.Subpackages = []string{subpkg}
- }
config.DevImports = append(config.DevImports, d)
- } else if config.DevImports.Has(root) {
- if len(subpkg) > 0 {
- subpkg = strings.TrimPrefix(subpkg, "/")
- d := config.DevImports.Get(root)
- if !d.HasSubpackage(subpkg) {
- msg.Info("--> Adding test sub-package %s to %s\n", subpkg, root)
- d.Subpackages = append(d.Subpackages, subpkg)
- }
- }
}
}
@@ -207,10 +183,10 @@
}
for _, i := range deps {
- if i.Reference == "" {
+ if i.Constraint == nil {
msg.Info("--> Found imported reference to %s", i.Name)
} else {
- msg.Info("--> Found imported reference to %s at revision %s", i.Name, i.Reference)
+ msg.Info("--> Found imported reference to %s with constraint %s", i.Name, i.Constraint)
}
config.Imports = append(config.Imports, i)
diff --git a/action/ensure.go b/action/ensure.go
index 2f5f5af..154b8ee 100644
--- a/action/ensure.go
+++ b/action/ensure.go
@@ -29,7 +29,10 @@
msg.ExitCode(2)
msg.Die("Failed to load %s: %s", yamlpath, err)
}
- conf, err := cfg.ConfigFromYaml(yml)
+ conf, legacy, err := cfg.ConfigFromYaml(yml)
+ if legacy {
+ msg.Warn("glide.yaml was in a legacy format. An attempt will be made to automatically update it.")
+ }
if err != nil {
msg.ExitCode(3)
msg.Die("Failed to parse %s: %s", yamlpath, err)
diff --git a/action/get.go b/action/get.go
index bcb62f3..60607f2 100644
--- a/action/get.go
+++ b/action/get.go
@@ -151,7 +151,7 @@
msg.Info("Attempting to get package %s", name)
- root, subpkg := util.NormalizeName(name)
+ root, _ := util.NormalizeName(name)
if len(root) == 0 {
return 0, fmt.Errorf("Package name is required for %q.", name)
}
@@ -172,24 +172,7 @@
msg.Warn("--> Test dependency %s already listed as import", root)
}
- // Check if the subpackage is present.
- if subpkg != "" {
- if dep == nil {
- dep = conf.Imports.Get(root)
- if dep == nil && testDeps {
- dep = conf.DevImports.Get(root)
- }
- }
- if dep.HasSubpackage(subpkg) {
- if !moved {
- msg.Warn("--> Package %q is already in glide.yaml. Skipping", name)
- }
- } else {
- dep.Subpackages = append(dep.Subpackages, subpkg)
- msg.Info("--> Adding sub-package %s to existing import %s", subpkg, root)
- numAdded++
- }
- } else if !moved {
+ if !moved {
msg.Warn("--> Package %q is already in glide.yaml. Skipping", root)
}
continue
@@ -212,17 +195,14 @@
}
if version != "" {
- dep.Reference = version
+ // TODO(sdboyer) set the right type...what is that here?
+ dep.Constraint = gps.NewVersion(version)
} else if !nonInteract {
getWizard(dep)
}
- if len(subpkg) > 0 {
- dep.Subpackages = []string{subpkg}
- }
-
- if dep.Reference != "" {
- msg.Info("--> Adding %s to your configuration with the version %s", dep.Name, dep.Reference)
+ if dep.Constraint != nil {
+ msg.Info("--> Adding %s to your configuration with the version %s", dep.Name, dep.Constraint)
} else {
msg.Info("--> Adding %s to your configuration", dep.Name)
}
@@ -253,15 +233,20 @@
if memlatest != "" {
dres := wizardAskLatest(memlatest, dep)
if dres {
- dep.Reference = memlatest
+ // TODO(sdboyer) set the right type...what is that here?
+ v := gps.NewVersion(memlatest)
+ dep.Constraint = v
- sv, err := semver.NewVersion(dep.Reference)
- if err == nil {
+ if v.Type() == "semver" {
+ sv, _ := semver.NewVersion(memlatest)
res := wizardAskRange(sv, dep)
+
if res == "m" {
- dep.Reference = "^" + sv.String()
+ // no errors possible here, if init was valid semver version
+ dep.Constraint, _ = gps.NewSemverConstraint("^" + v.String())
} else if res == "p" {
- dep.Reference = "~" + sv.String()
+ // no errors possible here, if init was valid semver version
+ dep.Constraint, _ = gps.NewSemverConstraint("~" + v.String())
}
}
}
diff --git a/action/get_test.go b/action/get_test.go
index 07dba0f..9e5d8f0 100644
--- a/action/get_test.go
+++ b/action/get_test.go
@@ -16,7 +16,6 @@
conf := new(cfg.Config)
dep := new(cfg.Dependency)
dep.Name = "github.com/Masterminds/cookoo"
- dep.Subpackages = append(dep.Subpackages, "convert")
conf.Imports = append(conf.Imports, dep)
names := []string{
@@ -30,17 +29,6 @@
t.Error("addPkgsToConfig failed to add github.com/Masterminds/semver")
}
- d := conf.Imports.Get("github.com/Masterminds/cookoo")
- found := false
- for _, s := range d.Subpackages {
- if s == "fmt" {
- found = true
- }
- }
- if !found {
- t.Error("addPkgsToConfig failed to add subpackage to existing import")
- }
-
// Restore messaging to original location
msg.Default.Stderr = o
}
diff --git a/action/rebuild.go b/action/rebuild.go
index dffde39..6e76625 100644
--- a/action/rebuild.go
+++ b/action/rebuild.go
@@ -41,22 +41,23 @@
}
func buildDep(dep *cfg.Dependency, vpath string) error {
- if len(dep.Subpackages) == 0 {
- buildPath(dep.Name)
- }
+ buildPath(dep.Name)
- for _, pkg := range dep.Subpackages {
- if pkg == "**" || pkg == "..." {
- //Info("Building all packages in %s\n", dep.Name)
- buildPath(path.Join(dep.Name, "..."))
- } else {
- paths, err := resolvePackages(vpath, dep.Name, pkg)
- if err != nil {
- msg.Warn("Error resolving packages: %s", err)
- }
- buildPaths(paths)
- }
- }
+ // TODO(sdboyer) to replace this, would need static analysis. But...rebuild
+ // is going away anyway, right?
+
+ //for _, pkg := range dep.Subpackages {
+ //if pkg == "**" || pkg == "..." {
+ ////Info("Building all packages in %s\n", dep.Name)
+ //buildPath(path.Join(dep.Name, "..."))
+ //} else {
+ //paths, err := resolvePackages(vpath, dep.Name, pkg)
+ //if err != nil {
+ //msg.Warn("Error resolving packages: %s", err)
+ //}
+ //buildPaths(paths)
+ //}
+ //}
return nil
}
diff --git a/dependency/analyzer.go b/dependency/analyzer.go
index 0f88d7d..d209f4e 100644
--- a/dependency/analyzer.go
+++ b/dependency/analyzer.go
@@ -102,7 +102,8 @@
return nil, nil, fmt.Errorf("Error while reading glide manifest data: %s", root)
}
- m, err := cfg.ConfigFromYaml(yml)
+ // We don't care here if it's legacy
+ m, _, err := cfg.ConfigFromYaml(yml)
if err != nil {
return nil, nil, fmt.Errorf("Error while parsing glide manifest data: %s", root)
}
diff --git a/dependency/resolver.go b/dependency/resolver.go
index 06dd2dc..a0cabf1 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -257,10 +257,10 @@
}
pt := strings.TrimPrefix(path, r.basedir+string(os.PathSeparator))
pt = strings.TrimSuffix(pt, string(os.PathSeparator))
- if r.Config.HasExclude(pt) {
- msg.Debug("Excluding %s", pt)
- return filepath.SkipDir
- }
+ //if r.Config.HasExclude(pt) {
+ //msg.Debug("Excluding %s", pt)
+ //return filepath.SkipDir
+ //}
if !fi.IsDir() {
return nil
}
@@ -588,7 +588,7 @@
// In addition to generating a list
for e := queue.Front(); e != nil; e = e.Next() {
t := r.Stripv(e.Value.(string))
- root, sp := util.NormalizeName(t)
+ root, _ := util.NormalizeName(t)
// Skip ignored packages
if r.Config.HasIgnore(e.Value.(string)) {
@@ -598,25 +598,19 @@
// TODO(mattfarina): Need to eventually support devImport
existing := r.Config.Imports.Get(root)
- if existing == nil && addTest {
- existing = r.Config.DevImports.Get(root)
- }
- if existing != nil {
- if sp != "" && !existing.HasSubpackage(sp) {
- existing.Subpackages = append(existing.Subpackages, sp)
- }
- } else {
- newDep := &cfg.Dependency{
- Name: root,
- }
- if sp != "" {
- newDep.Subpackages = []string{sp}
- }
-
+ if existing == nil {
if addTest {
- r.Config.DevImports = append(r.Config.DevImports, newDep)
+ existing = r.Config.DevImports.Get(root)
} else {
- r.Config.Imports = append(r.Config.Imports, newDep)
+ newDep := &cfg.Dependency{
+ Name: root,
+ }
+
+ if addTest {
+ r.Config.DevImports = append(r.Config.DevImports, newDep)
+ } else {
+ r.Config.Imports = append(r.Config.Imports, newDep)
+ }
}
}
res = append(res, t)
@@ -685,29 +679,22 @@
// In addition to generating a list
for e := queue.Front(); e != nil; e = e.Next() {
t := strings.TrimPrefix(e.Value.(string), r.VendorDir+string(os.PathSeparator))
- root, sp := util.NormalizeName(t)
+ root, _ := util.NormalizeName(t)
existing := r.Config.Imports.Get(root)
- if existing == nil && addTest {
- existing = r.Config.DevImports.Get(root)
- }
-
- if existing != nil {
- if sp != "" && !existing.HasSubpackage(sp) {
- existing.Subpackages = append(existing.Subpackages, sp)
- }
- } else {
- newDep := &cfg.Dependency{
- Name: root,
- }
- if sp != "" {
- newDep.Subpackages = []string{sp}
- }
-
+ if existing == nil {
if addTest {
- r.Config.DevImports = append(r.Config.DevImports, newDep)
+ existing = r.Config.DevImports.Get(root)
} else {
- r.Config.Imports = append(r.Config.Imports, newDep)
+ newDep := &cfg.Dependency{
+ Name: root,
+ }
+
+ if addTest {
+ r.Config.DevImports = append(r.Config.DevImports, newDep)
+ } else {
+ r.Config.Imports = append(r.Config.Imports, newDep)
+ }
}
}
res = append(res, e.Value.(string))
@@ -861,20 +848,8 @@
func sliceToQueue(deps []*cfg.Dependency, basepath string) *list.List {
l := list.New()
for _, e := range deps {
- if len(e.Subpackages) > 0 {
- for _, v := range e.Subpackages {
- ip := e.Name
- if v != "." && v != "" {
- ip = ip + "/" + v
- }
- msg.Debug("Adding local Import %s to queue", ip)
- l.PushBack(filepath.Join(basepath, filepath.FromSlash(ip)))
- }
- } else {
- msg.Debug("Adding local Import %s to queue", e.Name)
- l.PushBack(filepath.Join(basepath, filepath.FromSlash(e.Name)))
- }
-
+ msg.Debug("Adding local Import %s to queue", e.Name)
+ l.PushBack(filepath.Join(basepath, filepath.FromSlash(e.Name)))
}
return l
}
diff --git a/importer/importer.go b/importer/importer.go
index 9d5d2ac..9da292b 100644
--- a/importer/importer.go
+++ b/importer/importer.go
@@ -44,7 +44,7 @@
if err != nil {
return false, []*cfg.Dependency{}, err
}
- conf, err := cfg.ConfigFromYaml(yml)
+ conf, _, err := cfg.ConfigFromYaml(yml)
if err != nil {
return false, []*cfg.Dependency{}, err
}
diff --git a/repo/installer.go b/repo/installer.go
index eec08df..de751bf 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -195,19 +195,13 @@
if conf.HasIgnore(n) {
continue
}
- rt, sub := util.NormalizeName(n)
- if sub == "" {
- sub = "."
- }
+ rt, _ := util.NormalizeName(n)
d := deps.Get(rt)
if d == nil {
nd := &cfg.Dependency{
- Name: rt,
- Subpackages: []string{sub},
+ Name: rt,
}
deps = append(deps, nd)
- } else if !d.HasSubpackage(sub) {
- d.Subpackages = append(d.Subpackages, sub)
}
}
if i.ResolveTest {
@@ -216,22 +210,16 @@
if conf.HasIgnore(n) {
continue
}
- rt, sub := util.NormalizeName(n)
- if sub == "" {
- sub = "."
- }
+ rt, _ := util.NormalizeName(n)
d := deps.Get(rt)
if d == nil {
d = tdeps.Get(rt)
}
if d == nil {
nd := &cfg.Dependency{
- Name: rt,
- Subpackages: []string{sub},
+ Name: rt,
}
tdeps = append(tdeps, nd)
- } else if !d.HasSubpackage(sub) {
- d.Subpackages = append(d.Subpackages, sub)
}
}
}
@@ -330,12 +318,12 @@
continue
}
- if ver == dep.Reference {
- msg.Info("--> Found desired version %s %s!", dep.Name, dep.Reference)
+ if ver == dep.Constraint.String() {
+ msg.Info("--> Found desired version %s %s!", dep.Name, dep.Constraint)
continue
}
- msg.Debug("--> Queue %s for update (%s != %s).", dep.Name, ver, dep.Reference)
+ msg.Debug("--> Queue %s for update (%s != %s).", dep.Name, ver, dep.Constraint)
newDeps = append(newDeps, dep)
}
if len(newDeps) > 0 {
@@ -621,7 +609,7 @@
// The fist one wins. Would something smater than this be better?
exists, _ := d.Use.Get(dep.Name)
- if exists == nil && (dep.Reference != "" || dep.Repository != "") {
+ if exists == nil && (dep.Constraint != nil || dep.Repository != "") {
d.Use.Add(dep.Name, dep, root)
}
}
@@ -656,8 +644,8 @@
// There are import chains (because the import tree is resolved
// before the test tree) that can cause this.
tempD := d.Config.DevImports.Get(root)
- if tempD.Reference != v.Reference {
- msg.Warn("Using import %s (version %s) for test instead of testImport (version %s).", v.Name, v.Reference, tempD.Reference)
+ if tempD.Constraint.String() != v.Constraint.String() {
+ msg.Warn("Using import %s (version %s) for test instead of testImport (version %s).", v.Name, v.Constraint, tempD.Constraint)
}
// TODO(mattfarina): Note repo difference in a warning.
}
@@ -665,12 +653,12 @@
dep, req := d.Use.Get(root)
if dep != nil && v != nil {
- if v.Reference == "" && dep.Reference != "" {
- v.Reference = dep.Reference
+ if v.Constraint == nil && dep.Constraint != nil {
+ v.Constraint = dep.Constraint
// Clear the pin, if set, so the new version can be used.
- v.Pin = ""
+ //v.Pin = ""
dep = v
- } else if v.Reference != "" && dep.Reference != "" && v.Reference != dep.Reference {
+ } else if v.Constraint != nil && dep.Constraint != nil && v.Constraint.String() != dep.Constraint.String() {
dest := filepath.Join(d.Destination, filepath.FromSlash(v.Name))
dep = determineDependency(v, dep, dest, req)
} else {
@@ -689,13 +677,10 @@
}
} else {
// If we've gotten here we don't have any depenency objects.
- r, sp := util.NormalizeName(pkg)
+ r, _ := util.NormalizeName(pkg)
dep = &cfg.Dependency{
Name: r,
}
- if sp != "" {
- dep.Subpackages = []string{sp}
- }
if addTest {
d.Config.DevImports = append(d.Config.DevImports, dep)
} else {
@@ -705,7 +690,7 @@
err := VcsVersion(dep, d.Destination)
if err != nil {
- msg.Warn("Unable to set version on %s to %s. Err: %s", root, dep.Reference, err)
+ msg.Warn("Unable to set version on %s to %s. Err: %s", root, dep.Constraint, err)
e = err
}
@@ -716,110 +701,110 @@
repo, err := v.GetRepo(dest)
if err != nil {
singleWarn("Unable to access repo for %s\n", v.Name)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
- vIsRef := repo.IsReference(v.Reference)
- depIsRef := repo.IsReference(dep.Reference)
+ vIsRef := repo.IsReference(v.Constraint.String())
+ depIsRef := repo.IsReference(dep.Constraint.String())
// Both are references and they are different ones.
if vIsRef && depIsRef {
- singleWarn("Conflict: %s rev is currently %s, but %s wants %s\n", v.Name, v.Reference, req, dep.Reference)
+ singleWarn("Conflict: %s rev is currently %s, but %s wants %s\n", v.Name, v.Constraint, req, dep.Constraint)
displayCommitInfo(repo, v)
displayCommitInfo(repo, dep)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
} else if vIsRef {
// The current one is a reference and the suggestion is a SemVer constraint.
- con, err := semver.NewConstraint(dep.Reference)
+ con, err := semver.NewConstraint(dep.Constraint.String())
if err != nil {
- singleWarn("Version issue for %s: '%s' is neither a reference or semantic version constraint\n", dep.Name, dep.Reference)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleWarn("Version issue for %s: '%s' is neither a reference or semantic version constraint\n", dep.Name, dep.Constraint)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
- ver, err := semver.NewVersion(v.Reference)
+ ver, err := semver.NewVersion(v.Constraint.String())
if err != nil {
// The existing version is not a semantic version.
- singleWarn("Conflict: %s version is %s, but also asked for %s\n", v.Name, v.Reference, dep.Reference)
+ singleWarn("Conflict: %s version is %s, but also asked for %s\n", v.Name, v.Constraint, dep.Constraint)
displayCommitInfo(repo, v)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
if con.Matches(ver) == nil {
- singleInfo("Keeping %s %s because it fits constraint '%s'", v.Name, v.Reference, dep.Reference)
+ singleInfo("Keeping %s %s because it fits constraint '%s'", v.Name, v.Constraint, dep.Constraint)
return v
}
- singleWarn("Conflict: %s version is %s but does not meet constraint '%s'\n", v.Name, v.Reference, dep.Reference)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleWarn("Conflict: %s version is %s but does not meet constraint '%s'\n", v.Name, v.Constraint, dep.Constraint)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
} else if depIsRef {
- con, err := semver.NewConstraint(v.Reference)
+ con, err := semver.NewConstraint(v.Constraint.String())
if err != nil {
- singleWarn("Version issue for %s: '%s' is neither a reference or semantic version constraint\n", v.Name, v.Reference)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleWarn("Version issue for %s: '%s' is neither a reference or semantic version constraint\n", v.Name, v.Constraint)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
- ver, err := semver.NewVersion(dep.Reference)
+ ver, err := semver.NewVersion(dep.Constraint.String())
if err != nil {
- singleWarn("Conflict: %s version is %s, but also asked for %s\n", v.Name, v.Reference, dep.Reference)
+ singleWarn("Conflict: %s version is %s, but also asked for %s\n", v.Name, v.Constraint, dep.Constraint)
displayCommitInfo(repo, dep)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
if con.Matches(ver) == nil {
- v.Reference = dep.Reference
- singleInfo("Using %s %s because it fits constraint '%s'", v.Name, v.Reference, v.Reference)
+ v.Constraint = dep.Constraint
+ singleInfo("Using %s %s because it fits constraint '%s'", v.Name, v.Constraint, v.Constraint)
return v
}
- singleWarn("Conflict: %s semantic version constraint is %s but '%s' does not meet the constraint\n", v.Name, v.Reference, v.Reference)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleWarn("Conflict: %s semantic version constraint is %s but '%s' does not meet the constraint\n", v.Name, v.Constraint, v.Constraint)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
// Neither is a vcs reference and both could be semantic version
// constraints that are different.
- _, err = semver.NewConstraint(dep.Reference)
+ _, err = semver.NewConstraint(dep.Constraint.String())
if err != nil {
- // dd.Reference is not a reference or a valid constraint.
- singleWarn("Version %s %s is not a reference or valid semantic version constraint\n", dep.Name, dep.Reference)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ // dd.Constraint is not a reference or a valid constraint.
+ singleWarn("Version %s %s is not a reference or valid semantic version constraint\n", dep.Name, dep.Constraint)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
- _, err = semver.NewConstraint(v.Reference)
+ _, err = semver.NewConstraint(v.Constraint.String())
if err != nil {
- // existing.Reference is not a reference or a valid constraint.
+ // existing.Constraint is not a reference or a valid constraint.
// We really should never end up here.
- singleWarn("Version %s %s is not a reference or valid semantic version constraint\n", v.Name, v.Reference)
+ singleWarn("Version %s %s is not a reference or valid semantic version constraint\n", v.Name, v.Constraint)
- v.Reference = dep.Reference
- v.Pin = ""
- singleInfo("Using %s %s because it is a valid version", v.Name, v.Reference)
+ v.Constraint = dep.Constraint
+ //v.Pin = ""
+ singleInfo("Using %s %s because it is a valid version", v.Name, v.Constraint)
return v
}
// Both versions are constraints. Try to merge them.
// If either comparison has an || skip merging. That's complicated.
- ddor := strings.Index(dep.Reference, "||")
- eor := strings.Index(v.Reference, "||")
+ ddor := strings.Index(dep.Constraint.String(), "||")
+ eor := strings.Index(v.Constraint.String(), "||")
if ddor == -1 && eor == -1 {
// Add the comparisons together.
- newRef := v.Reference + ", " + dep.Reference
- v.Reference = newRef
- v.Pin = ""
- singleInfo("Combining %s semantic version constraints %s and %s", v.Name, v.Reference, dep.Reference)
+ // TODO(sdboyer) this all just reeeeeally needs to go
+ v.Constraint = v.Constraint.Intersect(dep.Constraint)
+ //v.Pin = ""
+ singleInfo("Combining %s semantic version constraints %s and %s", v.Name, v.Constraint, dep.Constraint)
return v
}
- singleWarn("Conflict: %s version is %s, but also asked for %s\n", v.Name, v.Reference, dep.Reference)
- singleInfo("Keeping %s %s", v.Name, v.Reference)
+ singleWarn("Conflict: %s version is %s, but also asked for %s\n", v.Name, v.Constraint, dep.Constraint)
+ singleInfo("Keeping %s %s", v.Name, v.Constraint)
return v
}
@@ -877,13 +862,13 @@
displayCommitInfoPrefix + "- subject (first line): %s\n"
func displayCommitInfo(repo vcs.Repo, dep *cfg.Dependency) {
- c, err := repo.CommitInfo(dep.Reference)
- ref := dep.Reference
+ ref := dep.Constraint.String()
+ c, err := repo.CommitInfo(ref)
if err == nil {
tgs, err2 := repo.TagsFromCommit(c.Commit)
if err2 == nil && len(tgs) > 0 {
- if tgs[0] != dep.Reference {
+ if tgs[0] != ref {
ref = ref + " (" + tgs[0] + ")"
}
}
diff --git a/repo/set_reference.go b/repo/set_reference.go
index f5891ac..e4367e3 100644
--- a/repo/set_reference.go
+++ b/repo/set_reference.go
@@ -47,7 +47,7 @@
}
cache.Lock(key)
if err := VcsVersion(dep, cwd); err != nil {
- msg.Err("Failed to set version on %s to %s: %s\n", dep.Name, dep.Reference, err)
+ msg.Err("Failed to set version on %s to %s: %s\n", dep.Name, dep.Constraint, err)
// Capture the error while making sure the concurrent
// operations don't step on each other.
diff --git a/repo/vcs.go b/repo/vcs.go
index ba84ca2..2f3b0cf 100644
--- a/repo/vcs.go
+++ b/repo/vcs.go
@@ -18,6 +18,7 @@
gpath "github.com/Masterminds/glide/path"
"github.com/Masterminds/semver"
v "github.com/Masterminds/vcs"
+ "github.com/sdboyer/gps"
)
// VcsUpdate updates to a particular checkout based on the VCS setting.
@@ -25,10 +26,10 @@
// If the dependency has already been pinned we can skip it. This is a
// faster path so we don't need to resolve it again.
- if dep.Pin != "" {
- msg.Debug("Dependency %s has already been pinned. Fetching updates skipped.", dep.Name)
- return nil
- }
+ //if dep.Pin != "" {
+ //msg.Debug("Dependency %s has already been pinned. Fetching updates skipped.", dep.Name)
+ //return nil
+ //}
if updated.Check(dep.Name) {
msg.Debug("%s was already updated, skipping.", dep.Name)
@@ -83,7 +84,7 @@
msg.Err("Unable to update vendored dependency %s.\n", dep.Name)
return err
}
- dep.UpdateAsVendored = true
+ //dep.UpdateAsVendored = true
if err = VcsGet(dep, dest, home, cache, cacheGopath, useGopath); err != nil {
msg.Warn("Unable to checkout %s\n", dep.Name)
@@ -132,21 +133,22 @@
// and that version is already checked out we can skip updating
// which is faster than going out to the Internet to perform
// an update.
- if dep.Reference != "" {
+ if dep.Constraint != nil {
version, err := repo.Version()
if err != nil {
return err
}
- ib, err := isBranch(dep.Reference, repo)
- if err != nil {
- return err
+
+ var ib bool
+ if cv, ok := dep.Constraint.(gps.Version); ok {
+ ib = cv.Type() == "branch"
}
// If the current version equals the ref and it's not a
// branch it's a tag or commit id so we can skip
// performing an update.
- if version == dep.Reference && !ib {
- msg.Debug("%s is already set to version %s. Skipping update.", dep.Name, dep.Reference)
+ if version == dep.Constraint.String() && !ib {
+ msg.Debug("%s is already set to version %s. Skipping update.", dep.Name, dep.Constraint)
return nil
}
}
@@ -166,24 +168,24 @@
// If the dependency has already been pinned we can skip it. This is a
// faster path so we don't need to resolve it again.
- if dep.Pin != "" {
- msg.Debug("Dependency %s has already been pinned. Setting version skipped.", dep.Name)
- return nil
- }
+ //if dep.Pin != "" {
+ //msg.Debug("Dependency %s has already been pinned. Setting version skipped.", dep.Name)
+ //return nil
+ //}
cwd := filepath.Join(vend, dep.Name)
// If there is no reference configured there is nothing to set.
- if dep.Reference == "" {
+ if dep.Constraint == nil {
// Before exiting update the pinned version
- repo, err := dep.GetRepo(cwd)
- if err != nil {
- return err
- }
- dep.Pin, err = repo.Version()
- if err != nil {
- return err
- }
+ //_, err := dep.GetRepo(cwd)
+ //if err != nil {
+ //return err
+ //}
+ //dep.Pin, err = repo.Version()
+ //if err != nil {
+ //return err
+ //}
return nil
}
@@ -202,7 +204,7 @@
return err
}
- ver := dep.Reference
+ ver := dep.Constraint.String()
// References in Git can begin with a ^ which is similar to semver.
// If there is a ^ prefix we assume it's a semver constraint rather than
// part of the git/VCS commit id.
@@ -250,10 +252,10 @@
if err := repo.UpdateVersion(ver); err != nil {
return err
}
- dep.Pin, err = repo.Version()
- if err != nil {
- return err
- }
+ //dep.Pin, err = repo.Version()
+ //if err != nil {
+ //return err
+ //}
}
return nil
@@ -306,7 +308,7 @@
// If there is no reference set on the dep we try to checkout
// the default branch.
- if dep.Reference == "" {
+ if dep.Constraint == nil {
db := defaultBranch(repo, home)
if db != "" {
err = repo.UpdateVersion(db)
@@ -477,32 +479,6 @@
//
// FIXME: Should this be moved to the dependency package?
func filterArchOs(dep *cfg.Dependency) bool {
- found := false
- if len(dep.Arch) > 0 {
- for _, a := range dep.Arch {
- if a == runtime.GOARCH {
- found = true
- }
- }
- // If it's not found, it should be filtered out.
- if !found {
- return true
- }
- }
-
- found = false
- if len(dep.Os) > 0 {
- for _, o := range dep.Os {
- if o == runtime.GOOS {
- found = true
- }
- }
- if !found {
- return true
- }
-
- }
-
return false
}
diff --git a/repo/vendored_cleanup.go b/repo/vendored_cleanup.go
index acbab91..1db6de9 100644
--- a/repo/vendored_cleanup.go
+++ b/repo/vendored_cleanup.go
@@ -20,23 +20,22 @@
}
for _, dep := range conf.Imports {
- if dep.UpdateAsVendored == true {
- msg.Info("Cleaning up vendored package %s\n", dep.Name)
+ //if dep.UpdateAsVendored == true {
+ msg.Info("Cleaning up vendored package %s\n", dep.Name)
- // Remove the VCS directory
- cwd := filepath.Join(vend, dep.Name)
- repo, err := dep.GetRepo(cwd)
- if err != nil {
- msg.Err("Error cleaning up %s:%s", dep.Name, err)
- continue
- }
- t := repo.Vcs()
- err = os.RemoveAll(cwd + string(os.PathSeparator) + "." + string(t))
- if err != nil {
- msg.Err("Error cleaning up VCS dir for %s:%s", dep.Name, err)
- }
+ // Remove the VCS directory
+ cwd := filepath.Join(vend, dep.Name)
+ repo, err := dep.GetRepo(cwd)
+ if err != nil {
+ msg.Err("Error cleaning up %s:%s", dep.Name, err)
+ continue
}
-
+ t := repo.Vcs()
+ err = os.RemoveAll(cwd + string(os.PathSeparator) + "." + string(t))
+ if err != nil {
+ msg.Err("Error cleaning up VCS dir for %s:%s", dep.Name, err)
+ }
+ //}
}
return nil