diff --git a/cmd/dep/ensure.go b/cmd/dep/ensure.go index 9771798af3..60d9c7659e 100644 --- a/cmd/dep/ensure.go +++ b/cmd/dep/ensure.go @@ -7,32 +7,48 @@ package main import ( "bytes" "flag" - "fmt" "go/build" - "log" + "os" + "path/filepath" + "sort" "strings" "github.com/golang/dep" "github.com/golang/dep/internal/gps" + "github.com/golang/dep/internal/gps/paths" "github.com/golang/dep/internal/gps/pkgtree" "github.com/pkg/errors" ) const ensureShortHelp = `Ensure a dependency is safely vendored in the project` const ensureLongHelp = ` -Ensure is used to fetch project dependencies into the vendor folder, as well as -to set version constraints for specific dependencies. It takes user input, -solves the updated dependency graph of the project, writes any changes to the -lock file, and places dependencies in the vendor folder. +Project spec: -Package spec: + [:alt source URL][@] + + +Ensure gets a project into a complete, reproducible, and likely compilable state: + + * All non-stdlib imports are fulfilled + * All rules in Gopkg.toml are respected + * Gopkg.lock records precise versions for all dependencies + * vendor/ is populated according to Gopkg.lock + +Ensure has fast techniques to determine that some of these steps may be +unnecessary. If that determination is made, ensure may skip some steps. Flags +may be passed to bypass these checks; -vendor-only will allow an out-of-date +Gopkg.lock to populate vendor/, and -no-vendor will update Gopkg.lock (if +needed), but never touch vendor/. + +The effect of passing project spec arguments varies slightly depending on the +combination of flags that are passed. - [:alt location][@] Examples: - dep ensure Populate vendor from existing manifest and lock - dep ensure github.com/pkg/foo@^1.0.1 Update a specific dependency to a specific version + dep ensure Populate vendor from existing Gopkg.toml and Gopkg.lock + dep ensure -add github.com/pkg/foo Introduce a named dependency at its newest version + dep ensure -add github.com/pkg/foo@^1.0.1 Introduce a named dependency with a particular constraint For more detailed usage examples, see dep ensure -examples. ` @@ -44,58 +60,79 @@ dep ensure specified there. Otherwise, use the most recent version that can satisfy the constraints in the manifest file. -dep ensure -update +dep ensure -vendor-only - Update all dependencies to the latest versions allowed by the manifest, - ignoring any versions specified in the lock file. Update the lock file with - any changes. + Write vendor/ from an exising Gopkg.lock file, without first verifying that + the lock is in sync with imports and Gopkg.toml. (This may be useful for + e.g. strategically layering a Docker images) -dep ensure -update github.com/pkg/foo github.com/pkg/bar +dep ensure -add github.com/pkg/foo github.com/pkg/foo/bar - Update a list of dependencies to the latest versions allowed by the manifest, - ignoring any versions specified in the lock file. Update the lock file with - any changes. + Introduce one or more dependencies, at their newest version, ensuring that + specific packages are present in Gopkg.lock and vendor/. Also, append a + corresponding constraint to Gopkg.toml. -dep ensure github.com/pkg/foo@^1.0.1 + Note: packages introduced in this way will disappear on the next "dep + ensure" if an import statement is not added first. - Constrain pkg/foo to the latest release matching >= 1.0.1, < 2.0.0, and - place that release in the vendor folder. If a constraint was previously set - in the manifest, this resets it. This form of constraint strikes a good - balance of safety and flexibility, and should be preferred for libraries. +dep ensure -add github.com/pkg/foo/subpkg@1.0.0 bitbucket.org/pkg/bar/baz@master -dep ensure github.com/pkg/foo@~1.0.1 + Append version constraints to Gopkg.toml for one or more packages, if no + such rules already exist. - Same as above, but choose any release matching 1.0.x, preferring latest. + If the named packages are not already imported, also ensure they are present + in Gopkg.lock and vendor/. As in the preceding example, packages introduced + in this way will disappear on the next "dep ensure" if an import statement + is not added first. -dep ensure github.com/pkg/foo:git.internal.com/alt/foo +dep ensure -add github.com/pkg/foo:git.internal.com/alt/foo - Fetch the dependency from a different location. + Specify an alternate location to treat as the upstream source for a dependency. -dep ensure -override github.com/pkg/foo@^1.0.1 +dep ensure -update github.com/pkg/foo github.com/pkg/bar + + Update a list of dependencies to the latest versions allowed by Gopkg.toml, + ignoring any versions recorded in Gopkg.lock. Write the results to + Gopkg.lock and vendor/. + +dep ensure -update + + Update all dependencies to the latest versions allowed by Gopkg.toml, + ignoring any versions recorded in Gopkg.lock. Update the lock file with any + changes. (NOTE: Not recommended. Updating one/some dependencies at a time is + preferred.) + +dep ensure -update -no-vendor + + As above, but only modify Gopkg.lock; leave vendor/ unchanged. - Forcefully and transitively override any constraint for this dependency. - Overrides are powerful, but harmful in the long term. They should be used as - a last resort, especially if your project may be imported by others. ` -func (cmd *ensureCommand) Name() string { return "ensure" } -func (cmd *ensureCommand) Args() string { return "[spec...]" } +func (cmd *ensureCommand) Name() string { return "ensure" } +func (cmd *ensureCommand) Args() string { + return "[-update | -add] [-no-vendor | -vendor-only] [-dry-run] [...]" +} func (cmd *ensureCommand) ShortHelp() string { return ensureShortHelp } func (cmd *ensureCommand) LongHelp() string { return ensureLongHelp } func (cmd *ensureCommand) Hidden() bool { return false } func (cmd *ensureCommand) Register(fs *flag.FlagSet) { fs.BoolVar(&cmd.examples, "examples", false, "print detailed usage examples") - fs.BoolVar(&cmd.update, "update", false, "ensure dependencies are at the latest version allowed by the manifest") - fs.BoolVar(&cmd.dryRun, "n", false, "dry run, don't actually ensure anything") - fs.Var(&cmd.overrides, "override", "specify an override constraint spec (repeatable)") + fs.BoolVar(&cmd.update, "update", false, "update the named dependencies (or all, if none are named) in Gopkg.lock to the latest allowed by Gopkg.toml") + fs.BoolVar(&cmd.add, "add", false, "add new dependencies, or populate Gopkg.toml with constraints for existing dependencies") + fs.BoolVar(&cmd.vendorOnly, "vendor-only", false, "populate vendor/ from Gopkg.lock without updating it first") + fs.BoolVar(&cmd.noVendor, "no-vendor", false, "update Gopkg.lock (if needed), but do not update vendor/") + fs.BoolVar(&cmd.dryRun, "dry-run", false, "only report the changes that would be made") } type ensureCommand struct { - examples bool - update bool - dryRun bool - overrides stringSlice + examples bool + update bool + add bool + noVendor bool + vendorOnly bool + dryRun bool + overrides stringSlice } func (cmd *ensureCommand) Run(ctx *dep.Ctx, args []string) error { @@ -104,6 +141,10 @@ func (cmd *ensureCommand) Run(ctx *dep.Ctx, args []string) error { return nil } + if err := cmd.validateFlags(); err != nil { + return err + } + p, err := ctx.LoadProject() if err != nil { return err @@ -130,27 +171,104 @@ func (cmd *ensureCommand) Run(ctx *dep.Ctx, args []string) error { return err } - if cmd.update { - applyUpdateArgs(args, ¶ms) - } else { - err := applyEnsureArgs(ctx.Err, args, cmd.overrides, p, sm, ¶ms) + if cmd.add { + return cmd.runAdd(ctx, args, p, sm, params) + } else if cmd.update { + return cmd.runUpdate(ctx, args, p, sm, params) + } + return cmd.runDefault(ctx, args, p, sm, params) +} + +func (cmd *ensureCommand) validateFlags() error { + if cmd.add && cmd.update { + return errors.New("cannot pass both -add and -update") + } + + if cmd.vendorOnly { + if cmd.update { + return errors.New("-vendor-only makes -update a no-op; cannot pass them together") + } + if cmd.add { + return errors.New("-vendor-only makes -add a no-op; cannot pass them together") + } + if cmd.noVendor { + // TODO(sdboyer) can't think of anything not snarky right now + return errors.New("really?") + } + } + return nil +} + +func (cmd *ensureCommand) runDefault(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error { + // Bare ensure doesn't take any args. + if len(args) != 0 { + if cmd.vendorOnly { + return errors.Errorf("dep ensure -vendor-only only populates vendor/ from %s; it takes no spec arguments", dep.LockName) + } + return errors.New("dep ensure only takes spec arguments with -add or -update") + } + + if cmd.vendorOnly { + if p.Lock == nil { + return errors.Errorf("no %s exists from which to populate vendor/", dep.LockName) + } + // Pass the same lock as old and new so that the writer will observe no + // difference and choose not to write it out. + sw, err := dep.NewSafeWriter(nil, p.Lock, p.Lock, dep.VendorAlways) if err != nil { return err } + + if cmd.dryRun { + ctx.Out.Printf("Would have populated vendor/ directory from %s", dep.LockName) + return nil + } + + return errors.WithMessage(sw.Write(p.AbsRoot, sm, true), "grouped write of manifest, lock and vendor") } solver, err := gps.Prepare(params, sm) if err != nil { - return errors.Wrap(err, "ensure Prepare") + return errors.Wrap(err, "prepare solver") + } + + if p.Lock != nil && bytes.Equal(p.Lock.InputHash(), solver.HashInputs()) { + // Memo matches, so there's probably nothing to do. + if cmd.noVendor { + // The user said not to touch vendor/, so definitely nothing to do. + return nil + } + + if ctx.Verbose { + ctx.Out.Printf("%s was already in sync with imports and %s, recreating vendor/ directory", dep.LockName, dep.ManifestName) + } + + // TODO(sdboyer) The desired behavior at this point is to determine + // whether it's necessary to write out vendor, or if it's already + // consistent with the lock. However, we haven't yet determined what + // that "verification" is supposed to look like (#121); in the meantime, + // we unconditionally write out vendor/ so that `dep ensure`'s behavior + // is maximally compatible with what it will eventually become. + sw, err := dep.NewSafeWriter(nil, p.Lock, p.Lock, dep.VendorAlways) + if err != nil { + return err + } + + if cmd.dryRun { + ctx.Out.Printf("Would have populated vendor/ directory from %s", dep.LockName) + return nil + } + + return errors.WithMessage(sw.Write(p.AbsRoot, sm, true), "grouped write of manifest, lock and vendor") } + solution, err := solver.Solve() if err != nil { handleAllTheFailuresOfTheWorld(err) return errors.Wrap(err, "ensure Solve()") } - newLock := dep.LockFromSolution(solution) - sw, err := dep.NewSafeWriter(nil, p.Lock, newLock, dep.VendorAlways) + sw, err := dep.NewSafeWriter(nil, p.Lock, dep.LockFromSolution(solution), dep.VendorOnChanged) if err != nil { return err } @@ -161,76 +279,360 @@ func (cmd *ensureCommand) Run(ctx *dep.Ctx, args []string) error { return errors.Wrap(sw.Write(p.AbsRoot, sm, false), "grouped write of manifest, lock and vendor") } -func applyUpdateArgs(args []string, params *gps.SolveParameters) { - // When -update is specified without args, allow every project to change versions, regardless of the lock file +func (cmd *ensureCommand) runUpdate(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error { + if p.Lock == nil { + return errors.Errorf("-update works by updating the versions recorded in %s, but %s does not exist", dep.LockName, dep.LockName) + } + + // We'll need to discard this prepared solver as later work changes params, + // but solver preparation is cheap and worth doing up front in order to + // perform the fastpath check of hash comparison. + solver, err := gps.Prepare(params, sm) + if err != nil { + return errors.Wrap(err, "fastpath solver prepare") + } + + // Compare the hashes. If they're not equal, bail out and ask the user to + // run a straight `dep ensure` before updating. This is handholding the + // user a bit, but the extra effort required is minimal, and it ensures the + // user is isolating variables in the event of solve problems (was it the + // "pending" changes, or the -update that caused the problem?). + // TODO(sdboyer) reduce this to a warning? + if !bytes.Equal(p.Lock.InputHash(), solver.HashInputs()) { + return errors.Errorf("%s and %s are out of sync. Run a plain dep ensure to resync them before attempting to -update", dep.ManifestName, dep.LockName) + } + + // When -update is specified without args, allow every dependency to change + // versions, regardless of the lock file. if len(args) == 0 { params.ChangeAll = true - return } - // Allow any of specified project versions to change, regardless of the lock file + // Allow any of specified project versions to change, regardless of the lock + // file. for _, arg := range args { + // Ensure the provided path has a deducible project root + // TODO(sdboyer) do these concurrently + pc, path, err := getProjectConstraint(arg, sm) + if err != nil { + // TODO(sdboyer) return all errors, not just the first one we encounter + // TODO(sdboyer) ensure these errors are contextualized in a sensible way for -update + return err + } + if path != string(pc.Ident.ProjectRoot) { + // TODO(sdboyer): does this really merit an abortive error? + return errors.Errorf("%s is not a project root, try %s instead", path, pc.Ident.ProjectRoot) + } + + if !p.Lock.HasProjectWithRoot(pc.Ident.ProjectRoot) { + return errors.Errorf("%s is not present in %s, cannot -update it", pc.Ident.ProjectRoot, dep.LockName) + } + + if pc.Ident.Source != "" { + return errors.Errorf("cannot specify alternate sources on -update (%s)", pc.Ident.Source) + } + + if !gps.IsAny(pc.Constraint) { + // TODO(sdboyer) constraints should be allowed to allow solves that + // target particular versions while remaining within declared constraints + return errors.Errorf("version constraint %s passed for %s, but -update follows constraints declared in %s, not CLI arguments", pc.Constraint, pc.Ident.ProjectRoot, dep.ManifestName) + } + params.ToChange = append(params.ToChange, gps.ProjectRoot(arg)) } + + // Re-prepare a solver now that our params are complete. + solver, err = gps.Prepare(params, sm) + if err != nil { + return errors.Wrap(err, "fastpath solver prepare") + } + solution, err := solver.Solve() + if err != nil { + // TODO(sdboyer) special handling for warning cases as described in spec + // - e.g., named projects did not upgrade even though newer versions + // were available. + handleAllTheFailuresOfTheWorld(err) + return errors.Wrap(err, "ensure Solve()") + } + + sw, err := dep.NewSafeWriter(nil, p.Lock, dep.LockFromSolution(solution), dep.VendorOnChanged) + if err != nil { + return err + } + if cmd.dryRun { + return sw.PrintPreparedActions(ctx.Out) + } + + return errors.Wrap(sw.Write(p.AbsRoot, sm, false), "grouped write of manifest, lock and vendor") } -func applyEnsureArgs(logger *log.Logger, args []string, overrides stringSlice, p *dep.Project, sm gps.SourceManager, params *gps.SolveParameters) error { - var errs []error +func (cmd *ensureCommand) runAdd(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error { + if len(args) == 0 { + return errors.New("must specify at least one project or package to -add") + } + + // We'll need to discard this prepared solver as later work changes params, + // but solver preparation is cheap and worth doing up front in order to + // perform the fastpath check of hash comparison. + solver, err := gps.Prepare(params, sm) + if err != nil { + return errors.Wrap(err, "fastpath solver prepare") + } + + // Compare the hashes. If they're not equal, bail out and ask the user to + // run a straight `dep ensure` before updating. This is handholding the + // user a bit, but the extra effort required is minimal, and it ensures the + // user is isolating variables in the event of solve problems (was it the + // "pending" changes, or the -add that caused the problem?). + // TODO(sdboyer) reduce this to a warning? + if p.Lock != nil && !bytes.Equal(p.Lock.InputHash(), solver.HashInputs()) { + return errors.Errorf("%s and %s are out of sync. Run a plain dep ensure to resync them before attempting to -add", dep.ManifestName, dep.LockName) + } + + rm, _ := params.RootPackageTree.ToReachMap(true, true, false, p.Manifest.IgnoredPackages()) + + // TODO(sdboyer) re-enable this once we ToReachMap() intelligently filters out normally-excluded (_*, .*), dirs from errmap + //rm, errmap := params.RootPackageTree.ToReachMap(true, true, false, p.Manifest.IgnoredPackages()) + // Having some problematic internal packages isn't cause for termination, + // but the user needs to be warned. + //for fail, err := range errmap { + //if _, is := err.Err.(*build.NoGoError); !is { + //ctx.Err.Printf("Warning: %s, %s", fail, err) + //} + //} + + // Compile unique sets of 1) all external packages imported or required, and + // 2) the project roots under which they fall. + exmap := make(map[string]bool) + exrmap := make(map[gps.ProjectRoot]bool) + + for _, ex := range append(rm.FlattenFn(paths.IsStandardImportPath), p.Manifest.Required...) { + exmap[ex] = true + root, err := sm.DeduceProjectRoot(ex) + if err != nil { + // This should be very uncommon to hit, as it entails that we + // couldn't deduce the root for an import, but that some previous + // solve run WAS able to deduce the root. It's most likely to occur + // if the user has e.g. not connected to their organization's VPN, + // and thus cannot access an internal go-get metadata service. + return errors.Wrapf(err, "could not deduce project root for %s", ex) + } + exrmap[root] = true + } + + // Note: these flags are only partialy used by the latter parts of the + // algorithm; rather, it relies on inference. However, they remain in their + // entirety as future needs may make further use of them, being a handy, + // terse way of expressing the original context of the arg inputs. + type addType uint8 + const ( + // Straightforward case - this induces a temporary require, and thus + // a warning message about it being ephemeral. + isInManifest addType = 1 << iota + // If solving works, we'll pull this constraint from the in-memory + // manifest (where we recorded it earlier) and then append it to the + // manifest on disk. + isInImportsWithConstraint + // If solving works, we'll extract a constraint from the lock and + // append it into the manifest on disk, similar to init's behavior. + isInImportsNoConstraint + // This gets a message AND a hoist from the solution up into the + // manifest on disk. + isInNeither + ) + + type addInstruction struct { + id gps.ProjectIdentifier + ephReq map[string]bool + constraint gps.Constraint + typ addType + } + addInstructions := make(map[gps.ProjectRoot]addInstruction) + for _, arg := range args { - pc, err := getProjectConstraint(arg, sm) + // TODO(sdboyer) return all errors, not just the first one we encounter + // TODO(sdboyer) do these concurrently? + pc, path, err := getProjectConstraint(arg, sm) if err != nil { - errs = append(errs, err) - continue + // TODO(sdboyer) ensure these errors are contextualized in a sensible way for -add + return err } - if gps.IsAny(pc.Constraint) && pc.Ident.Source == "" { - // If the input specified neither a network name nor a constraint, - // then the strict thing to do would be to remove the entry - // entirely. But that would probably be quite surprising for users, - // and it's what rm is for, so just ignore the input. - // - // TODO(sdboyer): for this case - or just in general - do we want to - // add project args to the requires list temporarily for this run? - if _, has := p.Manifest.Constraints[pc.Ident.ProjectRoot]; !has { - logger.Printf("dep: No constraint or alternate source specified for %q, omitting from manifest\n", pc.Ident.ProjectRoot) + inManifest := p.Manifest.HasConstraintsOn(pc.Ident.ProjectRoot) + inImports := exrmap[pc.Ident.ProjectRoot] + if inManifest && inImports { + return errors.Errorf("nothing to -add, %s is already in %s and the project's direct imports or required list", pc.Ident.ProjectRoot, dep.ManifestName) + } + + err = sm.SyncSourceFor(pc.Ident) + if err != nil { + return errors.Wrapf(err, "failed to fetch source for %s", pc.Ident.ProjectRoot) + } + + someConstraint := !gps.IsAny(pc.Constraint) || pc.Ident.Source != "" + + instr, has := addInstructions[pc.Ident.ProjectRoot] + if has { + // Multiple packages from the same project were specified as + // arguments; make sure they agree on declared constraints. + // TODO(sdboyer) until we have a general method for checking constraint equality, only allow one to declare + if someConstraint { + if !gps.IsAny(instr.constraint) || instr.id.Source != "" { + return errors.Errorf("can only specify rules once per project being added; rules were given at least twice for %s", pc.Ident.ProjectRoot) + } + instr.constraint = pc.Constraint + instr.id = pc.Ident } - // If it's already in the manifest, no need to log - continue + } else { + instr.ephReq = make(map[string]bool) + instr.constraint = pc.Constraint + instr.id = pc.Ident } - p.Manifest.Constraints[pc.Ident.ProjectRoot] = gps.ProjectProperties{ - Source: pc.Ident.Source, - Constraint: pc.Constraint, + if inManifest { + if someConstraint { + return errors.Errorf("%s already contains rules for %s, cannot specify a version constraint or alternate source", dep.ManifestName, path) + } + + instr.ephReq[path] = true + instr.typ |= isInManifest + } else if inImports { + if !someConstraint { + if exmap[path] { + return errors.Errorf("%s is already imported or required, so -add is only valid with a constraint", path) + } + + // No constraints, but the package isn't imported; require it. + // TODO(sdboyer) this case seems like it's getting overly specific and risks muddying the water more than it helps + instr.ephReq[path] = true + instr.typ |= isInImportsNoConstraint + } else { + // Don't require on this branch if the path was a ProjectRoot; + // most common here will be the user adding constraints to + // something they already imported, and if they specify the + // root, there's a good chance they don't actually want to + // require the project's root package, but are just trying to + // indicate which project should receive the constraints. + if !exmap[path] && string(pc.Ident.ProjectRoot) != path { + instr.ephReq[path] = true + } + instr.typ |= isInImportsWithConstraint + } + } else { + instr.typ |= isInNeither + instr.ephReq[path] = true } + + addInstructions[pc.Ident.ProjectRoot] = instr } - for _, ovr := range overrides { - pc, err := getProjectConstraint(ovr, sm) - if err != nil { - errs = append(errs, err) - continue + // We're now sure all of our add instructions are individually and mutually + // valid, so it's safe to begin modifying the input parameters. + for pr, instr := range addInstructions { + // The arg processing logic above only adds to the ephReq list if + // that package definitely needs to be on that list, so we don't + // need to check instr.typ here - if it's in instr.ephReq, it + // definitely needs to be added to the manifest's required list. + for path := range instr.ephReq { + p.Manifest.Required = append(p.Manifest.Required, path) } - // Empty overrides are fine (in contrast to deps), because they actually - // carry meaning - they force the constraints entirely open for a given - // project. Inadvisable, but meaningful. - - p.Manifest.Ovr[pc.Ident.ProjectRoot] = gps.ProjectProperties{ - Source: pc.Ident.Source, - Constraint: pc.Constraint, + // Only two branches can possibly be adding rules, though the + // isInNeither case may or may not have an empty constraint. + if instr.typ&(isInNeither|isInImportsWithConstraint) != 0 { + p.Manifest.Constraints[pr] = gps.ProjectProperties{ + Source: instr.id.Source, + Constraint: instr.constraint, + } } } - if len(errs) > 0 { - var buf bytes.Buffer - for _, err := range errs { - fmt.Fprintln(&buf, err) + // Re-prepare a solver now that our params are complete. + solver, err = gps.Prepare(params, sm) + if err != nil { + return errors.Wrap(err, "fastpath solver prepare") + } + solution, err := solver.Solve() + if err != nil { + // TODO(sdboyer) detect if the failure was specifically about some of the -add arguments + handleAllTheFailuresOfTheWorld(err) + return errors.Wrap(err, "ensure Solve()") + } + + // Prep post-actions and feedback from adds. + var reqlist []string + appender := &dep.Manifest{ + Constraints: make(gps.ProjectConstraints), + } + for pr, instr := range addInstructions { + for path := range instr.ephReq { + reqlist = append(reqlist, path) } - return errors.New(buf.String()) + if !gps.IsAny(instr.constraint) || instr.id.Source != "" { + appender.Constraints[pr] = gps.ProjectProperties{ + Source: instr.id.Source, + Constraint: instr.constraint, + } + //} else { + // TODO(sdboyer) hoist a constraint into the manifest from the lock + } } - return nil + extra, err := appender.MarshalTOML() + if err != nil { + return errors.Wrap(err, "could not marshal manifest into TOML") + } + sort.Strings(reqlist) + + sw, err := dep.NewSafeWriter(nil, p.Lock, dep.LockFromSolution(solution), dep.VendorOnChanged) + if err != nil { + return err + } + + if cmd.dryRun { + return sw.PrintPreparedActions(ctx.Out) + } + + if err := errors.Wrap(sw.Write(p.AbsRoot, sm, true), "grouped write of manifest, lock and vendor"); err != nil { + return err + } + + // FIXME(sdboyer) manifest writes ABSOLUTELY need verification - follow up! + f, err := os.OpenFile(filepath.Join(p.AbsRoot, dep.ManifestName), os.O_APPEND|os.O_WRONLY, 0666) + if err != nil { + return errors.Wrapf(err, "opening %s failed", dep.ManifestName) + } + + if _, err := f.Write(extra); err != nil { + f.Close() + return errors.Wrapf(err, "writing to %s failed", dep.ManifestName) + } + + switch len(reqlist) { + case 0: + // nothing to tell the user + case 1: + if cmd.noVendor { + ctx.Out.Printf("%q is not imported by your project, and has been temporarily added to %s.\n", reqlist[0], dep.LockName) + ctx.Out.Printf("If you run \"dep ensure\" again before actually importing it, it will disappear from %s. Running \"dep ensure -vendor-only\" is safe, and will guarantee it is present in vendor/.", dep.LockName) + } else { + ctx.Out.Printf("%q is not imported by your project, and has been temporarily added to %s and vendor/.\n", reqlist[0], dep.LockName) + ctx.Out.Printf("If you run \"dep ensure\" again before actually importing it, it will disappear from %s and vendor/.", dep.LockName) + } + default: + if cmd.noVendor { + ctx.Out.Printf("The following packages are not imported by your project, and have been temporarily added to %s:\n", dep.LockName) + ctx.Out.Printf("\t%s\n", strings.Join(reqlist, "\n\t")) + ctx.Out.Printf("If you run \"dep ensure\" again before actually importing them, they will disappear from %s. Running \"dep ensure -vendor-only\" is safe, and will guarantee they are present in vendor/.", dep.LockName) + } else { + ctx.Out.Printf("The following packages are not imported by your project, and have been temporarily added to %s and vendor/:\n", dep.LockName) + ctx.Out.Printf("\t%s\n", strings.Join(reqlist, "\n\t")) + ctx.Out.Printf("If you run \"dep ensure\" again before actually importing them, they will disappear from %s and vendor/.", dep.LockName) + } + } + + return errors.Wrapf(f.Close(), "closing %s", dep.ManifestName) } type stringSlice []string @@ -246,15 +648,14 @@ func (s *stringSlice) Set(value string) error { *s = append(*s, value) return nil } - -func getProjectConstraint(arg string, sm gps.SourceManager) (gps.ProjectConstraint, error) { +func getProjectConstraint(arg string, sm gps.SourceManager) (gps.ProjectConstraint, string, error) { emptyPC := gps.ProjectConstraint{ Constraint: gps.Any(), // default to any; avoids panics later } // try to split on '@' // When there is no `@`, use any version - versionStr := "*" + var versionStr string atIndex := strings.Index(arg, "@") if atIndex > 0 { parts := strings.SplitN(arg, "@", 2) @@ -275,19 +676,15 @@ func getProjectConstraint(arg string, sm gps.SourceManager) (gps.ProjectConstrai pr, err := sm.DeduceProjectRoot(arg) if err != nil { - return emptyPC, errors.Wrapf(err, "could not infer project root from dependency path: %s", arg) // this should go through to the user - } - - if string(pr) != arg { - return emptyPC, errors.Errorf("dependency path %s is not a project root, try %s instead", arg, pr) + return emptyPC, "", errors.Wrapf(err, "could not infer project root from dependency path: %s", arg) // this should go through to the user } pi := gps.ProjectIdentifier{ProjectRoot: pr, Source: source} c, err := sm.InferConstraint(versionStr, pi) if err != nil { - return emptyPC, err + return emptyPC, "", err } - return gps.ProjectConstraint{Ident: pi, Constraint: c}, nil + return gps.ProjectConstraint{Ident: pi, Constraint: c}, arg, nil } func checkErrors(m map[string]pkgtree.PackageOrErr) error { diff --git a/cmd/dep/ensure_test.go b/cmd/dep/ensure_test.go new file mode 100644 index 0000000000..ca85ecc684 --- /dev/null +++ b/cmd/dep/ensure_test.go @@ -0,0 +1,51 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "testing" + + "github.com/golang/dep/internal/gps" +) + +func TestInvalidEnsureFlagCombinations(t *testing.T) { + ec := &ensureCommand{ + update: true, + add: true, + } + + if err := ec.validateFlags(); err == nil { + t.Error("-add and -update together should fail validation") + } + + ec.vendorOnly, ec.add = true, false + if err := ec.validateFlags(); err == nil { + t.Error("-vendor-only with -update should fail validation") + } + + ec.add, ec.update = true, false + if err := ec.validateFlags(); err == nil { + t.Error("-vendor-only with -add should fail validation") + } + + ec.noVendor, ec.add = true, false + if err := ec.validateFlags(); err == nil { + t.Error("-vendor-only with -no-vendor should fail validation") + } + ec.noVendor = false + + // Also verify that the plain ensure path takes no args. This is a shady + // test, as lots of other things COULD return errors, and we don't check + // anything other than the error being non-nil. For now, it works well + // because a panic will quickly result if the initial arg length validation + // checks are incorrectly handled. + if err := ec.runDefault(nil, []string{"foo"}, nil, nil, gps.SolveParameters{}); err == nil { + t.Errorf("no args to plain ensure with -vendor-only") + } + ec.vendorOnly = false + if err := ec.runDefault(nil, []string{"foo"}, nil, nil, gps.SolveParameters{}); err == nil { + t.Errorf("no args to plain ensure") + } +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock new file mode 100644 index 0000000000..eddb25596a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" + version = "v0.8.1" + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "645b5b52e1bfb9e3db1cefde758485e009edfe5bad611b490582d94467f9c1b0" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.toml new file mode 100644 index 0000000000..7b51259127 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.toml @@ -0,0 +1,8 @@ + +[[constraint]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "0.8.1" diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case1/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/initial/main.go similarity index 77% rename from cmd/dep/testdata/harness_tests/ensure/package/case1/initial/main.go rename to cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/initial/main.go index e23fcf34c5..8049e4ec2c 100644 --- a/cmd/dep/testdata/harness_tests/ensure/package/case1/initial/main.go +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/initial/main.go @@ -5,8 +5,9 @@ package main import ( - _ "github.com/sdboyer/deptest" + "github.com/sdboyer/deptesttres" ) func main() { + type a deptesttres.Bar } diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/testcase.json new file mode 100644 index 0000000000..182b683c41 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/testcase.json @@ -0,0 +1,10 @@ +{ + "commands": [ + ["init", "-no-examples"], + ["ensure", "-add", "github.com/sdboyer/deptest", "github.com/sdboyer/deptest@v0.8.1"] + ], + "vendor-final": [ + "github.com/sdboyer/deptest", + "github.com/sdboyer/deptesttres" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock new file mode 100644 index 0000000000..d2b0ea3287 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = [".","subp"] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "432bc141db9511df4e1b5754c6c4d8cf4dd8b4f8d5a13fd7d189c17c14e000b7" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case1/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.toml similarity index 72% rename from cmd/dep/testdata/harness_tests/ensure/package/case1/final/Gopkg.toml rename to cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.toml index bbd0a05ba9..e242e02114 100644 --- a/cmd/dep/testdata/harness_tests/ensure/package/case1/final/Gopkg.toml +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.toml @@ -1,4 +1,4 @@ [[constraint]] name = "github.com/sdboyer/deptest" - version = "0.8.0" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case2/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/initial/main.go similarity index 80% rename from cmd/dep/testdata/harness_tests/ensure/package/case2/initial/main.go rename to cmd/dep/testdata/harness_tests/ensure/add/all-new-double/initial/main.go index e23fcf34c5..84f99b6894 100644 --- a/cmd/dep/testdata/harness_tests/ensure/package/case2/initial/main.go +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/initial/main.go @@ -5,8 +5,9 @@ package main import ( - _ "github.com/sdboyer/deptest" + "github.com/sdboyer/deptest" ) func main() { + type a deptest.Bar } diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/testcase.json new file mode 100644 index 0000000000..2e5161d01e --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/testcase.json @@ -0,0 +1,10 @@ +{ + "commands": [ + ["init", "-no-examples"], + ["ensure", "-add", "github.com/sdboyer/deptesttres", "github.com/sdboyer/deptesttres/subp"] + ], + "vendor-final": [ + "github.com/sdboyer/deptest", + "github.com/sdboyer/deptesttres" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock new file mode 100644 index 0000000000..eddb25596a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" + version = "v0.8.1" + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "645b5b52e1bfb9e3db1cefde758485e009edfe5bad611b490582d94467f9c1b0" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.toml new file mode 100644 index 0000000000..7b51259127 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.toml @@ -0,0 +1,8 @@ + +[[constraint]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "0.8.1" diff --git a/cmd/dep/testdata/harness_tests/ensure/override/case1/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/initial/main.go similarity index 74% rename from cmd/dep/testdata/harness_tests/ensure/override/case1/initial/main.go rename to cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/initial/main.go index 2953533407..8049e4ec2c 100644 --- a/cmd/dep/testdata/harness_tests/ensure/override/case1/initial/main.go +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/initial/main.go @@ -5,11 +5,9 @@ package main import ( - "fmt" - - stuff "github.com/sdboyer/deptest" + "github.com/sdboyer/deptesttres" ) func main() { - fmt.Println(stuff.Thing) + type a deptesttres.Bar } diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/testcase.json new file mode 100644 index 0000000000..9f6fa3f3f1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/testcase.json @@ -0,0 +1,10 @@ +{ + "commands": [ + ["init", "-no-examples"], + ["ensure", "-add", "github.com/sdboyer/deptest@v0.8.1"] + ], + "vendor-final": [ + "github.com/sdboyer/deptest", + "github.com/sdboyer/deptesttres" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock new file mode 100644 index 0000000000..5531a3e128 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "8f0b74fd1169808bd0e31dd7ad6c601c7b8f7ef25eec9e8a45e72b8a384ebb5c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.toml new file mode 100644 index 0000000000..bbc8cc1688 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + branch = "master" + name = "github.com/sdboyer/deptesttres" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/all-new/initial/main.go new file mode 100644 index 0000000000..8049e4ec2c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptesttres" +) + +func main() { + type a deptesttres.Bar +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/all-new/testcase.json new file mode 100644 index 0000000000..3a8d221f93 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new/testcase.json @@ -0,0 +1,10 @@ +{ + "commands": [ + ["init", "-no-examples"], + ["ensure", "-add", "github.com/sdboyer/deptest"] + ], + "vendor-final": [ + "github.com/sdboyer/deptest", + "github.com/sdboyer/deptesttres" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case2/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/final/Gopkg.lock similarity index 66% rename from cmd/dep/testdata/harness_tests/ensure/update/case2/initial/Gopkg.lock rename to cmd/dep/testdata/harness_tests/ensure/add/errs/desync/final/Gopkg.lock index 4068ebbd34..41dd2d4190 100644 --- a/cmd/dep/testdata/harness_tests/ensure/update/case2/initial/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/final/Gopkg.lock @@ -1,6 +1,5 @@ # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. -memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" [[projects]] name = "github.com/sdboyer/deptest" @@ -13,3 +12,10 @@ memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case2/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/final/Gopkg.toml similarity index 100% rename from cmd/dep/testdata/harness_tests/ensure/update/case2/final/Gopkg.toml rename to cmd/dep/testdata/harness_tests/ensure/add/errs/desync/final/Gopkg.toml diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case2/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/final/main.go similarity index 100% rename from cmd/dep/testdata/harness_tests/ensure/update/case2/initial/main.go rename to cmd/dep/testdata/harness_tests/ensure/add/errs/desync/final/main.go diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case2/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/Gopkg.lock similarity index 66% rename from cmd/dep/testdata/harness_tests/ensure/update/case2/final/Gopkg.lock rename to cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/Gopkg.lock index 4068ebbd34..41dd2d4190 100644 --- a/cmd/dep/testdata/harness_tests/ensure/update/case2/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/Gopkg.lock @@ -1,6 +1,5 @@ # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. -memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" [[projects]] name = "github.com/sdboyer/deptest" @@ -13,3 +12,10 @@ memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case2/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/Gopkg.toml similarity index 100% rename from cmd/dep/testdata/harness_tests/ensure/update/case2/initial/Gopkg.toml rename to cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/Gopkg.toml diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/main.go new file mode 100644 index 0000000000..2eae5b511d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/initial/main.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" + "github.com/sdboyer/deptestdos" +) + +func main() { + err := nil + if err != nil { + deptest.Map["yo yo!"] + } + deptestdos.diMeLo("whatev") +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/testcase.json new file mode 100644 index 0000000000..19ec11bca4 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/desync/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-add", "foobar.com/baz"] + ], + "error-expected": "Gopkg.toml and Gopkg.lock are out of sync. Run a plain dep ensure to resync them before attempting to -add" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock new file mode 100644 index 0000000000..66ef021c68 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.toml new file mode 100644 index 0000000000..bbc8cc1688 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + branch = "master" + name = "github.com/sdboyer/deptesttres" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/initial/main.go new file mode 100644 index 0000000000..8049e4ec2c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptesttres" +) + +func main() { + type a deptesttres.Bar +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/testcase.json new file mode 100644 index 0000000000..52cb46b132 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/testcase.json @@ -0,0 +1,10 @@ +{ + "commands": [ + ["init", "-no-examples"], + ["ensure", "-add", "github.com/sdboyer/deptest@0.8.1", "github.com/sdboyer/deptest@1.0.0"] + ], + "vendor-final": [ + "github.com/sdboyer/deptesttres" + ], + "error-expected": "can only specify rules once per project being added; rules were given at least twice for github.com/sdboyer/deptest" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.lock new file mode 100644 index 0000000000..66ef021c68 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.toml new file mode 100644 index 0000000000..598accd86c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/final/Gopkg.toml @@ -0,0 +1,7 @@ +[[constraint]] + name = "github.com/sdboyer/deptesttres" + branch = "master" + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.lock new file mode 100644 index 0000000000..66ef021c68 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.toml new file mode 100644 index 0000000000..598accd86c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/Gopkg.toml @@ -0,0 +1,7 @@ +[[constraint]] + name = "github.com/sdboyer/deptesttres" + branch = "master" + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/main.go new file mode 100644 index 0000000000..8049e4ec2c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptesttres" +) + +func main() { + type a deptesttres.Bar +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/testcase.json new file mode 100644 index 0000000000..a0d78d31b6 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists-manifest/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-add", "github.com/sdboyer/deptest@1.0.0"] + ], + "error-expected": "Gopkg.toml already contains rules for github.com/sdboyer/deptest, cannot specify a version constraint" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/Gopkg.lock similarity index 100% rename from cmd/dep/testdata/harness_tests/ensure/package/case1/final/Gopkg.lock rename to cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/Gopkg.lock diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/final/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/override/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.lock similarity index 80% rename from cmd/dep/testdata/harness_tests/ensure/override/case1/final/Gopkg.lock rename to cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.lock index ccd3cc61fc..c7f497e7a1 100644 --- a/cmd/dep/testdata/harness_tests/ensure/override/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.lock @@ -10,6 +10,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "8bca9526e654e56e05d9075d1f33fa5b649bf6d58aa7d71ca39e7fbea8468e07" + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/main.go new file mode 100644 index 0000000000..c5b8da51da --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" +) + +func main() { + _ := deptest.Map["yo yo!"] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/testcase.json new file mode 100644 index 0000000000..e4ec92f9d3 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/exists/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-add", "github.com/sdboyer/deptest"] + ], + "error-expected": "nothing to -add, github.com/sdboyer/deptest is already in Gopkg.toml and the project's direct imports or required list" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.lock new file mode 100644 index 0000000000..41dd2d4190 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + version = "v0.8.0" + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + packages = ["."] + +[[projects]] + name = "github.com/sdboyer/deptestdos" + version = "v2.0.0" + revision = "5c607206be5decd28e6263ffffdcee067266015e" + packages = ["."] + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.toml new file mode 100644 index 0000000000..532da96a0d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "~0.8.0" \ No newline at end of file diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/main.go b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/main.go new file mode 100644 index 0000000000..2eae5b511d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/final/main.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" + "github.com/sdboyer/deptestdos" +) + +func main() { + err := nil + if err != nil { + deptest.Map["yo yo!"] + } + deptestdos.diMeLo("whatev") +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.lock new file mode 100644 index 0000000000..41dd2d4190 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + version = "v0.8.0" + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + packages = ["."] + +[[projects]] + name = "github.com/sdboyer/deptestdos" + version = "v2.0.0" + revision = "5c607206be5decd28e6263ffffdcee067266015e" + packages = ["."] + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.toml new file mode 100644 index 0000000000..532da96a0d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "~0.8.0" \ No newline at end of file diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/main.go new file mode 100644 index 0000000000..2eae5b511d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/initial/main.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" + "github.com/sdboyer/deptestdos" +) + +func main() { + err := nil + if err != nil { + deptest.Map["yo yo!"] + } + deptestdos.diMeLo("whatev") +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/testcase.json new file mode 100644 index 0000000000..b8b36480f6 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/noarg/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-add"] + ], + "error-expected": "must specify at least one project or package to -add" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock new file mode 100644 index 0000000000..66ef021c68 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.toml new file mode 100644 index 0000000000..bbc8cc1688 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + branch = "master" + name = "github.com/sdboyer/deptesttres" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/Gopkg.toml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/main.go new file mode 100644 index 0000000000..8049e4ec2c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptesttres" +) + +func main() { + type a deptesttres.Bar +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/testcase.json new file mode 100644 index 0000000000..69755349e4 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/testcase.json @@ -0,0 +1,8 @@ +{ + "commands": [ + ["ensure", "-add", "github.com/sdboyer/deptesttres@master"] + ], + "vendor-final": [ + "github.com/sdboyer/deptesttres" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock new file mode 100644 index 0000000000..e235bce702 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "d1fe1d4f4dd98b75908b524bd73d43a4b9e3ce0b9522ea6ce9d6c9ea15190c1d" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.toml new file mode 100644 index 0000000000..598accd86c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.toml @@ -0,0 +1,7 @@ +[[constraint]] + name = "github.com/sdboyer/deptesttres" + branch = "master" + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.lock new file mode 100644 index 0000000000..66ef021c68 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + name = "github.com/sdboyer/deptesttres" + packages = ["."] + revision = "54aaeb0023e1f3dcf5f98f31dd8c565457945a12" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.toml new file mode 100644 index 0000000000..598accd86c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/Gopkg.toml @@ -0,0 +1,7 @@ +[[constraint]] + name = "github.com/sdboyer/deptesttres" + branch = "master" + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/main.go new file mode 100644 index 0000000000..8049e4ec2c --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptesttres" +) + +func main() { + type a deptesttres.Bar +} diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/testcase.json b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/testcase.json new file mode 100644 index 0000000000..6a19d7c2b1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/testcase.json @@ -0,0 +1,9 @@ +{ + "commands": [ + ["ensure", "-add", "github.com/sdboyer/deptest"] + ], + "vendor-final": [ + "github.com/sdboyer/deptest", + "github.com/sdboyer/deptesttres" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case2/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/Gopkg.toml similarity index 72% rename from cmd/dep/testdata/harness_tests/ensure/package/case2/initial/Gopkg.toml rename to cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/Gopkg.toml index bbd0a05ba9..e242e02114 100644 --- a/cmd/dep/testdata/harness_tests/ensure/package/case2/initial/Gopkg.toml +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/Gopkg.toml @@ -1,4 +1,4 @@ [[constraint]] name = "github.com/sdboyer/deptest" - version = "0.8.0" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/main.go b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/final/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case1/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/Gopkg.toml similarity index 72% rename from cmd/dep/testdata/harness_tests/ensure/package/case1/initial/Gopkg.toml rename to cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/Gopkg.toml index bbd0a05ba9..e242e02114 100644 --- a/cmd/dep/testdata/harness_tests/ensure/package/case1/initial/Gopkg.toml +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/Gopkg.toml @@ -1,4 +1,4 @@ [[constraint]] name = "github.com/sdboyer/deptest" - version = "0.8.0" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/initial/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/testcase.json b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/testcase.json new file mode 100644 index 0000000000..6dc9735c09 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/lockless-vendoronly/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-vendor-only"] + ], + "error-expected": "no Gopkg.lock exists from which to populate vendor/" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case2/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.lock similarity index 75% rename from cmd/dep/testdata/harness_tests/ensure/package/case2/final/Gopkg.lock rename to cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.lock index 47206963e8..c7f497e7a1 100644 --- a/cmd/dep/testdata/harness_tests/ensure/package/case2/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.lock @@ -5,11 +5,11 @@ name = "github.com/sdboyer/deptest" packages = ["."] revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" - version = "v0.8.0" + version = "v1.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "b4e7a61f3a7fd8bbb1db94ed05b0d3675fb796d6058ff0a6fa95a47be0a171eb" + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case2/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.toml similarity index 72% rename from cmd/dep/testdata/harness_tests/ensure/package/case2/final/Gopkg.toml rename to cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.toml index bbd0a05ba9..e242e02114 100644 --- a/cmd/dep/testdata/harness_tests/ensure/package/case2/final/Gopkg.toml +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/final/Gopkg.toml @@ -1,4 +1,4 @@ [[constraint]] name = "github.com/sdboyer/deptest" - version = "0.8.0" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/initial/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/testcase.json b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/testcase.json new file mode 100644 index 0000000000..f194308fe2 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/errs/specargs/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "foobar.com/baz"] + ], + "error-expected": "dep ensure only takes spec arguments with -add or -update" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/initial/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/testcase.json b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/testcase.json new file mode 100644 index 0000000000..21daf3e990 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-dry/testcase.json @@ -0,0 +1,5 @@ +{ + "commands": [ + ["ensure", "-dry-run"] + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/initial/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/testcase.json b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/testcase.json new file mode 100644 index 0000000000..7692eecf88 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/testcase.json @@ -0,0 +1,5 @@ +{ + "commands": [ + ["ensure", "-no-vendor"] + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/initial/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/testcase.json b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/testcase.json new file mode 100644 index 0000000000..19da527090 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/testcase.json @@ -0,0 +1,8 @@ +{ + "commands": [ + ["ensure"] + ], + "vendor-final": [ + "github.com/sdboyer/deptest" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.lock new file mode 100644 index 0000000000..11cb12c378 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.lock @@ -0,0 +1,16 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + # manually modified hash digest, it will not match any known inputs + inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.lock new file mode 100644 index 0000000000..11cb12c378 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.lock @@ -0,0 +1,16 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + # manually modified hash digest, it will not match any known inputs + inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/initial/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/testcase.json b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/testcase.json new file mode 100644 index 0000000000..8a28875978 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-vendoronly/testcase.json @@ -0,0 +1,8 @@ +{ + "commands": [ + ["ensure", "-vendor-only"] + ], + "vendor-final": [ + "github.com/sdboyer/deptest" + ] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.toml index 44bbf4f13a..e242e02114 100644 --- a/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.toml +++ b/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.toml @@ -1,26 +1,4 @@ -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" - - [[constraint]] name = "github.com/sdboyer/deptest" version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/empty/case1/testcase.json b/cmd/dep/testdata/harness_tests/ensure/empty/case1/testcase.json index 620bc4e060..0cf0fd903b 100644 --- a/cmd/dep/testdata/harness_tests/ensure/empty/case1/testcase.json +++ b/cmd/dep/testdata/harness_tests/ensure/empty/case1/testcase.json @@ -1,9 +1,8 @@ { "commands": [ - ["init", "-skip-tools"], + ["init", "-skip-tools", "-no-examples"], ["ensure", "-update"] ], - "error-expected": "", "vendor-final": [ "github.com/sdboyer/deptest" ] diff --git a/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/Gopkg.lock index 4fc4f785c5..5bfebb27d0 100644 --- a/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/empty/case3/initial/Gopkg.lock @@ -1,7 +1,15 @@ -memo = "e5c16e09ed6f0a1a2b3cf472c34b7fd50861dd070e81d5e623f72e8173f0c065" +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + [[projects]] branch = "master" name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "8114537cd7d93f5eacebdea7dfec0c3c10919d7f952d056e2a3142fee1c33aee" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/override/case1/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/override/case1/final/Gopkg.toml deleted file mode 100644 index 44bbf4f13a..0000000000 --- a/cmd/dep/testdata/harness_tests/ensure/override/case1/final/Gopkg.toml +++ /dev/null @@ -1,26 +0,0 @@ - -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" - - -[[constraint]] - name = "github.com/sdboyer/deptest" - version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/override/case1/testcase.json b/cmd/dep/testdata/harness_tests/ensure/override/case1/testcase.json deleted file mode 100644 index 72e29594ac..0000000000 --- a/cmd/dep/testdata/harness_tests/ensure/override/case1/testcase.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "commands": [ - ["init", "-skip-tools"], - ["ensure", "-override", "github.com/sdboyer/deptest@=1.0.0"] - ], - "error-expected": "", - "vendor-final": [ - "github.com/sdboyer/deptest" - ] -} diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case1/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/package/case1/initial/Gopkg.lock deleted file mode 100644 index 7d21016835..0000000000 --- a/cmd/dep/testdata/harness_tests/ensure/package/case1/initial/Gopkg.lock +++ /dev/null @@ -1,7 +0,0 @@ -memo = "88d2718cda70cce45158f953d2c6ead79c1db38e67e9704aff72be8fddb096e7" - -[[projects]] - name = "github.com/sdboyer/deptest" - packages = ["."] - revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" - version = "v0.8.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case1/testcase.json b/cmd/dep/testdata/harness_tests/ensure/package/case1/testcase.json deleted file mode 100644 index c14af6577e..0000000000 --- a/cmd/dep/testdata/harness_tests/ensure/package/case1/testcase.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "commands": [ - ["ensure", "github.com/sdboyer/deptest@v1.0.0"] - ], - "error-expected": "", - "gopath-initial": { - "github.com/sdboyer/deptest": "v0.8.0", - "github.com/sdboyer/deptestdos": "a0196baa11ea047dd65037287451d36b861b00ea" - }, - "vendor-final": [ - "github.com/sdboyer/deptest" - ] -} diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case2/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/package/case2/initial/Gopkg.lock deleted file mode 100644 index 7d21016835..0000000000 --- a/cmd/dep/testdata/harness_tests/ensure/package/case2/initial/Gopkg.lock +++ /dev/null @@ -1,7 +0,0 @@ -memo = "88d2718cda70cce45158f953d2c6ead79c1db38e67e9704aff72be8fddb096e7" - -[[projects]] - name = "github.com/sdboyer/deptest" - packages = ["."] - revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" - version = "v0.8.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/package/case2/testcase.json b/cmd/dep/testdata/harness_tests/ensure/package/case2/testcase.json deleted file mode 100644 index e737374376..0000000000 --- a/cmd/dep/testdata/harness_tests/ensure/package/case2/testcase.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "commands": [ - ["ensure", "github.com/sdboyer/deptest"] - ], - "error-expected": "", - "gopath-initial": { - "github.com/sdboyer/deptest": "v0.8.0", - "github.com/sdboyer/deptestdos": "a0196baa11ea047dd65037287451d36b861b00ea" - }, - "vendor-final": [ - "github.com/sdboyer/deptest" - ] -} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/Gopkg.lock index 04268862a1..7265a5552e 100644 --- a/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/update/case1/initial/Gopkg.lock @@ -1,13 +1,21 @@ -memo = "9a5243dd3fa20feeaa20398e7283d6c566532e2af1aae279a010df34793761c5" +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + [[projects]] name = "github.com/sdboyer/deptest" version = "v0.8.0" revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" packages = ["."] - + [[projects]] name = "github.com/sdboyer/deptestdos" version = "v2.0.0" revision = "5c607206be5decd28e6263ffffdcee067266015e" packages = ["."] + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case2/testcase.json b/cmd/dep/testdata/harness_tests/ensure/update/case2/testcase.json deleted file mode 100644 index f0ac6111e5..0000000000 --- a/cmd/dep/testdata/harness_tests/ensure/update/case2/testcase.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "commands": [ - ["ensure", "-n", "-update", "github.com/sdboyer/deptest"] - ], - "error-expected": "", - "vendor-final": [] -} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/Gopkg.lock new file mode 100644 index 0000000000..41dd2d4190 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + version = "v0.8.0" + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + packages = ["."] + +[[projects]] + name = "github.com/sdboyer/deptestdos" + version = "v2.0.0" + revision = "5c607206be5decd28e6263ffffdcee067266015e" + packages = ["."] + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/Gopkg.toml new file mode 100644 index 0000000000..532da96a0d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "~0.8.0" \ No newline at end of file diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/main.go new file mode 100644 index 0000000000..2eae5b511d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/final/main.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" + "github.com/sdboyer/deptestdos" +) + +func main() { + err := nil + if err != nil { + deptest.Map["yo yo!"] + } + deptestdos.diMeLo("whatev") +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/Gopkg.lock new file mode 100644 index 0000000000..41dd2d4190 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/Gopkg.lock @@ -0,0 +1,21 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + version = "v0.8.0" + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + packages = ["."] + +[[projects]] + name = "github.com/sdboyer/deptestdos" + version = "v2.0.0" + revision = "5c607206be5decd28e6263ffffdcee067266015e" + packages = ["."] + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "9b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/Gopkg.toml new file mode 100644 index 0000000000..532da96a0d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "~0.8.0" \ No newline at end of file diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/main.go new file mode 100644 index 0000000000..2eae5b511d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/initial/main.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" + "github.com/sdboyer/deptestdos" +) + +func main() { + err := nil + if err != nil { + deptest.Map["yo yo!"] + } + deptestdos.diMeLo("whatev") +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/testcase.json b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/testcase.json new file mode 100644 index 0000000000..0e5a8b0b96 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/desync/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-update"] + ], + "error-expected": "Gopkg.toml and Gopkg.lock are out of sync. Run a plain dep ensure to resync them before attempting to -update" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/final/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/Gopkg.toml new file mode 100644 index 0000000000..e242e02114 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/Gopkg.toml @@ -0,0 +1,4 @@ + +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/main.go new file mode 100644 index 0000000000..1fe0d19d6a --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/initial/main.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + _ "github.com/sdboyer/deptest" +) + +func main() { +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/testcase.json b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/testcase.json new file mode 100644 index 0000000000..a69d08d0f6 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/lockless/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-update"] + ], + "error-expected": "-update works by updating the versions recorded in Gopkg.lock, but Gopkg.lock does not exist" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/final/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/main.go new file mode 100644 index 0000000000..c5b8da51da --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" +) + +func main() { + _ := deptest.Map["yo yo!"] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/testcase.json b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/testcase.json new file mode 100644 index 0000000000..4b4b4fe059 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/nonroot-arg/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-update", "github.com/sdboyer/deptest/subpkg"] + ], + "error-expected": "github.com/sdboyer/deptest/subpkg is not a project root, try github.com/sdboyer/deptest instead" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/final/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/main.go new file mode 100644 index 0000000000..c5b8da51da --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" +) + +func main() { + _ := deptest.Map["yo yo!"] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/testcase.json b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/testcase.json new file mode 100644 index 0000000000..0fda36edd2 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/not-in-lock/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-update", "github.com/sdboyer/deptesttres"] + ], + "error-expected": "github.com/sdboyer/deptesttres is not present in Gopkg.lock, cannot -update it" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/final/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/main.go new file mode 100644 index 0000000000..c5b8da51da --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" +) + +func main() { + _ := deptest.Map["yo yo!"] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/testcase.json b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/testcase.json new file mode 100644 index 0000000000..7332bc493d --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-constraint/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-update", "github.com/sdboyer/deptest:github.com/other/deptest"] + ], + "error-expected": "cannot specify alternate sources on -update (github.com/other/deptest)" +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/final/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.lock new file mode 100644 index 0000000000..c7f497e7a1 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/sdboyer/deptest" + packages = ["."] + revision = "ff2948a2ac8f538c4ecd55962e919d1e13e74baf" + version = "v1.0.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.toml b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.toml new file mode 100644 index 0000000000..51ff69b358 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/Gopkg.toml @@ -0,0 +1,3 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + version = "1.0.0" diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/main.go b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/main.go new file mode 100644 index 0000000000..c5b8da51da --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/initial/main.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "github.com/sdboyer/deptest" +) + +func main() { + _ := deptest.Map["yo yo!"] +} diff --git a/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/testcase.json b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/testcase.json new file mode 100644 index 0000000000..27c8a5fc96 --- /dev/null +++ b/cmd/dep/testdata/harness_tests/ensure/update/errs/spec-with-source/testcase.json @@ -0,0 +1,6 @@ +{ + "commands": [ + ["ensure", "-update", "github.com/sdboyer/deptest@1.0.0"] + ], + "error-expected": "version constraint ^1.0.0 passed for github.com/sdboyer/deptest, but -update follows constraints declared in" +} diff --git a/internal/test/integration_testcase.go b/internal/test/integration_testcase.go index 02b1a0c6f0..e45813b019 100644 --- a/internal/test/integration_testcase.go +++ b/internal/test/integration_testcase.go @@ -139,7 +139,7 @@ func (tc *IntegrationTestCase) CompareError(err error, stderr string) { if wantExists && gotExists { switch c := strings.Count(got, want); c { case 0: - tc.t.Errorf("expected error containing %s, got error %s", want, got) + tc.t.Errorf("error did not contain expected string:\n\t(GOT): %s\n\t(WNT): %s", got, want) case 1: default: tc.t.Errorf("expected error %s matches %d times to actual error %s", want, c, got) diff --git a/lock.go b/lock.go index e5c3ac4c46..14abd094b1 100644 --- a/lock.go +++ b/lock.go @@ -122,6 +122,20 @@ func (l *Lock) Projects() []gps.LockedProject { return l.P } +// HasProjectWithRoot checks if the lock contains a project with the provided +// ProjectRoot. +// +// This check is O(n) in the number of projects. +func (l *Lock) HasProjectWithRoot(root gps.ProjectRoot) bool { + for _, p := range l.P { + if p.Ident().ProjectRoot == root { + return true + } + } + + return false +} + // toRaw converts the manifest into a representation suitable to write to the lock file func (l *Lock) toRaw() rawLock { raw := rawLock{ diff --git a/manifest.go b/manifest.go index af1c2a1e26..d179ea664a 100644 --- a/manifest.go +++ b/manifest.go @@ -335,6 +335,19 @@ func (m *Manifest) IgnoredPackages() map[string]bool { return mp } +// HasConstraintsOn checks if the manifest contains either constraints or +// overrides on the provided ProjectRoot. +func (m *Manifest) HasConstraintsOn(root gps.ProjectRoot) bool { + if _, has := m.Constraints[root]; has { + return true + } + if _, has := m.Ovr[root]; has { + return true + } + + return false +} + // RequiredPackages returns a set of import paths to require. func (m *Manifest) RequiredPackages() map[string]bool { if len(m.Required) == 0 { diff --git a/txn_writer.go b/txn_writer.go index 69f859f833..aeb8134168 100644 --- a/txn_writer.go +++ b/txn_writer.go @@ -61,6 +61,7 @@ type SafeWriter struct { lock *Lock lockDiff *gps.LockDiff writeVendor bool + writeLock bool } // NewSafeWriter sets up a SafeWriter to write a set of manifest, lock, and @@ -83,20 +84,25 @@ func NewSafeWriter(manifest *Manifest, oldLock, newLock *Lock, vendor VendorBeha Manifest: manifest, lock: newLock, } + if oldLock != nil { if newLock == nil { return nil, errors.New("must provide newLock when oldLock is specified") } + sw.lockDiff = gps.DiffLocks(oldLock, newLock) + if sw.lockDiff != nil { + sw.writeLock = true + } + } else if newLock != nil { + sw.writeLock = true } switch vendor { case VendorAlways: sw.writeVendor = true case VendorOnChanged: - if sw.lockDiff != nil || (newLock != nil && oldLock == nil) { - sw.writeVendor = true - } + sw.writeVendor = sw.lockDiff != nil || (newLock != nil && oldLock == nil) } if sw.writeVendor && newLock == nil { @@ -261,7 +267,7 @@ func (sw *SafeWriter) Write(root string, sm gps.SourceManager, examples bool) er return err } - if !sw.HasManifest() && !sw.HasLock() && !sw.writeVendor { + if !sw.HasManifest() && !sw.writeLock && !sw.writeVendor { // nothing to do return nil } @@ -295,7 +301,7 @@ func (sw *SafeWriter) Write(root string, sm gps.SourceManager, examples bool) er } } - if sw.HasLock() { + if sw.writeLock { l, err := sw.lock.MarshalTOML() if err != nil { return errors.Wrap(err, "failed to marshal lock to TOML") @@ -348,7 +354,7 @@ func (sw *SafeWriter) Write(root string, sm gps.SourceManager, examples bool) er } } - if sw.HasLock() { + if sw.writeLock { if _, err := os.Stat(lpath); err == nil { // Move out the old one. tmploc := filepath.Join(td, LockName+".orig") @@ -422,7 +428,7 @@ func (sw *SafeWriter) PrintPreparedActions(output *log.Logger) error { output.Println(string(m)) } - if sw.HasLock() { + if sw.writeLock { if sw.lockDiff == nil { output.Printf("Would have written the following %s:\n", LockName) l, err := sw.lock.MarshalTOML() diff --git a/txn_writer_test.go b/txn_writer_test.go index c0f0b9187a..ad550cd92d 100644 --- a/txn_writer_test.go +++ b/txn_writer_test.go @@ -182,6 +182,9 @@ func TestSafeWriter_ManifestAndUnmodifiedLock(t *testing.T) { if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock.") } + if sw.writeLock { + t.Fatal("Did not expect that the writer should plan to write the lock") + } if sw.writeVendor { t.Fatal("Did not expect the payload to contain the vendor directory") } @@ -224,6 +227,9 @@ func TestSafeWriter_ManifestAndUnmodifiedLockWithForceVendor(t *testing.T) { if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } + if sw.writeLock { + t.Fatal("Did not expect that the writer should plan to write the lock") + } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory") } @@ -269,6 +275,9 @@ func TestSafeWriter_ModifiedLock(t *testing.T) { t.Fatal("Did not expect the manifest to be written") } if !sw.HasLock() { + t.Fatal("Expected the payload to contain the lock") + } + if !sw.writeLock { t.Fatal("Expected that the writer should plan to write the lock") } if !sw.writeVendor { @@ -318,6 +327,9 @@ func TestSafeWriter_ModifiedLockSkipVendor(t *testing.T) { if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } + if !sw.writeLock { + t.Fatal("Expected that the writer should plan to write the lock") + } if sw.writeVendor { t.Fatal("Did not expect the payload to contain the vendor directory") } @@ -362,6 +374,9 @@ func TestSafeWriter_ForceVendorWhenVendorAlreadyExists(t *testing.T) { if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } + if !sw.writeLock { + t.Fatal("Expected that the writer should plan to write the lock") + } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory ") } @@ -408,6 +423,9 @@ func TestSafeWriter_NewLock(t *testing.T) { if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } + if !sw.writeLock { + t.Fatal("Expected that the writer should plan to write the lock") + } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory") } @@ -452,6 +470,9 @@ func TestSafeWriter_NewLockSkipVendor(t *testing.T) { if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } + if !sw.writeLock { + t.Fatal("Expected that the writer should plan to write the lock") + } if sw.writeVendor { t.Fatal("Did not expect the payload to contain the vendor directory") } @@ -543,6 +564,9 @@ func TestSafeWriter_VendorDotGitPreservedWithForceVendor(t *testing.T) { if !sw.HasLock() { t.Fatal("Expected the payload to contain the lock") } + if sw.writeLock { + t.Fatal("Did not expect that the writer should plan to write the lock") + } if !sw.writeVendor { t.Fatal("Expected the payload to contain the vendor directory") }