2024-09-09 06:25:32 -04:00

99 lines
2.0 KiB
Go

// 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 <gitea.com/cerbervs>
* This file is part of a CLI application developed by Mark Bailey
*/