summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/contrib/tts/shellutils.py
diff options
context:
space:
mode:
authorMichael Wood <michael.g.wood@intel.com>2016-10-28 18:48:45 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-11-04 12:50:55 +0000
commit5bc6fa01e0581c703808597878244cf9a38cefba (patch)
treec4ead257ecf58e3937c3c354636466a7ebdbf163 /bitbake/lib/toaster/contrib/tts/shellutils.py
parent953b2f50f003a53fc387edfdeb8aa96d904526b2 (diff)
downloadpoky-5bc6fa01e0581c703808597878244cf9a38cefba.tar.gz
bitbake: toaster: Remove contrib tts
Remove the "Toaster test system". We don't need a home brew test "framework" as the django test runner is more than adequate. None of these tests here are currently working and have been obsoleted by the work done on unit and browser tests in ./tests/. (Bitbake rev: 7a82e45ca5c4d470f62f83e72d00cbe45baa1537) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/contrib/tts/shellutils.py')
-rw-r--r--bitbake/lib/toaster/contrib/tts/shellutils.py141
1 files changed, 0 insertions, 141 deletions
diff --git a/bitbake/lib/toaster/contrib/tts/shellutils.py b/bitbake/lib/toaster/contrib/tts/shellutils.py
deleted file mode 100644
index ce64c06340..0000000000
--- a/bitbake/lib/toaster/contrib/tts/shellutils.py
+++ /dev/null
@@ -1,141 +0,0 @@
1#!/usr/bin/python
2
3# ex:ts=4:sw=4:sts=4:et
4# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
5#
6# Copyright (C) 2015 Alexandru Damian for Intel Corp.
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License version 2 as
10# published by the Free Software Foundation.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License along
18# with this program; if not, write to the Free Software Foundation, Inc.,
19# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21# Utilities shared by tests and other common bits of code.
22
23import sys, os, subprocess, fcntl, errno
24import config
25from config import logger
26
27
28# License warning; this code is copied from the BitBake project, file bitbake/lib/bb/utils.py
29# The code is originally licensed GPL-2.0, and we redistribute it under still GPL-2.0
30
31# End of copy is marked with #ENDOFCOPY marker
32
33def mkdirhier(directory):
34 """Create a directory like 'mkdir -p', but does not complain if
35 directory already exists like os.makedirs
36 """
37
38 try:
39 os.makedirs(directory)
40 except OSError as exc:
41 if exc.errno != errno.EEXIST:
42 raise exc
43
44def lockfile(name, shared=False, retry=True):
45 """
46 Use the file fn as a lock file, return when the lock has been acquired.
47 Returns a variable to pass to unlockfile().
48 """
49 config.logger.debug("take lockfile %s", name)
50 dirname = os.path.dirname(name)
51 mkdirhier(dirname)
52
53 if not os.access(dirname, os.W_OK):
54 logger.error("Unable to acquire lock '%s', directory is not writable",
55 name)
56 sys.exit(1)
57
58 operation = fcntl.LOCK_EX
59 if shared:
60 operation = fcntl.LOCK_SH
61 if not retry:
62 operation = operation | fcntl.LOCK_NB
63
64 while True:
65 # If we leave the lockfiles lying around there is no problem
66 # but we should clean up after ourselves. This gives potential
67 # for races though. To work around this, when we acquire the lock
68 # we check the file we locked was still the lock file on disk.
69 # by comparing inode numbers. If they don't match or the lockfile
70 # no longer exists, we start again.
71
72 # This implementation is unfair since the last person to request the
73 # lock is the most likely to win it.
74
75 # pylint: disable=broad-except
76 # we disable the broad-except because we want to actually catch all possible exceptions
77 try:
78 lock_file = open(name, 'a+')
79 fileno = lock_file.fileno()
80 fcntl.flock(fileno, operation)
81 statinfo = os.fstat(fileno)
82 if os.path.exists(lock_file.name):
83 statinfo2 = os.stat(lock_file.name)
84 if statinfo.st_ino == statinfo2.st_ino:
85 return lock_file
86 lock_file.close()
87 except Exception as exc:
88 try:
89 lock_file.close()
90 except Exception as exc2:
91 config.logger.error("Failed to close the lockfile: %s", exc2)
92 config.logger.error("Failed to acquire the lockfile: %s", exc)
93 if not retry:
94 return None
95
96def unlockfile(lock_file):
97 """
98 Unlock a file locked using lockfile()
99 """
100 try:
101 # If we had a shared lock, we need to promote to exclusive before
102 # removing the lockfile. Attempt this, ignore failures.
103 fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX|fcntl.LOCK_NB)
104 os.unlink(lock_file.name)
105 except (IOError, OSError):
106 pass
107 fcntl.flock(lock_file.fileno(), fcntl.LOCK_UN)
108 lock_file.close()
109
110#ENDOFCOPY
111
112
113def mk_lock_filename():
114 our_name = os.path.basename(__file__)
115 our_name = ".%s" % ".".join(reversed(our_name.split(".")))
116 return config.LOCKFILE + our_name
117
118
119
120class ShellCmdException(Exception):
121 pass
122
123def run_shell_cmd(command, cwd=None):
124 if cwd is None:
125 cwd = os.getcwd()
126
127 config.logger.debug("_shellcmd: (%s) %s", cwd, command)
128 process = subprocess.Popen(command, cwd=cwd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
129 (out, err) = process.communicate()
130 process.wait()
131 if process.returncode:
132 if len(err) == 0:
133 err = "command: %s \n%s" % (command, out)
134 else:
135 err = "command: %s \n%s" % (command, err)
136 config.logger.warning("_shellcmd: error \n%s\n%s", out, err)
137 raise ShellCmdException(err)
138 else:
139 #config.logger.debug("localhostbecontroller: shellcmd success\n%s" % out)
140 return out
141