func()

in internal/fs/fs.go [752:823]


func (fs *fileSystem) mintInode(ic inode.Core) (in inode.Inode) {
	// Choose an ID.
	id := fs.nextInodeID
	fs.nextInodeID++

	// Create the inode.
	switch {
	// Explicit directories or folders in hierarchical bucket.
	case (ic.MinObject != nil && ic.FullName.IsDir()), ic.Folder != nil:
		in = fs.createExplicitDirInode(id, ic)

		// Implicit directories
	case ic.FullName.IsDir():
		in = inode.NewDirInode(
			id,
			ic.FullName,
			fuseops.InodeAttributes{
				Uid:  fs.uid,
				Gid:  fs.gid,
				Mode: fs.dirMode,

				// We guarantee only that directory times be "reasonable".
				Atime: fs.mtimeClock.Now(),
				Ctime: fs.mtimeClock.Now(),
				Mtime: fs.mtimeClock.Now(),
			},
			fs.implicitDirs,
			fs.newConfig.List.EnableEmptyManagedFolders,
			fs.enableNonexistentTypeCache,
			fs.dirTypeCacheTTL,
			ic.Bucket,
			fs.mtimeClock,
			fs.cacheClock,
			fs.newConfig.MetadataCache.TypeCacheMaxSizeMb,
			fs.newConfig.EnableHns,
		)

	case inode.IsSymlink(ic.MinObject):
		in = inode.NewSymlinkInode(
			id,
			ic.FullName,
			ic.MinObject,
			fuseops.InodeAttributes{
				Uid:  fs.uid,
				Gid:  fs.gid,
				Mode: fs.fileMode | os.ModeSymlink,
			})

	default:
		in = inode.NewFileInode(
			id,
			ic.FullName,
			ic.MinObject,
			fuseops.InodeAttributes{
				Uid:  fs.uid,
				Gid:  fs.gid,
				Mode: fs.fileMode,
			},
			ic.Bucket,
			fs.localFileCache,
			fs.contentCache,
			fs.mtimeClock,
			ic.Local,
			fs.newConfig,
			fs.globalMaxWriteBlocksSem)
	}

	// Place it in our map of IDs to inodes.
	fs.inodes[in.ID()] = in

	return
}