Skip to content

Commit 05c5fbc

Browse files
fix copying directory (#429)
Fix #428. --------- Signed-off-by: Jinzhe Zeng <jinzhe.zeng@rutgers.edu> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 91dbd1c commit 05c5fbc

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

dpdispatcher/contexts/local_context.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,10 @@ def download(
208208
shutil.rmtree(lfile, ignore_errors=True)
209209
elif os.path.isfile(lfile) or os.path.islink(lfile):
210210
os.remove(lfile)
211-
shutil.copyfile(rfile, lfile)
211+
if not os.path.islink(rfile):
212+
shutil.move(rfile, lfile)
213+
else:
214+
shutil.copyfile(rfile, lfile)
212215
else:
213216
raise RuntimeError("should not reach here!")
214217
else:
@@ -275,7 +278,10 @@ def download(
275278
shutil.rmtree(lfile, ignore_errors=True)
276279
elif os.path.isfile(lfile) or os.path.islink(lfile):
277280
os.remove(lfile)
278-
shutil.copyfile(rfile, lfile)
281+
if not os.path.islink(rfile):
282+
shutil.move(rfile, lfile)
283+
else:
284+
shutil.copyfile(rfile, lfile)
279285
else:
280286
raise RuntimeError("should not reach here!")
281287
else:

tests/test_run_submission.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import random
44
import shutil
55
import sys
6+
import tempfile
67
import traceback
78

89
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
@@ -72,6 +73,16 @@ def test_run_submission(self):
7273
)
7374
task_list.append(task)
7475

76+
for ii in range(2):
77+
task = Task(
78+
command=f"mkdir -p out_dir{ii} && touch out_dir{ii}/out{ii}",
79+
task_work_path="./",
80+
forward_files=[],
81+
backward_files=[f"out_dir{ii}"],
82+
outlog=f"out_dir{ii}.txt",
83+
)
84+
task_list.append(task)
85+
7586
# test space in file name
7687
task_list.append(
7788
Task(
@@ -90,6 +101,11 @@ def test_run_submission(self):
90101
backward_common_files=[],
91102
task_list=task_list,
92103
)
104+
# test override directory
105+
os.makedirs(
106+
os.path.join(self.machine_dict["local_root"], "test_dir", "out_dir1"),
107+
exist_ok=True,
108+
)
93109
submission.run_submission(check_interval=2)
94110

95111
for ii in range(4):
@@ -251,6 +267,23 @@ def test_async_run_submission(self):
251267
return super().test_async_run_submission()
252268

253269

270+
@unittest.skipIf(sys.platform == "win32", "Shell is not supported on Windows")
271+
class TestLocalContext(RunSubmission, unittest.TestCase):
272+
def setUp(self):
273+
super().setUp()
274+
self.temp_dir = tempfile.TemporaryDirectory()
275+
self.machine_dict["context_type"] = "LocalContext"
276+
self.machine_dict["remote_root"] = self.temp_dir.name
277+
278+
def tearDown(self):
279+
super().tearDown()
280+
self.temp_dir.cleanup()
281+
282+
@unittest.skipIf(sys.platform == "darwin", "TODO: Error on macos")
283+
def test_async_run_submission(self):
284+
return super().test_async_run_submission()
285+
286+
254287
@unittest.skipIf(sys.platform == "win32", "Shell is not supported on Windows")
255288
class TestLazyLocalContext(RunSubmission, unittest.TestCase):
256289
def setUp(self):

0 commit comments

Comments
 (0)