Implement basic subcommands.

This commit is contained in:
Jelmer Vernooij 2021-02-07 21:55:47 +00:00
parent 88213d8500
commit 21ed7c4a7d
7 changed files with 188 additions and 5 deletions

View file

@ -17,11 +17,13 @@
import os
import sys
from . import (
run_build, run_clean, run_install, run_test,
note)
from . import note
from .buildsystem import NoBuildToolsFound
from .build import run_build
from .clean import run_clean
from .dist import run_dist
from .install import run_install
from .test import run_test
def main():

View file

@ -67,8 +67,10 @@ class AptManager(object):
status_path = os.path.join(root, 'var/lib/dpkg/status')
missing = set(packages)
with apt_pkg.TagFile(status_path) as tagf:
while tagf and missing:
while missing:
tagf.step()
if not tagf.section:
break
if tagf.section['Package'] in missing:
if tagf.section['Status'] == 'install ok installed':
missing.remove(tagf.section['Package'])

34
ognibuild/build.py Normal file
View file

@ -0,0 +1,34 @@
#!/usr/bin/python3
# Copyright (C) 2020-2021 Jelmer Vernooij <jelmer@jelmer.uk>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from .apt import AptManager
from .buildsystem import detect_buildsystems, NoBuildToolsFound
def run_build(session):
apt = AptManager(session)
apt.install(['git'])
# Some things want to write to the user's home directory,
# e.g. pip caches in ~/.cache
session.create_home()
for buildsystem in detect_buildsystems(session):
buildsystem.build()
return
raise NoBuildToolsFound()

View file

@ -18,6 +18,10 @@
import logging
import os
from .apt import AptManager
from .fix_build import run_with_build_fixer
class NoBuildToolsFound(Exception):
@ -33,7 +37,49 @@ class BuildSystem(object):
def dist(self):
raise NotImplementedError(self.dist)
def test(self):
raise NotImplementedError(self.test)
def build(self):
raise NotImplementedError(self.build)
def clean(self):
raise NotImplementedError(self.clean)
def install(self):
raise NotImplementedError(self.install)
class Pear(BuildSystem):
def dist(self):
apt = AptManager(self.session)
apt.install(['php-pear'])
run_with_build_fixer(self.session, ['pear', 'package'])
def test(self):
apt = AptManager(self.session)
apt.install(['php-pear'])
run_with_build_fixer(self.session, ['pear', 'run-tests'])
def build(self):
apt = AptManager(self.session)
apt.install(['php-pear'])
run_with_build_fixer(self.session, ['pear', 'build'])
def clean(self):
apt = AptManager(self.session)
apt.install(['php-pear'])
# TODO
def install(self):
apt = AptManager(self.session)
apt.install(['php-pear'])
run_with_build_fixer(self.session, ['pear', 'install'])
def detect_buildsystems(session):
"""Detect build systems."""
return []
if os.path.exists('package.xml'):
logging.info('Found package.xml, assuming pear package.')
yield Pear(session)

34
ognibuild/clean.py Normal file
View file

@ -0,0 +1,34 @@
#!/usr/bin/python3
# Copyright (C) 2020-2021 Jelmer Vernooij <jelmer@jelmer.uk>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from .apt import AptManager
from .buildsystem import detect_buildsystems, NoBuildToolsFound
def run_clean(session):
apt = AptManager(session)
apt.install(['git'])
# Some things want to write to the user's home directory,
# e.g. pip caches in ~/.cache
session.create_home()
for buildsystem in detect_buildsystems(session):
buildsystem.clean()
return
raise NoBuildToolsFound()

31
ognibuild/install.py Normal file
View file

@ -0,0 +1,31 @@
#!/usr/bin/python3
# Copyright (C) 2020-2021 Jelmer Vernooij <jelmer@jelmer.uk>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from .apt import AptManager
from .buildsystem import detect_buildsystems, NoBuildToolsFound
def run_install(session):
# Some things want to write to the user's home directory,
# e.g. pip caches in ~/.cache
session.create_home()
for buildsystem in detect_buildsystems(session):
buildsystem.install()
return
raise NoBuildToolsFound()

34
ognibuild/test.py Normal file
View file

@ -0,0 +1,34 @@
#!/usr/bin/python3
# Copyright (C) 2020-2021 Jelmer Vernooij <jelmer@jelmer.uk>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from .apt import AptManager
from .buildsystem import detect_buildsystems, NoBuildToolsFound
def run_test(session):
apt = AptManager(session)
apt.install(['git'])
# Some things want to write to the user's home directory,
# e.g. pip caches in ~/.cache
session.create_home()
for buildsystem in detect_buildsystems(session):
buildsystem.test()
return
raise NoBuildToolsFound()