@@ -14,20 +14,32 @@ def system(*commands)
1414 super ( *commands )
1515end
1616
17+ # ソースは manual/ の Markdown ツリー(manual/doc は manual/api から自動で取り込まれる)。
18+ # 旧 refm/ は移行ウィンドウ中の凍結ソース。旧経路でビルドしたい場合は
19+ # BITCLUST_SOURCE=refm を指定する。
1720def generate_database ( version )
1821 puts "generate database of #{ version } "
1922 db = "/tmp/db-#{ version } "
2023 succeeded = system ( "bundle" , "exec" ,
2124 "bitclust" , "--database=#{ db } " ,
2225 "init" , "version=#{ version } " , "encoding=UTF-8" )
2326 raise "Failed to initialize BitClust database" unless succeeded
24- succeeded = system ( "bundle" , "exec" , "bitclust" , "--database=#{ db } " ,
25- "update" , "--stdlibtree=refm/api/src" )
26- raise "Failed to update BitClust database" unless succeeded
27- capi_files = Dir . glob ( "refm/capi/src/*" )
28- succeeded = system ( "bundle" , "exec" , "bitclust" , "--database=#{ db } " , "--capi" ,
29- "update" , *capi_files )
30- raise "Failed to update BitClust C API database" unless succeeded
27+ if ENV [ "BITCLUST_SOURCE" ] == "refm"
28+ succeeded = system ( "bundle" , "exec" , "bitclust" , "--database=#{ db } " ,
29+ "update" , "--stdlibtree=refm/api/src" )
30+ raise "Failed to update BitClust database" unless succeeded
31+ capi_files = Dir . glob ( "refm/capi/src/*" )
32+ succeeded = system ( "bundle" , "exec" , "bitclust" , "--database=#{ db } " , "--capi" ,
33+ "update" , *capi_files )
34+ raise "Failed to update BitClust C API database" unless succeeded
35+ else
36+ succeeded = system ( "bundle" , "exec" , "bitclust" , "--database=#{ db } " ,
37+ "update" , "--markdowntree=manual/api" )
38+ raise "Failed to update BitClust database" unless succeeded
39+ succeeded = system ( "bundle" , "exec" , "bitclust" , "--database=#{ db } " , "--capi" ,
40+ "update" , "--markdowntree=manual/capi" )
41+ raise "Failed to update BitClust C API database" unless succeeded
42+ end
3143end
3244
3345def generate_statichtml ( version )
@@ -57,7 +69,7 @@ def generate_statichtml(version)
5769 raise "Failed to generate static html" unless succeeded
5870end
5971
60- task :default => [ :check_indent_in_samplecode , :generate , :check_format ]
72+ task :default => [ :check_filename_case_conflicts , : check_indent_in_samplecode, :generate , :check_format ]
6173
6274namespace :generate do
6375 ALL_VERSIONS . each do |version |
@@ -151,10 +163,27 @@ task check_format: [:statichtml] do
151163 end
152164end
153165
166+ desc 'Check file names that differ only in case'
167+ task :check_filename_case_conflicts do
168+ # 大文字小文字のみが異なるファイル名は macOS/Windows の case-insensitive な
169+ # ファイルシステムでチェックアウト不能になる(manual/api/rdoc/rdoc.lib.md の
170+ # ような .lib 回避と front matter の name: については bitclust の
171+ # doc/markdown-samples/MARKUP_SPEC.md §1.3 を参照)
172+ errors = Dir . glob ( '{manual,refm}/**/*' )
173+ . group_by ( &:downcase ) . values
174+ . select { |paths | paths . size > 1 }
175+ . map { |paths | "大文字小文字のみが異なるファイル名があります: #{ paths . sort . join ( ' / ' ) } " }
176+
177+ unless errors . empty?
178+ puts errors
179+ fail
180+ end
181+ end
182+
154183desc 'Check unnecessary indentation in samplecode'
155184task :check_indent_in_samplecode do
156185 errors = [ ]
157- `grep -rlF '\# @samplecode' refm` . lines ( chomp : true ) . each do |path |
186+ `grep -rlF '\# @samplecode' manual refm` . lines ( chomp : true ) . each do |path |
158187 lines = File . read ( path ) . lines ( chomp : true )
159188 lines . each . with_index ( 1 ) do |line , lineno |
160189 next unless line . start_with? ( '#@samplecode' )
0 commit comments