From aa14fb15fae6447ae644b85ac7de0190ff643322 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Tue, 3 Nov 2020 22:22:44 +0100 Subject: [PATCH 1/3] implement DOTDROP_TMPDIR env for #268 --- dotdrop/utils.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/dotdrop/utils.py b/dotdrop/utils.py index 6048952..0435973 100644 --- a/dotdrop/utils.py +++ b/dotdrop/utils.py @@ -19,6 +19,10 @@ from dotdrop.logger import Logger LOG = Logger() STAR = '*' +# the environment variable for temporary +ENV_TEMP = 'DOTDROP_TMPDIR' +# the temporary directory +TMPDIR = None # files dotdrop refuses to remove DONOTDELETE = [ @@ -87,20 +91,39 @@ def diff(original, modified, raw=True, def get_tmpdir(): - """create a temporary directory""" + """create and return the temporary directory""" + global TMPDIR + if TMPDIR: + return TMPDIR + t = _get_tmpdir() + TMPDIR = t + return t + + +def _get_tmpdir(): + """create the tmpdir""" + if ENV_TEMP in os.environ: + t = os.environ[ENV_TEMP] + t = os.path.expanduser(t) + t = os.path.abspath(t) + t = os.path.normpath(t) + os.makedirs(t, exist_ok=True) + return t return tempfile.mkdtemp(prefix='dotdrop-') def get_tmpfile(): """create a temporary file""" - (_, path) = tempfile.mkstemp(prefix='dotdrop-') + tmpdir = get_tmpdir() + (_, path) = tempfile.mkstemp(prefix='dotdrop-', dir=tmpdir) return path def get_unique_tmp_name(): """get a unique file name (not created)""" unique = str(uuid.uuid4()) - return os.path.join(tempfile.gettempdir(), unique) + tmpdir = get_tmpdir() + return os.path.join(tmpdir, unique) def remove(path, logger=None): From 6d0f42f1f97bae6a3519835eeb35bed91a01864b Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Wed, 4 Nov 2020 09:24:35 +0100 Subject: [PATCH 2/3] handle fail in tmpdir creation --- dotdrop/utils.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/dotdrop/utils.py b/dotdrop/utils.py index 0435973..9ce7886 100644 --- a/dotdrop/utils.py +++ b/dotdrop/utils.py @@ -102,13 +102,16 @@ def get_tmpdir(): def _get_tmpdir(): """create the tmpdir""" - if ENV_TEMP in os.environ: - t = os.environ[ENV_TEMP] - t = os.path.expanduser(t) - t = os.path.abspath(t) - t = os.path.normpath(t) - os.makedirs(t, exist_ok=True) - return t + try: + if ENV_TEMP in os.environ: + t = os.environ[ENV_TEMP] + t = os.path.expanduser(t) + t = os.path.abspath(t) + t = os.path.normpath(t) + os.makedirs(t, exist_ok=True) + return t + except Exception: + pass return tempfile.mkdtemp(prefix='dotdrop-') From c8f5834e0f85440ebe41c1b647a6b4731d9e02e7 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Wed, 4 Nov 2020 09:43:31 +0100 Subject: [PATCH 3/3] update doc --- docs/usage.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index 61defed..5d75928 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -251,3 +251,7 @@ export DOTDROP_DEBUG= ```bash export DOTDROP_FORCE_NODEBUG= ``` +* `DOTDROP_TMPDIR`: defines a temporary directory for dotdrop to use for its operations instead of using a system generated one +```bash +export DOTDROP_TMPDIR="/tmp/dotdrop-tmp" +```