From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 7AA85138202 for ; Fri, 6 Sep 2013 17:27:46 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E3231E0F95; Fri, 6 Sep 2013 17:27:45 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 41838E0F95 for ; Fri, 6 Sep 2013 17:27:45 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 27A3733EBB9 for ; Fri, 6 Sep 2013 17:27:44 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id CDADAE545E for ; Fri, 6 Sep 2013 17:27:42 +0000 (UTC) From: "André Erdmann" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "André Erdmann" Message-ID: <1378478211.de3b14074f6a58beb1d2929616a5d6ef9f87eb3c.dywi@gentoo> Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/config/, roverlay/ X-VCS-Repository: proj/R_overlay X-VCS-Files: roverlay/argparser.py roverlay/argutil.py roverlay/config/mkconfig.py X-VCS-Directories: roverlay/config/ roverlay/ X-VCS-Committer: dywi X-VCS-Committer-Name: André Erdmann X-VCS-Revision: de3b14074f6a58beb1d2929616a5d6ef9f87eb3c X-VCS-Branch: master Date: Fri, 6 Sep 2013 17:27:42 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: e5caf1ac-cc5a-4ece-a4ce-d6b5c6e5b44d X-Archives-Hash: c60a55183adf759ab03c7060f610f0aa commit: de3b14074f6a58beb1d2929616a5d6ef9f87eb3c Author: André Erdmann mailerd de> AuthorDate: Fri Sep 6 14:36:51 2013 +0000 Commit: André Erdmann mailerd de> CommitDate: Fri Sep 6 14:36:51 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=de3b1407 mkconfig: use roverlay.argparser --- roverlay/argparser.py | 38 ++++++++++++++++++ roverlay/argutil.py | 41 ++++++++++++++++++++ roverlay/config/mkconfig.py | 93 ++++++++++++--------------------------------- 3 files changed, 103 insertions(+), 69 deletions(-) diff --git a/roverlay/argparser.py b/roverlay/argparser.py index ed0561c..98b09a1 100644 --- a/roverlay/argparser.py +++ b/roverlay/argparser.py @@ -18,6 +18,7 @@ from roverlay.argutil import \ get_gid, is_gid, get_uid, is_uid, \ is_fs_dir, is_fs_dir_or_void, is_fs_file, \ is_fs_file_or_dir, is_fs_file_or_void, \ + is_config_opt, dirstr, dirstr_existing, couldbe_dirstr_existing, \ ArgumentParserProxy @@ -179,6 +180,8 @@ class RoverlayArgumentParserBase ( roverlay.argutil.ArgumentParserProxy ): if hasattr ( self.__class__, 'SETUP_TARGETS' ): for attr in self.__class__.SETUP_TARGETS: getattr ( self, 'setup_' + attr )() + + return self else: raise roverlay.util.objects.AbstractMethodError ( self, 'setup' ) # --- end of setup (...) --- @@ -494,9 +497,44 @@ class RoverlayArgumentParserBase ( roverlay.argutil.ArgumentParserProxy ): return self.setup_misc_minimal() # --- end of setup_misc (...) --- + def setup_setup_minimal ( self ): + assert os.sep == "/" + + arg = self.add_argument_group ( 'setup', title='setup options' ) + + arg ( + '--work-root', '-W', dest='work_root', + default="~/roverlay", + flags=self.ARG_WITH_DEFAULT|self.ARG_META_DIR, + type=couldbe_dirstr_existing, + help=( + 'directory for user data (distfiles, overlay, private config, ...)' + ), + ) + + arg ( + '--data-root', '-D', dest='data_root', + default="/usr/share/roverlay", + flags=self.ARG_WITH_DEFAULT|self.ARG_META_DIR, + type=couldbe_dirstr_existing, + help='roverlay\'s static data (eclass, hook scripts,...)', + ) + + arg ( + '--conf-root', '-C', dest='conf_root', + default="/etc/roverlay", + flags=self.ARG_WITH_DEFAULT|self.ARG_META_DIR, + type=couldbe_dirstr_existing, + help='roverlay\'s config files (dependency rules,...)', + ) + + + return arg + # --- end of setup_setup_minimal (...) --- # --- end of RoverlayArgumentParserBase --- + class RoverlayArgumentParser ( RoverlayArgumentParserBase ): COMMAND_DESCRIPTION = None diff --git a/roverlay/argutil.py b/roverlay/argutil.py index 8370b98..73e88b6 100644 --- a/roverlay/argutil.py +++ b/roverlay/argutil.py @@ -101,6 +101,47 @@ def is_fs_file_or_void ( value ): else: return '' +def is_config_opt ( value ): + try: + k = value.partition ( '=' ) [0] + map_entry = deref_entry_safe ( k ) + except KeyError: + raise argparse.ArgumentTypeError ( + "no such config option: {!r}".format ( k ) + ) + else: + return value + +def dirstr ( value ): + if value: + if value[0] == '~': + return value.rstrip ( os.path.sep ) + else: + return os.path.sep + value.strip ( os.path.sep ) + else: + raise argparse.ArgumentTypeError ( + "cannot create dir-string for {!r}".format ( value ) + ) + +def dirstr_existing ( value ): + dstr = dirstr ( value ) + dirpath = os.path.abspath ( os.path.expanduser ( dstr ) ) + if os.path.isdir ( dirpath ): + return dstr + else: + raise argparse.ArgumentTypeError ( + "directory {!r} does not exist!".format ( dstr ) + ) + +def couldbe_dirstr_existing ( value ): + dstr = dirstr ( value ) + dirpath = os.path.abspath ( os.path.expanduser ( dstr ) ) + if not os.path.lexists ( dirpath ) or os.path.isdir ( dirpath ): + return dstr + else: + raise argparse.ArgumentTypeError ( + "{!r} cannot be a directory.".format ( dstr ) + ) class ArgumentParserError ( Exception ): pass diff --git a/roverlay/config/mkconfig.py b/roverlay/config/mkconfig.py index c69a969..c063ef0 100644 --- a/roverlay/config/mkconfig.py +++ b/roverlay/config/mkconfig.py @@ -5,87 +5,42 @@ # either version 2 of the License, or (at your option) any later version. import sys -import os.path -import argparse -from .entryutil import deref_entry_safe -from .defconfig import RoverlayConfigCreation +from roverlay.config.entryutil import deref_entry_safe +from roverlay.config.defconfig import RoverlayConfigCreation -def get_parser(): - def couldbe_fs_file ( value ): - if value: - f = os.path.abspath ( value ) - if not os.path.exists ( f ) or os.path.isfile ( f ): - return f +import roverlay.argutil +import roverlay.argparser - raise argparse.ArgumentTypeError ( - "{!r} is not a file.".format ( value ) - ) +class MkConfigArgParser ( roverlay.argparser.RoverlayArgumentParserBase ): - def couldbe_stdout_or_file ( value ): - return value if value == "-" else couldbe_fs_file ( value ) + DESCRIPTION_TEMPLATE = 'create roverlay config file' - def dirstr ( value ): - if value: - if value[0] == '~': - return value.rstrip ( os.path.sep ) - else: - return os.path.sep + value.strip ( os.path.sep ) - else: - raise argparse.ArgumentTypeError ( - "cannot create dir-string for {!r}".format ( value ) - ) - - def is_config_opt ( value ): - try: - k = value.partition ( '=' ) [0] - map_entry = deref_entry_safe ( k ) - except KeyError: - raise argparse.ArgumentTypeError ( - "no such config option: {!r}".format ( k ) - ) - else: - return value + SETUP_TARGETS = ( 'mkconfig', ) + def setup_mkconfig ( self ): + arg = self.setup_setup_minimal() - parser = argparse.ArgumentParser ( - description='create roverlay config file', - add_help=True, - formatter_class=argparse.RawDescriptionHelpFormatter, - ) + arg ( + '--output', '-O', metavar="", + default='-', + type=roverlay.argutil.couldbe_stdout_or_file, + help='output file/stream for config (use \'-\' for stdout)', + ) - arg = parser.add_argument + arg ( + 'variables', nargs="*", metavar='