mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-01 23:08:43 +01:00
Small improvements: repro and remove commands
This commit is contained in:
+14
-12
@@ -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
@@ -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(
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user