github.com/Cloud-Foundations/Dominator@v0.3.4/cmd/imagetool/showImageInode.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/Cloud-Foundations/Dominator/lib/filesystem"
     8  	"github.com/Cloud-Foundations/Dominator/lib/filter"
     9  	"github.com/Cloud-Foundations/Dominator/lib/log"
    10  )
    11  
    12  func showImageInodeSubcommand(args []string, logger log.DebugLogger) error {
    13  	if err := showImageInode(args[0], args[1]); err != nil {
    14  		return fmt.Errorf("error showing image inode: %s", err)
    15  	}
    16  	return nil
    17  }
    18  
    19  func listInode(inode filesystem.GenericInode, inodePath string,
    20  	numLinks int) error {
    21  	filt, err := filter.New([]string{".*"})
    22  	if err != nil {
    23  		return err
    24  	}
    25  	return inode.List(os.Stdout, inodePath, nil, numLinks, listSelector, filt)
    26  }
    27  
    28  func showImageInode(image, inodePath string) error {
    29  	fs, err := getTypedFileSystem(image)
    30  	if err != nil {
    31  		return err
    32  	}
    33  	filenameToInodeTable := fs.FilenameToInodeTable()
    34  	if inum, ok := filenameToInodeTable[inodePath]; !ok {
    35  		return fmt.Errorf("path: \"%s\" not present in image", inodePath)
    36  	} else if inode, ok := fs.InodeTable[inum]; !ok {
    37  		return fmt.Errorf("inode: %d not present in image", inum)
    38  	} else {
    39  		numLinksTable := fs.BuildNumLinksTable()
    40  		return listInode(inode, inodePath, numLinksTable[inum])
    41  	}
    42  }