in internal/fs/fs.go [573:621]
func (fs *fileSystem) checkInvariantsForImplicitDirs() {
// INVARIANT: For each k/v, v.Name() == k
for k, v := range fs.implicitDirInodes {
if !(v.Name() == k) {
panic(fmt.Sprintf(
"Unexpected name: \"%s\" vs. \"%s\"",
v.Name(),
k))
}
}
// INVARIANT: For each value v, inodes[v.ID()] == v
for _, v := range fs.implicitDirInodes {
if fs.inodes[v.ID()] != v {
panic(fmt.Sprintf(
"Mismatch for ID %v: %v %v",
v.ID(),
fs.inodes[v.ID()],
v))
}
}
// INVARIANT: For each value v, v is not ExplicitDirInode
for _, v := range fs.implicitDirInodes {
if _, ok := v.(inode.ExplicitDirInode); ok {
panic(fmt.Sprintf(
"Unexpected implicit dir inode %d, type %T",
v.ID(),
v))
}
}
// INVARIANT: For each in in inodes such that in is DirInode but not
// ExplicitDirInode, implicitDirInodes[d.Name()] == d
for _, in := range fs.inodes {
_, dir := in.(inode.DirInode)
_, edir := in.(inode.ExplicitDirInode)
if dir && !edir {
if !(fs.implicitDirInodes[in.Name()] == in) {
panic(fmt.Sprintf(
"implicitDirInodes mismatch: %q %v %v",
in.Name(),
fs.implicitDirInodes[in.Name()],
in))
}
}
}
}