From b6f3408731f11c1e3cfee1a7f120de1bcff1b695 Mon Sep 17 00:00:00 2001 From: stevenknight Date: Tue, 23 Sep 2008 05:40:19 +0000 Subject: [PATCH] 1.5 / 2.[012] compatiblity: shutil.move() function. git-svn-id: http://scons.tigris.org/svn/scons/trunk@3459 fdb21ef1-2011-0410-befe-b5e4ea1792b1 --- src/engine/SCons/compat/__init__.py | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/engine/SCons/compat/__init__.py b/src/engine/SCons/compat/__init__.py index 59fdc3e3..9a58dc67 100644 --- a/src/engine/SCons/compat/__init__.py +++ b/src/engine/SCons/compat/__init__.py @@ -168,6 +168,46 @@ except AttributeError: del shlex import_as('_scons_shlex', 'shlex') + +import shutil +try: + shutil.move +except AttributeError: + # Pre-2.3 Python has no shutil.move() function. + # + # Cribbed from Python 2.5. + import os + + def move(src, dst): + """Recursively move a file or directory to another location. + + If the destination is on our current filesystem, then simply use + rename. Otherwise, copy src to the dst and then remove src. + A lot more could be done here... A look at a mv.c shows a lot of + the issues this implementation glosses over. + + """ + try: + os.rename(src, dst) + except OSError: + if os.path.isdir(src): + if shutil.destinsrc(src, dst): + raise Error, "Cannot move a directory '%s' into itself '%s'." % (src, dst) + shutil.copytree(src, dst, symlinks=True) + shutil.rmtree(src) + else: + shutil.copy2(src,dst) + os.unlink(src) + shutil.move = move + del move + + def destinsrc(src, dst): + src = os.path.abspath(src) + return os.path.abspath(dst)[:len(src)] == src + shutil.destinsrc = destinsrc + del destinsrc + + try: import subprocess except ImportError: -- 2.26.2