Skip to content

Commit e757b82

Browse files
committed
imported copy_tree from master
1 parent d02e2a3 commit e757b82

File tree

5 files changed

+35
-12
lines changed

5 files changed

+35
-12
lines changed

assembler/src/spades_pipeline/stages/correction_stage.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import os
1111
import shutil
1212
import sys
13-
from distutils import dir_util
1413
from site import addsitedir
1514

1615
from stages import stage
@@ -71,7 +70,7 @@ def generate_config(self, cfg):
7170
dst_configs = os.path.join(self.cfg.output_dir, "configs")
7271
if os.path.isdir(dst_configs):
7372
shutil.rmtree(dst_configs)
74-
dir_util.copy_tree(os.path.join(self.tmp_configs_dir, "corrector"), dst_configs, preserve_times=False)
73+
support.copy_tree(os.path.join(self.tmp_configs_dir, "corrector"), dst_configs, preserve_times=False)
7574
cfg_file_name = os.path.join(dst_configs, "corrector.info")
7675

7776
self.cfg.tmp_dir = support.get_tmp_dir(prefix="corrector_")

assembler/src/spades_pipeline/stages/error_correction_stage.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import os
1111
import shutil
1212
import sys
13-
from distutils import dir_util
1413
from site import addsitedir
1514

1615
import commands_parser
@@ -63,10 +62,10 @@ def generate_config(self, cfg):
6362
if os.path.isdir(dst_configs):
6463
shutil.rmtree(dst_configs)
6564
if cfg.iontorrent:
66-
dir_util.copy_tree(os.path.join(self.tmp_configs_dir, "ionhammer"), dst_configs, preserve_times=False)
65+
support.copy_tree(os.path.join(self.tmp_configs_dir, "ionhammer"), dst_configs, preserve_times=False)
6766
cfg_file_name = os.path.join(dst_configs, "ionhammer.cfg")
6867
else:
69-
dir_util.copy_tree(os.path.join(self.tmp_configs_dir, "hammer"), dst_configs, preserve_times=False)
68+
support.copy_tree(os.path.join(self.tmp_configs_dir, "hammer"), dst_configs, preserve_times=False)
7069
cfg_file_name = os.path.join(dst_configs, "config.info")
7170

7271
cfg.tmp_dir = support.get_tmp_dir(prefix="hammer_")

assembler/src/spades_pipeline/stages/pipeline.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
import os
1111
import shutil
12-
from distutils import dir_util
1312

13+
import support
1414
import options_storage
1515

1616
class Pipeline(object):
@@ -22,10 +22,10 @@ def copy_configs(self, cfg, spades_home, tmp_configs_dir):
2222
shutil.rmtree(tmp_configs_dir)
2323
if not os.path.isdir(tmp_configs_dir):
2424
if options_storage.args.configs_dir:
25-
dir_util.copy_tree(options_storage.args.configs_dir, tmp_configs_dir, preserve_times=False,
25+
support.copy_tree(options_storage.args.configs_dir, tmp_configs_dir, preserve_times=False,
2626
preserve_mode=False)
2727
else:
28-
dir_util.copy_tree(os.path.join(spades_home, "configs"), tmp_configs_dir, preserve_times=False,
28+
support.copy_tree(os.path.join(spades_home, "configs"), tmp_configs_dir, preserve_times=False,
2929
preserve_mode=False)
3030

3131
def add(self, stage):

assembler/src/spades_pipeline/stages/spades_iteration_stage.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99

1010
import os
1111
import shutil
12-
from distutils import dir_util
1312

1413
import commands_parser
1514
import options_storage
1615
from stages import stage
16+
import support
1717
import process_cfg
1818
from process_cfg import bool_to_str
1919

@@ -139,9 +139,7 @@ def generate_config(self, cfg):
139139
if self.get_stage(self.short_name) == options_storage.BASE_STAGE:
140140
if not os.path.isdir(data_dir):
141141
os.makedirs(data_dir)
142-
143-
dir_util._path_created = {} # see http://stackoverflow.com/questions/9160227/dir-util-copy-tree-fails-after-shutil-rmtree
144-
dir_util.copy_tree(os.path.join(self.tmp_configs_dir, "debruijn"), dst_configs, preserve_times=False)
142+
support.copy_tree(os.path.join(self.tmp_configs_dir, "debruijn"), dst_configs, preserve_times=False)
145143

146144
if self.prev_K:
147145
additional_contigs_dname = os.path.join(cfg.output_dir, "K%d" % self.prev_K, "simplified_contigs")

assembler/src/spades_pipeline/support.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,3 +940,30 @@ def is_int(value):
940940
return True
941941
except ValueError:
942942
return False
943+
944+
945+
# shutil.copyfile does not copy any metadata (time and permission), so one
946+
# cannot expect preserve_mode = False and preserve_times = True to work.
947+
def copy_tree(src, dst, preserve_times=True, preserve_mode=True):
948+
if sys.version.split()[0][0] == '2':
949+
from distutils import dir_util
950+
dir_util._path_created = {} # see http://stackoverflow.com/questions/9160227/dir-util-copy-tree-fails-after-shutil-rmtree
951+
dir_util.copy_tree(src, dst, preserve_times=preserve_times, preserve_mode=preserve_mode)
952+
return
953+
954+
if not preserve_mode:
955+
copy_fn = shutil.copyfile
956+
else:
957+
copy_fn = shutil.copy2
958+
959+
if os.path.exists(dst):
960+
shutil.rmtree(dst)
961+
962+
# shutil.copytree preserves the timestamp, so we must update it afterwards.
963+
shutil.copytree(src, dst, copy_function = copy_fn)
964+
965+
if not preserve_times:
966+
for dirpath, _, filenames in os.walk(dst):
967+
os.utime(dirpath, None)
968+
for file in filenames:
969+
os.utime(os.path.join(dirpath, file), None)

0 commit comments

Comments
 (0)