Merge changes I9cf007c8,I9b9ba058 into main

* changes:
  releng: fix broken manifest from 2.90-rc1
  Change the sqlite missing valid path message to say it's the db
This commit is contained in:
jade 2024-06-17 02:06:04 +00:00 committed by Gerrit Code Review
commit 6c541e0bef
2 changed files with 21 additions and 7 deletions

View file

@ -106,17 +106,17 @@ def upload_drv_paths_and_outputs(env: RelengEnvironment, paths: list[str]):
raise subprocess.CalledProcessError(rv, proc.args) raise subprocess.CalledProcessError(rv, proc.args)
def make_manifest(eval_result): def make_manifest(builds_by_system):
manifest = {vs['system']: vs['outputs']['out'] for vs in eval_result}
def manifest_line(system, out): def manifest_line(system, out):
return f' {system} = "{out}";' return f' {system} = "{out}";'
manifest_text = textwrap.dedent("""\ manifest_text = textwrap.dedent("""\
# This file was generated by releng/create_release.xsh in Lix # This file was generated by releng/create_release.xsh in Lix
{{ {{
{lines} {lines}
}} }}
""").format(lines='\n'.join(manifest_line(s, p) for (s, p) in manifest.items())) """).format(lines='\n'.join(manifest_line(s, p) for (s, p) in builds_by_system.items()))
return manifest_text return manifest_text
@ -142,6 +142,18 @@ def sha256_file(f: Path):
return hasher.hexdigest() return hasher.hexdigest()
def extract_builds_by_system(eval_result):
# This could be a dictionary comprehension, but we want to be absolutely
# sure we don't have duplicates.
ret = {}
for attr in eval_result:
if attr['attrPath'][0] != 'build':
continue
assert attr['system'] not in ret
ret[attr['system']] = attr['outputs']['out']
return ret
def make_artifacts_dir(eval_result, d: Path): def make_artifacts_dir(eval_result, d: Path):
d.mkdir(exist_ok=True, parents=True) d.mkdir(exist_ok=True, parents=True)
version_dir = d / 'lix' / f'lix-{VERSION}' version_dir = d / 'lix' / f'lix-{VERSION}'
@ -150,12 +162,14 @@ def make_artifacts_dir(eval_result, d: Path):
tarballs_drv = next(p for p in eval_result if p['attr'] == 'tarballs') tarballs_drv = next(p for p in eval_result if p['attr'] == 'tarballs')
cp --no-preserve=mode -r @(tarballs_drv['outputs']['out'])/* @(version_dir) cp --no-preserve=mode -r @(tarballs_drv['outputs']['out'])/* @(version_dir)
builds_by_system = extract_builds_by_system(eval_result)
# FIXME: upgrade-nix searches for manifest.nix at root, which is rather annoying # FIXME: upgrade-nix searches for manifest.nix at root, which is rather annoying
with open(d / 'manifest.nix', 'w') as h: with open(d / 'manifest.nix', 'w') as h:
h.write(make_manifest(eval_result)) h.write(make_manifest(builds_by_system))
with open(version_dir / 'manifest.nix', 'w') as h: with open(version_dir / 'manifest.nix', 'w') as h:
h.write(make_manifest(eval_result)) h.write(make_manifest(builds_by_system))
print('[+] Make sources tarball') print('[+] Make sources tarball')

View file

@ -958,7 +958,7 @@ uint64_t LocalStore::queryValidPathId(State & state, const StorePath & path)
{ {
auto use(state.stmts->QueryPathInfo.use()(printStorePath(path))); auto use(state.stmts->QueryPathInfo.use()(printStorePath(path)));
if (!use.next()) // TODO: I guess if SQLITE got corrupted..? if (!use.next()) // TODO: I guess if SQLITE got corrupted..?
throw InvalidPath("path '%s' does not exist", printStorePath(path)); throw InvalidPath("path '%s' does not exist in the Lix database", printStorePath(path));
return use.getInt(0); return use.getInt(0);
} }