diff options
Diffstat (limited to 'utils.py')
-rw-r--r-- | utils.py | 25 |
1 files changed, 22 insertions, 3 deletions
@@ -270,9 +270,28 @@ def copyfile(src, dst, force=True, vars=None): log.info("**Skiping copy file %s to %s. Source does not exists." % (src, dst)) return - log.info("Copying file %s to %s." % (src, dst)) - - shutil.copy2(src, dst) + if not os.path.islink(src): + log.info("Copying file %s to %s." % (src, dst)) + shutil.copy2(src, dst) + else: + linkTargetPath = os.path.realpath(src) + if os.path.dirname(linkTargetPath) == os.path.dirname(src): + linkTarget = os.path.basename(linkTargetPath) + linkName = os.path.basename(src) + currentDirectory = os.getcwd() + try: + targetDir = dst if os.path.isdir(dst) else os.path.dirname(dst) + os.chdir(targetDir) + if os.path.exists(linkName): + os.remove(linkName) + log.info("Symlinking %s -> %s in %s." % (linkName, linkTarget, targetDir)) + os.symlink(linkTarget, linkName) + except OSError: + log.error("%s -> %s: Error creating symlink" % (linkName, linkTarget)) + finally: + os.chdir(currentDirectory) + else: + log.error("%s -> %s: Can only create symlinks within the same directory" % (src, linkTargetPath)) return dst |