-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathblah.py
More file actions
154 lines (126 loc) · 5.54 KB
/
Copy pathblah.py
File metadata and controls
154 lines (126 loc) · 5.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import click
import os
import aur
import subprocess
class Constants:
working_dir = f"{os.environ['HOME']}/aur"
def is_pkg_installed(package):
return os.path.exists(f"{os.environ['HOME']}/aur/{package}")
def clean(package):
os.system("rm -rf " + Constants.working_dir + f"/{package}")
@click.group()
def cli(): pass
@click.command()
@click.argument("packages_to_install", nargs=-1, required=True)
def install(packages_to_install):
for package_name in packages_to_install:
package = None
try:
package = aur.info(package_name)
except:
click.echo(f"Package {package_name} doesn't exist on AUR, skipping it")
continue
click.echo(f"Found package: {package.name} {package.version}")
if is_pkg_installed(package.name):
if len(packages_to_install) != 1: click.echo(f"Package {package.name} is already installed on this system, skipping it")
else: click.echo(f"Package {package.name} is already installed on this system")
continue
click.echo(f"Downloading {package.name}")
os.chdir(Constants.working_dir)
gitclone_result = os.system(f"git clone https://aur.archlinux.org/{package.name}.git")
if(gitclone_result != 0):
if len(packages_to_install) != 1: click.echo("Failed to download, skipping it")
else: click.echo("Failed to download, aborting")
clean(package_name)
continue
click.echo(f"Building {package.name}")
os.chdir(Constants.working_dir + f"/{package.name}")
makepkg_result = os.system("makepkg -sfcri")
if(makepkg_result != 0):
if len(packages_to_install) != 1: click.echo("Failed to build and/or install, skipping it")
else: click.echo("Failed to build and/or install, aborting")
clean(package_name)
continue
click.echo(f"Installed package {package.name} successfully")
if len(packages_to_install) != 1: click.echo("Finished installing packages successfully")
@click.command()
@click.argument('packages_to_remove', nargs=-1, required=True)
def remove(packages_to_remove):
for package_name in packages_to_remove:
if not is_pkg_installed(package_name):
if len(packages_to_remove) != 1: click.echo(f"Package {package_name} is not installed, skipping it")
else: click.echo("Package is not installed, aborting removal")
continue
click.echo(f"Removing {package_name} from pacman")
pacman_result = os.system(f"sudo pacman -R {package_name}")
if (pacman_result != 0):
if len(packages_to_remove) != 1: click.echo(f"Failed to remove {package_name} from pacman, skipping it")
else: click.echo("Failed to remove from pacman, aborting removal")
continue
click.echo("Removing local build files")
clean(package_name)
click.echo(f"Removed package {package_name} successfully")
@click.command()
@click.argument('package_name')
def search(package_name):
if is_pkg_installed(package_name):
click.echo(f"Package {package_name} is installed")
return
search = aur.search(package_name)
if len(search) == 1 or search[0].name == package_name:
print(f"Package {search[0].name} {search[0].version}")
return
if len(search) == 0:
print(f"No packages found")
return
print(f"Multiple packages found")
for pkg in search:
print(f"Package {pkg.name} {pkg.version}")
@click.command()
@click.argument('package_name', nargs=-1, required=False)
def update(package_name):
if len(package_name) == 0:
click.echo("Updating all packages")
packages = os.listdir(Constants.working_dir)
for pkg in packages:
os.chdir(Constants.working_dir + f"/{pkg}")
gitpull_result = subprocess.run(["git", "pull"], capture_output=True)
if (gitpull_result.returncode != 0):
click.echo(f"Failed to pull git repository of {pkg}, skipping")
continue
if (gitpull_result.stdout == b'Already up to date.\n'):
click.echo(f"{pkg} is up to date")
continue
makepkg_result = os.system("makepkg -sfcri")
if (makepkg_result != 0):
click.echo(f"Failed to build and/or install {pkg}, skipping")
continue
click.echo("Update succeeded")
return
for packagename in package_name:
if not is_pkg_installed(packagename):
click.echo(f"Package {packagename} is not installed")
continue
os.chdir(Constants.working_dir + f"/{packagename}")
gitpull_result = subprocess.run(["git", "pull"], capture_output=True)
if (gitpull_result.returncode != 0):
click.echo(f"Failed to pull git repository, aborting updating {packagename}")
continue
if (gitpull_result.stdout == b'Already up to date.\n'):
click.echo(f"{packagename} is already newest version.")
continue
makepkg_result = os.system("makepkg -sfcri")
if(makepkg_result != 0):
click.echo(f"Failed to build and/or install, aborting updating {packagename}")
continue
click.echo("Update succeeded")
return
@click.command(name="list")
def listinstalled():
dirs = os.listdir(Constants.working_dir)
for directory in dirs: click.echo(directory)
cli.add_command(install)
cli.add_command(remove)
cli.add_command(search)
cli.add_command(update)
cli.add_command(listinstalled)