FDS/OS 1.0 fixes
This commit is contained in:
@@ -131,4 +131,46 @@ command[-1] = linked
|
||||
result = invoke(*command, ok=False)
|
||||
assert 'not a symlink' in result.stderr
|
||||
print(f'PASS: release output preservation and private-key symlink rejection: {work}')
|
||||
|
||||
# Restore small real Git bundles through both workspace layouts. These fixtures
|
||||
# exercise path selection and cache preservation, not an operating-system build.
|
||||
upstream = work / 'upstream'
|
||||
upstream.mkdir()
|
||||
invoke('git', 'init', '-q', upstream)
|
||||
(upstream / 'xbps-src').write_text('# inert source fixture\n')
|
||||
(upstream / '.gitignore').write_text('hostdir/\nmasterdir-*/\netc/conf\netc/xbps.d/custom/\n')
|
||||
invoke('git', '-C', upstream, 'add', '.')
|
||||
invoke('git', '-C', upstream, '-c', 'user.name=FDS', '-c', 'user.email=test@example.invalid', 'commit', '-qm', 'fixture')
|
||||
pin = invoke('git', '-C', upstream, 'rev-parse', 'HEAD').stdout.strip()
|
||||
epoch = int(invoke('git', '-C', upstream, 'show', '-s', '--format=%ct', 'HEAD').stdout)
|
||||
for layout in ('separate', 'legacy'):
|
||||
fixture = work / ('restore-input-' + layout)
|
||||
(fixture / 'project/tools').mkdir(parents=True)
|
||||
(fixture / 'project/config').mkdir()
|
||||
(fixture / 'project/VOID_PACKAGES_COMMIT').write_text(pin + '\n')
|
||||
(fixture / 'project/config/xbps-src.conf').write_text('# fixture\n')
|
||||
if layout == 'separate':
|
||||
shutil.copy2(project / 'tools/prepare-void-workspace', fixture / 'project/tools/prepare-void-workspace')
|
||||
invoke('git', '-C', upstream, 'bundle', 'create', fixture / 'void.bundle', 'HEAD')
|
||||
for name in ('masterdir/etc/xbps.d', 'sources', 'repositories/build',
|
||||
'repositories/cli', 'repositories/development', 'repositories/recovery',
|
||||
'xbps', 'image-tools', 'eeprom', 'cache', 'downloads', 'cargo-vendor', 'rust-toolchain'):
|
||||
(fixture / name).mkdir(parents=True, exist_ok=True)
|
||||
(fixture / 'sources/retained.tar.gz').write_bytes(b'cached source fixture')
|
||||
restore_lock = dict(lock, void_commit=pin, source_epoch=epoch)
|
||||
restore_lock['files'] = frozen.inventory(fixture)
|
||||
restore_lock['source_sha256'] = frozen.source_digest(restore_lock['files'])
|
||||
(fixture / 'lock.json').write_text(json.dumps(restore_lock))
|
||||
destination = work / ('restored-' + layout)
|
||||
invoke(verify, 'restore', fixture, destination)
|
||||
build = destination / ('.host/void-packages' if layout == 'separate' else 'vendor/void-packages')
|
||||
assert (build / 'hostdir/sources/retained.tar.gz').read_bytes() == b'cached source fixture'
|
||||
assert (build / 'masterdir-x86_64/etc/xbps.d/05-fds-frozen-local.conf').read_text() == 'repository=/host/frozen-repository\n'
|
||||
assert invoke('git', '-C', build, 'rev-parse', 'HEAD').stdout.strip() == pin
|
||||
if layout == 'separate':
|
||||
reference = destination / 'vendor/void-packages'
|
||||
assert not (reference / 'hostdir').exists()
|
||||
assert not invoke('git', '-C', reference, 'status', '--porcelain', '--untracked-files=all').stdout.strip()
|
||||
invoke(verify, 'verify', fixture)
|
||||
print('PASS: separate-workspace and legacy frozen restores retain source caches and offline repositories', flush=True)
|
||||
print('NOTE: these are small contract fixtures; actual source-to-image offline reproduction remains a separate gate')
|
||||
|
||||
Reference in New Issue
Block a user