Small improvements: repro and remove commands

This commit is contained in:
Dmitry Petrov
2017-04-05 23:33:33 -07:00
parent 5f3c53603f
commit e1ef7e2f5c
3 changed files with 34 additions and 29 deletions
+14 -12
View File
@@ -37,13 +37,16 @@ class CmdDataRemove(CmdBase):
return 1
try:
return self.remove_all_targets()
if not self.remove_all_targets():
return 1
finally:
lock.release()
return 0
def remove_all_targets(self):
if not self.skip_git_actions and not self.git.is_ready_to_go():
return 1
return False
error = False
for target in self.parsed_args.target:
@@ -53,7 +56,7 @@ class CmdDataRemove(CmdBase):
message = 'DVC data remove: {}'.format(' '.join(self.parsed_args.target))
self.commit_if_needed(message, error)
return 0 if error == 0 else 1
return error == 0
def remove_target(self, target):
try:
@@ -105,26 +108,25 @@ class CmdDataRemove(CmdBase):
def _remove_state_file(self, data_item):
if os.path.isfile(data_item.state.relative):
Logger.debug(u'[Cmd-Remove] Remove state {}.'.format(data_item.state.relative))
os.remove(data_item.state.relative)
self.remove_dir_if_empty(data_item.state.relative)
Logger.debug(u'[Cmd-Remove] Remove state. Success.')
self._remove_dvc_path(data_item.state, 'state')
else:
Logger.warn(u'[Cmd-Remove] State file {} for data instance {} does not exist'.format(
data_item.state.relative, data_item.data.relative))
def _remove_cache_file(self, data_item):
if not self.parsed_args.keep_in_cache and os.path.isfile(data_item.cache.relative):
Logger.debug(u'[Cmd-Remove] Remove cache {}.'.format(data_item.cache.relative))
os.remove(data_item.cache.relative)
self.remove_dir_if_empty(data_item.cache.relative)
Logger.debug(u'[Cmd-Remove] Remove cache. Success.')
self._remove_dvc_path(data_item.cache, 'cache')
else:
if not self.parsed_args.keep_in_cache:
Logger.warn(u'[Cmd-Remove] Unable to find cache file for data item %s' % data_item.data.relative)
pass
def _remove_dvc_path(self, dvc_path, name):
Logger.debug(u'[Cmd-Remove] Remove {} {}.'.format(name, dvc_path.relative))
os.remove(dvc_path.relative)
self.remove_dir_if_empty(dvc_path.relative)
Logger.debug(u'[Cmd-Remove] Remove {}. Success.'.format(name))
def remove_from_cloud(self, aws_file_name):
Logger.debug(u'[Cmd-Remove] Remove from cloud {}.'.format(aws_file_name))
+18 -15
View File
@@ -52,21 +52,25 @@ class CmdRepro(CmdRun):
return 1
try:
if not self.skip_git_actions and not self.git.is_ready_to_go():
return 1
data_item_list, external_files_names = self.settings.path_factory.to_data_items(self.parsed_args.target)
if external_files_names:
Logger.error('Files from outside of the data directory "{}" could not be reproduced: {}'.
format(self.config.data_dir, ' '.join(external_files_names)))
return 1
if self.repro_data_items(data_item_list):
return self.commit_if_needed('DVC repro: {}'.format(' '.join(self.parsed_args.target)))
return self.repro_target(self.parsed_args.target)
finally:
lock.release()
return 1
pass
def repro_target(self, target):
if not self.skip_git_actions and not self.git.is_ready_to_go():
return 1
data_item_list, external_files_names = self.settings.path_factory.to_data_items(target)
if external_files_names:
Logger.error('Files from outside of the data directory "{}" could not be reproduced: {}'.
format(self.config.data_dir, ' '.join(external_files_names)))
return 1
if self.repro_data_items(data_item_list):
return self.commit_if_needed('DVC repro: {}'.format(' '.join(target)))
pass
def repro_data_items(self, data_item_list):
error = False
@@ -146,12 +150,11 @@ class ReproChange(object):
self._data_item.data.dvc,
', '.join([x.data.dvc for x in self.dependencies])))
were_input_files_changed = False
if not self.state.is_reproducible:
Logger.debug('Data item "{}" is not reproducible'.format(self._data_item.data.relative))
return False
were_input_files_changed = False
for data_item in self.dependencies:
change = ReproChange(data_item, self._cmd_obj)
if change.reproduce(force):
@@ -161,7 +164,7 @@ class ReproChange(object):
self.state.code_dependencies + self.state.input_files,
self.cmd_obj.settings.path_factory)
if was_source_code_changed:
Logger.debug('Source code was changed for "{}"'.format(self._data_item.data.dvc))
Logger.debug('Dependencies were changed for "{}"'.format(self._data_item.data.dvc))
if not force and not was_source_code_changed and not were_input_files_changed:
Logger.debug('Data item "{}" is up to date'.format(
+2 -2
View File
@@ -121,7 +121,7 @@ class TestRemoveEndToEnd(DirHierarchyEnvironment):
self.assertTrue(os.path.exists(self.file1))
self.assertTrue(os.path.exists(self.file6))
self.assertEqual(cmd.remove_all_targets(), 1)
self.assertFalse(cmd.remove_all_targets())
self.assertFalse(os.path.exists(dir11_full))
self.assertFalse(os.path.exists(self.file5))
@@ -146,7 +146,7 @@ class TestRemoveEndToEnd(DirHierarchyEnvironment):
self.assertTrue(os.path.exists(dir2_full))
self.assertTrue(os.path.exists(self.file1))
self.assertEqual(cmd.remove_all_targets(), 0)
self.assertTrue(cmd.remove_all_targets())
self.assertFalse(os.path.exists(dir11_full))
self.assertFalse(os.path.exists(self.file5))