public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-06-22 15:24 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-06-22 15:24 UTC (permalink / raw
  To: gentoo-commits

commit:     deafef91dfcc33fd8b491ce4fa6c0709f4afa7a1
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Jun 20 23:36:40 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Jun 20 23:36:40 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=deafef91

roverlay/tools/shenv: run shell scripts

This commit adds support for running shell script files ("hooks") in an
environment that contains roverlay variables like $OVERLAY and $DISTROOT.

---
 roverlay/tools/shenv.py | 322 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 322 insertions(+)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
new file mode 100644
index 0000000..7200851
--- /dev/null
+++ b/roverlay/tools/shenv.py
@@ -0,0 +1,322 @@
+# R overlay -- tools, run roverlay hooks (shell scripts)
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013 André Erdmann <dywi@mailerd.de>
+# Distributed under the terms of the GNU General Public License;
+# either version 2 of the License, or (at your option) any later version.
+
+import logging
+import os
+import subprocess
+import tempfile
+
+
+import roverlay.config
+import roverlay.strutil
+import roverlay.util
+
+
+# _SHELL_ENV, _SHELL_INTPR are created when calling run_script()
+#
+_SHELL_ENV   = None
+#_SHELL_INTPR = None
+LOGGER       = logging.getLogger ( 'shenv' )
+
+
+# shell env dict quickref
+#  TODO: move this to doc/
+#
+# $PATH, $LOGNAME, $SHLVL, $TERM, [$PWD]
+#
+#  taken from os.environ
+#
+# $ROVERLAY_PHASE
+#
+#  hook phase (set in run_script())
+#
+# $OVERLAY == $S (== $HOME)
+#
+#  overlay directory (depends on config value), initial directory for scripts
+#
+#
+# $DISTROOT
+#
+#  mirror directory (depends on config value)
+#
+# $TMPDIR == $T
+#
+#  depends on config value (+fallback)
+#
+# $ADDITIONS_DIR == $FILESDIR (optional)
+#
+#  depends on config value
+#
+# $SHLIB (optional)
+#
+#  shell functions dir (if found, ${ADDITIONS_DIR}/shlib)
+#
+# $FUNCTIONS (optional)
+#
+#  core functions file (if found, ${ADDITIONS_DIR}/{shlib,}/functions.sh)
+#
+# $EBUILD
+#
+#  ebuild executable, depends on config value
+#
+# $GIT_EDITOR
+# $GIT_ASKPASS
+#
+#  set to /bin/false
+#
+# $NOSYNC
+#
+#  depends on config value
+#
+# $NO_COLOR
+#
+#  alway false ('n')
+#
+# $DEBUG
+# $VERBOSE
+# $QUIET
+#
+#  shbools that indicate whether debug/verbose/quiet ouput is desired,
+#  depends on log level
+#
+
+
+def setup_env():
+   """Returns a 'well-defined' env dict for running scripts."""
+
+   # @typedef shbool is SH_TRUE|SH_FALSE, where:
+   SH_TRUE  = 'y'
+   SH_FALSE = 'n'
+
+   def shbool ( value ):
+      """Converts value into a shbool."""
+      return SH_TRUE if value else SH_FALSE
+   # --- end of shbool (...) ---
+
+   # import os.environ
+   if roverlay.config.get ( "SHELL_ENV.filter_env", True ):
+      # (keepenv does not support wildcars)
+      env = roverlay.util.keepenv (
+         ( 'PATH', '/usr/local/bin:/usr/bin:/bin' ),
+         'PWD',
+         'LOGNAME',
+         'SHLVL',
+         'TERM',
+         # what else?
+      )
+      #
+      # LANG, LC_ALL, LC_COLLATE, ...
+      #
+      # GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL,
+      # GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, ...
+      #
+      # GIT_EDITOR and GIT_ASKPASS are set to /bin/false here
+      #
+
+   else:
+      env = dict ( os.environ )
+
+   # setup* functions
+   def setup ( k, v ):
+      env [k] = v
+
+   def setup_conf ( k, c ):
+      env [k] = roverlay.config.get_or_fail ( c )
+
+   def setup_self ( k, c ):
+      env[k] = env[c]
+
+   ## create shell vars
+
+   # str $ROVERLAY_PHASE
+   #  properly defined in shenv_run()
+   #
+   setup ( 'ROVERLAY_PHASE', 'null' )
+
+   # str::dirpath $OVERLAY
+   setup_conf ( 'OVERLAY', 'OVERLAY.dir' )
+
+   # str::dirpath $S renames $OVERLAY
+   setup_self ( 'S', 'OVERLAY' )
+
+   # str::dirpath $HOME renames $OVERLAY
+   #
+   #  FIXME: this should/could be the parent dir of $OVERLAY
+   #  FIXME: git wants to read $HOME/.gitconfig
+   #
+   setup_self ( 'HOME', 'OVERLAY' )
+
+   # str::dirpath $DISTROOT
+   setup_conf ( 'DISTROOT', 'OVERLAY.DISTDIR.root' )
+
+   # str::dirpath $TMPDIR := <default>
+   setup (
+      'TMPDIR',
+      roverlay.config.get ( 'OVERLAY.TMPDIR.root' ) or tempfile.gettempdir()
+   )
+
+   # str::dirpath $T renames $TMPDIR
+   setup_self ( 'T', 'TMPDIR' )
+
+   # @optional str::dirpath $ADDITIONS_DIR
+   # @optional str::dirpath $FILESDIR renames $ADDITIONS_DIR
+   #
+   # @optional str::dirpath $SHLIB is ${ADDITIONS_DIR}/shlib
+   #  directory with shell function files
+   #
+   # @optional str::filepath $FUNCTIONS is <see below>
+   #  shell file with "core" functions
+   #
+   additions_dir = roverlay.config.get ( 'OVERLAY.additions_dir', None )
+   if additions_dir:
+      setup ( 'ADDITIONS_DIR', additions_dir )
+      setup_self ( 'FILESDIR', 'ADDITIONSDIR' )
+
+      shlib_root      = additions_dir + os.sep + 'shlib'
+      shlib_file      = None
+      SHFUNC_FILENAME = 'functions.sh'
+
+      if os.path.isdir ( shlib_root ):
+         setup ( 'SHLIB', shlib_root )
+         shlib_file = shlib_root + os.sep + SHFUNC_FILENAME
+
+         if os.path.isfile ( shlib_file ):
+            setup ( 'FUNCTIONS', shlib_file )
+         else:
+            shlib_file = None
+      # -- end if shlib_root;
+
+      if not shlib_file:
+         shlib_file = additions_dir + os.sep + SHFUNC_FILENAME
+         if os.path.isfile ( shlib_file ):
+            setup ( 'FUNCTIONS', shlib_file )
+   # -- end if additions_dir;
+
+   # str::exe $EBUILD
+   setup_conf ( 'EBUILD', 'TOOLS.EBUILD.exe' )
+
+   # str::exe $GIT_EDITOR = <disable>
+   #
+   #  It's not that funny if the program waits for user interaction.
+   #
+   setup ( 'GIT_EDITOR', roverlay.util.sysnop ( False )[0] )
+
+   # str::exe $GIT_ASKPASS copies $GIT_EDITOR
+   setup_self ( 'GIT_ASKPASS', 'GIT_EDITOR' )
+
+   # shbool $NOSYNC
+   setup ( 'NOSYNC', shbool ( roverlay.config.get_or_fail ( 'nosync' ) ) )
+
+   # shbool $NO_COLOR
+   #
+   #  stdout/stderr are logged, so colored output should be avoided
+   #
+   setup ( 'NO_COLOR', SH_TRUE )
+
+   # shbool $DEBUG, $VERBOSE, $QUIET
+   if LOGGER.isEnabledFor ( logging.DEBUG ):
+      setup ( 'DEBUG',   SH_TRUE  )
+      setup ( 'QUIET',   SH_FALSE )
+      setup ( 'VERBOSE', SH_TRUE  )
+   elif LOGGER.isEnabledFor ( logging.INFO ):
+      setup ( 'DEBUG',   SH_FALSE )
+      setup ( 'QUIET',   SH_FALSE )
+      setup ( 'VERBOSE', SH_TRUE  )
+   elif LOGGER.isEnabledFor ( logging.WARNING ):
+      setup ( 'DEBUG',   SH_FALSE )
+      setup ( 'VERBOSE', SH_FALSE )
+      setup ( 'QUIET',   SH_FALSE )
+   else:
+      setup ( 'DEBUG',   SH_FALSE )
+      setup ( 'VERBOSE', SH_FALSE )
+      setup ( 'QUIET',   SH_TRUE  )
+   # -- end if
+
+   # done
+   return env
+# --- end of setup_env (...) ---
+
+def get_env ( copy=False ):
+   global _SHELL_ENV
+   if _SHELL_ENV is None:
+      _SHELL_ENV = setup_env()
+
+   if copy:
+      return dict ( _SHELL_ENV )
+   else:
+      return _SHELL_ENV
+# --- end of get_env (...) ---
+
+def update_env ( **info ):
+   get_env().update ( info )
+   return _SHELL_ENV
+# --- end of update_env (...) ---
+
+
+def run_script ( script, phase, return_success=False, logger=None ):
+#   global _SHELL_INTPR
+#   if _SHELL_INTPR is None:
+#      _SHELL_INTPR = roverlay.config.get ( 'SHELL_ENV.shell', '/bin/sh' )
+
+   my_logger = logger or LOGGER
+   if phase:
+      my_env = get_env ( copy=True )
+      my_env ['ROVERLAY_PHASE'] = str ( phase )
+   else:
+      # ref
+      my_env = get_env()
+   # -- end if phase;
+
+   script_call = subprocess.Popen (
+#      ( _SHELL_INTPR, script, my_env ['ROVERLAY_PHASE'], ),
+      ( script, my_env ['ROVERLAY_PHASE'], ),
+      stdin  = None,
+      stdout = subprocess.PIPE,
+      stderr = subprocess.PIPE,
+      cwd    = my_env ['S'],
+      env    = my_env,
+   )
+
+   output = script_call.communicate()
+
+   # log stdout
+   if output[0] and my_logger.isEnabledFor ( logging.INFO ):
+      my_logger.info (
+         '--- stdout for script {!r} ---'.format ( script )
+      )
+      for line in roverlay.strutil.pipe_lines ( output[0], use_filter=True ):
+         my_logger.info ( line )
+      my_logger.info (
+         '--- end stdout for script {!r} ---'.format ( script )
+      )
+   # -- end if stdout;
+
+   # log stderr
+   if output[1] and my_logger.isEnabledFor ( logging.WARNING ):
+      my_logger.warning (
+         '--- stderr for script {!r} ---'.format ( script )
+      )
+      for line in roverlay.strutil.pipe_lines ( output[1], use_filter=True ):
+         my_logger.warning ( line )
+      my_logger.warning (
+         '--- end stderr for script {!r} ---'.format ( script )
+      )
+   # --- end if stderr;
+
+   if return_success:
+      if script_call.returncode == os.EX_OK:
+         my_logger.debug ( "script {!r}: success".format ( script ) )
+         return True
+      else:
+         my_logger.warning (
+            "script {!r} returned {}".format (
+               script, script_call.returncode
+            )
+         )
+         return False
+   else:
+      return script_call
+# --- end of run_script (...) ---


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
  2013-07-10 15:10 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
@ 2013-07-10 16:16 ` André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-07-10 16:16 UTC (permalink / raw
  To: gentoo-commits

commit:     e27a07c62d33a317562f6623600b4ad4b4a4496e
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Jul 10 13:34:51 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Jul 10 13:34:51 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=e27a07c6

roverlay/tools/ebuild: doebuild_fetch_and_manifest

A combined fetch/manifest command which can be used when importing ebuilds.

---
 roverlay/tools/ebuild.py | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/roverlay/tools/ebuild.py b/roverlay/tools/ebuild.py
index e8f7e37..0ca0b8a 100644
--- a/roverlay/tools/ebuild.py
+++ b/roverlay/tools/ebuild.py
@@ -20,9 +20,15 @@ _EBUILD_CMDV = (
 def doebuild (
    ebuild_file, command, logger, env=None, opts=(), return_success=True
 ):
-   logger.debug ( "doebuild: {c}, {e!r}".format ( e=ebuild_file, c=command ) )
+   if isinstance ( command, str ):
+      cmdv = ( _EBUILD_CMDV + opts + ( ebuild_file, command ) )
+   else:
+      cmdv = ( _EBUILD_CMDV + opts + ( ebuild_file, ) + command )
+
+   logger.debug ( "doebuild: {cmdv}".format ( cmdv=cmdv ) )
+
    return roverlay.tools.runcmd.run_command (
-      cmdv           = ( _EBUILD_CMDV + opts + ( ebuild_file, command ) ),
+      cmdv           = cmdv,
       env            = env,
       logger         = logger,
       return_success = return_success
@@ -54,3 +60,16 @@ def doebuild_fetch (
       return_success = return_success,
    )
 # --- end of doebuild_fetch (...) ---
+
+def doebuild_fetch_and_manifest (
+   ebuild_file, logger, env=None, opts=(), return_success=True
+):
+   return doebuild (
+      ebuild_file    = ebuild_file,
+      command        = ( "fetch", "manifest" ),
+      logger         = logger,
+      env            = env,
+      opts           = opts,
+      return_success = return_success,
+   )
+# --- end of doebuild_fetch_and_manifest (...) ---


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
  2013-07-11 16:44 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
@ 2013-07-11 16:29 ` André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-07-11 16:29 UTC (permalink / raw
  To: gentoo-commits

commit:     6e32c4e171d304149425ab081c0105995160ba17
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Jul 11 16:25:37 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Jul 11 16:25:37 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=6e32c4e1

fix minor typo in roverlay/tools/shenv

---
 roverlay/tools/shenv.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index f732040..5ae0f25 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -335,7 +335,7 @@ def run_script ( script, phase, return_success=False, logger=None ):
       my_logger.info ( log_snip_here.format ( "stdout" ) )
       for line in roverlay.strutil.pipe_lines ( output[0], use_filter=True ):
          my_logger.info ( line )
-      my_logger.info ( log_snip_here.format ( "end stdoutt" ) )
+      my_logger.info ( log_snip_here.format ( "end stdout" ) )
    # -- end if stdout;
 
    # log stderr


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-07-29 14:56 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-07-29 14:56 UTC (permalink / raw
  To: gentoo-commits

commit:     bc4fe040fcf71f9f0f74d0f449f85811d23dbeaa
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Jul 29 14:52:34 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Jul 29 14:52:34 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=bc4fe040

shell env: export STATS_DB if set

---
 roverlay/tools/shenv.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index 6fcaab3..e9b1bad 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -146,6 +146,18 @@ def setup_env():
    def setup_conf ( k, c ):
       env [k] = roverlay.config.get_or_fail ( c )
 
+   def setup_conf_optional ( k, c, fallback=None ):
+      value = roverlay.config.get ( k )
+      if value is not None:
+         env [k] = value
+         return True
+      elif fallback is not None:
+         env [k] = str ( fallback )
+         return False
+      else:
+         return None
+   # --- end of setup_conf_optional (...) ---
+
    def setup_self ( k, c ):
       env[k] = env[c]
 
@@ -184,8 +196,12 @@ def setup_env():
    # str::dirpath $DISTROOT
    setup_conf ( 'DISTROOT', 'OVERLAY.DISTDIR.root' )
 
+   # str::dirpath $WORKDIR
    setup_conf ( 'WORKDIR', 'CACHEDIR.root' )
 
+   # str::filepath $STATS_DB (optional)
+   setup_conf_optional ( 'STATS_DB', 'RRD_DB.file' )
+
    # str::dirpath $TMPDIR := <default>
    setup (
       'TMPDIR',


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-08-02 10:34 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-08-02 10:34 UTC (permalink / raw
  To: gentoo-commits

commit:     e7d0acb0f3de8345a6f84354f7c1a8fa58d245bc
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Fri Aug  2 10:21:01 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Fri Aug  2 10:21:01 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=e7d0acb0

roverlay/tools/shenv: export HAS_CHANGES

---
 roverlay/tools/shenv.py | 56 +++++++++++++++++++++++++------------------------
 1 file changed, 29 insertions(+), 27 deletions(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index e9b1bad..9ee3af6 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -15,6 +15,7 @@ import time
 import roverlay.config
 import roverlay.strutil
 import roverlay.util
+import roverlay.stats.collector
 
 
 # _SHELL_ENV, _SHELL_INTPR are created when calling run_script()
@@ -94,6 +95,14 @@ NULL_PHASE = 'null'
 #  depends on log level
 #
 
+# @typedef shbool is SH_TRUE|SH_FALSE, where:
+SH_TRUE  = 'y'
+SH_FALSE = 'n'
+
+def shbool ( value ):
+   """Converts value into a shbool."""
+   return SH_TRUE if value else SH_FALSE
+# --- end of shbool (...) ---
 
 def setup_env():
    """Returns a 'well-defined' env dict for running scripts."""
@@ -102,15 +111,6 @@ def setup_env():
    SHLIB_DIRNAME      = 'shlib'
    SHFUNC_FILENAME    = 'functions.sh'
 
-   # @typedef shbool is SH_TRUE|SH_FALSE, where:
-   SH_TRUE  = 'y'
-   SH_FALSE = 'n'
-
-   def shbool ( value ):
-      """Converts value into a shbool."""
-      return SH_TRUE if value else SH_FALSE
-   # --- end of shbool (...) ---
-
    # import os.environ
    if roverlay.config.get ( "SHELL_ENV.filter_env", True ):
       # (keepenv does not support wildcars)
@@ -307,7 +307,7 @@ def setup_env():
    return env
 # --- end of setup_env (...) ---
 
-def get_env ( copy=False ):
+def make_env ( copy=False ):
    global _SHELL_ENV
    if _SHELL_ENV is None:
       _SHELL_ENV = setup_env()
@@ -316,23 +316,31 @@ def get_env ( copy=False ):
       return dict ( _SHELL_ENV )
    else:
       return _SHELL_ENV
-# --- end of get_env (...) ---
+# --- end of make_env (...) ---
 
 def update_env ( **info ):
-   get_env().update ( info )
-   return _SHELL_ENV
+   env = make_env()
+   env.update ( info )
+   return env
 # --- end of update_env (...) ---
 
+def get_env ( phase, copy=True ):
+   env = make_env ( copy=copy )
+   if phase:
+      env ['ROVERLAY_PHASE'] = str ( phase ).lower()
+
+   env ['HAS_CHANGES'] = shbool (
+      roverlay.stats.collector.static.overlay_has_any_changes()
+   )
+
+   return env
+# --- end of get_env (...) ---
+
+
 def run_script_exec (
    script, phase, argv=(), initial_dir=None, use_path=True
 ):
-   if phase:
-      my_env = get_env ( copy=True )
-      my_env ['ROVERLAY_PHASE'] = str ( phase ).lower()
-   else:
-      # ref
-      my_env = get_env()
-   # -- end if phase;
+   my_env = get_env ( phase )
 
    if initial_dir:
       os.chdir ( initial_dir )
@@ -354,13 +362,7 @@ def run_script (
 #      _SHELL_INTPR = roverlay.config.get ( 'SHELL_ENV.shell', '/bin/sh' )
 
    my_logger = logger or LOGGER
-   if phase:
-      my_env = get_env ( copy=True )
-      my_env ['ROVERLAY_PHASE'] = str ( phase ).lower()
-   else:
-      # ref
-      my_env = get_env()
-   # -- end if phase;
+   my_env    = get_env ( phase )
 
    try:
       script_call = subprocess.Popen (


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-08-05 11:44 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-08-05 11:44 UTC (permalink / raw
  To: gentoo-commits

commit:     0d8483979f9ee5056a10a3fe016f7b29529440db
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Aug  5 09:08:43 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Aug  5 09:08:43 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=0d848397

roverlay/tools/shenv, run_script_exec(): set env

use DEBUG, VERBOSE, QUIET, NO_COLOR from os.environ

---
 roverlay/tools/shenv.py | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index 9ee3af6..326a421 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -104,6 +104,23 @@ def shbool ( value ):
    return SH_TRUE if value else SH_FALSE
 # --- end of shbool (...) ---
 
+def get_shbool ( value, empty_is_false=True, undef_is_false=True ):
+   """Converts a string into a shbool."""
+   if not value:
+      return SH_FALSE if empty_is_false else SH_TRUE
+   elif value in { SH_TRUE, SH_FALSE }:
+      return value
+   elif value.lower() in { 'yes', 'on', '1', 'enabled', 'true' }:
+      return SH_TRUE
+   elif undef_is_false:
+      return SH_FALSE
+   elif value.lower() in { 'no', 'off', '0', 'disabled', 'false' }:
+      return SH_FALSE
+   else:
+      return SH_TRUE
+# --- end of get_shbool (...) ---
+
+
 def setup_env():
    """Returns a 'well-defined' env dict for running scripts."""
 
@@ -338,10 +355,27 @@ def get_env ( phase, copy=True ):
 
 
 def run_script_exec (
-   script, phase, argv=(), initial_dir=None, use_path=True
+   script, phase, argv=(), initial_dir=None, use_path=True, extra_env=None,
 ):
    my_env = get_env ( phase )
 
+   shbool_from_env = (
+      lambda k, x, **kw: get_shbool ( os.environ.get ( k, x ), **kw )
+   )
+
+   # restore DEBUG/VERBOSE/QUIET
+   my_env ['DEBUG']   = shbool_from_env ( 'DEBUG',   SH_FALSE )
+   my_env ['VERBOSE'] = shbool_from_env ( 'VERBOSE', SH_TRUE  )
+   my_env ['QUIET']   = shbool_from_env ( 'QUIET',   SH_FALSE )
+
+   # reset NO_COLOR
+   my_env ['NO_COLOR'] = shbool_from_env (
+      'NO_COLOR', SH_TRUE, empty_is_false=False
+   )
+
+   if extra_env:
+      my_env.update ( extra_env )
+
    if initial_dir:
       os.chdir ( initial_dir )
 


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-08-13  8:56 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-08-13  8:56 UTC (permalink / raw
  To: gentoo-commits

commit:     3a58d432faa2cf5a9762dc73b14530fc3cad93fc
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Aug 13 08:36:01 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Aug 13 08:36:01 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=3a58d432

roverlay/tools/runcmd: run command, get output

---
 roverlay/tools/runcmd.py | 39 ++++++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/roverlay/tools/runcmd.py b/roverlay/tools/runcmd.py
index cda41d0..ea76d57 100644
--- a/roverlay/tools/runcmd.py
+++ b/roverlay/tools/runcmd.py
@@ -12,22 +12,35 @@ import roverlay.strutil
 
 DEBUG_TO_CONSOLE = False
 
-def run_command ( cmdv, env, logger, return_success=False ):
-   if DEBUG_TO_CONSOLE:
-      cmd_call = subprocess.Popen ( cmdv, stdin=None, env=env )
-   else:
-      cmd_call = subprocess.Popen (
-         cmdv,
-         stdin=None,
-         stdout=subprocess.PIPE,
-         stderr=subprocess.PIPE,
-         env=env,
-      )
+def run_command_get_output (
+   cmdv, env, debug_to_console=False, use_filter=True, filter_func=None
+):
+
+   # note that debug_to_console breaks calls that want to parse stdout
+   pipe_target = None if debug_to_console else subprocess.PIPE
+
+   cmd_call = subprocess.Popen (
+      cmdv, stdin=None, stdout=pipe_target, stderr=pipe_target, env=env
+   )
+   raw_output = cmd_call.communicate()
 
-   output = cmd_call.communicate()
+   output = [
+      (
+         list ( roverlay.strutil.pipe_lines (
+            stream, use_filter=True, filter_func=None
+         ) )
+         if stream is not None else None
+      ) for stream in raw_output
+   ]
+
+   return ( cmd_call, output )
+# --- end of run_command_get_output (...) ---
+
+def run_command ( cmdv, env, logger, return_success=False ):
+   cmd_call, output = run_command_get_output ( cmdv, env, DEBUG_TO_CONSOLE )
 
    # log stderr
-   if output [1] and logger.isEnabledFor ( logging.WARNING ):
+   if output[1] and logger.isEnabledFor ( logging.WARNING ):
       for line in roverlay.strutil.pipe_lines ( output [1], use_filter=True ):
          logger.warning ( line )
 


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-08-13  8:56 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-08-13  8:56 UTC (permalink / raw
  To: gentoo-commits

commit:     8b28ff444c3126058d746c1329e6854c78d32b1a
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Aug 13 08:36:25 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Aug 13 08:36:25 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=8b28ff44

roverlay/tools/shenv: restore_msg_vars()

break-out of run_script_exec()

---
 roverlay/tools/shenv.py | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index 326a421..1c481b6 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -353,25 +353,28 @@ def get_env ( phase, copy=True ):
    return env
 # --- end of get_env (...) ---
 
-
-def run_script_exec (
-   script, phase, argv=(), initial_dir=None, use_path=True, extra_env=None,
-):
-   my_env = get_env ( phase )
-
+def restore_msg_vars ( env ):
    shbool_from_env = (
       lambda k, x, **kw: get_shbool ( os.environ.get ( k, x ), **kw )
    )
 
    # restore DEBUG/VERBOSE/QUIET
-   my_env ['DEBUG']   = shbool_from_env ( 'DEBUG',   SH_FALSE )
-   my_env ['VERBOSE'] = shbool_from_env ( 'VERBOSE', SH_TRUE  )
-   my_env ['QUIET']   = shbool_from_env ( 'QUIET',   SH_FALSE )
+   env ['DEBUG']   = shbool_from_env ( 'DEBUG',   SH_FALSE )
+   env ['VERBOSE'] = shbool_from_env ( 'VERBOSE', SH_TRUE  )
+   env ['QUIET']   = shbool_from_env ( 'QUIET',   SH_FALSE )
 
    # reset NO_COLOR
-   my_env ['NO_COLOR'] = shbool_from_env (
+   env ['NO_COLOR'] = shbool_from_env (
       'NO_COLOR', SH_TRUE, empty_is_false=False
    )
+   return None
+# --- end of restore_msg_vars (...) ---
+
+def run_script_exec (
+   script, phase, argv=(), initial_dir=None, use_path=True, extra_env=None,
+):
+   my_env = get_env ( phase )
+   restore_msg_vars ( my_env )
 
    if extra_env:
       my_env.update ( extra_env )


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-08-14 14:56 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-08-14 14:56 UTC (permalink / raw
  To: gentoo-commits

commit:     ee04947562f151429497305a3fce9c3bbb88b125
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Aug 14 14:40:17 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Aug 14 14:40:17 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=ee049475

roverlay/tools/runcmd: get binary stdout

---
 roverlay/tools/runcmd.py | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/roverlay/tools/runcmd.py b/roverlay/tools/runcmd.py
index ea76d57..5f3a672 100644
--- a/roverlay/tools/runcmd.py
+++ b/roverlay/tools/runcmd.py
@@ -13,7 +13,8 @@ import roverlay.strutil
 DEBUG_TO_CONSOLE = False
 
 def run_command_get_output (
-   cmdv, env, debug_to_console=False, use_filter=True, filter_func=None
+   cmdv, env, debug_to_console=False, use_filter=True, filter_func=None,
+   binary_stdout=False,
 ):
 
    # note that debug_to_console breaks calls that want to parse stdout
@@ -24,14 +25,23 @@ def run_command_get_output (
    )
    raw_output = cmd_call.communicate()
 
-   output = [
-      (
+   if binary_stdout:
+      assert len ( raw_output ) == 2
+      output = [
+         raw_output[0],
          list ( roverlay.strutil.pipe_lines (
-            stream, use_filter=True, filter_func=None
+            raw_output[1], use_filter=use_filter, filter_func=filter_func
          ) )
-         if stream is not None else None
-      ) for stream in raw_output
-   ]
+      ]
+   else:
+      output = [
+         (
+            list ( roverlay.strutil.pipe_lines (
+               stream, use_filter=use_filter, filter_func=filter_func
+            ) )
+            if stream is not None else None
+         ) for stream in raw_output
+      ]
 
    return ( cmd_call, output )
 # --- end of run_command_get_output (...) ---


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-08-21 13:51 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-08-21 13:51 UTC (permalink / raw
  To: gentoo-commits

commit:     ef790e3c59c8dcd17b17fc684c6568e4fa435d86
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Aug 21 11:03:11 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Aug 21 11:03:11 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=ef790e3c

roverlay/tools/runcmd: don't decode pipe output twice

---
 roverlay/tools/runcmd.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/roverlay/tools/runcmd.py b/roverlay/tools/runcmd.py
index 5f3a672..8c38cbd 100644
--- a/roverlay/tools/runcmd.py
+++ b/roverlay/tools/runcmd.py
@@ -47,11 +47,13 @@ def run_command_get_output (
 # --- end of run_command_get_output (...) ---
 
 def run_command ( cmdv, env, logger, return_success=False ):
-   cmd_call, output = run_command_get_output ( cmdv, env, DEBUG_TO_CONSOLE )
+   cmd_call, output = run_command_get_output (
+      cmdv, env, DEBUG_TO_CONSOLE, use_filter=True
+   )
 
    # log stderr
    if output[1] and logger.isEnabledFor ( logging.WARNING ):
-      for line in roverlay.strutil.pipe_lines ( output [1], use_filter=True ):
+      for line in output[1]:
          logger.warning ( line )
 
    if return_success:


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-09-04 10:16 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-09-04 10:16 UTC (permalink / raw
  To: gentoo-commits

commit:     276c823634d7b61a5580dfaae4b7765bf7b89270
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Sep  4 10:14:33 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Sep  4 10:14:33 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=276c8236

roverlay/shenv: fix setup_conf_optional()

+ add $ROVERLAY_HOOKRC to the shell env

---
 roverlay/tools/shenv.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index 1c481b6..1b06ca9 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -164,7 +164,7 @@ def setup_env():
       env [k] = roverlay.config.get_or_fail ( c )
 
    def setup_conf_optional ( k, c, fallback=None ):
-      value = roverlay.config.get ( k )
+      value = roverlay.config.get ( c )
       if value is not None:
          env [k] = value
          return True
@@ -180,8 +180,10 @@ def setup_env():
 
    ## create shell vars
 
-   # str::filepath $ROVERLAY_EXE
+   # str::filepath $ROVERLAY_HOOKRC (optional)
+   setup_conf_optional ( 'ROVERLAY_HOOKRC', 'EVENT_HOOK.config_file' )
 
+   # str::filepath $ROVERLAY_EXE
    setup ( 'ROVERLAY_HELPER_EXE', sys.argv[0] )
    roverlay_exe = ( os.path.dirname ( sys.argv[0] ) + os.sep + 'roverlay' )
    if os.path.isfile ( roverlay_exe + '.py' ):


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2013-11-14 18:24 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2013-11-14 18:24 UTC (permalink / raw
  To: gentoo-commits

commit:     51e381ee1de2db29adcfa9091e85126385d622cd
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Nov 14 17:34:00 2013 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Nov 14 17:34:00 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=51e381ee

roverlay/tools/shenv.py: accept LC_ variables

Transfer/copy all environment variables starting with LC_ from os.environ to the
hook environment.

---
 roverlay/tools/shenv.py | 43 ++++++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index 5587e6d..a669907 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -4,6 +4,7 @@
 # Distributed under the terms of the GNU General Public License;
 # either version 2 of the License, or (at your option) any later version.
 
+import fnmatch
 import logging
 import os
 import sys
@@ -26,6 +27,18 @@ LOGGER       = logging.getLogger ( 'shenv' )
 
 NULL_PHASE = 'null'
 
+SHENV_VARS_TO_KEEP = frozenset ({
+   ( 'PATH', '/usr/local/bin:/usr/bin:/bin' ),
+   'PWD',
+   'LOGNAME',
+   'SHLVL',
+   'TERM',
+   'HOME',
+   'LANG',
+})
+
+SHENV_WILDCARD_VARS_TO_KEEP = frozenset ({ 'LC_?*', })
+
 
 # shell env dict quickref
 #  TODO: move this to doc/
@@ -126,6 +139,7 @@ def get_shbool ( value, empty_is_false=True, undef_is_false=True ):
 def setup_env():
    """Returns a 'well-defined' env dict for running scripts."""
 
+   _fnmatch           = fnmatch.fnmatch
    ROVERLAY_INSTALLED = roverlay.config.get_or_fail ( 'installed' )
    SHLIB_DIRNAME      = 'shlib'
    SHFUNC_FILENAME    = 'functions.sh'
@@ -133,24 +147,19 @@ def setup_env():
    # import os.environ
    if roverlay.config.get ( "SHELL_ENV.filter_env", True ):
       # (keepenv does not support wildcars)
-      env = roverlay.util.keepenv (
-         ( 'PATH', '/usr/local/bin:/usr/bin:/bin' ),
-         'PWD',
-         'LOGNAME',
-         'SHLVL',
-         'TERM',
-         'HOME',
-         'LANG',
-         'LC_CTYPE', 'LC_NUMERIC', 'LC_TIME', 'LC_COLLATE', 'LC_MONETARY',
-         'LC_MESSAGES', 'LC_PAPER', 'LC_NAME', 'LC_ADDRESS', 'LC_TELEPHONE',
-         'LC_MEASUREMENT', 'LC_IDENTIFICATION', 'LC_ALL'
-         # what else?
-      )
-      #
-      # LANG, LC_ALL, LC_COLLATE, ...
+      env = roverlay.util.keepenv ( SHENV_VARS_TO_KEEP )
+
+      for varname, value in os.environ.items():
+         if any (
+            _fnmatch ( varname, pattern )
+            for pattern in SHENV_WILDCARD_VARS_TO_KEEP
+         ):
+            env [varname] = value
+
+      # what else?
       #
-      # GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL,
-      # GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, ...
+      # GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, GIT_COMMITTER_NAME,
+      # GIT_COMMITTER_EMAIL, ... are set in the hookrc file
       #
       # GIT_EDITOR and GIT_ASKPASS are set to /bin/false here
       #


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2014-01-18 14:59 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2014-01-18 14:59 UTC (permalink / raw
  To: gentoo-commits

commit:     61ca14c2389bce71ecf177d45f150712445ee81e
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Jan 14 15:39:31 2014 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Jan 14 15:39:31 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=61ca14c2

fix 51e381ee1de2db29adcfa9091e85126385d622cd

Use keepenv_v(), not keepenv().

---
 roverlay/tools/shenv.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index a136bc4..c087f7a 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -147,7 +147,7 @@ def setup_env():
    # import os.environ
    if roverlay.config.get ( "SHELL_ENV.filter_env", True ):
       # (keepenv does not support wildcars)
-      env = roverlay.util.keepenv ( SHENV_VARS_TO_KEEP )
+      env = roverlay.util.keepenv_v ( SHENV_VARS_TO_KEEP )
 
       for varname, value in os.environ.items():
          if any (


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2015-01-26 17:41 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2015-01-26 17:41 UTC (permalink / raw
  To: gentoo-commits

commit:     f195588254e4f1516ec024973ebba3660622c3fa
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Dec 15 23:00:17 2014 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Dec 15 23:00:17 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=f1955882

add subprocess helper module

---
 roverlay/tools/subproc.py | 157 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 157 insertions(+)

diff --git a/roverlay/tools/subproc.py b/roverlay/tools/subproc.py
new file mode 100644
index 0000000..a62601f
--- /dev/null
+++ b/roverlay/tools/subproc.py
@@ -0,0 +1,157 @@
+# R overlay -- tools, subprocess helpers
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014 André Erdmann <dywi@mailerd.de>
+# Distributed under the terms of the GNU General Public License;
+# either version 2 of the License, or (at your option) any later version.
+
+import os
+import subprocess
+import sys
+
+__all__ = [
+   'get_subproc_devnull',
+   'subproc_send_term', 'subproc_send_kill',
+   'stop_subprocess', 'gracefully_stop_subprocess',
+   'create_subprocess', 'run_subprocess'
+]
+
+# python >= 3.3 has ProcessLookupError, use more generic exception otherwise
+if sys.hexversion >= 0x3030000:
+   _ProcessLookupError = ProcessLookupError
+else:
+   _ProcessLookupError = OSError
+
+# python >= 3.3:
+if hasattr ( subprocess, 'DEVNULL' ):
+   def get_subproc_devnull(mode=None):
+      """Returns a devnull object suitable
+      for passing it as stdin/stdout/stderr to subprocess.Popen().
+
+      Python 3.3 and later variant: uses subprocess.DEVNULL
+
+      arguments:
+      * mode -- ignored
+      """
+      return subprocess.DEVNULL
+else:
+   def get_subproc_devnull(mode='a+'):
+      """Returns a devnull object suitable
+      for passing it as stdin/stdout/stderr to subprocess.Popen().
+
+      Python 3.2 and earlier variant: opens os.devnull
+
+      arguments:
+      * mode -- mode for open(). Defaults to read/append
+      """
+      return open ( os.devnull, mode )
+# --
+
+def _proc_catch_lookup_err ( func ):
+   def wrapped ( proc ):
+      try:
+         func ( proc )
+      except _ProcessLookupError:
+         return False
+      return True
+
+   return wrapped
+
+@_proc_catch_lookup_err
+def subproc_send_term ( proc ):
+   proc.terminate()
+
+@_proc_catch_lookup_err
+def subproc_send_kill ( proc ):
+   proc.kill()
+
+
+def stop_subprocess ( proc, kill_timeout_cs=10 ):
+   """Terminates or kills a subprocess created by subprocess.Popen().
+
+   Sends SIGTERM first and sends SIGKILL if the process is still alive after
+   the given timeout.
+
+   Returns: None
+
+   arguments:
+   * proc            -- subprocess
+   * kill_timeout_cs -- max time to wait after terminate() before sending a
+                        kill signal (in centiseconds). Should be an int.
+                        Defaults to 10 (= 1s).
+   """
+   if not subproc_send_term ( proc ):
+      return
+
+   try:
+      for k in range ( kill_timeout_cs ):
+         if proc.poll() is not None:
+            return
+         time.sleep ( 0.1 )
+   except:
+      subproc_send_kill ( proc )
+   else:
+      subproc_send_kill ( proc )
+# --- end of stop_subprocess (...) ---
+
+def gracefully_stop_subprocess ( proc, **kill_kwargs ):
+   try:
+      if subproc_send_term ( proc ):
+         proc.communicate()
+   except:
+      stop_subprocess ( proc, **kwargs )
+      raise
+
+def create_subprocess ( cmdv, **kwargs ):
+   """subprocess.Popen() wrapper that redirects stdin/stdout/stderr to
+   devnull or to a pipe if set to False/True.
+
+   Returns: subprocess
+
+   arguments:
+   * cmdv     --
+   * **kwargs --
+   """
+   devnull_obj = None
+
+   for key in { 'stdin', 'stdout', 'stderr' }:
+      if key not in kwargs:
+         pass
+      elif kwargs [key] is True:
+         kwargs [key] = subprocess.PIPE
+
+      elif kwargs [key] is False:
+         if devnull_obj is None:
+            devnull_obj = get_subproc_devnull()
+            assert devnull_obj is not None
+
+         kwargs [key] = devnull_obj
+      # else don't care
+   # --
+
+   return subprocess.Popen ( cmdv, **kwargs )
+# --- end of create_subprocess (...) ---
+
+def run_subprocess ( cmdv, kill_timeout_cs=10, **kwargs ):
+   """Calls create_subprocess() and waits for the process to exit.
+   Catches exceptions and terminates/kills the process in that case
+
+   Returns: 2-tuple ( subprocess, output )
+
+   arguments:
+   * cmdv            --
+   * kill_timeout_cs -- time to wait after SIGTERM before sending SIGKILL
+                        (in centiseconds), see stop_subprocess() for details
+                        Defaults to 10.
+   * **kwargs        --
+   """
+   proc = None
+   try:
+      proc   = create_subprocess ( cmdv, **kwargs )
+      output = proc.communicate()
+   except:
+      if proc is not None:
+         stop_subprocess ( proc, kill_timeout_cs=kill_timeout_cs )
+      raise
+
+   return ( proc, output )
+# --- end of run_subprocess (...) ---


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2015-01-26 17:41 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2015-01-26 17:41 UTC (permalink / raw
  To: gentoo-commits

commit:     60f3c871f6320e3b637d61f319c5960824567c82
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Tue Dec 16 00:17:10 2014 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Tue Dec 16 00:17:10 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=60f3c871

run non-user hooks with /dev/null as stdin

---
 roverlay/tools/shenv.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/roverlay/tools/shenv.py b/roverlay/tools/shenv.py
index 8f2cea2..5670354 100644
--- a/roverlay/tools/shenv.py
+++ b/roverlay/tools/shenv.py
@@ -29,6 +29,8 @@ LOGGER       = logging.getLogger ( 'shenv' )
 
 NULL_PHASE = 'null'
 
+SHENV_PHASES_WITH_STDIN = frozenset ({ 'user', })
+
 SHENV_VARS_TO_KEEP = frozenset ({
    ( 'PATH', '/usr/local/bin:/usr/bin:/bin' ),
    'PWD',
@@ -348,7 +350,7 @@ def run_script_exec (
 
 def run_script (
    script, phase, argv=(), return_success=False, logger=None,
-   log_output=True, initial_dir=None, allow_stdin=True
+   log_output=True, initial_dir=None
 ):
 #   global _SHELL_INTPR
 #   if _SHELL_INTPR is None:
@@ -360,7 +362,11 @@ def run_script (
    script_call, output = _run_subprocess (
       # ( _SHELL_INTPR, script, ),
       ( script, ) + argv,
-      stdin      = None if allow_stdin else False,
+      stdin      = (
+         None if (
+            my_env ['ROVERLAY_PHASE'] in SHENV_PHASES_WITH_STDIN
+         ) else False
+      ),
       stdout     = subprocess.PIPE if log_output else None,
       stderr     = subprocess.PIPE if log_output else None,
       cwd        = my_env ['S'] if initial_dir is None else initial_dir,


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2015-01-26 17:41 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2015-01-26 17:41 UTC (permalink / raw
  To: gentoo-commits

commit:     cff8c8dd63384b8b38375168a4859fd0a78f3858
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Dec 15 23:07:40 2014 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Dec 15 23:07:40 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=cff8c8dd

run commands without stdin by default

roverlay.tools->run_command(): let stdin default to /dev/null

---
 roverlay/tools/runcmd.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/roverlay/tools/runcmd.py b/roverlay/tools/runcmd.py
index 7561669..08e1bda 100644
--- a/roverlay/tools/runcmd.py
+++ b/roverlay/tools/runcmd.py
@@ -16,7 +16,7 @@ DEBUG_TO_CONSOLE = False
 
 def run_command_get_output (
    cmdv, env, debug_to_console=False, use_filter=True, filter_func=None,
-   binary_stdout=False, stdin=None
+   binary_stdout=False, stdin=False
 ):
    # note that debug_to_console breaks calls that want to parse stdout
    pipe_target = None if debug_to_console else subprocess.PIPE
@@ -46,9 +46,9 @@ def run_command_get_output (
    return ( cmd_call, output )
 # --- end of run_command_get_output (...) ---
 
-def run_command ( cmdv, env, logger, return_success=False ):
+def run_command ( cmdv, env, logger, return_success=False, **kwargs ):
    cmd_call, output = run_command_get_output (
-      cmdv, env, DEBUG_TO_CONSOLE, use_filter=True
+      cmdv, env, DEBUG_TO_CONSOLE, use_filter=True, **kwargs
    )
 
    # log stderr


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/
@ 2015-02-18  2:19 André Erdmann
  0 siblings, 0 replies; 17+ messages in thread
From: André Erdmann @ 2015-02-18  2:19 UTC (permalink / raw
  To: gentoo-commits

commit:     91474197a0ad11ad8169e8dbf582c9a29ab67cf9
Author:     André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Feb 18 02:16:07 2015 +0000
Commit:     André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Feb 18 02:16:07 2015 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=91474197

fix 8647dac1ec5ad63cd44a8dfc121b8b0942b688ad

add missing module / kwargs=>kill_kwargs typo

---
 roverlay/tools/subproc.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/roverlay/tools/subproc.py b/roverlay/tools/subproc.py
index a62601f..b5fa476 100644
--- a/roverlay/tools/subproc.py
+++ b/roverlay/tools/subproc.py
@@ -7,6 +7,7 @@
 import os
 import subprocess
 import sys
+import time
 
 __all__ = [
    'get_subproc_devnull',
@@ -98,7 +99,7 @@ def gracefully_stop_subprocess ( proc, **kill_kwargs ):
       if subproc_send_term ( proc ):
          proc.communicate()
    except:
-      stop_subprocess ( proc, **kwargs )
+      stop_subprocess ( proc, **kill_kwargs )
       raise
 
 def create_subprocess ( cmdv, **kwargs ):


^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2015-02-18  2:19 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-18 14:59 [gentoo-commits] proj/R_overlay:master commit in: roverlay/tools/ André Erdmann
  -- strict thread matches above, loose matches on Subject: below --
2015-02-18  2:19 André Erdmann
2015-01-26 17:41 André Erdmann
2015-01-26 17:41 André Erdmann
2015-01-26 17:41 André Erdmann
2013-11-14 18:24 André Erdmann
2013-09-04 10:16 André Erdmann
2013-08-21 13:51 André Erdmann
2013-08-14 14:56 André Erdmann
2013-08-13  8:56 André Erdmann
2013-08-13  8:56 André Erdmann
2013-08-05 11:44 André Erdmann
2013-08-02 10:34 André Erdmann
2013-07-29 14:56 André Erdmann
2013-07-11 16:44 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-11 16:29 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-07-10 15:10 [gentoo-commits] proj/R_overlay:gsoc13/next " André Erdmann
2013-07-10 16:16 ` [gentoo-commits] proj/R_overlay:master " André Erdmann
2013-06-22 15:24 André Erdmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox