晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby34/share/gems/gems/bundler-2.6.9/lib/bundler/resolver/ |
| Current File : //opt/alt/ruby34/share/gems/gems/bundler-2.6.9/lib/bundler/resolver/base.rb |
# frozen_string_literal: true
require_relative "package"
module Bundler
class Resolver
class Base
attr_reader :packages, :requirements, :source_requirements, :locked_specs
def initialize(source_requirements, dependencies, base, platforms, options)
@source_requirements = source_requirements
@locked_specs = options[:locked_specs]
@base = base
@packages = Hash.new do |hash, name|
hash[name] = Package.new(name, platforms, **options)
end
@requirements = dependencies.filter_map do |dep|
dep_platforms = dep.gem_platforms(platforms)
# Dependencies scoped to external platforms are ignored
next if dep_platforms.empty?
name = dep.name
@packages[name] = Package.new(name, dep_platforms, **options.merge(dependency: dep))
dep
end
end
def [](name)
@base[name]
end
def delete(specs)
@base.delete(specs)
end
def get_package(name)
@packages[name]
end
def base_requirements
@base_requirements ||= build_base_requirements
end
def unlock_names(names)
indirect_pins = indirect_pins(names)
if indirect_pins.any?
loosen_names(indirect_pins)
else
pins = pins(names)
if pins.any?
loosen_names(pins)
else
unrestrict_names(names)
end
end
end
def include_prereleases(names)
names.each do |name|
get_package(name).consider_prereleases!
end
end
def include_remote_specs(names)
names.each do |name|
get_package(name).consider_remote_versions!
end
end
private
def indirect_pins(names)
names.select {|name| @base_requirements[name].exact? && @requirements.none? {|dep| dep.name == name } }
end
def pins(names)
names.select {|name| @base_requirements[name].exact? }
end
def loosen_names(names)
names.each do |name|
version = @base_requirements[name].requirements.first[1]
@base_requirements[name] = Gem::Requirement.new(">= #{version}")
@base.delete_by_name(name)
end
end
def unrestrict_names(names)
names.each do |name|
@base_requirements.delete(name)
end
end
def build_base_requirements
base_requirements = {}
@base.each do |ls|
if ls.source_changed? && ls.source.specs.search(ls.name).empty?
raise GemNotFound, "Could not find gem '#{ls.name}' in #{ls.source}"
end
req = Gem::Requirement.new(ls.version)
base_requirements[ls.name] = req
end
base_requirements
end
end
end
end
|