fix(tvix/cli): panic on root cause of the fetchurl(non-boot) bug
Currently we produce wrong drvPaths for a large number of packages that use fetchurl (but not fetchurlBoot, which is what stdenv uses). A simple reproducer is `pkgs.perl538`. I debugged this down to the root cause, which is the fact that tvix doesn't realize that the mapping from FOD-paths to outputHash is *NOT* a 1:1 mapping. It is a many-to-one mapping. You can have lots of different FODs with the same outputHash or even the same outPath. For example, perl538.src and perldevel.src use the same source tarball but a different `version`. Anyways, I have found the root cause but have run out of time for a while, so I've added a panic!() to in the spot where we have a logic bug in order to call it out. Change-Id: I9766b39cfe2fe7eafec84945b2ad6cc28f9c4b7d Reviewed-on: https://cl.tvl.fyi/c/depot/+/9364 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Autosubmit: Adam Joseph <adam@westernsemico.com>
This commit is contained in:
parent
efaff79584
commit
2b4920c355
1 changed files with 27 additions and 1 deletions
|
@ -93,7 +93,33 @@ impl KnownPaths {
|
|||
match (path_kind, &mut entry.get_mut().kind) {
|
||||
// These variant combinations require no "merging action".
|
||||
(PathKind::Plain, PathKind::Plain) => (),
|
||||
(PathKind::Output { .. }, PathKind::Output { .. }) => (),
|
||||
|
||||
(
|
||||
PathKind::Output {
|
||||
name: name1,
|
||||
derivation: drv1,
|
||||
},
|
||||
PathKind::Output {
|
||||
name: ref name2,
|
||||
derivation: ref drv2,
|
||||
},
|
||||
) => {
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
if &name1 != name2 {
|
||||
panic!(
|
||||
"inserted path {} with two different names: {} and {}",
|
||||
path, name1, name2
|
||||
);
|
||||
}
|
||||
if &drv1 != drv2 {
|
||||
panic!(
|
||||
"inserted path {} with two different derivations: {} and {}",
|
||||
path, drv1, drv2
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(
|
||||
PathKind::Derivation { output_names: new },
|
||||
|
|
Loading…
Reference in a new issue