diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2022-06-12 18:05:03 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2022-06-12 18:05:03 -0400 |
commit | 423f1829b5e8b2213492e4f023f26a7c26f0b287 (patch) | |
tree | 14a73d41f42c5d3a3effce1dd47ee3af3c07d689 /setuptools/_distutils/dir_util.py | |
parent | 48adabe567806c808fdede5afc8c57f68c4f9755 (diff) | |
parent | 75ed79d1ad1bfbb30dd684cd3cc55cb1139dc31b (diff) | |
download | python-setuptools-git-423f1829b5e8b2213492e4f023f26a7c26f0b287.tar.gz |
Merge pypa/distutils@75ed79d
Diffstat (limited to 'setuptools/_distutils/dir_util.py')
-rw-r--r-- | setuptools/_distutils/dir_util.py | 63 |
1 files changed, 46 insertions, 17 deletions
diff --git a/setuptools/_distutils/dir_util.py b/setuptools/_distutils/dir_util.py index d5cd8e3e..2c19b983 100644 --- a/setuptools/_distutils/dir_util.py +++ b/setuptools/_distutils/dir_util.py @@ -30,7 +30,8 @@ def mkpath(name, mode=0o777, verbose=1, dry_run=0): # Detect a common bug -- name is None if not isinstance(name, str): raise DistutilsInternalError( - "mkpath: 'name' must be a string (got %r)" % (name,)) + "mkpath: 'name' must be a string (got %r)" % (name,) + ) # XXX what's the better way to handle verbosity? print as we create # each directory in the path (the current behaviour), or only announce @@ -45,17 +46,17 @@ def mkpath(name, mode=0o777, verbose=1, dry_run=0): return created_dirs (head, tail) = os.path.split(name) - tails = [tail] # stack of lone dirs to create + tails = [tail] # stack of lone dirs to create while head and tail and not os.path.isdir(head): (head, tail) = os.path.split(head) - tails.insert(0, tail) # push next higher dir onto stack + tails.insert(0, tail) # push next higher dir onto stack # now 'head' contains the deepest directory that already exists # (that is, the child of 'head' in 'name' is the highest directory # that does *not* exist) for d in tails: - #print "head = %s, d = %s: " % (head, d), + # print "head = %s, d = %s: " % (head, d), head = os.path.join(head, d) abs_head = os.path.abspath(head) @@ -71,12 +72,14 @@ def mkpath(name, mode=0o777, verbose=1, dry_run=0): except OSError as exc: if not (exc.errno == errno.EEXIST and os.path.isdir(head)): raise DistutilsFileError( - "could not create '%s': %s" % (head, exc.args[-1])) + "could not create '%s': %s" % (head, exc.args[-1]) + ) created_dirs.append(head) _path_created[abs_head] = 1 return created_dirs + def create_tree(base_dir, files, mode=0o777, verbose=1, dry_run=0): """Create all the empty directories under 'base_dir' needed to put 'files' there. @@ -96,8 +99,17 @@ def create_tree(base_dir, files, mode=0o777, verbose=1, dry_run=0): for dir in sorted(need_dir): mkpath(dir, mode, verbose=verbose, dry_run=dry_run) -def copy_tree(src, dst, preserve_mode=1, preserve_times=1, - preserve_symlinks=0, update=0, verbose=1, dry_run=0): + +def copy_tree( + src, + dst, + preserve_mode=1, + preserve_times=1, + preserve_symlinks=0, + update=0, + verbose=1, + dry_run=0, +): """Copy an entire directory tree 'src' to a new location 'dst'. Both 'src' and 'dst' must be directory names. If 'src' is not a @@ -120,8 +132,7 @@ def copy_tree(src, dst, preserve_mode=1, preserve_times=1, from distutils.file_util import copy_file if not dry_run and not os.path.isdir(src): - raise DistutilsFileError( - "cannot copy tree '%s': not a directory" % src) + raise DistutilsFileError("cannot copy tree '%s': not a directory" % src) try: names = os.listdir(src) except OSError as e: @@ -129,7 +140,8 @@ def copy_tree(src, dst, preserve_mode=1, preserve_times=1, names = [] else: raise DistutilsFileError( - "error listing files in '%s': %s" % (src, e.strerror)) + "error listing files in '%s': %s" % (src, e.strerror) + ) if not dry_run: mkpath(dst, verbose=verbose) @@ -154,27 +166,43 @@ def copy_tree(src, dst, preserve_mode=1, preserve_times=1, elif os.path.isdir(src_name): outputs.extend( - copy_tree(src_name, dst_name, preserve_mode, - preserve_times, preserve_symlinks, update, - verbose=verbose, dry_run=dry_run)) + copy_tree( + src_name, + dst_name, + preserve_mode, + preserve_times, + preserve_symlinks, + update, + verbose=verbose, + dry_run=dry_run, + ) + ) else: - copy_file(src_name, dst_name, preserve_mode, - preserve_times, update, verbose=verbose, - dry_run=dry_run) + copy_file( + src_name, + dst_name, + preserve_mode, + preserve_times, + update, + verbose=verbose, + dry_run=dry_run, + ) outputs.append(dst_name) return outputs + def _build_cmdtuple(path, cmdtuples): """Helper for remove_tree().""" for f in os.listdir(path): - real_f = os.path.join(path,f) + real_f = os.path.join(path, f) if os.path.isdir(real_f) and not os.path.islink(real_f): _build_cmdtuple(real_f, cmdtuples) else: cmdtuples.append((os.remove, real_f)) cmdtuples.append((os.rmdir, path)) + def remove_tree(directory, verbose=1, dry_run=0): """Recursively remove an entire directory tree. @@ -199,6 +227,7 @@ def remove_tree(directory, verbose=1, dry_run=0): except OSError as exc: log.warn("error removing %s: %s", directory, exc) + def ensure_relative(path): """Take the full path 'path', and make it a relative path. |