summaryrefslogtreecommitdiff
path: root/buildstream/utils.py
Commit message (Collapse)AuthorAgeFilesLines
...
* Ensure element permissions are set to euid and egid after stagingTristan Maat2017-07-041-0/+20
|
* utils.py: Optional 'terminate' argument to _call() private function.Tristan Van Berkom2017-07-031-16/+32
| | | | | | | | By default we brutally murder subprocess trees, but sometimes we know the nature of the tool we are using and know that it handles sigterm gracefully. This patch allows those cases to have a chance at graceful termination.
* utils.py: Rewording some docstrings for new glob() apiTristan Van Berkom2017-06-301-7/+7
|
* utils.py: Use proper reStructuredText notes in API docsTristan Van Berkom2017-06-301-15/+15
|
* utils.py: Improved glob() functionTristan Van Berkom2017-06-301-6/+98
| | | | | | | | | | | | | | | | | Instead of using PurePath from pathlib, we use a modified version of fnmatch.translate() to generate a regular expression. This has multiple advantages: * The private usage of regular expressions allows the Element internal splitting rules to more easily adapt to the new globbing syntax for split rules * With the glob function under our control, we can document it more clearly * We have support for bash 'globstar' mode, which allows recursive globs with double asterisk.
* utils.py: Add missing signal importJürg Billeter2017-06-291-0/+1
| | | | Fixes: 10a0b98d ("utils.py: Add _call()")
* utils.py: Added glob() utility.Tristan Van Berkom2017-06-291-0/+27
| | | | | | | | | The glob module from the standard library only allows glob pattern matching where there is a backing filesystem. This utility allows glob matching on a simple list of paths, and as such can be used to match things from an unextracted artifact or an unextracted tarball.
* utils.py: Better API for file list operationsTristan Van Berkom2017-06-291-40/+69
| | | | | | | | Instead of returning a tuple of two lists, return the new FileListResult object. This is better because it will allow us to enhance the result over time without breaking API.
* Revert "utils.py: Additional fix to _relative_symlink_target()"Tristan Van Berkom2017-06-291-6/+1
| | | | This reverts commit 9ae1e1a290f67628d4e68632618b0aa9aa92b4e3.
* utils.py: Additional fix to _relative_symlink_target()Tristan Van Berkom2017-06-281-1/+6
| | | | | | | | | | Since we merged MR 29 with a fix for resolving symlinks to realpaths, we should also use the real path of the staging directory to produce a relative path properly. If we are considering that staged symlinks link to symlinked paths inside the staging target, we must also consider that the staging area itself can be in a symliked directory.
* utils.py: Fix corner case in relative_symlink_path() that breaks buildsSam Thursfield2017-06-281-1/+1
| | | | | | | | | | | | | | | The goal of turning absolute symlink paths into relative ones is a noble one -- we want to avoid any chance of corrupting stuff on the host system. Symlinks pointing to /lib/ld.so or whatever can be dangerous (although by not running BuildStream as 'root' you are mostly protected anyway). Some Baserock builds were broken by this as it didn't take into account that the path to a symlink may itself contain symlinks. Adding an extra os.realpath() call is enough to fix this case. This was breaking the Baserock armv8l64 stage2 sysroot, where /lib/ld-linux-aarch64.so is a symlink (to /tools/lib/ld-linux-aarch64.so.1) and /lib is also a symlink (to /usr/lib).
* utils.py: Add _call()Jürg Billeter2017-06-271-0/+59
| | | | | subprocess.call() wrapper supporting suspend and resume based on plugin.__call().
* utils.py: Added _kill_proc_tree()Tristan Van Berkom2017-06-131-0/+26
| | | | A brutally murderous function to kill a process and all of it's children.
* utils.py: Removed the old signal handling routines in favor of _signals.pyTristan Van Berkom2017-04-071-78/+0
|
* Untangling _yaml and utils modules.Tristan Van Berkom2017-04-071-57/+3
| | | | | These had a circular import, which is only supported > python 3.5 but undesirable anyway.
* utils.py: Use os._exit() when exiting in SIGTERM in child forks.Tristan Van Berkom2017-03-161-1/+4
|
* utils.py: Documentation fixesTristan Van Berkom2017-03-161-18/+35
|
* utils.py: Some file processing related utility enhancementsTristan Van Berkom2017-03-151-59/+185
| | | | | | | | | | | | o list_relative_files no longer has include_directories which was always True, and now is better defined. o Added move_files() function to compliment copy_files() and link_files() o Added safe_remove() utility to remove a path, only if it exists, regardless of whether it is a directory or not, but not remove non-empty directories.
* utils.py: Spelling/wording fix in commentTristan Van Berkom2017-03-071-2/+2
|
* utils.py: Use SIGSTOP on self process, dont introduce more SIGTSTPTristan Van Berkom2017-03-061-4/+2
| | | | | This avoids any confusion as to if the master process can receive SIGTSTP events it wants to handle, from child processes.
* utils.py: Added _suspendable() context manager.Tristan Van Berkom2017-03-061-0/+30
| | | | | | | | | This takes care of handling SIGTSTP and SIGCONT, allowing the caller to pass one suspend() and one resume() function. This should be used in the core where we launch sub processes which will not go to sleep with the scheduler job, so that the handlers in place can manually put these child processes to sleep and wake them up later.
* utils.py: Added _terminator() context manager.Tristan Van Berkom2017-03-051-1/+47
| | | | | Parts of the core use this to perform some minimal cleanup and ensure proper process termination whenever a task is forcefully quit.
* utils.py: Use ChainMap properlyTristan Van Berkom2017-02-261-1/+5
| | | | | | | | | | When creating an overlay in which we can perform composites, it's important to create it with: copy = ChainMap({}, original) Modifications will occur in the first mapping in the chain, we must provide that first mapping with the prefixed {}.
* utils.py: Added _node_chain_copy() and _list_chain_copy()Tristan Van Berkom2017-02-261-1/+25
| | | | | These use collections.ChainMap and should be used in place of copy.deepcopy() as much as possible.
* utils.py: Ensure symlink targets exist while stagingTristan Van Berkom2017-02-221-3/+37
|
* utils.py: Fixes regarding staging of symlinksTristan Van Berkom2017-02-221-17/+35
| | | | | | | | | | | o When removing a file that is in the way, dont recursively nuke non-empty directories, warn instead o When staging a symlink, stage a relative path; so that when we stage files across the symlink boundary they never refer to the host o Fix list_relative_paths() to also report symlinks to directories
* Remove apostrophes from grammatically incorrect instances of "it's"Paul Sherwood2017-02-111-3/+3
|
* utils.py: Add _set_deterministic_mtime()Tristan Van Berkom2017-02-031-0/+35
| | | | Set a deterministic mtime recursively in a given directory.
* utils.py: More robust stagingTristan Van Berkom2017-01-181-11/+22
| | | | Handle overlaps a bit more violently but report about it.
* utils.py: Removed unused _format_duration()Tristan Van Berkom2017-01-131-8/+0
|
* utils.py: Added _format_duration() utilityTristan Van Berkom2017-01-121-0/+8
|
* utils.py: Removed the ordered option from _node_sanitize()Tristan Van Berkom2017-01-101-14/+13
| | | | Turns out every desired output of this is ordered at the moment.
* utils.py: _ordered_copy -> _node_santize()Tristan Van Berkom2017-01-101-8/+14
| | | | | Now by default strips away provenance but also optionally sorts it into a recursively ordered thingy.
* utils.py: Added private _generate_key() helperTristan Van Berkom2017-01-091-0/+43
| | | | | | This sorts dictionaries in the input recursively so that elements dont have to care too much about how they return stuff from plugin.get_unique_key()
* utils.py: Remove node parsing utilitiesTristan Van Berkom2017-01-071-82/+0
| | | | These are all now handled by the Plugin class
* utils.py: Fixed broken node_get_list_element() functionTristan Van Berkom2016-12-311-1/+1
|
* Added missing function from ported ybd copy/link toolsTristan Van Berkom2016-12-281-1/+47
|
* utils.py: Added utility url_directory_name()Tristan Van Berkom2016-12-191-0/+18
| | | | | | Used to create mirror directories for sources, these use fully qualified urls because a user may have multiple projects and we want to be damn sure they dont overlap.
* utils.py: Use OSError instead of IOError for nowTristan Van Berkom2016-12-181-4/+3
| | | | Since python 3.3 IOError (among a few others) are just aliases for OSError.
* utils.py: Added get_host_tool() utilityTristan Van Berkom2016-12-171-0/+22
| | | | | This is useful for plugins to assert presence of host tools so it should be publicly available
* utils.py: Added file handling utilitiesTristan Van Berkom2016-12-151-0/+186
| | | | | | | | o list_relative_paths() reports a sorted list of relative filenames o safe_copy() copy a file, unlinking the destination if it exists o safe_link() tries to create a hardlink but falls back to a copy o copy_files() copies files from one directory to another o link_files() links files from one directory to another, or falls back to copy
* utils.py: Added convenience function to iterate over YAML loaded dictTristan Van Berkom2016-12-141-0/+21
|
* Adding public utility functions for fetching yaml node valuesTristan Van Berkom2016-12-131-0/+82
| | | | | Needed by both Element and Source implementations, but let's not give them the whole _yaml API.
* Removed utils.py and created _yaml.py moduleTristan Van Berkom2016-11-281-77/+0
| | | | | | | The _yaml module has everything we need for parsing and validating loaded roundtrip yaml. This includes the dictionary compositing algorithm and also some provenance tracking to tell whence a node, member or list element was loaded from.
* utils.py: Docstring fixupTristan Van Berkom2016-11-151-7/+7
|
* Moved YAML dictionary loading to utils.pyTristan Van Berkom2016-11-151-0/+27
| | | | And renamed ContextError exception to a more general LoadError.
* Adding utils.pyTristan Van Berkom2016-11-141-0/+50
Utility box, now with method for recursively overriding dictionary values. We use this to load user config overrides but will also be using it for overriding defaults of elements from yaml