|
40 | 40 | { |
41 | 41 | "name": ".moon", |
42 | 42 | "url": "@{fileBaseUrl}@{fileName}", |
43 | | - "sha1": "42AFEF27FF1B53FD88A23E4E96085F342A8E4BA6" |
| 43 | + "sha1": "5F5CEE335196ACB7C7D2D7B3B4929B2A8B91E3B4" |
44 | 44 | } |
45 | 45 | ], |
46 | 46 | "requiredModules": [ |
|
93 | 93 | { |
94 | 94 | "name": ".moon", |
95 | 95 | "url": "@{fileBaseUrl}@{fileName}", |
96 | | - "sha1": "9D86C61973B0F19383AEC85A13FCD7C00FBCAA75" |
| 96 | + "sha1": "347F082AA79C6DB9E58672C246F553CDCB668ACB" |
97 | 97 | }, |
98 | 98 | { |
99 | 99 | "name": "/Common.moon", |
|
108 | 108 | { |
109 | 109 | "name": "/ConfigHandler.moon", |
110 | 110 | "url": "@{fileBaseUrl}@{fileName}", |
111 | | - "sha1": "976A2F1B5EF87DBA0F98EC8544230EC55F3B9C3B" |
| 111 | + "sha1": "1B8EE7C531794148B63B09BDC1197EEA66D5E98B" |
112 | 112 | }, |
113 | 113 | { |
114 | 114 | "name": "/ConfigView.moon", |
|
123 | 123 | { |
124 | 124 | "name": "/Downloader.moon", |
125 | 125 | "url": "@{fileBaseUrl}@{fileName}", |
126 | | - "sha1": "A36FC8823AEC86E8B4CD138EA4F86DFBADCEF448" |
127 | | - }, |
128 | | - { |
129 | | - "name": "/DownloadManager.moon", |
130 | | - "url": "@{fileBaseUrl}@{fileName}", |
131 | | - "sha1": "989E147B32287EAC26456266402C6C69877EE121" |
| 126 | + "sha1": "0FC493932D84FDF629B18DE260565C5CFCDD8714" |
132 | 127 | }, |
133 | 128 | { |
134 | 129 | "name": "/Enum.moon", |
|
140 | 135 | "url": "@{fileBaseUrl}@{fileName}", |
141 | 136 | "sha1": "3699FF01202D89D227BBE214E37DA056A93DED20" |
142 | 137 | }, |
| 138 | + { |
| 139 | + "name": "/FileLock.moon", |
| 140 | + "url": "@{fileBaseUrl}@{fileName}", |
| 141 | + "sha1": "E2434F8C39E118364FC60F465BF07F9F79086CA7" |
| 142 | + }, |
143 | 143 | { |
144 | 144 | "name": "/FileOps.moon", |
145 | 145 | "url": "@{fileBaseUrl}@{fileName}", |
|
158 | 158 | { |
159 | 159 | "name": "/Lock.moon", |
160 | 160 | "url": "@{fileBaseUrl}@{fileName}", |
161 | | - "sha1": "68515CB1EA45191529EF4A75F0E88387A9085F15" |
| 161 | + "sha1": "982B95D6B0AFB567997B43D7741CB69B357B6977" |
162 | 162 | }, |
163 | 163 | { |
164 | 164 | "name": "/Logger.moon", |
|
168 | 168 | { |
169 | 169 | "name": "/ModuleLoader.moon", |
170 | 170 | "url": "@{fileBaseUrl}@{fileName}", |
171 | | - "sha1": "47BE77247A9E2732BE9D50F8251D16E92B4D5AB8" |
| 171 | + "sha1": "1A6E9FC0077B56EF9BB8FD47108852BA0864B14C" |
172 | 172 | }, |
173 | 173 | { |
174 | 174 | "name": "/ModuleProvider.moon", |
175 | 175 | "url": "@{fileBaseUrl}@{fileName}", |
176 | | - "sha1": "951409F023D8D7159D9AD4B218B4A93CEB9067AC" |
| 176 | + "sha1": "5F634C4B566E70D962C606D55D94A7AC4FE1C253" |
| 177 | + }, |
| 178 | + { |
| 179 | + "name": "/NamedSemaphore.moon", |
| 180 | + "url": "@{fileBaseUrl}@{fileName}", |
| 181 | + "sha1": "5C40B2EDFFE229912E52B6B9722B71C9A4F3C67B" |
177 | 182 | }, |
178 | 183 | { |
179 | 184 | "name": "/Record.moon", |
180 | 185 | "url": "@{fileBaseUrl}@{fileName}", |
181 | | - "sha1": "671C3F05B0A533FBF08C68559DE84E2837790344" |
| 186 | + "sha1": "9671CF860C24069572ED72BEB086637544036407" |
182 | 187 | }, |
183 | 188 | { |
184 | 189 | "name": "/ScriptTargetFilter.moon", |
|
201 | 206 | "sha1": "F48B4E3EBA9ADBB22745714060B454C22CE75AB9" |
202 | 207 | }, |
203 | 208 | { |
204 | | - "name": "/TerribleMutex.moon", |
| 209 | + "name": "/BadMutex.moon", |
205 | 210 | "url": "@{fileBaseUrl}@{fileName}", |
206 | | - "sha1": "6B1C4E43BB588DDD2DE0FF730F3F288C641C535E" |
| 211 | + "sha1": "6B1C4E43BB588DDD2DE0FF730F3F288C641C535E", |
| 212 | + "delete": true |
207 | 213 | }, |
208 | 214 | { |
209 | 215 | "name": "/Timer.moon", |
210 | 216 | "url": "@{fileBaseUrl}@{fileName}", |
211 | | - "sha1": "5E3C81C8D90BC8D04D2A9B42494506F66381142D" |
| 217 | + "sha1": "5CD3E71061C48F8209B4849398B333DBAEB03ADD" |
212 | 218 | }, |
213 | 219 | { |
214 | 220 | "name": "/UnitTestSuite.moon", |
|
218 | 224 | { |
219 | 225 | "name": "/UpdateFeed.moon", |
220 | 226 | "url": "@{fileBaseUrl}@{fileName}", |
221 | | - "sha1": "7588536CDE3DA5DE9AE6BD667A4D81271A35D69C" |
| 227 | + "sha1": "9C060E835FEEFF275B261E8638CF028D17CEE44B" |
222 | 228 | }, |
223 | 229 | { |
224 | 230 | "name": "/Updater.moon", |
225 | 231 | "url": "@{fileBaseUrl}@{fileName}", |
226 | | - "sha1": "2A76F7DA351389F03B219CDC16D54E797A424965" |
| 232 | + "sha1": "8DEF5E943716147B1879E387FA15EEE0E03DA49D" |
227 | 233 | }, |
228 | 234 | { |
229 | 235 | "name": "/ZipArchiver.moon", |
230 | 236 | "url": "@{fileBaseUrl}@{fileName}", |
231 | 237 | "sha1": "93A4D958835DECFE594F6D8CAEF050992523E4DB" |
232 | 238 | }, |
| 239 | + { |
| 240 | + "name": "/helpers/ffi-posix.moon", |
| 241 | + "url": "@{fileBaseUrl}@{fileName}", |
| 242 | + "sha1": "70CCC5FBFB48234DAD013854E8845541CC28A94F" |
| 243 | + }, |
| 244 | + { |
| 245 | + "name": "/helpers/ffi-windows.moon", |
| 246 | + "url": "@{fileBaseUrl}@{fileName}", |
| 247 | + "sha1": "8A2ABE7CB6011F4F7D390C9FB9E396B337B3584C" |
| 248 | + }, |
| 249 | + { |
| 250 | + "name": "/shims/BadMutex.moon", |
| 251 | + "url": "@{fileBaseUrl}@{fileName}", |
| 252 | + "sha1": "269B7FE920886A1A294A71305CFD4974F6EF3F48" |
| 253 | + }, |
| 254 | + { |
| 255 | + "name": "/shims/DownloadManager.moon", |
| 256 | + "url": "@{fileBaseUrl}@{fileName}", |
| 257 | + "sha1": "38D6884F543E23512F7132CA4E3A5F627E3A1B7B" |
| 258 | + }, |
| 259 | + { |
| 260 | + "name": "/shims/PreciseTimer.moon", |
| 261 | + "url": "@{fileBaseUrl}@{fileName}", |
| 262 | + "sha1": "D46B97F295F555FE74E184CC16424F5004F33687" |
| 263 | + }, |
233 | 264 | { |
234 | 265 | "name": ".moon", |
235 | 266 | "url": "@{fileBaseUrl}@{fileName}", |
236 | | - "sha1": "3EB678551149E3E71EBCAA4504D19AE2F5DDB088", |
| 267 | + "sha1": "D57577BD7500F56A84F127B422FF2A724302BDED", |
| 268 | + "type": "test" |
| 269 | + }, |
| 270 | + { |
| 271 | + "name": "/BadMutex.moon", |
| 272 | + "url": "@{fileBaseUrl}@{fileName}", |
| 273 | + "sha1": "BDEA61A6DD65512495FD919754E8E14D351A48EE", |
237 | 274 | "type": "test" |
238 | 275 | }, |
239 | 276 | { |
240 | 277 | "name": "/Common.moon", |
241 | 278 | "url": "@{fileBaseUrl}@{fileName}", |
242 | | - "sha1": "890EE068F0FA76B126C2459F8A91850ED1582956", |
| 279 | + "sha1": "B732E2879AD3F80A941771FF3783BC3CE58E625E", |
| 280 | + "type": "test" |
| 281 | + }, |
| 282 | + { |
| 283 | + "name": "/ffi-posix.moon", |
| 284 | + "url": "@{fileBaseUrl}@{fileName}", |
| 285 | + "sha1": "535A053FE09841BDB4C757A77B7FB3EA360EA745", |
243 | 286 | "type": "test" |
244 | 287 | }, |
245 | 288 | { |
|
260 | 303 | "sha1": "7785C25F8060AD519EFA2BF9D9E41BF9D984A43A", |
261 | 304 | "type": "test" |
262 | 305 | }, |
| 306 | + { |
| 307 | + "name": "/Lock.moon", |
| 308 | + "url": "@{fileBaseUrl}@{fileName}", |
| 309 | + "sha1": "7AE20FBFD526FE42965AADDD738A88BDD143E8F6", |
| 310 | + "type": "test" |
| 311 | + }, |
263 | 312 | { |
264 | 313 | "name": "/ModuleProvider.moon", |
265 | 314 | "url": "@{fileBaseUrl}@{fileName}", |
|
278 | 327 | "sha1": "278632008FE11ADB967B4761A2BFD1AB344C12B8", |
279 | 328 | "type": "test" |
280 | 329 | }, |
| 330 | + { |
| 331 | + "name": "/Timer.moon", |
| 332 | + "url": "@{fileBaseUrl}@{fileName}", |
| 333 | + "sha1": "9666CC4536FE09F6382EEDC5C2580280F7912111", |
| 334 | + "type": "test" |
| 335 | + }, |
281 | 336 | { |
282 | 337 | "name": "/UpdateFeed.moon", |
283 | 338 | "url": "@{fileBaseUrl}@{fileName}", |
|
293 | 348 | { |
294 | 349 | "name": "/helpers/MockHttpServerController.moon", |
295 | 350 | "url": "@{fileBaseUrl}@{fileName}", |
296 | | - "sha1": "CE361BB092ECBD1671B579CDF6A3FA181F4EC737", |
| 351 | + "sha1": "C699B32FF02A9600C0C42DE90402EAB99A8A474A", |
297 | 352 | "type": "test" |
298 | 353 | } |
299 | | - ], |
300 | | - "requiredModules": [ |
301 | | - { |
302 | | - "moduleName": "requireffi.requireffi", |
303 | | - "version": "0.1.1", |
304 | | - "optional": true, |
305 | | - "feed": "@{feed:ffi-experiments}" |
306 | | - } |
307 | 354 | ] |
308 | 355 | } |
309 | 356 | }, |
|
377 | 424 | "Updater: Fixed a potential issue where a multi-assignment statement could corrupt record fields after an unsuccessful update.", |
378 | 425 | "Automatic update scheduling is now centralized in the DependencyControl Toolbox and runs in a single Aegisub environment at startup, covering all installed scripts including modules not loaded by any automation script. Previously, each automation script's environment scheduled redundant checks for every module it loaded.", |
379 | 426 | "Record: Added `getAllRegisteredRecords()` to expose the full live record registry to tooling.", |
380 | | - "Modules with a DependencyControl unit test suite now have their test menus registered automatically by the Toolbox. Automation scripts register their own test menus when they call `registerMacros` through DependencyControl." |
| 427 | + "Modules with a DependencyControl unit test suite now have their test menus registered automatically by the Toolbox. Automation scripts register their own test menus when they call `registerMacros` through DependencyControl.", |
| 428 | + "Lock: Locks are now per-resource — distinct namespace/resource pairs can be held at the same time instead of contending over a single global mutex — and accept an optional `Global` scope that enforces mutual exclusion across separate Aegisub instances (now used when reading and writing shared config files). A Global lock is backed by an OS advisory file lock that the system releases automatically if the holder crashes, so a crashed process can never leave a config file permanently locked.", |
| 429 | + "Lock: While a lock is held it records its holder (name, process id, and lease expiry) in a side file for troubleshooting, and logs a warning when it is waiting on a holder whose lease has lapsed (a likely crash or stall). The recorded lease is honored by waiters; an `overrideExpiry` option lets a waiter apply its own expiry instead.", |
| 430 | + "Lock: Added `renew(threshold)` to extend a held lock's lease during long operations (refreshing only when the remaining lease drops below the threshold, so it is cheap to call from a busy loop), and a `Lock.guard` helper that acquires a lock, runs a function, and always releases it (even if the function errors).", |
| 431 | + "Updater: The in-progress-update flag is no longer stored in the config file; concurrent updates are now coordinated by a dedicated cross-process lock that the system releases automatically if an updater crashes. The lease is renewed throughout long downloads, and a new `Updater.isRunning()` reports whether (and which script) an update is currently running.", |
| 432 | + "Timer: Exposed a shared monotonic `Timer.getTime()` clock, added stopwatch-style `start()`, `stop()`, and `reset()` methods, and PT.PreciseTimer is now provided through the same bundled-provider mechanism as BM.BadMutex and DM.DownloadManager (set DEPCTRL_FORCE_BUILTIN_TIMER=1 to force DepCtrl's implementation)." |
381 | 433 | ] |
382 | 434 | } |
383 | 435 | }, |
|
0 commit comments