flake8 fixes for filesystem.py
This commit is contained in:
		@@ -22,28 +22,28 @@
 | 
			
		||||
# License along with this program; if not, write to the Free Software
 | 
			
		||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
			
		||||
##############################################################################
 | 
			
		||||
__all__ = ['set_install_permissions', 'install', 'install_tree', 'traverse_tree',
 | 
			
		||||
           'expand_user', 'working_dir', 'touch', 'touchp', 'mkdirp',
 | 
			
		||||
           'force_remove', 'join_path', 'ancestor', 'can_access', 'filter_file',
 | 
			
		||||
           'FileFilter', 'change_sed_delimiter', 'is_exe', 'force_symlink',
 | 
			
		||||
           'set_executable', 'copy_mode', 'unset_executable_mode',
 | 
			
		||||
           'remove_dead_links', 'remove_linked_tree', 'find_library_path',
 | 
			
		||||
           'fix_darwin_install_name','to_link_flags']
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import glob
 | 
			
		||||
import sys
 | 
			
		||||
import re
 | 
			
		||||
import shutil
 | 
			
		||||
import stat
 | 
			
		||||
import errno
 | 
			
		||||
import getpass
 | 
			
		||||
from contextlib import contextmanager, closing
 | 
			
		||||
from tempfile import NamedTemporaryFile
 | 
			
		||||
import subprocess
 | 
			
		||||
 | 
			
		||||
import llnl.util.tty as tty
 | 
			
		||||
from spack.util.compression import ALLOWED_ARCHIVE_TYPES
 | 
			
		||||
 | 
			
		||||
__all__ = ['set_install_permissions', 'install', 'install_tree',
 | 
			
		||||
           'traverse_tree',
 | 
			
		||||
           'expand_user', 'working_dir', 'touch', 'touchp', 'mkdirp',
 | 
			
		||||
           'force_remove', 'join_path', 'ancestor', 'can_access',
 | 
			
		||||
           'filter_file',
 | 
			
		||||
           'FileFilter', 'change_sed_delimiter', 'is_exe', 'force_symlink',
 | 
			
		||||
           'set_executable', 'copy_mode', 'unset_executable_mode',
 | 
			
		||||
           'remove_dead_links', 'remove_linked_tree', 'find_library_path',
 | 
			
		||||
           'fix_darwin_install_name', 'to_link_flags']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def filter_file(regex, repl, *filenames, **kwargs):
 | 
			
		||||
    """Like sed, but uses python regular expressions.
 | 
			
		||||
@@ -69,6 +69,7 @@ def filter_file(regex, repl, *filenames, **kwargs):
 | 
			
		||||
    # Allow strings to use \1, \2, etc. for replacement, like sed
 | 
			
		||||
    if not callable(repl):
 | 
			
		||||
        unescaped = repl.replace(r'\\', '\\')
 | 
			
		||||
 | 
			
		||||
        def replace_groups_with_groupid(m):
 | 
			
		||||
            def groupid_to_group(x):
 | 
			
		||||
                return m.group(int(x.group(1)))
 | 
			
		||||
@@ -157,9 +158,12 @@ def set_install_permissions(path):
 | 
			
		||||
def copy_mode(src, dest):
 | 
			
		||||
    src_mode = os.stat(src).st_mode
 | 
			
		||||
    dest_mode = os.stat(dest).st_mode
 | 
			
		||||
    if src_mode & stat.S_IXUSR: dest_mode |= stat.S_IXUSR
 | 
			
		||||
    if src_mode & stat.S_IXGRP: dest_mode |= stat.S_IXGRP
 | 
			
		||||
    if src_mode & stat.S_IXOTH: dest_mode |= stat.S_IXOTH
 | 
			
		||||
    if src_mode & stat.S_IXUSR:
 | 
			
		||||
        dest_mode |= stat.S_IXUSR
 | 
			
		||||
    if src_mode & stat.S_IXGRP:
 | 
			
		||||
        dest_mode |= stat.S_IXGRP
 | 
			
		||||
    if src_mode & stat.S_IXOTH:
 | 
			
		||||
        dest_mode |= stat.S_IXOTH
 | 
			
		||||
    os.chmod(dest, dest_mode)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -224,9 +228,10 @@ def force_remove(*paths):
 | 
			
		||||
    for path in paths:
 | 
			
		||||
        try:
 | 
			
		||||
            os.remove(path)
 | 
			
		||||
        except OSError, e:
 | 
			
		||||
        except OSError:
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@contextmanager
 | 
			
		||||
def working_dir(dirname, **kwargs):
 | 
			
		||||
    if kwargs.get('create', False):
 | 
			
		||||
@@ -240,7 +245,7 @@ def working_dir(dirname, **kwargs):
 | 
			
		||||
 | 
			
		||||
def touch(path):
 | 
			
		||||
    """Creates an empty file at the specified path."""
 | 
			
		||||
    with open(path, 'a') as file:
 | 
			
		||||
    with open(path, 'a'):
 | 
			
		||||
        os.utime(path, None)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -253,7 +258,7 @@ def touchp(path):
 | 
			
		||||
def force_symlink(src, dest):
 | 
			
		||||
    try:
 | 
			
		||||
        os.symlink(src, dest)
 | 
			
		||||
    except OSError as e:
 | 
			
		||||
    except OSError:
 | 
			
		||||
        os.remove(dest)
 | 
			
		||||
        os.symlink(src, dest)
 | 
			
		||||
 | 
			
		||||
@@ -275,7 +280,7 @@ def ancestor(dir, n=1):
 | 
			
		||||
 | 
			
		||||
def can_access(file_name):
 | 
			
		||||
    """True if we have read/write access to the file."""
 | 
			
		||||
    return os.access(file_name, os.R_OK|os.W_OK)
 | 
			
		||||
    return os.access(file_name, os.R_OK | os.W_OK)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def traverse_tree(source_root, dest_root, rel_path='', **kwargs):
 | 
			
		||||
@@ -343,13 +348,14 @@ def traverse_tree(source_root, dest_root, rel_path='', **kwargs):
 | 
			
		||||
 | 
			
		||||
        # Treat as a directory
 | 
			
		||||
        if os.path.isdir(source_child) and (
 | 
			
		||||
            follow_links or not os.path.islink(source_child)):
 | 
			
		||||
                follow_links or not os.path.islink(source_child)):
 | 
			
		||||
 | 
			
		||||
            # When follow_nonexisting isn't set, don't descend into dirs
 | 
			
		||||
            # in source that do not exist in dest
 | 
			
		||||
            if follow_nonexisting or os.path.exists(dest_child):
 | 
			
		||||
                tuples = traverse_tree(source_root, dest_root, rel_child, **kwargs)
 | 
			
		||||
                for t in tuples: yield t
 | 
			
		||||
                tuples = traverse_tree(source_root, dest_root, rel_child, **kwargs)  # NOQA: ignore=E501
 | 
			
		||||
                for t in tuples:
 | 
			
		||||
                    yield t
 | 
			
		||||
 | 
			
		||||
        # Treat as a file.
 | 
			
		||||
        elif not ignore(os.path.join(rel_path, f)):
 | 
			
		||||
@@ -379,6 +385,7 @@ def remove_dead_links(root):
 | 
			
		||||
            if not os.path.exists(real_path):
 | 
			
		||||
                os.unlink(path)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def remove_linked_tree(path):
 | 
			
		||||
    """
 | 
			
		||||
    Removes a directory and its contents.  If the directory is a
 | 
			
		||||
@@ -402,25 +409,25 @@ def fix_darwin_install_name(path):
 | 
			
		||||
    Fix install name of dynamic libraries on Darwin to have full path.
 | 
			
		||||
    There are two parts of this task:
 | 
			
		||||
    (i) use install_name('-id',...) to change install name of a single lib;
 | 
			
		||||
    (ii) use install_name('-change',...) to change the cross linking between libs.
 | 
			
		||||
    The function assumes that all libraries are in one folder and currently won't
 | 
			
		||||
    follow subfolders.
 | 
			
		||||
    (ii) use install_name('-change',...) to change the cross linking between
 | 
			
		||||
    libs. The function assumes that all libraries are in one folder and
 | 
			
		||||
    currently won't follow subfolders.
 | 
			
		||||
 | 
			
		||||
    Args:
 | 
			
		||||
        path: directory in which .dylib files are alocated
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    libs = glob.glob(join_path(path,"*.dylib"))
 | 
			
		||||
    libs = glob.glob(join_path(path, "*.dylib"))
 | 
			
		||||
    for lib in libs:
 | 
			
		||||
        # fix install name first:
 | 
			
		||||
        subprocess.Popen(["install_name_tool", "-id",lib,lib], stdout=subprocess.PIPE).communicate()[0]
 | 
			
		||||
        long_deps = subprocess.Popen(["otool", "-L",lib], stdout=subprocess.PIPE).communicate()[0].split('\n')
 | 
			
		||||
        subprocess.Popen(["install_name_tool", "-id", lib, lib], stdout=subprocess.PIPE).communicate()[0]  # NOQA: ignore=E501
 | 
			
		||||
        long_deps = subprocess.Popen(["otool", "-L", lib], stdout=subprocess.PIPE).communicate()[0].split('\n')  # NOQA: ignore=E501
 | 
			
		||||
        deps = [dep.partition(' ')[0][1::] for dep in long_deps[2:-1]]
 | 
			
		||||
        # fix all dependencies:
 | 
			
		||||
        for dep in deps:
 | 
			
		||||
            for loc in libs:
 | 
			
		||||
                if dep == os.path.basename(loc):
 | 
			
		||||
                    subprocess.Popen(["install_name_tool", "-change",dep,loc,lib], stdout=subprocess.PIPE).communicate()[0]
 | 
			
		||||
                    subprocess.Popen(["install_name_tool", "-change", dep, loc, lib], stdout=subprocess.PIPE).communicate()[0]  # NOQA: ignore=E501
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -433,7 +440,7 @@ def to_link_flags(library):
 | 
			
		||||
    dir  = os.path.dirname(library)
 | 
			
		||||
    # Asume   libXYZ.suffix
 | 
			
		||||
    name = os.path.basename(library)[3:].split(".")[0]
 | 
			
		||||
    res = '-L%s -l%s' % (dir,name)
 | 
			
		||||
    res = '-L%s -l%s' % (dir, name)
 | 
			
		||||
    return res
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user