From 2470621034ed815612164646bb9af563a01449bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=83=AB=E5=AE=9D?= Date: Wed, 13 Mar 2024 10:38:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Drevalidate=E5=87=BA?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/service/BinarySyncerService.ts | 6 ++- .../BinarySyncerService/executeTask.test.ts | 43 +++++++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/app/core/service/BinarySyncerService.ts b/app/core/service/BinarySyncerService.ts index e7808d1d..685ea5f8 100644 --- a/app/core/service/BinarySyncerService.ts +++ b/app/core/service/BinarySyncerService.ts @@ -250,6 +250,10 @@ export class BinarySyncerService extends AbstractService { for (const item of existsItems) { existsMap.set(item.name, item); } + const latestItem = dir.endsWith(latestVersionParent) ? + sortBy(fetchItems, item => { + return new Date(item.date).getTime(); + }).pop() : null; const diffItems: { item: Binary; reason: string }[] = []; for (const item of fetchItems) { const existsItem = existsMap.get(item.name); @@ -276,7 +280,7 @@ export class BinarySyncerService extends AbstractService { existsItem.ignoreDownloadStatuses = item.ignoreDownloadStatuses; existsItem.date = item.date; } else if (dir.endsWith(latestVersionParent)) { - const isLatestItem = sortBy(fetchItems, [ 'date' ]).pop()?.name === item.name; + const isLatestItem = latestItem?.name === item.name; if (isLatestItem && existsItem.isDir) { diffItems.push({ item: existsItem, diff --git a/test/core/service/BinarySyncerService/executeTask.test.ts b/test/core/service/BinarySyncerService/executeTask.test.ts index 8896a06a..6683e407 100644 --- a/test/core/service/BinarySyncerService/executeTask.test.ts +++ b/test/core/service/BinarySyncerService/executeTask.test.ts @@ -288,6 +288,14 @@ describe('test/core/service/BinarySyncerService/executeTask.test.ts', () => { data: await TestUtil.readFixturesFile('nodejs.org/site/latest/docs/apilinks.json'), persist: false, }); + app.mockHttpclient('https://nodejs.org/dist/latest/docs/apilinks_old.json', 'GET', { + data: await TestUtil.readFixturesFile('nodejs.org/site/latest/docs/apilinks.json'), + persist: false, + }); + app.mockHttpclient('https://nodejs.org/dist/latest/docs/apilinks_old2.json', 'GET', { + data: await TestUtil.readFixturesFile('nodejs.org/site/latest/docs/apilinks.json'), + persist: false, + }); await binarySyncerService.createTask('node', {}); let task = await binarySyncerService.findExecuteTask(); assert(task); @@ -296,10 +304,39 @@ describe('test/core/service/BinarySyncerService/executeTask.test.ts', () => { return { items: [ { name: 'latest/', isDir: true, url: '', size: '-', date: '17-Dec-2021 23:17' }, + { name: 'old/', isDir: true, url: '', size: '-', date: '15-Dec-2021 23:17' }, + // old2 使用 yyyy-mm-dd 日期格式,用于检查 diff 的日期排序 + { name: 'old2/', isDir: true, url: '', size: '-', date: '2021-11-10T05:49:35.321Z' }, { name: 'index.json', isDir: false, url: 'https://nodejs.org/dist/index.json', size: '219862', date: '17-Dec-2021 23:16' }, ], }; } + if (dir === '/old/') { + return { + items: [ + { + name: 'apilinks_old.json', + isDir: false, + url: 'https://nodejs.org/dist/latest/docs/apilinks_old.json', + size: '61606', + date: '17-Dec-2021 21:29', + }, + ], + }; + } + if (dir === '/old2/') { + return { + items: [ + { + name: 'apilinks_old2.json', + isDir: false, + url: 'https://nodejs.org/dist/latest/docs/apilinks_old2.json', + size: '61606', + date: '17-Dec-2021 21:29', + }, + ], + }; + } if (dir === '/latest/') { return { items: [ @@ -324,7 +361,7 @@ describe('test/core/service/BinarySyncerService/executeTask.test.ts', () => { assert(stream); let log = await TestUtil.readStreamToLog(stream); // console.log(log); - assert(log.includes('Syncing diff: 2 => 2')); + assert(log.includes('Syncing diff: 4 => 4')); assert(log.includes('[/] 🟢 Synced dir success')); assert(log.includes('[/latest/] 🟢 Synced dir success')); assert(log.includes('[/latest/docs/] 🟢 Synced dir success')); @@ -339,9 +376,9 @@ describe('test/core/service/BinarySyncerService/executeTask.test.ts', () => { log = await TestUtil.readStreamToLog(stream); // console.log(log); assert(log.includes('reason: revalidate latest version')); - assert(log.includes('Syncing diff: 2 => 1')); + assert(log.includes('Syncing diff: 4 => 1')); assert(log.includes('[/] 🟢 Synced dir success')); - + assert(log.includes('[/latest/] 🟢 Synced dir success')); // mock version change // console.log(binaryRepository.findBinary('node'));