From 967e113caf1bca5418a77f0f81a4f2c5de3af667 Mon Sep 17 00:00:00 2001 From: Beth Parker Date: Tue, 12 Sep 2017 14:40:58 -0500 Subject: [PATCH] Added handling of pkg groups and fixed whitespace --- aur_repo.install | 18 ++-- bin/aur_repo | 10 +- package/Package.py | 258 +++++++++++++++++++++++---------------------- setup.py | 20 ++-- 4 files changed, 158 insertions(+), 148 deletions(-) diff --git a/aur_repo.install b/aur_repo.install index 551a8f8..c29f2e7 100644 --- a/aur_repo.install +++ b/aur_repo.install @@ -1,11 +1,11 @@ pre_install() { - useradd -m build - mkdir /build - chown build /build - mkdir /repo - chown build /repo - mkdir /etc/aur_repo - mkdir /var/log/aur_repo - chown build /var/log/aur_repo - touch /etc/aur_repo/pkglist + useradd -m build + mkdir /build + chown build /build + mkdir /repo + chown build /repo + mkdir /etc/aur_repo + mkdir /var/log/aur_repo + chown build /var/log/aur_repo + touch /etc/aur_repo/pkglist } diff --git a/bin/aur_repo b/bin/aur_repo index 7248bf0..9c94c2d 100644 --- a/bin/aur_repo +++ b/bin/aur_repo @@ -13,8 +13,8 @@ sudo.pacman("--noconfirm", "-Syu") pkglist = open("/etc/aur_repo/pkglist").read().split("\n") pkglist = filter(None, pkglist) for pkg in pkglist: - tmp = Package.Package(pkg, buildPath, repoPath, repoName) - try: - tmp.build() - except Package.BuildError: - print("Error while building %s" % (pkg)) \ No newline at end of file + tmp = Package.Package(pkg, buildPath, repoPath, repoName) + try: + tmp.build() + except Package.BuildError: + print("Error while building %s" % (pkg)) diff --git a/package/Package.py b/package/Package.py index 09e1abd..ac29fd1 100644 --- a/package/Package.py +++ b/package/Package.py @@ -10,136 +10,146 @@ import shutil import glob class BuildError(Exception): - def __init__(self): - pass + def __init__(self): + pass class Package(object): - def __init__(self, name, buildPath, repoPath, repoName): - self.name = name - self.buildPath = buildPath - self.repoPath = repoPath - self.repoName = repoName - self.path = os.path.join(self.buildPath, name) - self.repo = False - self.aur = False - self.upToDate = False - self.aurdeps = [] - self.pkg = "" - self.inrepo() - if not self.repo: - self.inaur() - if self.aur: - if not os.path.exists(self.path): - self.clone() - else: - self.pull() - if self.upToDate: - self.checkGit() - try: - self.getDeps() - except BuildError: - print("Aborting build of %s" % self.name) + def __init__(self, name, buildPath, repoPath, repoName): + self.name = name + self.buildPath = buildPath + self.repoPath = repoPath + self.repoName = repoName + self.path = os.path.join(self.buildPath, name) + self.repo = False + self.aur = False + self.isgroup = False + self.upToDate = False + self.aurdeps = [] + self.pkgs = "" + self.inrepo() + if not self.repo: + self.inaur() + if self.aur: + self.isgroup() + if not os.path.exists(self.path): + self.clone() + else: + self.pull() + if self.upToDate: + self.checkGit() + try: + 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: - results = pacman("-Ssq", self.name) + pacman("-Qi", dep) 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 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: - 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: + 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: - results = sh.makepkg("-d", "--noconfirm", _err="/var/log/aur_repo/%s.log" % self.name) + pacman("-Qi", dep) 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 + 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 - 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): - if self.pkg: - dbPath = os.path.join(self.repoPath, "%s.db.tar.gz" % (self.repoName)) - pkgPath = os.path.join(self.repoPath, os.path.basename(self.pkg)) - shutil.copy(self.pkg, pkgPath) - repoAdd = sh.Command("repo-add") - repoAdd(dbPath, pkgPath) + 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: + 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) diff --git a/setup.py b/setup.py index 6d66977..d7a93a4 100644 --- a/setup.py +++ b/setup.py @@ -1,14 +1,14 @@ from distutils.core import setup setup( - name='aur_repo', - version='0.1.0', - author='ejparker', - author_email='ejparker12@gmail.com', - packages=['package'], - scripts=['bin/aur_repo'], - url='https://git.actcur.com/actcur/aur_repo', - license='LICENSE', - description='Build local repo from aur packages', - long_description="" + name='aur_repo', + version='0.1.0', + author='ejparker', + author_email='ejparker12@gmail.com', + packages=['package'], + scripts=['bin/aur_repo'], + url='https://git.actcur.com/actcur/aur_repo', + license='LICENSE', + description='Build local repo from aur packages', + long_description="" )