Adding back support for --no-recursive flag
diff --git a/action/get.go b/action/get.go
index 7b96782..cf5ed40 100644
--- a/action/get.go
+++ b/action/get.go
@@ -15,7 +15,7 @@
// Get fetches one or more dependencies and installs.
//
// This includes resolving dependency resolution and re-generating the lock file.
-func Get(names []string, installer *repo.Installer, insecure bool) {
+func Get(names []string, installer *repo.Installer, insecure, skipRecursive bool) {
base := gpath.Basepath()
EnsureGopath()
EnsureVendorDir()
@@ -38,19 +38,22 @@
// Prior to resolving dependencies we need to start working with a clone
// of the conf because we'll be making real changes to it.
confcopy := conf.Clone()
- installer.Config = confcopy
- // Get all repos and update them.
- // TODO: Can we streamline this in any way? The reason that we update all
- // of the dependencies is that we need to re-negotiate versions. For example,
- // if an existing dependency has the constraint >1.0 and this new package
- // adds the constraint <2.0, then this may re-resolve the existing dependency
- // to be betwee 1.0 and 2.0. But changing that dependency may then result
- // in that dependency's dependencies changing... so we sorta do the whole
- // thing to be safe.
- err = installer.Update(confcopy)
- if err != nil {
- msg.Die("Could not update packages: %s", err)
+ if !skipRecursive {
+ installer.Config = confcopy
+
+ // Get all repos and update them.
+ // TODO: Can we streamline this in any way? The reason that we update all
+ // of the dependencies is that we need to re-negotiate versions. For example,
+ // if an existing dependency has the constraint >1.0 and this new package
+ // adds the constraint <2.0, then this may re-resolve the existing dependency
+ // to be betwee 1.0 and 2.0. But changing that dependency may then result
+ // in that dependency's dependencies changing... so we sorta do the whole
+ // thing to be safe.
+ err = installer.Update(confcopy)
+ if err != nil {
+ msg.Die("Could not update packages: %s", err)
+ }
}
// Set Reference
@@ -67,9 +70,12 @@
if err := conf.WriteFile(glidefile); err != nil {
msg.Die("Failed to write glide YAML file: %s", err)
}
-
- // Write lock
- writeLock(conf, confcopy, base)
+ if !skipRecursive {
+ // Write lock
+ writeLock(conf, confcopy, base)
+ } else {
+ msg.Warn("Skipping lockfile generation because full dependency tree is not being calculated")
+ }
}
func writeLock(conf, confcopy *cfg.Config, base string) {
diff --git a/action/update.go b/action/update.go
index a671e8d..47f5e47 100644
--- a/action/update.go
+++ b/action/update.go
@@ -11,7 +11,7 @@
)
// Update updates repos and the lock file from the main glide yaml.
-func Update(installer *repo.Installer) {
+func Update(installer *repo.Installer, skipRecursive bool) {
base := "."
EnsureGopath()
EnsureVendorDir()
@@ -35,40 +35,42 @@
msg.Die("Failed to set initial config references: %s", err)
}
- // Prior to resolving dependencies we need to start working with a clone
- // of the conf because we'll be making real changes to it.
confcopy := conf.Clone()
- installer.Config = confcopy
- // Get all repos and update them.
- err := installer.Update(confcopy)
- if err != nil {
- msg.Die("Could not update packages: %s", err)
+ if !skipRecursive {
+ // Prior to resolving dependencies we need to start working with a clone
+ // of the conf because we'll be making real changes to it.
+ installer.Config = confcopy
+
+ // Get all repos and update them.
+ err := installer.Update(confcopy)
+ if err != nil {
+ msg.Die("Could not update packages: %s", err)
+ }
+
+ // TODO: There is no support here for importing Godeps, GPM, and GB files.
+ // I think that all we really need to do now is hunt for these files, and then
+ // roll their version numbers into the config file.
+
+ // Set references. There may be no remaining references to set since the
+ // installer set them as it went to make sure it parsed the right imports
+ // from the right version of the package.
+ msg.Info("Setting references for remaining imports")
+ if err := repo.SetReference(confcopy); err != nil {
+ msg.Error("Failed to set references: %s (Skip to cleanup)", err)
+ }
+
+ // Flatten
+ // I don't think we need flatten anymore. The installer.Update logic should
+ // find and install all of the necessary dependencies. And then the version
+ // setting logic should correctly set versions.
+ //
+ // The edge case, which exist today (but innoculously) is where an older
+ // version requires dependencies that a newer repo checkout does not
+ // have. In that case, it seems that we may get to the point where we'd
+ // have to run Update twice.
+ msg.Warn("Flatten not implemented.")
}
-
- // TODO: There is no support here for importing Godeps, GPM, and GB files.
- // I think that all we really need to do now is hunt for these files, and then
- // roll their version numbers into the config file.
-
- // Set references. There may be no remaining references to set since the
- // installer set them as it went to make sure it parsed the right imports
- // from the right version of the package.
- msg.Info("Setting references for remaining imports")
- if err := repo.SetReference(confcopy); err != nil {
- msg.Error("Failed to set references: %s (Skip to cleanup)", err)
- }
-
- // Flatten
- // I don't think we need flatten anymore. The installer.Update logic should
- // find and install all of the necessary dependencies. And then the version
- // setting logic should correctly set versions.
- //
- // The edge case, which exist today (but innoculously) is where an older
- // version requires dependencies that a newer repo checkout does not
- // have. In that case, it seems that we may get to the point where we'd
- // have to run Update twice.
- msg.Warn("Flatten not implemented.")
-
// Vendored cleanup
// VendoredCleanup. This should ONLY be run if UpdateVendored was specified.
if installer.UpdateVendored {
@@ -84,50 +86,20 @@
// from the project. A removed dependency should warn and an added dependency
// should be added to the glide.yaml file. See issue #193.
- // Write lock
- hash, err := conf.Hash()
- if err != nil {
- msg.Die("Failed to generate config hash. Unable to generate lock file.")
+ if !skipRecursive {
+ // Write lock
+ hash, err := conf.Hash()
+ if err != nil {
+ msg.Die("Failed to generate config hash. Unable to generate lock file.")
+ }
+ lock := cfg.NewLockfile(confcopy.Imports, hash)
+ if err := lock.WriteFile(filepath.Join(base, gpath.LockFile)); err != nil {
+ msg.Error("Could not write lock file to %s: %s", base, err)
+ return
+ }
+
+ msg.Info("Project relies on %d dependencies.", len(confcopy.Imports))
+ } else {
+ msg.Warn("Skipping lockfile generation because full dependency tree is not being calculated")
}
- lock := cfg.NewLockfile(confcopy.Imports, hash)
- if err := lock.WriteFile(filepath.Join(base, gpath.LockFile)); err != nil {
- msg.Error("Could not write lock file to %s: %s", base, err)
- return
- }
-
- msg.Info("Project relies on %d dependencies.", len(confcopy.Imports))
-
- /*
- Does(cmd.VendoredSetup, "cfg").
- Using("conf").From("cxt:cfg").
- Using("update").From("cxt:updateVendoredDeps").
-
- Does(cmd.UpdateImports, "dependencies").
- Using("conf").From("cxt:cfg").
- Using("force").From("cxt:forceUpdate").
- Using("packages").From("cxt:packages").
- Using("home").From("cxt:home").
- Using("cache").From("cxt:useCache").
- Using("cacheGopath").From("cxt:cacheGopath").
- Using("useGopath").From("cxt:useGopath").
- Does(cmd.SetReference, "version").Using("conf").From("cxt:cfg").
- Does(cmd.Flatten, "flattened").Using("conf").From("cxt:cfg").
- Using("packages").From("cxt:packages").
- Using("force").From("cxt:forceUpdate").
- Using("skip").From("cxt:skipFlatten").
- Using("home").From("cxt:home").
- Using("cache").From("cxt:useCache").
- Using("cacheGopath").From("cxt:cacheGopath").
- Using("useGopath").From("cxt:useGopath").
- Does(cmd.VendoredCleanUp, "_").
- Using("conf").From("cxt:flattened").
- Using("update").From("cxt:updateVendoredDeps").
- Does(cmd.WriteYaml, "out").
- Using("conf").From("cxt:cfg").
- Using("filename").From("cxt:toPath").
- Using("toStdout").From("cxt:toStdout").
- Does(cmd.WriteLock, "lock").
- Using("lockfile").From("cxt:Lockfile").
- Using("skip").From("cxt:skipFlatten")
- */
}
diff --git a/glide.go b/glide.go
index 97e0dfb..e7900a8 100644
--- a/glide.go
+++ b/glide.go
@@ -202,7 +202,7 @@
}
packages := []string(c.Args())
insecure := c.Bool("insecure")
- action.Get(packages, inst, insecure)
+ action.Get(packages, inst, insecure, c.Bool("no-recursive"))
},
},
{
@@ -344,10 +344,6 @@
Usage: "Delete vendor packages not specified in config.",
},
cli.BoolFlag{
- Name: "no-recursive, quick",
- Usage: "Disable updating dependencies' dependencies. Only update things in glide.yaml. (DEPRECATED: This no longer has any effect.)",
- },
- cli.BoolFlag{
Name: "force",
Usage: "If there was a change in the repo or VCS switch to new one. Warning: changes will be lost.",
},
@@ -460,7 +456,7 @@
Home: gpath.Home(),
}
- action.Update(installer)
+ action.Update(installer, c.Bool("no-recursive"))
},
},
{