Ginie update eingeführt.
This commit is contained in:
@@ -93,6 +93,20 @@ func main() {
|
||||
}
|
||||
return
|
||||
|
||||
case "update":
|
||||
if len(os.Args) < 3 {
|
||||
fmt.Println("Usage: ginie update <name>")
|
||||
return
|
||||
}
|
||||
target := os.Args[2]
|
||||
|
||||
err := install.Update(target)
|
||||
if err != nil {
|
||||
fmt.Println("Fehler:", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
|
||||
default:
|
||||
fmt.Println("Unbekannter Befehl:", cmd)
|
||||
return
|
||||
|
||||
@@ -194,3 +194,63 @@ func Install(pkg string) error {
|
||||
|
||||
return errors.New("Asset-Typ wird noch nicht unterstützt")
|
||||
}
|
||||
|
||||
func Update(pkg string) error {
|
||||
name := pkg
|
||||
|
||||
all, err := repos.LoadRepos()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var repo repos.Repo
|
||||
found := false
|
||||
for _, r := range all {
|
||||
if r.Name == name {
|
||||
repo = r
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
return errors.New("Repo nicht gefunden. Nutze: ginie add <URL>")
|
||||
}
|
||||
|
||||
if repo.InstalledVersion == "" {
|
||||
return errors.New("Package noch nicht installiert. Nutze: ginie install " + name)
|
||||
}
|
||||
|
||||
api := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", repo.Owner, repo.Name)
|
||||
|
||||
resp, err := http.Get(api)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return fmt.Errorf("GitHub API Fehler: %s", resp.Status)
|
||||
}
|
||||
|
||||
var release struct {
|
||||
TagName string `json:"tag_name"`
|
||||
}
|
||||
|
||||
if err := json.NewDecoder(resp.Body).Decode(&release); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if release.TagName == "" {
|
||||
return errors.New("Keine Version im Release gefunden")
|
||||
}
|
||||
|
||||
if release.TagName == repo.InstalledVersion {
|
||||
fmt.Printf("%s ist bereits auf Version %s\n", repo.Name, repo.InstalledVersion)
|
||||
return nil
|
||||
}
|
||||
|
||||
fmt.Printf("Aktualisiere %s von %s auf %s\n", repo.Name, repo.InstalledVersion, release.TagName)
|
||||
|
||||
return Install(fmt.Sprintf("%s:%s", repo.Name, release.TagName))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user