github.com/sqlitebrowser/dio@v0.0.0-20240125125356-b587368e5c6b/cmd/tagRemove.go (about)

     1  package cmd
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	"github.com/spf13/cobra"
     8  )
     9  
    10  var tagRemoveTag string
    11  
    12  // Removes a tag from a database
    13  var tagRemoveCmd = &cobra.Command{
    14  	Use:   "remove [database name] --tag xxx",
    15  	Short: "Remove a tag from a database",
    16  	RunE: func(cmd *cobra.Command, args []string) error {
    17  		return tagRemove(args)
    18  	},
    19  }
    20  
    21  func init() {
    22  	tagCmd.AddCommand(tagRemoveCmd)
    23  	tagRemoveCmd.Flags().StringVar(&tagRemoveTag, "tag", "", "Name of remote tag to remove")
    24  }
    25  
    26  func tagRemove(args []string) error {
    27  	// Ensure a database file was given
    28  	var db string
    29  	var err error
    30  	var meta metaData
    31  	if len(args) == 0 {
    32  		db, err = getDefaultDatabase()
    33  		if err != nil {
    34  			return err
    35  		}
    36  		if db == "" {
    37  			// No database name was given on the command line, and we don't have a default database selected
    38  			return errors.New("No database file specified")
    39  		}
    40  	} else {
    41  		db = args[0]
    42  	}
    43  	if len(args) > 1 {
    44  		return errors.New("Only one database can be changed at a time (for now)")
    45  	}
    46  
    47  	// Ensure a tag name was given
    48  	if tagRemoveTag == "" {
    49  		return errors.New("No tag name given")
    50  	}
    51  
    52  	// Load the metadata
    53  	meta, err = loadMetadata(db)
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	// Check if the tag exists
    59  	if _, ok := meta.Tags[tagRemoveTag]; ok != true {
    60  		return errors.New("A tag with that name doesn't exist")
    61  	}
    62  
    63  	// Remove the tag
    64  	delete(meta.Tags, tagRemoveTag)
    65  
    66  	// Save the updated metadata back to disk
    67  	err = saveMetadata(db, meta)
    68  	if err != nil {
    69  		return err
    70  	}
    71  
    72  	_, err = fmt.Fprintf(fOut, "Tag '%s' removed\n", tagRemoveTag)
    73  	return err
    74  }