Skip to content

Commit

Permalink
Merge pull request #54 from felipealfonsog/development
Browse files Browse the repository at this point in the history
Updates
  • Loading branch information
felipealfonsog committed Jun 3, 2024
2 parents 021018c + ed1919e commit 3502a6e
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 53 deletions.
15 changes: 4 additions & 11 deletions src/upd8all_updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ def execute_command_with_sudo(command, sudo_password):
def update_pacman(sudo_password):
print("\nUpdating Pacman packages...")
print("-------------------------------------")
command = "pacman -Sc --noconfirm" # clean up cache
command = "pacman -Syu --noconfirm"
execute_command_with_sudo(command, sudo_password)

Expand All @@ -56,22 +55,16 @@ def update_yay(sudo_password):
config_file = os.path.join(config_path, "config.json")
with open(config_file, "w") as f:
json.dump({"misc": {"save": True}}, f)

command = "yay -Syu --noconfirm"

# Check if sudo is required for the Yay command
need_sudo = False
# Try running yay without sudo first
try:
subprocess.run(command.split(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True)
result = subprocess.run(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
print(result.stdout.decode())
except subprocess.CalledProcessError:
need_sudo = True

if need_sudo:
# Execute the Yay command with sudo if necessary
execute_command_with_sudo(command, sudo_password)
else:
# Execute the Yay command directly without sudo
os.system(command)

# Function to update packages with Homebrew
def update_brew():
Expand Down
64 changes: 22 additions & 42 deletions src/upd8all_updater_stable.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,15 @@
import getpass
import subprocess
import json
import signal

# Function to print the welcome message
def print_welcome_message():
print("""
Welcome to the Upd8All Updater ⚙
=======================================
Description: Upd8All is a versatile and comprehensive package update tool meticulously
crafted to cater to the needs of Arch Linux users. No more worried about sudo, and continuous
updating of the system with pacman, yay, and brew (You can even configure this as a service).
crafted to cater to the needs of Arch Linux users. No more worries about sudo, and continuous
updating of the system with pacman, yay, and brew.
-------------------------------------------------------------------------------------
Creator/Engineer: Felipe Alfonso Gonzalez - github.com/felipealfonsog - f.alfonso@res-ear.ch
License: BSD 3-Clause (Restrictive: Ask about it)
Expand All @@ -22,17 +21,12 @@ def print_welcome_message():

# Function to execute a command with sudo as needed
def execute_command_with_sudo(command, sudo_password):
# Set environment variable to prevent sudo from asking for password
env = os.environ.copy()
env['SUDO_ASKPASS'] = '/bin/false'

proc = subprocess.Popen(
["sudo", "-S", *command.split()],
stdin=subprocess.PIPE,
stdout=sys.stdout,
stderr=sys.stderr,
universal_newlines=True,
env=env # Pass the modified environment variable
universal_newlines=True
)

# Send sudo password
Expand All @@ -49,6 +43,7 @@ def execute_command_with_sudo(command, sudo_password):
def update_pacman(sudo_password):
print("\nUpdating Pacman packages...")
print("-------------------------------------")
command = "pacman -Sc --noconfirm" # clean up cache
command = "pacman -Syu --noconfirm"
execute_command_with_sudo(command, sudo_password)

Expand Down Expand Up @@ -104,18 +99,10 @@ def check_package_version(package, package_manager):
print(f"No package named '{package}' found in the system.")
sys.exit(1)

# Handler for the alarm signal
def alarm_handler(signum, frame):
print("\nTime's up. Program execution has ended.\n")
sys.exit(0)

def main():
# Print welcome message
print_welcome_message()

# Set up the alarm signal
signal.signal(signal.SIGALRM, alarm_handler)

# Check if the user has yay installed
try:
subprocess.run(["yay", "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True)
Expand All @@ -134,26 +121,25 @@ def main():
sudo_password = getpass.getpass(prompt="Enter your sudo password: ")
print() # Add a newline after entering the password

while True:
signal.alarm(60) # Set the alarm to trigger after 60 seconds
# Ask if the user wants to check a package version at the end
response = input("Do you want to check the version of a package at the end? (yes/no) [no]: ").strip().lower() or "no"
check_package_at_end = response == 'yes'

# Update packages
update_pacman(sudo_password)
# Update packages
update_pacman(sudo_password)

if has_yay:
update_yay(sudo_password)
else:
print("You do not have Yay installed.")

if has_brew:
update_brew()
else:
print("You do not have Brew installed.")
if has_yay:
update_yay(sudo_password)
else:
print("You do not have Yay installed.")

# Inform the user about program termination after 1 minute of inactivity
print("\nNote: If no further input is provided within 1 minute, the program will terminate.\n")
if has_brew:
update_brew()
else:
print("You do not have Brew installed.")

# Request package name and package manager to check its version
# Check package version if requested
if check_package_at_end:
while True:
print("Select the package manager to check the version:")
print("1. Pacman")
Expand All @@ -164,12 +150,6 @@ def main():

selected_option = input("Enter the option number (e.g., 1) or 'q' to quit: ").strip().lower()

# Check if the timer has expired
if not signal.getitimer(signal.ITIMER_REAL)[0]:
print("\nTime's up. Program execution has ended.\n")
sys.exit(0)

# Check if the user wants to quit
if selected_option == 'q':
print("\nExiting the program.\n")
sys.exit(0)
Expand All @@ -187,11 +167,11 @@ def main():
elif selected_option == '3' and has_brew:
package_manager = "brew"

# Request package name
package = input("Enter the name of the package to check its version (e.g., gh): ").strip().lower()

# Check the version of the specified package
check_package_version(package, package_manager)

else:
print("Processes completed.")

if __name__ == "__main__":
main()

0 comments on commit 3502a6e

Please sign in to comment.