From dd40f5ed9fbdb80ee636fb1e1489dae3583c1bb9 Mon Sep 17 00:00:00 2001 From: Jens Harbott <j.harbott@x-ion.de> Date: Mon, 26 Aug 2019 13:50:03 +0000 Subject: [PATCH] Fix handling of dangling symlink on manifest generation There may be broken symlinks within the log directories, those fail with an error when os.stat() is executed on them. Let's just skip those. Change-Id: I3e6982c53a08f57ac0e592b8a0041bbb39812d1f --- .../library/generate_manifest.py | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/roles/generate-zuul-manifest/library/generate_manifest.py b/roles/generate-zuul-manifest/library/generate_manifest.py index 378607f45..dfb13d43a 100644 --- a/roles/generate-zuul-manifest/library/generate_manifest.py +++ b/roles/generate-zuul-manifest/library/generate_manifest.py @@ -67,14 +67,19 @@ def walk(root, original_root=None): mime_guess, encoding = mimetypes.guess_type(path) if not mime_guess: mime_guess = 'text/plain' - st = os.stat(path) - last_modified = st[stat.ST_MTIME] - size = st[stat.ST_SIZE] - data.append(dict(name=f, - mimetype=mime_guess, - encoding=encoding, - last_modified=last_modified, - size=size)) + # This may fail e.g. for dangling symlinks, just ignore those + try: + st = os.stat(path) + last_modified = st[stat.ST_MTIME] + size = st[stat.ST_SIZE] + data.append(dict(name=f, + mimetype=mime_guess, + encoding=encoding, + last_modified=last_modified, + size=size)) + except FileNotFoundError: + continue + return data