@@ -58,18 +58,47 @@ def self.build_from_location(base_path, site)
58
58
Jekyll . logger . info "Bookshop:" ,
59
59
"Parsing Stories from #{ base_path } "
60
60
61
- threads = [ ]
62
- Dir . glob ( "**/*.{bookshop}.{toml,tml,tom,tm}" , :base => base_path ) . each do |f |
63
- threads << Thread . new do
64
- raw_file = File . read ( base_path + "/" + f )
65
- component = load_component ( raw_file )
66
-
67
- transform_component ( f , component ) . each do |transformed_component |
68
- add_structure ( site . config [ "_array_structures" ] , transformed_component )
61
+ files = Dir . glob ( "**/*.{bookshop}.{toml,tml,tom,tm}" , :base => base_path ) ;
62
+
63
+ read_attempts = 0
64
+ while files . size > 0 && read_attempts < 5
65
+ processing = files . map ( &:clone )
66
+ files = [ ]
67
+ threads = [ ]
68
+ processing . each do |f |
69
+ threads << Thread . new do
70
+ begin
71
+ raw_file = File . read ( base_path + "/" + f )
72
+ component = load_component ( raw_file )
73
+
74
+ transform_component ( f , component ) . each do |transformed_component |
75
+ add_structure ( site . config [ "_array_structures" ] , transformed_component )
76
+ end
77
+ rescue
78
+ Thread . current [ :output ] = f
79
+ end
69
80
end
70
81
end
82
+ threads . each do |t |
83
+ t . join
84
+ files << t [ :output ] if t [ :output ]
85
+ end
86
+ Jekyll . logger . info "Bookshop:" ,
87
+ "Had trouble reading #{ files . size } file(s), retrying" if files . size > 0
88
+ read_attempts += 1
89
+ end
90
+
91
+ if files . size > 0
92
+ Jekyll . logger . error "Bookshop:" ,
93
+ "❌ Failed to read #{ files . size } file(s)"
94
+ files . each do |f |
95
+ Jekyll . logger . error "Bookshop:" ,
96
+ "❌ Failed to read #{ f } "
97
+ end
98
+ Jekyll . logger . error "Bookshop:" ,
99
+ "❌ Check your TOML files are valid."
100
+ exit 1
71
101
end
72
- threads . each ( &:join )
73
102
end
74
103
75
104
def self . setup_helpers
0 commit comments