Name pass: only holders near the newest; merges drop duplicate candidates
The name pass put every holder of a set into its merge: a par2 posted
again years later ("Auto Bild Klassik Februar 02-2014", held by a 2014
and a 2026 release) would have joined the repost to the old upload. Now
the newest holder anchors it and only holders in its group within 12
hours take part. Every round, three sets failed on the probe candidates'
unique key: a member held a candidate of an article the target had.
merge() now drops such a candidate (the target's, or a lower member's,
stays), as it already does for par2 sets.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
66d08a0e92
commit
fb6b00f230
2 files changed
+38
-6
No files matched your search
@@ -65,4 +65,24 @@ test.group('Par2Merger / by file names', (group) => {
|
||||
// Nothing more to find.
|
||||
assert.equal(await new Par2Merger().mergeByName(setId), 0)
|
||||
})
|
||||
|
||||
test('not a holder years off (a repost of the par2); a member with an article the target has merges without it', async ({ assert }) => {
|
||||
await store([...file('Some.Album-WEB-2026.par2', 100_010, 0), ...file('Track One.flac', 100_020, 1)])
|
||||
// The same par2 posted again a year later, in a range of its own.
|
||||
await store(file('Some.Album-WEB-2026.par2', 200_010, 365 * 24 * 60))
|
||||
const releases = await db.from('releases').orderBy('posted_at').select('id', 'name', 'posted_at')
|
||||
const [index, track, repost] = releases.map((r) => Number(r.id))
|
||||
const setId = 'b'.repeat(32)
|
||||
await db.table('par2_files').insert({ set_id: setId, file_id: '1'.repeat(32), hash16k: 'f'.repeat(32), length: 600_000, name: 'Track One.flac' })
|
||||
await db.table('par2_sets').multiInsert([index, repost].map((id) => ({ set_id: setId, release_id: id, files: 1 })))
|
||||
// The repost is the newest holder: nothing near it to join.
|
||||
assert.equal(await new Par2Merger().mergeByName(setId), 0)
|
||||
await db.from('par2_sets').where('release_id', repost).delete()
|
||||
// Both releases hold a candidate of the same article.
|
||||
await db.table('probe_candidates').multiInsert([index, track].map((id) => ({ release_id: id, kind: 'par2', message_id: '<same@x>', file: 'x.par2' })))
|
||||
assert.equal(await new Par2Merger().mergeByName(setId), 1)
|
||||
assert.lengthOf(await db.from('probe_candidates').where('message_id', '<same@x>'), 1)
|
||||
assert.lengthOf(await db.from('releases').whereIn('id', [index, track]), 1)
|
||||
assert.lengthOf(await db.from('releases').where('id', repost), 1)
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user