Ginie update eingeführt.
This commit is contained in:
@@ -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