Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import os from 'node:os'
|
||||
import path from 'node:path'
|
||||
|
||||
import { test } from 'vitest'
|
||||
|
||||
import { clearStaleGitLocks, LOCK_NAMES, STALE_LOCK_MIN_AGE_MS } from './gitlock'
|
||||
|
||||
function makeRepo(): string {
|
||||
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gitlock-test-'))
|
||||
fs.mkdirSync(path.join(root, '.git'))
|
||||
|
||||
return root
|
||||
}
|
||||
|
||||
function writeLock(root: string, name: string, ageMs: number): string {
|
||||
const p = path.join(root, '.git', name)
|
||||
fs.writeFileSync(p, '')
|
||||
const t = new Date(Date.now() - ageMs)
|
||||
fs.utimesSync(p, t, t)
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
const noGit = async () => false
|
||||
const gitRunning = async () => true
|
||||
|
||||
test('stale shallow.lock older than min age is removed', async () => {
|
||||
const root = makeRepo()
|
||||
const lock = writeLock(root, 'shallow.lock', STALE_LOCK_MIN_AGE_MS + 60_000)
|
||||
const removed = await clearStaleGitLocks(root, { isGitRunning: noGit })
|
||||
assert.deepEqual(removed, [lock])
|
||||
assert.equal(fs.existsSync(lock), false)
|
||||
})
|
||||
|
||||
test('fresh lock is presumed live and never removed', async () => {
|
||||
const root = makeRepo()
|
||||
const lock = writeLock(root, 'shallow.lock', 1_000)
|
||||
const removed = await clearStaleGitLocks(root, { isGitRunning: noGit })
|
||||
assert.deepEqual(removed, [])
|
||||
assert.equal(fs.existsSync(lock), true)
|
||||
})
|
||||
|
||||
test('running git process protects even ancient locks', async () => {
|
||||
const root = makeRepo()
|
||||
const lock = writeLock(root, 'shallow.lock', STALE_LOCK_MIN_AGE_MS * 10)
|
||||
const removed = await clearStaleGitLocks(root, { isGitRunning: gitRunning })
|
||||
assert.deepEqual(removed, [])
|
||||
assert.equal(fs.existsSync(lock), true)
|
||||
})
|
||||
|
||||
test('all known lock names are cleared when stale', async () => {
|
||||
const root = makeRepo()
|
||||
const locks = LOCK_NAMES.map(name => writeLock(root, name, STALE_LOCK_MIN_AGE_MS + 60_000))
|
||||
const removed = await clearStaleGitLocks(root, { isGitRunning: noGit })
|
||||
assert.deepEqual(removed.sort(), locks.sort())
|
||||
})
|
||||
|
||||
test('unknown lock-like files are left alone', async () => {
|
||||
const root = makeRepo()
|
||||
const stray = writeLock(root, 'config.lock', STALE_LOCK_MIN_AGE_MS * 10)
|
||||
await clearStaleGitLocks(root, { isGitRunning: noGit })
|
||||
assert.equal(fs.existsSync(stray), true)
|
||||
})
|
||||
|
||||
test('missing .git dir is a silent no-op', async () => {
|
||||
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'gitlock-nogit-'))
|
||||
const removed = await clearStaleGitLocks(root, { isGitRunning: noGit })
|
||||
assert.deepEqual(removed, [])
|
||||
})
|
||||
Reference in New Issue
Block a user