forked from sparklemotion/nokogiri
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck-manifest.rake
108 lines (94 loc) · 2.54 KB
/
check-manifest.rake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# frozen_string_literal: true
# rubocop:disable Style/WordArray
# replacement for Hoe's task of the same name
desc "Perform a sanity check on the gemspec file list"
task :check_manifest, [:verbose] do |_, args|
verbose = args[:verbose]
raw_gemspec = Bundler.load_gemspec("nokogiri.gemspec")
ignore_directories = %w{
.bundle
.DS_Store
.git
.github
.ruby-lsp
.vagrant
.vscode
adr
coverage
gems
html
issues
misc
oci-images
patches
pkg
ports
rakelib
scripts
sorbet
suppressions
test
tmp
vendor
[0-9]*
}
ignore_files = %w[
.cross_rubies
.editorconfig
.gitignore
.gitmodules
.rubocop.yml
.rubocop_exclude.yml
.rubocop_todo.yml
CHANGELOG.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
Gemfile?*
ROADMAP.md
Rakefile
SECURITY.md
Vagrantfile
[a-z]*.{log,out}
[0-9]*
appveyor.yml
**/compile_commands.json
gumbo-parser/fuzzer/*
gumbo-parser/test/*
gumbo-parser/gperf-filter.sed
lib/nokogiri/**/nokogiri.{jar,so}
lib/nokogiri/nokogiri.{jar,so}
nokogiri.gemspec
]
if verbose
ignore_directories.each do |glob|
matches = Dir.glob(glob).select { |filename| File.directory?(filename) }
$stderr.puts "NOTE: ignored directory glob '#{glob}' has zero matches" if matches.empty?
end
ignore_files.each do |glob|
matches = Dir.glob(glob).select { |filename| File.file?(filename) }
$stderr.puts "NOTE: ignored file glob '#{glob}' has zero matches" if matches.empty?
end
end
intended_directories = Dir.children(".")
.select { |filename| File.directory?(filename) }
.reject { |filename| ignore_directories.any? { |ig| File.fnmatch?(ig, filename) } }
intended_files = Dir.children(".")
.select { |filename| File.file?(filename) }
.reject { |filename| ignore_files.any? { |ig| File.fnmatch?(ig, filename, File::FNM_EXTGLOB) } }
intended_files += Dir.glob(intended_directories.map { |d| File.join(d, "/**/*") })
.select { |filename| File.file?(filename) }
.reject { |filename| ignore_files.any? { |ig| File.fnmatch?(ig, filename, File::FNM_EXTGLOB) } }
.sort
spec_files = raw_gemspec.files.sort
missing_files = intended_files - spec_files
extra_files = spec_files - intended_files
unless missing_files.empty?
puts "missing:"
missing_files.sort.each { |f| puts "- #{f}" }
end
unless extra_files.empty?
puts "unexpected:"
extra_files.sort.each { |f| puts "+ #{f}" }
end
end
# rubocop:enable Style/WordArray