From 64209dda977c907da435faed6c9e030a50c520ab Mon Sep 17 00:00:00 2001
From: Peter Josef Scheibel <scheibel1@llnl.gov>
Date: Tue, 26 Nov 2019 18:42:21 -0800
Subject: [PATCH] Allow repeated invocations of 'mirror create'

When creating a cosmetic symlink for a resource in a mirror, remove
it if it already exists. The symlink is removed in case the logic to
create the symlink has changed.
---
 lib/spack/spack/caches.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/spack/spack/caches.py b/lib/spack/spack/caches.py
index a7910905bc..61a47eaa6e 100644
--- a/lib/spack/spack/caches.py
+++ b/lib/spack/spack/caches.py
@@ -70,7 +70,13 @@ def symlink(self, mirror_ref):
         relative_dst = os.path.relpath(
             mirror_ref.storage_path,
             start=os.path.dirname(cosmetic_path))
+
         if not os.path.exists(cosmetic_path):
+            if os.path.lexists(cosmetic_path):
+                # In this case the link itself exists but it is broken: remove
+                # it and recreate it (in order to fix any symlinks broken prior
+                # to https://github.com/spack/spack/pull/13908)
+                os.unlink(cosmetic_path)
             mkdirp(os.path.dirname(cosmetic_path))
             os.symlink(relative_dst, cosmetic_path)
 
-- 
GitLab