summaryrefslogtreecommitdiff
path: root/setuptools/_distutils/dir_util.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2022-06-12 18:05:03 -0400
committerJason R. Coombs <jaraco@jaraco.com>2022-06-12 18:05:03 -0400
commit423f1829b5e8b2213492e4f023f26a7c26f0b287 (patch)
tree14a73d41f42c5d3a3effce1dd47ee3af3c07d689 /setuptools/_distutils/dir_util.py
parent48adabe567806c808fdede5afc8c57f68c4f9755 (diff)
parent75ed79d1ad1bfbb30dd684cd3cc55cb1139dc31b (diff)
downloadpython-setuptools-git-423f1829b5e8b2213492e4f023f26a7c26f0b287.tar.gz
Merge pypa/distutils@75ed79d
Diffstat (limited to 'setuptools/_distutils/dir_util.py')
-rw-r--r--setuptools/_distutils/dir_util.py63
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.