Add auto upgrade function, and search function with some bug fixes
This commit is contained in:
@@ -34,6 +34,11 @@ import (
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
type UpgradeHelpAuto struct {
|
||||
OgRealname string
|
||||
NeoRealname string
|
||||
}
|
||||
|
||||
type ConfigTOML struct {
|
||||
Config struct {
|
||||
HttpPort int `toml:"httpPort"`
|
||||
@@ -46,14 +51,6 @@ type ConfigTOML struct {
|
||||
} `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 {
|
||||
R io.Reader
|
||||
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{
|
||||
Use: "upgrade [packages...]",
|
||||
Short: "Upgrade package",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
isUpgrade = true
|
||||
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 {
|
||||
@@ -313,15 +325,23 @@ var upgradeCmd = &cobra.Command{
|
||||
|
||||
var family string
|
||||
if err := idb.QueryRow("SELECT family FROM packages WHERE realname = ?", og_realname).Scan(&family); err != nil {
|
||||
log.Fatal("line 239", err)
|
||||
return
|
||||
if err == sql.ErrNoRows {
|
||||
fmt.Printf("error: cant find %s\n", og_realname)
|
||||
os.Exit(1)
|
||||
} else {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
log.Fatal("line 245", err)
|
||||
return
|
||||
if err == sql.ErrNoRows {
|
||||
fmt.Printf("error: cant find %s\n", og_realname)
|
||||
os.Exit(1)
|
||||
} else {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
if neo_realname == og_realname {
|
||||
@@ -335,7 +355,7 @@ var upgradeCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
fmt.Println("founded an upgrade")
|
||||
upgradeHelper = neo_realname
|
||||
upgradeHelper = og_realname
|
||||
QueryInstall(neo_realname)
|
||||
}
|
||||
},
|
||||
@@ -373,16 +393,17 @@ func main() {
|
||||
}
|
||||
|
||||
// COMMANDS
|
||||
rootCmd.AddCommand(installCmd)
|
||||
rootCmd.AddCommand(serve)
|
||||
|
||||
serve.AddCommand(serveInit)
|
||||
serve.AddCommand(serveStop)
|
||||
|
||||
rootCmd.AddCommand(installCmd)
|
||||
rootCmd.AddCommand(syncCmd)
|
||||
rootCmd.AddCommand(removeCmd)
|
||||
rootCmd.AddCommand(upgradeCmd)
|
||||
rootCmd.AddCommand(listCmd)
|
||||
rootCmd.AddCommand(searchCmd)
|
||||
|
||||
rootCmd.Execute()
|
||||
|
||||
@@ -783,6 +804,9 @@ func QueryInstall(realname string) {
|
||||
}
|
||||
|
||||
simplecheck.Close()
|
||||
} else {
|
||||
simplecheck.Close()
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
var mirrors string
|
||||
@@ -1589,15 +1613,106 @@ func Upgrade(packagepath string, og_realname string, serial uint) error {
|
||||
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"))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return err
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user