mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
bc735bbe22
- unified makefile project for the whole repos - new separate project for tests
70 lines
2.3 KiB
Ruby
70 lines
2.3 KiB
Ruby
require 'rubygems'
|
|
require 'rake'
|
|
require 'set'
|
|
require 'fileutils'
|
|
require 'file_path_utils.rb'
|
|
|
|
|
|
class FileSystemUtils
|
|
|
|
constructor :file_wrapper
|
|
|
|
# build up path list from input of one or more strings or arrays of (+/-) paths & globs
|
|
def collect_paths(*paths)
|
|
raw = [] # all paths and globs
|
|
plus = Set.new # all paths to expand and add
|
|
minus = Set.new # all paths to remove from plus set
|
|
|
|
# assemble all globs and simple paths, reforming our glob notation to ruby globs
|
|
paths.each do |paths_container|
|
|
case (paths_container)
|
|
when String then raw << (FilePathUtils::reform_glob(paths_container))
|
|
when Array then paths_container.each {|path| raw << (FilePathUtils::reform_glob(path))}
|
|
else raise "Don't know how to handle #{paths_container.class}"
|
|
end
|
|
end
|
|
|
|
# iterate through each path and glob
|
|
raw.each do |path|
|
|
|
|
dirs = [] # container for only (expanded) paths
|
|
|
|
# if a glob, expand it and slurp up all non-file paths
|
|
if path.include?('*')
|
|
# grab base directory only if globs are snug up to final path separator
|
|
if (path =~ /\/\*+$/)
|
|
dirs << FilePathUtils.extract_path(path)
|
|
end
|
|
|
|
# grab expanded sub-directory globs
|
|
expanded = @file_wrapper.directory_listing( FilePathUtils.extract_path_no_aggregation_operators(path) )
|
|
expanded.each do |entry|
|
|
dirs << entry if @file_wrapper.directory?(entry)
|
|
end
|
|
|
|
# else just grab simple path
|
|
# note: we could just run this through glob expansion but such an
|
|
# approach doesn't handle a path not yet on disk)
|
|
else
|
|
dirs << FilePathUtils.extract_path_no_aggregation_operators(path)
|
|
end
|
|
|
|
# add dirs to the appropriate set based on path aggregation modifier if present
|
|
FilePathUtils.add_path?(path) ? plus.merge(dirs) : minus.merge(dirs)
|
|
end
|
|
|
|
return (plus - minus).to_a.uniq
|
|
end
|
|
|
|
|
|
# given a file list, add to it or remove from it
|
|
def revise_file_list(list, revisions)
|
|
revisions.each do |revision|
|
|
# include or exclude file or glob to file list
|
|
file = FilePathUtils.extract_path_no_aggregation_operators( revision )
|
|
FilePathUtils.add_path?(revision) ? list.include(file) : list.exclude(file)
|
|
end
|
|
end
|
|
|
|
end
|