summaryrefslogtreecommitdiffstats
path: root/yocto-poky/bitbake/lib/toaster/contrib/tts/shellutils.py
diff options
context:
space:
mode:
Diffstat (limited to 'yocto-poky/bitbake/lib/toaster/contrib/tts/shellutils.py')
-rw-r--r--yocto-poky/bitbake/lib/toaster/contrib/tts/shellutils.py141
1 files changed, 0 insertions, 141 deletions
diff --git a/yocto-poky/bitbake/lib/toaster/contrib/tts/shellutils.py b/yocto-poky/bitbake/lib/toaster/contrib/tts/shellutils.py
deleted file mode 100644
index c2012edf8..000000000
--- a/yocto-poky/bitbake/lib/toaster/contrib/tts/shellutils.py
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/usr/bin/python
-
-# ex:ts=4:sw=4:sts=4:et
-# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
-#
-# Copyright (C) 2015 Alexandru Damian for Intel Corp.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# 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.
-
-# Utilities shared by tests and other common bits of code.
-
-import sys, os, subprocess, fcntl, errno
-import config
-from config import logger
-
-
-# License warning; this code is copied from the BitBake project, file bitbake/lib/bb/utils.py
-# The code is originally licensed GPL-2.0, and we redistribute it under still GPL-2.0
-
-# End of copy is marked with #ENDOFCOPY marker
-
-def mkdirhier(directory):
- """Create a directory like 'mkdir -p', but does not complain if
- directory already exists like os.makedirs
- """
-
- try:
- os.makedirs(directory)
- except OSError as exc:
- if exc.errno != errno.EEXIST:
- raise exc
-
-def lockfile(name, shared=False, retry=True):
- """
- Use the file fn as a lock file, return when the lock has been acquired.
- Returns a variable to pass to unlockfile().
- """
- config.logger.debug("take lockfile %s", name)
- dirname = os.path.dirname(name)
- mkdirhier(dirname)
-
- if not os.access(dirname, os.W_OK):
- logger.error("Unable to acquire lock '%s', directory is not writable",
- name)
- sys.exit(1)
-
- operation = fcntl.LOCK_EX
- if shared:
- operation = fcntl.LOCK_SH
- if not retry:
- operation = operation | fcntl.LOCK_NB
-
- while True:
- # If we leave the lockfiles lying around there is no problem
- # but we should clean up after ourselves. This gives potential
- # for races though. To work around this, when we acquire the lock
- # we check the file we locked was still the lock file on disk.
- # by comparing inode numbers. If they don't match or the lockfile
- # no longer exists, we start again.
-
- # This implementation is unfair since the last person to request the
- # lock is the most likely to win it.
-
- # pylint: disable=broad-except
- # we disable the broad-except because we want to actually catch all possible exceptions
- try:
- lock_file = open(name, 'a+')
- fileno = lock_file.fileno()
- fcntl.flock(fileno, operation)
- statinfo = os.fstat(fileno)
- if os.path.exists(lock_file.name):
- statinfo2 = os.stat(lock_file.name)
- if statinfo.st_ino == statinfo2.st_ino:
- return lock_file
- lock_file.close()
- except Exception as exc:
- try:
- lock_file.close()
- except Exception as exc2:
- config.logger.error("Failed to close the lockfile: %s", exc2)
- config.logger.error("Failed to acquire the lockfile: %s", exc)
- if not retry:
- return None
-
-def unlockfile(lock_file):
- """
- Unlock a file locked using lockfile()
- """
- try:
- # If we had a shared lock, we need to promote to exclusive before
- # removing the lockfile. Attempt this, ignore failures.
- fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX|fcntl.LOCK_NB)
- os.unlink(lock_file.name)
- except (IOError, OSError):
- pass
- fcntl.flock(lock_file.fileno(), fcntl.LOCK_UN)
- lock_file.close()
-
-#ENDOFCOPY
-
-
-def mk_lock_filename():
- our_name = os.path.basename(__file__)
- our_name = ".%s" % ".".join(reversed(our_name.split(".")))
- return config.LOCKFILE + our_name
-
-
-
-class ShellCmdException(Exception):
- pass
-
-def run_shell_cmd(command, cwd=None):
- if cwd is None:
- cwd = os.getcwd()
-
- config.logger.debug("_shellcmd: (%s) %s", cwd, command)
- process = subprocess.Popen(command, cwd=cwd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- (out, err) = process.communicate()
- process.wait()
- if process.returncode:
- if len(err) == 0:
- err = "command: %s \n%s" % (command, out)
- else:
- err = "command: %s \n%s" % (command, err)
- config.logger.warn("_shellcmd: error \n%s\n%s", out, err)
- raise ShellCmdException(err)
- else:
- #config.logger.debug("localhostbecontroller: shellcmd success\n%s" % out)
- return out
-
OpenPOWER on IntegriCloud