// Package cmd package cmd import ( "fmt" "github.com/spf13/cobra" "log" "os" "os/exec" ) var ( // Flags IgnoreUpgrade bool Unmask bool Version string // Args PkgName string ) var rootCmd = &cobra.Command{ Use: "flatpak-downgrade", Short: "Used to downgrade flatpak applications to a previous version.", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { PkgName = args[0] if Version == "" { Version = GetPreviousVersion(PkgName) } downgrade() }, } func downgrade() { fmt.Println("Downgrading ", PkgName, "to ", Version) cmd := exec.Command("flatpak", "update", "--commit="+Version, PkgName) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err := cmd.Run() if err != nil { panic(err) } if IgnoreUpgrade && Unmask { log.Fatal("Error: Cannot use both --ignore-upgrade and --unmask flags together.") } if IgnoreUpgrade { mask() } else if Unmask { unmask() } fmt.Println("Downgrade successful!") } func mask() { mask := exec.Command("flatpak", "mask", PkgName) maskErr := mask.Run() if maskErr != nil { log.Fatal("Error: ", maskErr, "\nPlease try running with root privileges.") } else { fmt.Println("Marked ", PkgName, " as ignored for upgrade.") } } func unmask() { mask := exec.Command("flatpak", "mask", "--remove", PkgName) maskErr := mask.Run() if maskErr != nil { log.Fatal("Error: ", maskErr, "\nPlease try running with root privileges.") } else { fmt.Println("Marked ", PkgName, " as upgradable.") } } func Execute() { err := rootCmd.Execute() if err != nil { os.Exit(1) } } func init() { rootCmd.Flags().BoolVarP(&IgnoreUpgrade, "ignore-upgrage", "i", false, "Mark flatpak as ignored for upgrade") rootCmd.Flags().BoolVarP(&Unmask, "unmask", "u", false, "Mark flatpak as upgradable") rootCmd.Flags().StringVarP(&Version, "version", "v", "", "Commit hash of the specific version") } /* * Copyright © 2024 Mark Bailey * This file is part of a CLI application developed by Mark Bailey */