Added handling of pkg groups and fixed whitespace

This commit is contained in:
Beth Parker 2017-09-12 14:40:58 -05:00
parent 71ce299d94
commit 967e113caf
4 changed files with 158 additions and 148 deletions

View file

@ -1,11 +1,11 @@
pre_install() { pre_install() {
useradd -m build useradd -m build
mkdir /build mkdir /build
chown build /build chown build /build
mkdir /repo mkdir /repo
chown build /repo chown build /repo
mkdir /etc/aur_repo mkdir /etc/aur_repo
mkdir /var/log/aur_repo mkdir /var/log/aur_repo
chown build /var/log/aur_repo chown build /var/log/aur_repo
touch /etc/aur_repo/pkglist touch /etc/aur_repo/pkglist
} }

View file

@ -13,8 +13,8 @@ sudo.pacman("--noconfirm", "-Syu")
pkglist = open("/etc/aur_repo/pkglist").read().split("\n") pkglist = open("/etc/aur_repo/pkglist").read().split("\n")
pkglist = filter(None, pkglist) pkglist = filter(None, pkglist)
for pkg in pkglist: for pkg in pkglist:
tmp = Package.Package(pkg, buildPath, repoPath, repoName) tmp = Package.Package(pkg, buildPath, repoPath, repoName)
try: try:
tmp.build() tmp.build()
except Package.BuildError: except Package.BuildError:
print("Error while building %s" % (pkg)) print("Error while building %s" % (pkg))

View file

@ -10,136 +10,146 @@ import shutil
import glob import glob
class BuildError(Exception): class BuildError(Exception):
def __init__(self): def __init__(self):
pass pass
class Package(object): class Package(object):
def __init__(self, name, buildPath, repoPath, repoName): def __init__(self, name, buildPath, repoPath, repoName):
self.name = name self.name = name
self.buildPath = buildPath self.buildPath = buildPath
self.repoPath = repoPath self.repoPath = repoPath
self.repoName = repoName self.repoName = repoName
self.path = os.path.join(self.buildPath, name) self.path = os.path.join(self.buildPath, name)
self.repo = False self.repo = False
self.aur = False self.aur = False
self.upToDate = False self.isgroup = False
self.aurdeps = [] self.upToDate = False
self.pkg = "" self.aurdeps = []
self.inrepo() self.pkgs = ""
if not self.repo: self.inrepo()
self.inaur() if not self.repo:
if self.aur: self.inaur()
if not os.path.exists(self.path): if self.aur:
self.clone() self.isgroup()
else: if not os.path.exists(self.path):
self.pull() self.clone()
if self.upToDate: else:
self.checkGit() self.pull()
try: if self.upToDate:
self.getDeps() self.checkGit()
except BuildError: try:
print("Aborting build of %s" % self.name) self.getDeps()
except BuildError:
print("Aborting build of %s" % self.name)
def inrepo(self): def inrepo(self):
try:
results = pacman("-Ssq", self.name)
except sh.ErrorReturnCode_1:
return
for result in results.split("\n"):
if self.name == result:
self.repo = True
def inaur(self):
response = requests.get("https://aur.archlinux.org/packages/%s" % (self.name))
if response.status_code < 400:
self.aur = True
def isgroup(self):
response = requests.get("https://aur.archlinux.org/pkgbase/%s" % (self.name))
if response.status_code < 400:
self.isgroup = True
def clone(self):
git.clone("https://aur.archlinux.org/%s.git" % (self.name), self.path)
def pull(self):
results = git("-C", self.path, "pull")
if "Already up-to-date" in results:
self.upToDate = True
def checkGit(self):
pass
def getDeps(self):
pkgbuild = open(os.path.join(self.path, "PKGBUILD"), errors="surrogateescape").read()
depends = []
m = re.findall("^makedepends.*?=\((.*?)\)\s*$", pkgbuild, re.MULTILINE | re.DOTALL)
if m:
m = " ".join(m)
depends.extend(m.replace("'", "").replace('"', '').split())
for dep in depends:
tmp = Package(dep, self.buildPath, self.repoPath, self.repoName)
if not tmp.aur and not tmp.repo:
print("Could not find make dependency %s" % (dep))
if tmp.aur:
self.aurdeps.append(tmp)
else:
try: try:
results = pacman("-Ssq", self.name) pacman("-Qi", dep)
except sh.ErrorReturnCode_1: except sh.ErrorReturnCode_1:
return try:
for result in results.split("\n"): print("Installing make dependency %s" % (dep))
if self.name == result: results = sudo.pacman("--noconfirm", "-S", dep)
self.repo = True except sh.ErrorReturnCode_1:
print("Could not install make dependency %s" % (dep))
def inaur(self): raise BuildError
response = requests.get("https://aur.archlinux.org/packages/%s" % (self.name)) depends = []
if response.status_code < 400: m = re.findall("^depends.*?=\((.*?)\)\s*$", pkgbuild, re.MULTILINE | re.DOTALL)
self.aur = True if m:
m = " ".join(m)
def clone(self): depends.extend(m.replace("'", "").replace('"', '').split())
git.clone("https://aur.archlinux.org/%s.git" % (self.name), self.path) for dep in depends:
tmp = Package(dep, self.buildPath, self.repoPath, self.repoName)
def pull(self): if not tmp.aur and not tmp.repo:
results = git("-C", self.path, "pull") print("Could not find dependency %s" % (dep))
if "Already up-to-date" in results: elif tmp.aur:
self.upToDate = True self.aurdeps.append(tmp)
else:
def checkGit(self):
pass
def getDeps(self):
pkgbuild = open(os.path.join(self.path, "PKGBUILD"), errors="surrogateescape").read()
depends = []
m = re.findall("^makedepends.*?=\((.*?)\)\s*$", pkgbuild, re.MULTILINE | re.DOTALL)
if m:
m = " ".join(m)
depends.extend(m.replace("'", "").replace('"', '').split())
for dep in depends:
tmp = Package(dep, self.buildPath, self.repoPath, self.repoName)
if not tmp.aur and not tmp.repo:
print("Could not find make dependency %s" % (dep))
if tmp.aur:
self.aurdeps.append(tmp)
else:
try:
pacman("-Qi", dep)
except sh.ErrorReturnCode_1:
try:
print("Installing make dependency %s" % (dep))
results = sudo.pacman("--noconfirm", "-S", dep)
except sh.ErrorReturnCode_1:
print("Could not install make dependency %s" % (dep))
raise BuildError
depends = []
m = re.findall("^depends.*?=\((.*?)\)\s*$", pkgbuild, re.MULTILINE | re.DOTALL)
if m:
m = " ".join(m)
depends.extend(m.replace("'", "").replace('"', '').split())
for dep in depends:
tmp = Package(dep, self.buildPath, self.repoPath, self.repoName)
if not tmp.aur and not tmp.repo:
print("Could not find dependency %s" % (dep))
elif tmp.aur:
self.aurdeps.append(tmp)
else:
try:
pacman("-Qi", dep)
except sh.ErrorReturnCode_1:
try:
print("Installing dependency %s" % (dep))
results = sudo.pacman("--noconfirm", "-S", dep)
except sh.ErrorReturnCode_1:
print("Could not install dependency %s" % (dep))
raise BuildError
def build(self):
for dep in self.aurdeps:
try:
dep.build()
except BuildError:
print("could not build dependency %s" % (dep.name))
return
print("Building", self.name)
os.chdir(self.path)
try: try:
results = sh.makepkg("-d", "--noconfirm", _err="/var/log/aur_repo/%s.log" % self.name) pacman("-Qi", dep)
except sh.ErrorReturnCode_1: except sh.ErrorReturnCode_1:
with open("/var/log/aur_repo/%s.log" % self.name) as log: try:
if "A package has already been built" in log.read(): print("Installing dependency %s" % (dep))
print("%s is up to date" % (self.name)) results = sudo.pacman("--noconfirm", "-S", dep)
return except sh.ErrorReturnCode_1:
print("Could not install dependency %s" % (dep))
raise BuildError raise BuildError
except sh.ErrorReturnCode_2:
print("Error building %s, see /var/log/aur_repo/%s.log" % (self.name, self.name))
raise BuildError
for line in open("/var/log/aur_repo/%s.log" % self.name).read().split("\n"):
if "Finished making" in line:
tmp = line[line.find(":") + 1:].split()[1]
self.pkg = sh.glob("%s/*%s*" % (self.path,tmp))[0]
self.add()
def add(self): def build(self):
if self.pkg: for dep in self.aurdeps:
dbPath = os.path.join(self.repoPath, "%s.db.tar.gz" % (self.repoName)) try:
pkgPath = os.path.join(self.repoPath, os.path.basename(self.pkg)) dep.build()
shutil.copy(self.pkg, pkgPath) except BuildError:
repoAdd = sh.Command("repo-add") print("could not build dependency %s" % (dep.name))
repoAdd(dbPath, pkgPath) return
print("Building", self.name)
os.chdir(self.path)
try:
results = sh.makepkg("-d", "--noconfirm", _err="/var/log/aur_repo/%s.log" % self.name)
except sh.ErrorReturnCode_1:
with open("/var/log/aur_repo/%s.log" % self.name) as log:
if "A package has already been built" in log.read():
print("%s is up to date" % (self.name))
return
raise BuildError
except sh.ErrorReturnCode_2:
print("Error building %s, see /var/log/aur_repo/%s.log" % (self.name, self.name))
raise BuildError
for line in open("/var/log/aur_repo/%s.log" % self.name).read().split("\n"):
if "Finished making" in line:
if(self.isgroup):
self.pkgs = sh.glob("%s/*.pkg.*" % (self.path))
else:
self.pkgs = sh.glob("%s/%s*.pkg.*" % (self.path,self.name))[0]
self.add()
def add(self):
if self.pkgs:
for pkg in self.pkgs:
dbPath = os.path.join(self.repoPath, "%s.db.tar.gz" % (self.repoName))
pkgPath = os.path.join(self.repoPath, os.path.basename(pkg))
shutil.copy(pkg, pkgPath)
repoAdd = sh.Command("repo-add")
repoAdd(dbPath, pkgPath)

View file

@ -1,14 +1,14 @@
from distutils.core import setup from distutils.core import setup
setup( setup(
name='aur_repo', name='aur_repo',
version='0.1.0', version='0.1.0',
author='ejparker', author='ejparker',
author_email='ejparker12@gmail.com', author_email='ejparker12@gmail.com',
packages=['package'], packages=['package'],
scripts=['bin/aur_repo'], scripts=['bin/aur_repo'],
url='https://git.actcur.com/actcur/aur_repo', url='https://git.actcur.com/actcur/aur_repo',
license='LICENSE', license='LICENSE',
description='Build local repo from aur packages', description='Build local repo from aur packages',
long_description="" long_description=""
) )