fix boot performance issue

Slight refactor to improve boot performance on some Ruby
implementations (for now).
上级 aa804b15
......@@ -86,16 +86,6 @@ def directories_to_watch
end
class PathHelper
using Module.new {
refine Pathname do
def ascendant_of?(other)
self != other && other.ascend do |ascendant|
break true if self == ascendant
end
end
end
}
def xpath(path)
Pathname.new(path).expand_path
end
......@@ -112,7 +102,7 @@ def longest_common_subpath(paths)
lcsp = Pathname.new(paths[0])
paths[1..-1].each do |path|
until lcsp.ascendant_of?(path)
until ascendant_of?(lcsp, path)
if lcsp.root?
# If we get here a root directory is not an ascendant of path.
# This may happen if there are paths in different drives on
......@@ -145,13 +135,21 @@ def filter_out_descendants(dirs)
dir = dirs_sorted_by_nparts.shift
dirs_sorted_by_nparts.reject! do |possible_descendant|
dir.ascendant_of?(possible_descendant) && descendants << possible_descendant
ascendant_of?(dir, possible_descendant) && descendants << possible_descendant
end
end
# Array#- preserves order.
dirs - descendants
end
private
def ascendant_of?(base, other)
base != other && other.ascend do |ascendant|
break true if base == ascendant
end
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册