feat: Add stat cmd

This commit is contained in:
Felicitas Pojtinger
2021-12-17 18:07:07 +01:00
parent b2cbad8ee6
commit 4d29621a6a
2 changed files with 91 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
package cmd
import (
"github.com/pojntfx/stfs/internal/logging"
"github.com/pojntfx/stfs/internal/persisters"
"github.com/pojntfx/stfs/pkg/config"
"github.com/pojntfx/stfs/pkg/inventory"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
var inventoryStatCmd = &cobra.Command{
Use: "stat",
Aliases: []string{"sta", "s"},
Short: "Get information on a file or directory on tape or tar file",
RunE: func(cmd *cobra.Command, args []string) error {
if err := viper.BindPFlags(cmd.PersistentFlags()); err != nil {
return err
}
metadataPersister := persisters.NewMetadataPersister(viper.GetString(metadataFlag))
if err := metadataPersister.Open(); err != nil {
return err
}
if _, err := inventory.Stat(
config.MetadataConfig{
Metadata: metadataPersister,
},
viper.GetString(nameFlag),
logging.NewLogger().PrintHeader,
); err != nil {
return err
}
return nil
},
}
func init() {
inventoryStatCmd.PersistentFlags().StringP(nameFlag, "n", "", "File or directory to get info for")
viper.AutomaticEnv()
inventoryCmd.AddCommand(inventoryStatCmd)
}

43
pkg/inventory/stat.go Normal file
View File

@@ -0,0 +1,43 @@
package inventory
import (
"archive/tar"
"context"
"database/sql"
"strings"
"github.com/pojntfx/stfs/internal/converters"
models "github.com/pojntfx/stfs/internal/db/sqlite/models/metadata"
"github.com/pojntfx/stfs/pkg/config"
)
func Stat(
metadata config.MetadataConfig,
name string,
onHeader func(hdr *models.Header),
) (*tar.Header, error) {
dbhdr, err := metadata.Metadata.GetHeader(context.Background(), name)
if err != nil {
if err == sql.ErrNoRows {
dbhdr, err = metadata.Metadata.GetHeader(context.Background(), strings.TrimSuffix(name, "/")+"/")
if err != nil {
return nil, err
}
} else {
return nil, err
}
}
hdr, err := converters.DBHeaderToTarHeader(dbhdr)
if err != nil {
return nil, err
}
if onHeader != nil {
onHeader(dbhdr)
}
return hdr, nil
}