108 lines
2.1 KiB
Go
108 lines
2.1 KiB
Go
// Package cmd
|
|
package cmd
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/spf13/cobra"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
var (
|
|
// Flags
|
|
Mask 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)
|
|
}
|
|
|
|
if err := downgrade(); err != nil {
|
|
fmt.Println("\n\nFailed to downgrade ", PkgName, " to ", Version)
|
|
log.Fatal(err)
|
|
} else {
|
|
fmt.Println("Successfully downgraded ", PkgName, " to ", Version)
|
|
}
|
|
},
|
|
}
|
|
|
|
func downgrade() error {
|
|
fmt.Println("Downgrading ", PkgName, "to ", Version)
|
|
|
|
if Mask && Unmask {
|
|
return errors.New("please choose either --mask or --unmask, not both")
|
|
}
|
|
|
|
cmd := exec.Command("sudo", "-S", "flatpak", "update", "--commit="+Version, PkgName)
|
|
|
|
cmd.Stdin = os.Stdin
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
|
|
if Unmask {
|
|
unmask()
|
|
}
|
|
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if Mask {
|
|
mask()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
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(&Mask, "mask", "m", 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
|
|
*/
|