github.com/sqlitebrowser/dio@v0.0.0-20240125125356-b587368e5c6b/cmd/releaseList.go (about) 1 package cmd 2 3 import ( 4 "errors" 5 "fmt" 6 "sort" 7 "time" 8 9 "github.com/spf13/cobra" 10 ) 11 12 // Displays the list of releases for a remote database 13 var releaseListCmd = &cobra.Command{ 14 Use: "releases [database name]", 15 Short: "Displays a list of releases for a database", 16 RunE: func(cmd *cobra.Command, args []string) error { 17 return releaseList(args) 18 }, 19 } 20 21 func init() { 22 RootCmd.AddCommand(releaseListCmd) 23 } 24 25 func releaseList(args []string) error { 26 // Ensure a database file was given 27 var db string 28 var err error 29 var meta metaData 30 if len(args) == 0 { 31 db, err = getDefaultDatabase() 32 if err != nil { 33 return err 34 } 35 if db == "" { 36 // No database name was given on the command line, and we don't have a default database selected 37 return errors.New("No database file specified") 38 } 39 } else { 40 db = args[0] 41 } 42 if len(args) > 1 { 43 return errors.New("Only one database can be worked with at a time (for now)") 44 } 45 46 // If there is a local metadata cache for the requested database, use that. Otherwise, retrieve it from the 47 // server first (without storing it) 48 meta, err = localFetchMetadata(db, true) 49 if err != nil { 50 return err 51 } 52 53 if len(meta.Releases) == 0 { 54 _, err = fmt.Fprintf(fOut, "Database %s has no releases\n", db) 55 return err 56 } 57 58 // Sort the list alphabetically 59 var sortedKeys []string 60 for k := range meta.Releases { 61 sortedKeys = append(sortedKeys, k) 62 } 63 sort.Strings(sortedKeys) 64 65 // Display the list of releases 66 _, err = fmt.Fprintf(fOut, "Releases for %s:\n\n", db) 67 if err != nil { 68 return err 69 } 70 for _, i := range sortedKeys { 71 _, err = fmt.Fprintf(fOut, " * '%s' : commit %s\n\n", i, meta.Releases[i].Commit) 72 if err != nil { 73 return err 74 } 75 _, err = fmt.Fprintf(fOut, " Author: %s <%s>\n", meta.Releases[i].ReleaserName, meta.Releases[i].ReleaserEmail) 76 if err != nil { 77 return err 78 } 79 _, err = fmt.Fprintf(fOut, " Date: %s\n", meta.Releases[i].Date.Format(time.UnixDate)) 80 if err != nil { 81 return err 82 } 83 _, err = fmt.Fprintln(fOut, numFormat.Sprintf(" Size: %d", meta.Releases[i].Size)) 84 if err != nil { 85 return err 86 } 87 if meta.Releases[i].Description != "" { 88 _, err = fmt.Fprintf(fOut, " Message: %s\n\n", meta.Releases[i].Description) 89 if err != nil { 90 return err 91 } 92 } else { 93 _, err = fmt.Fprintln(fOut) 94 if err != nil { 95 return err 96 } 97 } 98 } 99 return nil 100 }