Add auto upgrade function, and search function with some bug fixes
This commit is contained in:
@@ -34,6 +34,11 @@ import (
|
|||||||
_ "modernc.org/sqlite"
|
_ "modernc.org/sqlite"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type UpgradeHelpAuto struct {
|
||||||
|
OgRealname string
|
||||||
|
NeoRealname string
|
||||||
|
}
|
||||||
|
|
||||||
type ConfigTOML struct {
|
type ConfigTOML struct {
|
||||||
Config struct {
|
Config struct {
|
||||||
HttpPort int `toml:"httpPort"`
|
HttpPort int `toml:"httpPort"`
|
||||||
@@ -46,14 +51,6 @@ type ConfigTOML struct {
|
|||||||
} `toml:"Config"`
|
} `toml:"Config"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type IndexTOML struct {
|
|
||||||
Name string `toml:"name"`
|
|
||||||
Version string `toml:"version"`
|
|
||||||
Author string `toml:"author"`
|
|
||||||
Description string `toml:"description"`
|
|
||||||
CreatedAt time.Time `toml:"createdAt"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CountingReader struct {
|
type CountingReader struct {
|
||||||
R io.Reader
|
R io.Reader
|
||||||
Total int64
|
Total int64
|
||||||
@@ -286,13 +283,28 @@ var listCmd = &cobra.Command{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var searchCmd = &cobra.Command{
|
||||||
|
Use: "search [query name]",
|
||||||
|
Short: "List all packages in index.db",
|
||||||
|
Args: cobra.MaximumNArgs(1),
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
if err := Search(cmd, args); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
var upgradeCmd = &cobra.Command{
|
var upgradeCmd = &cobra.Command{
|
||||||
Use: "upgrade [packages...]",
|
Use: "upgrade [packages...]",
|
||||||
Short: "Upgrade package",
|
Short: "Upgrade package",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
|
isUpgrade = true
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
log.Fatal("Please insert mannualy the package realname to upgrade this command isn't done")
|
if err := AutoUpgrade(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, og_realname := range args {
|
for _, og_realname := range args {
|
||||||
@@ -313,15 +325,23 @@ var upgradeCmd = &cobra.Command{
|
|||||||
|
|
||||||
var family string
|
var family string
|
||||||
if err := idb.QueryRow("SELECT family FROM packages WHERE realname = ?", og_realname).Scan(&family); err != nil {
|
if err := idb.QueryRow("SELECT family FROM packages WHERE realname = ?", og_realname).Scan(&family); err != nil {
|
||||||
log.Fatal("line 239", err)
|
if err == sql.ErrNoRows {
|
||||||
return
|
fmt.Printf("error: cant find %s\n", og_realname)
|
||||||
|
os.Exit(1)
|
||||||
|
} else {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var neo_realname string
|
var neo_realname string
|
||||||
|
|
||||||
if err := db.QueryRow("SELECT realname FROM packages WHERE family = ? ORDER BY serial DESC LIMIT 1", family).Scan(&neo_realname); err != nil {
|
if err := db.QueryRow("SELECT realname FROM packages WHERE family = ? ORDER BY serial DESC LIMIT 1", family).Scan(&neo_realname); err != nil {
|
||||||
log.Fatal("line 245", err)
|
if err == sql.ErrNoRows {
|
||||||
return
|
fmt.Printf("error: cant find %s\n", og_realname)
|
||||||
|
os.Exit(1)
|
||||||
|
} else {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if neo_realname == og_realname {
|
if neo_realname == og_realname {
|
||||||
@@ -335,7 +355,7 @@ var upgradeCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("founded an upgrade")
|
fmt.Println("founded an upgrade")
|
||||||
upgradeHelper = neo_realname
|
upgradeHelper = og_realname
|
||||||
QueryInstall(neo_realname)
|
QueryInstall(neo_realname)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -373,16 +393,17 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// COMMANDS
|
// COMMANDS
|
||||||
rootCmd.AddCommand(installCmd)
|
|
||||||
rootCmd.AddCommand(serve)
|
rootCmd.AddCommand(serve)
|
||||||
|
|
||||||
serve.AddCommand(serveInit)
|
serve.AddCommand(serveInit)
|
||||||
serve.AddCommand(serveStop)
|
serve.AddCommand(serveStop)
|
||||||
|
|
||||||
|
rootCmd.AddCommand(installCmd)
|
||||||
rootCmd.AddCommand(syncCmd)
|
rootCmd.AddCommand(syncCmd)
|
||||||
rootCmd.AddCommand(removeCmd)
|
rootCmd.AddCommand(removeCmd)
|
||||||
rootCmd.AddCommand(upgradeCmd)
|
rootCmd.AddCommand(upgradeCmd)
|
||||||
rootCmd.AddCommand(listCmd)
|
rootCmd.AddCommand(listCmd)
|
||||||
|
rootCmd.AddCommand(searchCmd)
|
||||||
|
|
||||||
rootCmd.Execute()
|
rootCmd.Execute()
|
||||||
|
|
||||||
@@ -783,6 +804,9 @@ func QueryInstall(realname string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
simplecheck.Close()
|
simplecheck.Close()
|
||||||
|
} else {
|
||||||
|
simplecheck.Close()
|
||||||
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var mirrors string
|
var mirrors string
|
||||||
@@ -1589,15 +1613,106 @@ func Upgrade(packagepath string, og_realname string, serial uint) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SearchUpgrades(name string) error {
|
func AutoUpgrade() error {
|
||||||
|
|
||||||
|
index, err := sql.Open("sqlite", filepath.Join(PacketsDir, "index.db"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer index.Close()
|
||||||
|
|
||||||
|
installed, err := sql.Open("sqlite", filepath.Join(PacketsDir, "installed.db"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer installed.Close()
|
||||||
|
|
||||||
|
rows, err := installed.Query("SELECT family, serial, realname FROM packages")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
var family, realname, ogRealname string
|
||||||
|
var serial, maxserial int
|
||||||
|
|
||||||
|
var list []UpgradeHelpAuto
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
rows.Scan(&family, &serial, &ogRealname)
|
||||||
|
if err := index.QueryRow("SELECT serial, realname FROM packages WHERE serial = (SELECT MAX(serial) FROM packages WHERE family = ?) AND family = ?", family, family).Scan(&maxserial, &realname); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if maxserial > serial {
|
||||||
|
brinco := &UpgradeHelpAuto{
|
||||||
|
OgRealname: ogRealname,
|
||||||
|
NeoRealname: realname,
|
||||||
|
}
|
||||||
|
list = append(list, *brinco)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range list {
|
||||||
|
upgradeHelper = v.OgRealname
|
||||||
|
QueryInstall(v.NeoRealname)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Search(cmd *cobra.Command, args []string) error {
|
||||||
db, err := sql.Open("sqlite", filepath.Join(PacketsDir, "index.db"))
|
db, err := sql.Open("sqlite", filepath.Join(PacketsDir, "index.db"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
|
var name, realname, version, description string
|
||||||
|
var dependenciesRaw *string
|
||||||
|
var arrayDepedencies []string
|
||||||
|
|
||||||
|
if len(args) == 0 {
|
||||||
|
|
||||||
|
rows, err := db.Query("SELECT name, realname, version, description, dependencies FROM packages")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
if err := rows.Scan(&name, &realname, &version, &description, &dependenciesRaw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if dependenciesRaw != nil {
|
||||||
|
arrayDepedencies = strings.Fields(*dependenciesRaw)
|
||||||
|
} else {
|
||||||
|
arrayDepedencies = []string{}
|
||||||
|
}
|
||||||
|
fmt.Printf(":: Package %s : %s\n:: (%s)\n %s\n Dependencies: %v\n\n", realname, version, name, description, arrayDepedencies)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rows, err := db.Query("SELECT name, realname, version, description, dependencies FROM packages WHERE name = ?", args[0])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
if err := rows.Scan(&name, &realname, &version, &description, &dependenciesRaw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if dependenciesRaw != nil {
|
||||||
|
arrayDepedencies = strings.Fields(*dependenciesRaw)
|
||||||
|
} else {
|
||||||
|
arrayDepedencies = []string{}
|
||||||
|
}
|
||||||
|
fmt.Printf(":: Package %s : %s\n:: (%s)\n %s\n Dependencies: %v\n\n", realname, version, name, description, arrayDepedencies)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user