This repository has been archived by the owner. It is now read-only.
your dependencies have arrived
Clone or download
sdboyer Merge pull request #222 from vergenzt/patch-1
Fix typo in manifest.go docstring
Latest commit c056fb5 Oct 15, 2017
Permalink
Failed to load latest commit information.
_testdata Ignore underscore-led files when parsing Apr 7, 2017
internal get rid of unused mocks Mar 21, 2017
pkgtree Replace Errorf followed by FailNow with Fatalf Apr 8, 2017
.gitignore Remove and ignore vendor dir Apr 1, 2016
CODE_OF_CONDUCT.md Add COC and CONTRIBUTING.md Jul 12, 2016
CONTRIBUTING.md Document how to set up a dev environment Mar 10, 2017
LICENSE Initial commit Mar 15, 2016
README.md better words Jun 13, 2017
appveyor.yml fix ci configs to run tests in sub packages Mar 21, 2017
bridge.go Drop ListVersions() from sourceBridge Apr 15, 2017
circle.yml Disable verbose output on tests Mar 31, 2017
cmd.go Fix races in monitoredCmd Apr 29, 2017
cmd_test.go Remove crufty monitoredCmd.ctx & add a test case Apr 17, 2017
codecov.yml Coverage on typed radix extensions is meaningless Jan 25, 2017
constraint_test.go Move typed{V,C}String() func to private method Apr 15, 2017
constraints.go Move typed{V,C}String() func to private method Apr 15, 2017
deduce.go Remove overzealous deduction trie insert Apr 16, 2017
deduce_test.go Remove overzealous deduction trie insert Apr 16, 2017
discovery.go s/vsolver/gps/g Jul 12, 2016
example.go Update example with new ProjectAnalyzer pattern Apr 1, 2017
filesystem_test.go Clean up file system tests from CR comments Apr 10, 2017
glide.lock Make glide happy Mar 29, 2017
glide.yaml reimplement remote interactions of vcs.Repo as monitored commands Mar 10, 2017
hash.go Move typed{V,C}String() func to private method Apr 15, 2017
hash_test.go Replace Errorf followed by FailNow with Fatalf Apr 8, 2017
header.png Update README with goodies Jul 29, 2016
identifier.go Rename types.go to identifier.go - less generic Mar 29, 2017
lock.go Add rootdata-specific tests Jan 15, 2017
lock_test.go Cut test time down significantly w/parallelism Mar 30, 2017
lockdiff.go Rename GetVersionInfo to VersionComponentStrings Apr 14, 2017
lockdiff_test.go Test calling DiffLocks will one or more empty locks Apr 14, 2017
manager_test.go Convert ListVersions() to return []PairedVersion Apr 15, 2017
manifest.go Fix typo in manifest.go docstring Oct 14, 2017
manifest_test.go s/NetworkName/Source/ Dec 24, 2016
maybe_source.go Condense the guts of source impl a bit more Apr 1, 2017
metrics.go Shoehorn trace output into testing logs Mar 31, 2017
remove_go16.go Fix lock file handling on windows Sep 21, 2016
remove_go17.go s/vsolver/gps/g Jul 12, 2016
result.go Only remove symlinks to vendor dirs on non-Windows OSes Apr 10, 2017
result_test.go Replace Errorf followed by FailNow with Fatalf Apr 8, 2017
rootdata.go Make ProjectAnalyzer a solver param, not the sm Apr 1, 2017
rootdata_test.go Replace Errorf followed by FailNow with Fatalf Apr 8, 2017
satisfy.go Re-enable checkRevisionExists() check Apr 16, 2017
selection.go Resolve embedding problem with a fully new type Apr 15, 2017
selection_test.go Check pl len during bmi removal from unsel queue Mar 3, 2017
solve_basic_test.go Hooooouuunded Apr 15, 2017
solve_bimodal_test.go Make ProjectAnalyzer a solver param, not the sm Apr 1, 2017
solve_failures.go Rename errors.go to make space for sm errors Jul 28, 2016
solve_test.go Merge branch 'master' into sm-channels Apr 3, 2017
solver.go Solver shouldn't exclude main pkgs from ReachMaps Apr 16, 2017
source.go Add sourceGateway tests Apr 3, 2017
source_cache.go Make projectInfo entirely internal to source cache Mar 30, 2017
source_errors.go Output more from vcs failure errors Oct 14, 2016
source_manager.go Convert ListVersions() to return []PairedVersion Apr 15, 2017
source_test.go Convert ListVersions() to return []PairedVersion Apr 15, 2017
strip_vendor.go Only remove symlinks to vendor dirs on non-Windows OSes Apr 10, 2017
strip_vendor_nonwindows_test.go Only remove symlinks to vendor dirs on non-Windows OSes Apr 10, 2017
strip_vendor_test.go Only remove symlinks to vendor dirs on non-Windows OSes Apr 10, 2017
strip_vendor_windows.go Add TODO note about improving windows symlink support Apr 10, 2017
strip_vendor_windows_test.go Remove tests of junctions Apr 11, 2017
trace.go extract PackageTree to pkgtree package Mar 14, 2017
typed_radix.go Remove dead code, refactor tests so it compiles Mar 29, 2017
typed_radix_test.go Fix isPathPrefixOrEqual Sep 8, 2016
vcs_repo.go Rename update() to fetch() in local repo interface Apr 3, 2017
vcs_repo_test.go Merge branch 'master' into sm-channels Apr 3, 2017
vcs_source.go Include tip in hg result set Apr 29, 2017
vcs_source_test.go Include tip in hg result set Apr 29, 2017
version.go Move typed{V,C}String() func to private method Apr 15, 2017
version_queue.go Convert ListVersions() to return []PairedVersion Apr 15, 2017
version_queue_test.go Convert ListVersions() to return []PairedVersion Apr 15, 2017
version_test.go Add more formal tests for the unifier, sorting Apr 15, 2017
version_unifier.go Move typed{V,C}String() func to private method Apr 15, 2017
version_unifier_test.go Move typed{V,C}String() func to private method Apr 15, 2017

README.md

gps
Build Status Windows Build Status Build Status Codecov GoDoc


gps has moved into dep - this repository is no longer maintained.

gps is the Go Packaging Solver. It is an engine for tackling dependency management problems in Go. It is trivial - about 35 lines of code - to replicate the fetching bits of go get using gps.

gps is not Yet Another Go Package Management Tool. Rather, it's a library that package management (and adjacent) tools can use to solve the hard parts of the problem in a consistent, holistic way. It is a distillation of the ideas behind language package managers like bundler, npm, elm-package, cargo (and others) into a library, artisanally handcrafted with ❤️ for Go's specific requirements.

gps was on track to become the engine behind glide; however, those efforts have been discontinued in favor of gps powering the experimental, eventually-official Go tooling.

The wiki has a general introduction to the gps approach, as well as guides for folks implementing tools or looking to contribute.

Wait...a package management library?!

Yup. See the rationale.

Features

A feature list for a package management library is a bit different than one for a package management tool. Instead of listing the things an end-user can do, we list the choices a tool can make and offer, in some form, to its users, as well as the non-choices/assumptions/constraints that gps imposes on a tool.

Non-Choices

We'd love for gps's non-choices to be noncontroversial. But that's not always the case.

Nevertheless, these non-choices remain because, taken as a whole, they make experiments and discussion around Go package management coherent and productive.

  • Go >=1.6, or 1.5 with GO15VENDOREXPERIMENT = 1 set
  • Everything under vendor/ is volatile and controlled solely by the tool
  • A central cache of repositories is used (cannot be GOPATH)
  • A project concept: a tree of packages, all covered by one vendor directory
  • A manifest and lock approach to tracking version and constraint information
  • Upstream sources are one of git, bzr, hg or svn repositories
  • What the available versions are for a given project/repository (all branches, tags, or revs are eligible)
    • In general, semver tags are preferred to branches, are preferred to plain tags
  • The actual packages that must be present (determined through import graph static analysis)
    • How the import graph is statically analyzed - similar to go/build, but with a combinatorial view of build tags (not yet implemented)
  • All packages from the same source (repository) must be the same version
  • Package import cycles are not allowed (not yet implemented)

There are also some current non-choices that we would like to push into the realm of choice:

  • Importable projects that are not bound to the repository root
  • Source inference around different import path patterns (e.g., how github.com/* or my_company/* are handled)

Choices

These choices represent many of the ways that gps-based tools could substantively differ from each other.

Some of these are choices designed to encompass all options for topics on which reasonable people have disagreed. Others are simply important controls that no general library could know a priori.

This list may not be exhaustive - see the implementor's guide for a proper treatment.

Contributing

Yay, contributing! Please see CONTRIBUTING.md. Note that gps also abides by a Code of Conduct, and is MIT-licensed.