bundler 1.9.0 → 1.17.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CHANGELOG.md +1157 -6
- data/README.md +33 -6
- data/bundler.gemspec +51 -18
- data/exe/bundle +31 -0
- data/{bin → exe}/bundle_ruby +10 -6
- data/exe/bundler +4 -0
- data/lib/bundler.rb +326 -207
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +9 -3
- data/lib/bundler/cli.rb +522 -141
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +22 -11
- data/lib/bundler/cli/cache.rb +7 -6
- data/lib/bundler/cli/check.rb +11 -8
- data/lib/bundler/cli/clean.rb +7 -8
- data/lib/bundler/cli/common.rb +53 -7
- data/lib/bundler/cli/config.rb +84 -49
- data/lib/bundler/cli/console.rb +13 -8
- data/lib/bundler/cli/doctor.rb +140 -0
- data/lib/bundler/cli/exec.rb +77 -16
- data/lib/bundler/cli/gem.rb +120 -52
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +21 -7
- data/lib/bundler/cli/inject.rb +37 -10
- data/lib/bundler/cli/install.rb +139 -78
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +63 -0
- data/lib/bundler/cli/open.rb +9 -6
- data/lib/bundler/cli/outdated.rb +221 -35
- data/lib/bundler/cli/package.rb +11 -7
- data/lib/bundler/cli/platform.rb +7 -4
- data/lib/bundler/cli/plugin.rb +24 -0
- data/lib/bundler/cli/pristine.rb +47 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +11 -10
- data/lib/bundler/cli/update.rb +47 -29
- data/lib/bundler/cli/viz.rb +12 -8
- data/lib/bundler/compact_index_client.rb +109 -0
- data/lib/bundler/compact_index_client/cache.rb +118 -0
- data/lib/bundler/compact_index_client/updater.rb +116 -0
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +3 -1
- data/lib/bundler/current_ruby.rb +47 -137
- data/lib/bundler/definition.rb +599 -230
- data/lib/bundler/dep_proxy.rb +15 -10
- data/lib/bundler/dependency.rb +54 -25
- data/lib/bundler/deployment.rb +12 -2
- data/lib/bundler/deprecate.rb +33 -4
- data/lib/bundler/dsl.rb +383 -99
- data/lib/bundler/endpoint_specification.rb +72 -7
- data/lib/bundler/env.rb +121 -41
- data/lib/bundler/environment_preserver.rb +59 -0
- data/lib/bundler/errors.rb +158 -0
- data/lib/bundler/feature_flag.rb +74 -0
- data/lib/bundler/fetcher.rb +171 -280
- data/lib/bundler/fetcher/base.rb +52 -0
- data/lib/bundler/fetcher/compact_index.rb +126 -0
- data/lib/bundler/fetcher/dependency.rb +82 -0
- data/lib/bundler/fetcher/downloader.rb +84 -0
- data/lib/bundler/fetcher/index.rb +52 -0
- data/lib/bundler/friendly_errors.rb +113 -58
- data/lib/bundler/gem_helper.rb +73 -46
- data/lib/bundler/gem_helpers.rb +85 -9
- data/lib/bundler/gem_remote_fetcher.rb +43 -0
- data/lib/bundler/gem_tasks.rb +6 -1
- data/lib/bundler/gem_version_promoter.rb +190 -0
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +32 -49
- data/lib/bundler/index.rb +79 -67
- data/lib/bundler/injector.rb +219 -30
- data/lib/bundler/inline.rb +74 -0
- data/lib/bundler/installer.rb +191 -206
- data/lib/bundler/installer/gem_installer.rb +85 -0
- data/lib/bundler/installer/parallel_installer.rb +233 -0
- data/lib/bundler/installer/standalone.rb +53 -0
- data/lib/bundler/lazy_specification.rb +53 -13
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +157 -62
- data/lib/bundler/match_platform.rb +15 -4
- data/lib/bundler/mirror.rb +223 -0
- data/lib/bundler/plugin.rb +292 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/api/source.rb +306 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +162 -0
- data/lib/bundler/plugin/installer.rb +96 -0
- data/lib/bundler/plugin/installer/git.rb +38 -0
- data/lib/bundler/plugin/installer/rubygems.rb +27 -0
- data/lib/bundler/plugin/source_list.rb +27 -0
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +17 -6
- data/lib/bundler/remote_specification.rb +68 -11
- data/lib/bundler/resolver.rb +263 -229
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +25 -19
- data/lib/bundler/ruby_dsl.rb +9 -2
- data/lib/bundler/ruby_version.rb +101 -66
- data/lib/bundler/rubygems_ext.rb +77 -37
- data/lib/bundler/rubygems_gem_installer.rb +106 -0
- data/lib/bundler/rubygems_integration.rb +450 -163
- data/lib/bundler/runtime.rb +133 -103
- data/lib/bundler/settings.rb +344 -83
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +7 -3
- data/lib/bundler/shared_helpers.rb +284 -54
- data/lib/bundler/similarity_detector.rb +21 -21
- data/lib/bundler/source.rb +68 -15
- data/lib/bundler/source/gemspec.rb +18 -0
- data/lib/bundler/source/git.rb +90 -55
- data/lib/bundler/source/git/git_proxy.rb +135 -35
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +84 -61
- data/lib/bundler/source/path/installer.rb +53 -17
- data/lib/bundler/source/rubygems.rb +282 -122
- data/lib/bundler/source/rubygems/remote.rb +69 -0
- data/lib/bundler/source_list.rb +107 -22
- data/lib/bundler/spec_set.rb +83 -45
- data/lib/bundler/ssl_certs/certificate_manager.rb +8 -7
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/bundler/ssl_certs/{DigiCertHighAssuranceEVRootCA.pem → rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem} +0 -0
- data/lib/bundler/ssl_certs/{AddTrustExternalCARoot-2048.pem → rubygems.org/AddTrustExternalCARoot.pem} +0 -0
- data/lib/bundler/stub_specification.rb +108 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +19 -6
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Executable.standalone +6 -4
- data/lib/bundler/templates/Gemfile +4 -1
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +68 -7
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +19 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +10 -6
- data/lib/bundler/templates/newgem/bin/console.tt +1 -1
- data/lib/bundler/templates/newgem/bin/setup.tt +2 -1
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
- data/lib/bundler/templates/newgem/gitignore.tt +5 -1
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +31 -15
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +3 -5
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -2
- data/lib/bundler/templates/newgem/test/{test_newgem.rb.tt → newgem_test.rb.tt} +2 -2
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +4 -0
- data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
- data/lib/bundler/ui.rb +5 -3
- data/lib/bundler/ui/rg_proxy.rb +5 -7
- data/lib/bundler/ui/shell.rb +69 -18
- data/lib/bundler/ui/silent.rb +26 -1
- data/lib/bundler/uri_credentials_filter.rb +37 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/specification_provider.rb +11 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/ui.rb +6 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/resolver.rb +6 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor.rb +47 -22
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions.rb +31 -29
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_link.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/directory.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/empty_directory.rb +16 -8
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/file_manipulation.rb +66 -18
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/inject_into_file.rb +18 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/base.rb +67 -44
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/command.rb +13 -11
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/error.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/group.rb +14 -14
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/invocation.rb +4 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/readline.rb +0 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/argument.rb +4 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/arguments.rb +16 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/option.rb +42 -21
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/options.rb +13 -10
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/rake_compat.rb +1 -1
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/runner.rb +35 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell.rb +4 -4
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/basic.rb +49 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/color.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/html.rb +5 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/util.rb +8 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +4 -5
- data/lib/bundler/vendored_persistent.rb +45 -4
- data/lib/bundler/vendored_thor.rb +8 -5
- data/lib/bundler/version.rb +23 -1
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +8 -2
- data/lib/bundler/worker.rb +39 -6
- data/lib/bundler/yaml_serializer.rb +90 -0
- data/man/bundle-add.1 +58 -0
- data/man/bundle-add.1.txt +52 -0
- data/man/bundle-add.ronn +40 -0
- data/man/bundle-binstubs.1 +40 -0
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +43 -0
- data/man/bundle-check.1 +31 -0
- data/man/bundle-check.1.txt +33 -0
- data/man/bundle-check.ronn +26 -0
- data/man/bundle-clean.1 +24 -0
- data/man/bundle-clean.1.txt +26 -0
- data/man/bundle-clean.ronn +18 -0
- data/man/bundle-config.1 +497 -0
- data/man/bundle-config.1.txt +529 -0
- data/man/bundle-config.ronn +256 -31
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/man/bundle-exec.1 +165 -0
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +19 -3
- data/man/bundle-gem.1 +80 -0
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +78 -0
- data/man/bundle-info.1 +20 -0
- data/man/bundle-info.1.txt +21 -0
- data/man/bundle-info.ronn +17 -0
- data/man/bundle-init.1 +25 -0
- data/man/bundle-init.1.txt +34 -0
- data/man/bundle-init.ronn +29 -0
- data/man/bundle-inject.1 +33 -0
- data/man/bundle-inject.1.txt +32 -0
- data/man/bundle-inject.ronn +22 -0
- data/man/bundle-install.1 +308 -0
- data/man/bundle-install.1.txt +396 -0
- data/man/bundle-install.ronn +64 -67
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/man/bundle-lock.1 +84 -0
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-lock.ronn +94 -0
- data/man/bundle-open.1 +32 -0
- data/man/bundle-open.1.txt +29 -0
- data/man/bundle-open.ronn +19 -0
- data/man/bundle-outdated.1 +155 -0
- data/man/bundle-outdated.1.txt +131 -0
- data/man/bundle-outdated.ronn +111 -0
- data/man/bundle-package.1 +55 -0
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +14 -8
- data/man/bundle-platform.1 +61 -0
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-platform.ronn +1 -1
- data/man/bundle-pristine.1 +34 -0
- data/man/bundle-pristine.1.txt +44 -0
- data/man/bundle-pristine.ronn +34 -0
- data/man/bundle-remove.1 +31 -0
- data/man/bundle-remove.1.txt +34 -0
- data/man/bundle-remove.ronn +23 -0
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +27 -0
- data/man/bundle-show.ronn +21 -0
- data/man/bundle-update.1 +394 -0
- data/man/bundle-update.1.txt +391 -0
- data/man/bundle-update.ronn +180 -18
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +39 -0
- data/man/bundle-viz.ronn +30 -0
- data/man/bundle.1 +136 -0
- data/man/bundle.1.txt +116 -0
- data/man/bundle.ronn +46 -33
- data/man/gemfile.5 +689 -0
- data/man/gemfile.5.ronn +127 -79
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -7
- metadata +242 -95
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.travis.yml +0 -110
- data/CODE_OF_CONDUCT.md +0 -40
- data/CONTRIBUTING.md +0 -32
- data/DEVELOPMENT.md +0 -119
- data/ISSUES.md +0 -96
- data/Rakefile +0 -302
- data/UPGRADING.md +0 -103
- data/bin/bundle +0 -21
- data/bin/bundler +0 -21
- data/lib/bundler/anonymizable_uri.rb +0 -32
- data/lib/bundler/environment.rb +0 -42
- data/lib/bundler/gem_installer.rb +0 -9
- data/lib/bundler/gem_path_manipulation.rb +0 -8
- data/lib/bundler/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/bundler/templates/newgem/.travis.yml.tt +0 -3
- data/lib/bundler/templates/newgem/test/minitest_helper.rb.tt +0 -4
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo.rb +0 -5
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/dependency_graph.rb +0 -266
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/errors.rb +0 -69
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/gem_metadata.rb +0 -3
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolution.rb +0 -412
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/state.rb +0 -43
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/io_binary_read.rb +0 -10
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/ordered_hash.rb +0 -98
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/parser.rb +0 -4
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bundler
|
2
4
|
class SimilarityDetector
|
3
5
|
SimilarityScore = Struct.new(:string, :distance)
|
@@ -8,56 +10,54 @@ module Bundler
|
|
8
10
|
end
|
9
11
|
|
10
12
|
# return an array of words similar to 'word' from the corpus
|
11
|
-
def similar_words(word, limit=3)
|
12
|
-
words_by_similarity = @corpus.map{|w| SimilarityScore.new(w, levenshtein_distance(word, w))}
|
13
|
-
words_by_similarity.select{|s| s.distance<=limit}.sort_by(&:distance).map(&:string)
|
13
|
+
def similar_words(word, limit = 3)
|
14
|
+
words_by_similarity = @corpus.map {|w| SimilarityScore.new(w, levenshtein_distance(word, w)) }
|
15
|
+
words_by_similarity.select {|s| s.distance <= limit }.sort_by(&:distance).map(&:string)
|
14
16
|
end
|
15
17
|
|
16
18
|
# return the result of 'similar_words', concatenated into a list
|
17
19
|
# (eg "a, b, or c")
|
18
|
-
def similar_word_list(word, limit=3)
|
19
|
-
words = similar_words(word,limit)
|
20
|
-
if words.length==1
|
20
|
+
def similar_word_list(word, limit = 3)
|
21
|
+
words = similar_words(word, limit)
|
22
|
+
if words.length == 1
|
21
23
|
words[0]
|
22
|
-
elsif words.length>1
|
23
|
-
[words[0..-2].join(
|
24
|
+
elsif words.length > 1
|
25
|
+
[words[0..-2].join(", "), words[-1]].join(" or ")
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
|
28
29
|
protected
|
30
|
+
|
29
31
|
# http://www.informit.com/articles/article.aspx?p=683059&seqNum=36
|
30
|
-
def levenshtein_distance(this, that, ins=2, del=2, sub=1)
|
32
|
+
def levenshtein_distance(this, that, ins = 2, del = 2, sub = 1)
|
31
33
|
# ins, del, sub are weighted costs
|
32
34
|
return nil if this.nil?
|
33
35
|
return nil if that.nil?
|
34
|
-
dm = []
|
36
|
+
dm = [] # distance matrix
|
35
37
|
|
36
38
|
# Initialize first row values
|
37
|
-
dm[0] = (0..this.length).collect {
|
39
|
+
dm[0] = (0..this.length).collect {|i| i * ins }
|
38
40
|
fill = [0] * (this.length - 1)
|
39
41
|
|
40
42
|
# Initialize first column values
|
41
|
-
|
43
|
+
(1..that.length).each do |i|
|
42
44
|
dm[i] = [i * del, fill.flatten]
|
43
45
|
end
|
44
46
|
|
45
47
|
# populate matrix
|
46
|
-
|
47
|
-
|
48
|
+
(1..that.length).each do |i|
|
49
|
+
(1..this.length).each do |j|
|
48
50
|
# critical comparison
|
49
51
|
dm[i][j] = [
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
].min
|
52
|
+
dm[i - 1][j - 1] + (this[j - 1] == that[i - 1] ? 0 : sub),
|
53
|
+
dm[i][j - 1] + ins,
|
54
|
+
dm[i - 1][j] + del
|
55
|
+
].min
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
59
|
# The last value in matrix is the Levenshtein distance between the strings
|
59
60
|
dm[that.length][this.length]
|
60
61
|
end
|
61
|
-
|
62
62
|
end
|
63
63
|
end
|
data/lib/bundler/source.rb
CHANGED
@@ -1,18 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bundler
|
2
4
|
class Source
|
3
|
-
autoload :
|
4
|
-
autoload :
|
5
|
-
autoload :
|
6
|
-
|
7
|
-
|
8
|
-
uri = URI(uri.to_s) unless uri.is_a?(URI)
|
9
|
-
|
10
|
-
# Settings keys are all downcased
|
11
|
-
mirrors = Bundler.settings.gem_mirrors
|
12
|
-
normalized_key = URI(uri.to_s.downcase)
|
13
|
-
|
14
|
-
mirrors[normalized_key] || uri
|
15
|
-
end
|
5
|
+
autoload :Gemspec, "bundler/source/gemspec"
|
6
|
+
autoload :Git, "bundler/source/git"
|
7
|
+
autoload :Metadata, "bundler/source/metadata"
|
8
|
+
autoload :Path, "bundler/source/path"
|
9
|
+
autoload :Rubygems, "bundler/source/rubygems"
|
16
10
|
|
17
11
|
attr_accessor :dependency_names
|
18
12
|
|
@@ -22,12 +16,13 @@ module Bundler
|
|
22
16
|
|
23
17
|
def version_message(spec)
|
24
18
|
message = "#{spec.name} #{spec.version}"
|
19
|
+
message += " (#{spec.platform})" if spec.platform != Gem::Platform::RUBY && !spec.platform.nil?
|
25
20
|
|
26
21
|
if Bundler.locked_gems
|
27
|
-
locked_spec = Bundler.locked_gems.specs.find {
|
22
|
+
locked_spec = Bundler.locked_gems.specs.find {|s| s.name == spec.name }
|
28
23
|
locked_spec_version = locked_spec.version if locked_spec
|
29
24
|
if locked_spec_version && spec.version != locked_spec_version
|
30
|
-
message
|
25
|
+
message += Bundler.ui.add_color(" (was #{locked_spec_version})", version_color(spec.version, locked_spec_version))
|
31
26
|
end
|
32
27
|
end
|
33
28
|
|
@@ -37,5 +32,63 @@ module Bundler
|
|
37
32
|
def can_lock?(spec)
|
38
33
|
spec.source == self
|
39
34
|
end
|
35
|
+
|
36
|
+
# it's possible that gems from one source depend on gems from some
|
37
|
+
# other source, so now we download gemspecs and iterate over those
|
38
|
+
# dependencies, looking for gems we don't have info on yet.
|
39
|
+
def double_check_for(*); end
|
40
|
+
|
41
|
+
def dependency_names_to_double_check
|
42
|
+
specs.dependency_names
|
43
|
+
end
|
44
|
+
|
45
|
+
def include?(other)
|
46
|
+
other == self
|
47
|
+
end
|
48
|
+
|
49
|
+
def inspect
|
50
|
+
"#<#{self.class}:0x#{object_id} #{self}>"
|
51
|
+
end
|
52
|
+
|
53
|
+
def path?
|
54
|
+
instance_of?(Bundler::Source::Path)
|
55
|
+
end
|
56
|
+
|
57
|
+
def extension_cache_path(spec)
|
58
|
+
return unless Bundler.feature_flag.global_gem_cache?
|
59
|
+
return unless source_slug = extension_cache_slug(spec)
|
60
|
+
Bundler.user_cache.join(
|
61
|
+
"extensions", Gem::Platform.local.to_s, Bundler.ruby_scope,
|
62
|
+
source_slug, spec.full_name
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def version_color(spec_version, locked_spec_version)
|
69
|
+
if Gem::Version.correct?(spec_version) && Gem::Version.correct?(locked_spec_version)
|
70
|
+
# display yellow if there appears to be a regression
|
71
|
+
earlier_version?(spec_version, locked_spec_version) ? :yellow : :green
|
72
|
+
else
|
73
|
+
# default to green if the versions cannot be directly compared
|
74
|
+
:green
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def earlier_version?(spec_version, locked_spec_version)
|
79
|
+
Gem::Version.new(spec_version) < Gem::Version.new(locked_spec_version)
|
80
|
+
end
|
81
|
+
|
82
|
+
def print_using_message(message)
|
83
|
+
if !message.include?("(was ") && Bundler.feature_flag.suppress_install_using_messages?
|
84
|
+
Bundler.ui.debug message
|
85
|
+
else
|
86
|
+
Bundler.ui.info message
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def extension_cache_slug(_)
|
91
|
+
nil
|
92
|
+
end
|
40
93
|
end
|
41
94
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class Source
|
5
|
+
class Gemspec < Path
|
6
|
+
attr_reader :gemspec
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
super
|
10
|
+
@gemspec = options["gemspec"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def as_path_source
|
14
|
+
Path.new(options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/bundler/source/git.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/vendored_fileutils"
|
4
|
+
require "uri"
|
4
5
|
|
5
6
|
module Bundler
|
6
7
|
class Source
|
7
|
-
|
8
8
|
class Git < Path
|
9
|
-
autoload :GitProxy,
|
9
|
+
autoload :GitProxy, "bundler/source/git/git_proxy"
|
10
10
|
|
11
11
|
attr_reader :uri, :ref, :branch, :options, :submodules
|
12
12
|
|
@@ -18,14 +18,15 @@ module Bundler
|
|
18
18
|
@allow_remote = false
|
19
19
|
|
20
20
|
# Stringify options that could be set as symbols
|
21
|
-
%w
|
21
|
+
%w[ref branch tag revision].each {|k| options[k] = options[k].to_s if options[k] }
|
22
22
|
|
23
|
-
@uri = options["uri"] ||
|
23
|
+
@uri = options["uri"] || ""
|
24
|
+
@safe_uri = URICredentialsFilter.credential_filtered_uri(@uri)
|
24
25
|
@branch = options["branch"]
|
25
|
-
@ref = options["ref"] || options["branch"] || options["tag"] ||
|
26
|
+
@ref = options["ref"] || options["branch"] || options["tag"] || "master"
|
26
27
|
@submodules = options["submodules"]
|
27
28
|
@name = options["name"]
|
28
|
-
@version = options["version"]
|
29
|
+
@version = options["version"].to_s.strip.gsub("-", ".pre.")
|
29
30
|
|
30
31
|
@copied = false
|
31
32
|
@local = false
|
@@ -36,10 +37,10 @@ module Bundler
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def to_lock
|
39
|
-
out = "GIT\n"
|
40
|
+
out = String.new("GIT\n")
|
40
41
|
out << " remote: #{@uri}\n"
|
41
42
|
out << " revision: #{revision}\n"
|
42
|
-
%w
|
43
|
+
%w[ref branch tag submodules].each do |opt|
|
43
44
|
out << " #{opt}: #{options[opt]}\n" if options[opt]
|
44
45
|
end
|
45
46
|
out << " glob: #{@glob}\n" unless @glob == DEFAULT_GLOB
|
@@ -50,31 +51,38 @@ module Bundler
|
|
50
51
|
[self.class, uri, ref, branch, name, version, submodules].hash
|
51
52
|
end
|
52
53
|
|
53
|
-
def eql?(
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
branch == o.branch &&
|
58
|
-
name == o.name &&
|
59
|
-
version == o.version &&
|
60
|
-
submodules == o.submodules
|
54
|
+
def eql?(other)
|
55
|
+
other.is_a?(Git) && uri == other.uri && ref == other.ref &&
|
56
|
+
branch == other.branch && name == other.name &&
|
57
|
+
version == other.version && submodules == other.submodules
|
61
58
|
end
|
62
59
|
|
63
|
-
|
60
|
+
alias_method :==, :eql?
|
64
61
|
|
65
62
|
def to_s
|
66
63
|
at = if local?
|
67
64
|
path
|
68
|
-
elsif options["ref"]
|
69
|
-
|
65
|
+
elsif user_ref = options["ref"]
|
66
|
+
if ref =~ /\A[a-z0-9]{4,}\z/i
|
67
|
+
shortref_for_display(user_ref)
|
68
|
+
else
|
69
|
+
user_ref
|
70
|
+
end
|
70
71
|
else
|
71
72
|
ref
|
72
73
|
end
|
73
|
-
|
74
|
+
|
75
|
+
rev = begin
|
76
|
+
"@#{shortref_for_display(revision)}"
|
77
|
+
rescue GitError
|
78
|
+
nil
|
79
|
+
end
|
80
|
+
|
81
|
+
"#{@safe_uri} (at #{at}#{rev})"
|
74
82
|
end
|
75
83
|
|
76
84
|
def name
|
77
|
-
File.basename(@uri,
|
85
|
+
File.basename(@uri, ".git")
|
78
86
|
end
|
79
87
|
|
80
88
|
# This is the path which is going to contain a specific
|
@@ -83,6 +91,7 @@ module Bundler
|
|
83
91
|
def install_path
|
84
92
|
@install_path ||= begin
|
85
93
|
git_scope = "#{base_name}-#{shortref_for_path(revision)}"
|
94
|
+
|
86
95
|
path = Bundler.install_path.join(git_scope)
|
87
96
|
|
88
97
|
if !path.exist? && Bundler.requires_sudo?
|
@@ -93,7 +102,7 @@ module Bundler
|
|
93
102
|
end
|
94
103
|
end
|
95
104
|
|
96
|
-
|
105
|
+
alias_method :path, :install_path
|
97
106
|
|
98
107
|
def extension_dir_name
|
99
108
|
"#{base_name}-#{shortref_for_path(revision)}"
|
@@ -101,6 +110,8 @@ module Bundler
|
|
101
110
|
|
102
111
|
def unlock!
|
103
112
|
git_proxy.revision = nil
|
113
|
+
options["revision"] = nil
|
114
|
+
|
104
115
|
@unlocked = true
|
105
116
|
end
|
106
117
|
|
@@ -143,14 +154,11 @@ module Bundler
|
|
143
154
|
changed
|
144
155
|
end
|
145
156
|
|
146
|
-
# TODO: actually cache git specs
|
147
157
|
def specs(*)
|
148
|
-
if has_app_cache? && !local?
|
149
|
-
set_local!(app_cache_path)
|
150
|
-
end
|
158
|
+
set_local!(app_cache_path) if has_app_cache? && !local?
|
151
159
|
|
152
160
|
if requires_checkout? && !@copied
|
153
|
-
|
161
|
+
fetch
|
154
162
|
git_proxy.copy_to(install_path, submodules)
|
155
163
|
serialize_gemspecs_in(install_path)
|
156
164
|
@copied = true
|
@@ -159,24 +167,27 @@ module Bundler
|
|
159
167
|
local_specs
|
160
168
|
end
|
161
169
|
|
162
|
-
def install(spec)
|
163
|
-
|
164
|
-
|
165
|
-
|
170
|
+
def install(spec, options = {})
|
171
|
+
force = options[:force]
|
172
|
+
|
173
|
+
print_using_message "Using #{version_message(spec)} from #{self}"
|
174
|
+
|
175
|
+
if (requires_checkout? && !@copied) || force
|
176
|
+
Bundler.ui.debug " * Checking out revision: #{ref}"
|
166
177
|
git_proxy.copy_to(install_path, submodules)
|
167
178
|
serialize_gemspecs_in(install_path)
|
168
179
|
@copied = true
|
169
180
|
end
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
181
|
+
|
182
|
+
generate_bin_options = { :disable_extensions => !Bundler.rubygems.spec_missing_extensions?(spec), :build_args => options[:build_args] }
|
183
|
+
generate_bin(spec, generate_bin_options)
|
184
|
+
|
185
|
+
requires_checkout? ? spec.post_install_message : nil
|
175
186
|
end
|
176
187
|
|
177
188
|
def cache(spec, custom_path = nil)
|
178
189
|
app_cache_path = app_cache_path(custom_path)
|
179
|
-
return unless Bundler.
|
190
|
+
return unless Bundler.feature_flag.cache_all?
|
180
191
|
return if path == app_cache_path
|
181
192
|
cached!
|
182
193
|
FileUtils.rm_rf(app_cache_path)
|
@@ -189,7 +200,7 @@ module Bundler
|
|
189
200
|
super
|
190
201
|
rescue PathError => e
|
191
202
|
Bundler.ui.trace e
|
192
|
-
raise GitError, "#{
|
203
|
+
raise GitError, "#{self} is not yet checked out. Run `bundle install` first."
|
193
204
|
end
|
194
205
|
|
195
206
|
# This is the path which is going to contain a cache
|
@@ -198,13 +209,11 @@ module Bundler
|
|
198
209
|
# When using local git repos, this is set to the local repo.
|
199
210
|
def cache_path
|
200
211
|
@cache_path ||= begin
|
201
|
-
|
202
|
-
|
203
|
-
if Bundler.requires_sudo?
|
204
|
-
Bundler.user_bundle_path.join("cache/git", git_scope)
|
212
|
+
if Bundler.requires_sudo? || Bundler.feature_flag.global_gem_cache?
|
213
|
+
Bundler.user_cache
|
205
214
|
else
|
206
|
-
Bundler.
|
207
|
-
end
|
215
|
+
Bundler.bundle_path.join("cache", "bundler")
|
216
|
+
end.join("git", git_scope)
|
208
217
|
end
|
209
218
|
end
|
210
219
|
|
@@ -220,17 +229,19 @@ module Bundler
|
|
220
229
|
@allow_remote || @allow_cached
|
221
230
|
end
|
222
231
|
|
223
|
-
|
232
|
+
private
|
224
233
|
|
225
234
|
def serialize_gemspecs_in(destination)
|
226
|
-
|
227
|
-
Dir["#{
|
235
|
+
destination = destination.expand_path(Bundler.root) if destination.relative?
|
236
|
+
Dir["#{destination}/#{@glob}"].each do |spec_path|
|
228
237
|
# Evaluate gemspecs and cache the result. Gemspecs
|
229
238
|
# in git might require git or other dependencies.
|
230
239
|
# The gemspecs we cache should already be evaluated.
|
231
240
|
spec = Bundler.load_gemspec(spec_path)
|
232
241
|
next unless spec
|
233
|
-
|
242
|
+
Bundler.rubygems.set_installed_by_version(spec)
|
243
|
+
Bundler.rubygems.validate(spec)
|
244
|
+
File.open(spec_path, "wb") {|file| file.write(spec.to_ruby) }
|
234
245
|
end
|
235
246
|
end
|
236
247
|
|
@@ -253,7 +264,7 @@ module Bundler
|
|
253
264
|
end
|
254
265
|
|
255
266
|
def base_name
|
256
|
-
File.basename(uri.sub(%r{^(\w+://)?([^/:]+:)?(//\w*/)?(\w*/)*},
|
267
|
+
File.basename(uri.sub(%r{^(\w+://)?([^/:]+:)?(//\w*/)?(\w*/)*}, ""), ".git")
|
257
268
|
end
|
258
269
|
|
259
270
|
def shortref_for_display(ref)
|
@@ -268,12 +279,12 @@ module Bundler
|
|
268
279
|
if uri =~ %r{^\w+://(\w+@)?}
|
269
280
|
# Downcase the domain component of the URI
|
270
281
|
# and strip off a trailing slash, if one is present
|
271
|
-
input = URI.parse(uri).normalize.to_s.sub(%r{/$},
|
282
|
+
input = URI.parse(uri).normalize.to_s.sub(%r{/$}, "")
|
272
283
|
else
|
273
284
|
# If there is no URI scheme, assume it is an ssh/git URI
|
274
285
|
input = uri
|
275
286
|
end
|
276
|
-
|
287
|
+
SharedHelpers.digest(:SHA1).hexdigest(input)
|
277
288
|
end
|
278
289
|
|
279
290
|
def cached_revision
|
@@ -288,7 +299,31 @@ module Bundler
|
|
288
299
|
@git_proxy ||= GitProxy.new(cache_path, uri, ref, cached_revision, self)
|
289
300
|
end
|
290
301
|
|
291
|
-
|
302
|
+
def fetch
|
303
|
+
git_proxy.checkout
|
304
|
+
rescue GitError => e
|
305
|
+
raise unless Bundler.feature_flag.allow_offline_install?
|
306
|
+
Bundler.ui.warn "Using cached git data because of network errors:\n#{e}"
|
307
|
+
end
|
308
|
+
|
309
|
+
# no-op, since we validate when re-serializing the gemspec
|
310
|
+
def validate_spec(_spec); end
|
292
311
|
|
312
|
+
if Bundler.rubygems.stubs_provide_full_functionality?
|
313
|
+
def load_gemspec(file)
|
314
|
+
stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
|
315
|
+
stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s.untaint
|
316
|
+
StubSpecification.from_stub(stub)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
def git_scope
|
321
|
+
"#{base_name}-#{uri_hash}"
|
322
|
+
end
|
323
|
+
|
324
|
+
def extension_cache_slug(_)
|
325
|
+
extension_dir_name
|
326
|
+
end
|
327
|
+
end
|
293
328
|
end
|
294
329
|
end
|