summaryrefslogtreecommitdiffstats
path: root/debuginfo-tests/dexter/dex/utils/WorkingDirectory.py
diff options
context:
space:
mode:
Diffstat (limited to 'debuginfo-tests/dexter/dex/utils/WorkingDirectory.py')
-rw-r--r--debuginfo-tests/dexter/dex/utils/WorkingDirectory.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/debuginfo-tests/dexter/dex/utils/WorkingDirectory.py b/debuginfo-tests/dexter/dex/utils/WorkingDirectory.py
new file mode 100644
index 00000000000..e1862f2db72
--- /dev/null
+++ b/debuginfo-tests/dexter/dex/utils/WorkingDirectory.py
@@ -0,0 +1,46 @@
+# DExTer : Debugging Experience Tester
+# ~~~~~~ ~ ~~ ~ ~~
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+"""Create/set a temporary working directory for some operations."""
+
+import os
+import shutil
+import tempfile
+import time
+
+from dex.utils.Exceptions import Error
+
+
+class WorkingDirectory(object):
+ def __init__(self, context, *args, **kwargs):
+ self.context = context
+ self.orig_cwd = os.getcwd()
+
+ dir_ = kwargs.get('dir', None)
+ if dir_ and not os.path.isdir(dir_):
+ os.makedirs(dir_, exist_ok=True)
+ self.path = tempfile.mkdtemp(*args, **kwargs)
+
+ def __enter__(self):
+ os.chdir(self.path)
+ return self
+
+ def __exit__(self, *args):
+ os.chdir(self.orig_cwd)
+ if self.context.options.save_temps:
+ self.context.o.blue('"{}" left in place [--save-temps]\n'.format(
+ self.path))
+ return
+
+ exception = AssertionError('should never be raised')
+ for _ in range(100):
+ try:
+ shutil.rmtree(self.path)
+ return
+ except OSError as e:
+ exception = e
+ time.sleep(0.1)
+ raise Error(exception)
OpenPOWER on IntegriCloud