Added handling of pkg groups and fixed whitespace
This commit is contained in:
parent
71ce299d94
commit
967e113caf
4 changed files with 158 additions and 148 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
10
bin/aur_repo
10
bin/aur_repo
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
20
setup.py
20
setup.py
|
@ -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=""
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue