This repository has been archived by the owner. It is now read-only.

Bimodal analysis #36

merged 91 commits into from Jun 22, 2016


None yet
1 participant

sdboyer commented May 26, 2016

For #35

Impl plan

  • Attach methods to source managers for analysis
  • Reconfigure adapter to make it injectable-ish for tests
  • Pull in stdlib package list from tip. (so, just ignore core go version for now)
  • Add funcs to suss out the repo from a package name
  • Add logic for adding, w/open constraint, things in analysis that aren't in manifest
  • Skip special rules for now, just ignore things in manifest but not analysis
  • Change selection structures to operate on both projects and packages
  • Implement new testing harness specifically for exercising bimodal analysis
  • Create new selection path for when we're just adding packages to an already-selected project
  • Testing fixtures for all the reasonable basic permutations of inputs, exercising {0,1,N} behaviors, transitivity, backtracking, multi-stage dep integration, etc.
  • Modify unselected comparator to always have package-only additions float to the top - those are always more incremental changes
  • Revisit how fail() analysis chooses what to mark
  • Circle back on whether we need to look at all imports, or just the current atom's, in solver.getImportsAndConstraintsOf()
  • Add satisfiability check that, if a project/version is already selected, all pkgs targeted within it exist. Also add the reverse, that if a project is being checked and deps already exist, it has the packages already depped upon
  • Incorporate stdlib list in lock input hashing (they amount to ignores, and COULD change)
  • Refactor HashInputs() to incorporate root project static analysis
  • Get static analysis actually working as expected

sdboyer added some commits Apr 12, 2016

@sdboyer sdboyer added the enhancement label May 26, 2016

@sdboyer sdboyer added this to the MVP milestone May 26, 2016

@sdboyer sdboyer self-assigned this May 26, 2016

sdboyer added some commits May 26, 2016

Just make Solve() a plain function
This is probably a better design anyway, but it also helps with testing.

This comment has been minimized.


sdboyer commented Jun 7, 2016

Finally got things together to the point where I'm integrating the analysis bits into the core of the algorithm. There are a couple classes of things to handle. First is moving from package names to repos - which, for now, we take to be the same as projects.

  • We have to exclude stdlib packages, or other things that don't have, or appear to have, a network-addressable identity
  • We have to translate the package names (those not excluded by the preceding) back down to their repo roots, if we can. Obnoxiously, this may entail a remote HTTP op

Second, we have the issues described originally - discrepancies between the manifest and the analysis.

  • We could have some things found in the reach that aren't in the manifest. This is easy - we take them, with an open constraint.
  • We could have some things in the manifest that aren't in the reach, in which case we have two choices:
    • Ignore some or all of the extras
    • Incorporate some or all of the extras with special rules - select all of their non-main packages

sdboyer added some commits Jun 7, 2016

Basic mapping of stdlib
Really need an automated process for redetecting and regenerating this.

This comment has been minimized.


sdboyer commented Jun 17, 2016

so, so, so close now. the basic system should now be sound; i think there are now just odds and ends to cover.

sdboyer added some commits Jun 17, 2016

sdboyer added some commits Jun 20, 2016


This comment has been minimized.


sdboyer commented Jun 20, 2016

bleh bleh turns out the static analysis needs work, and tests. doing that, then i think i can finally merge.

sdboyer added some commits Jun 20, 2016

listPackages to return a PackageTree
Also add several more tests.
Fix almost everything up
Just need to deal with prefix matching and trailing slashes.
Fix import path prefixing issues
...though, kinda not sure why that's correct.
Add root pkgs to HashInputs()
...sorta. Gotta encapsulate this so that tests can swap out the impl.

This comment has been minimized.


sdboyer commented Jun 22, 2016


@sdboyer sdboyer merged commit f7fd81c into master Jun 22, 2016

3 checks passed

ci/circleci Your tests passed on CircleCI!
continuous-integration/appveyor/branch AppVeyor build succeeded
continuous-integration/appveyor/pr AppVeyor build succeeded

@sdboyer sdboyer deleted the bimodal branch Jul 8, 2016

kris-nova pushed a commit to kris-nova/dep that referenced this pull request Apr 21, 2017

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.