mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-05 15:28:27 +01:00
This will make the structure of dvc more linear making it easier to read. Plus, these changes are needed in preparation for libdvc, as they move all cmdline parsing to one common place. This patch also refactors our settings system also make it more linear and remove abstraction levels that are not needed and only cause confusion. There is a lot more to be done in preparation for dvc lib and RFC overall, but this a first step in that long journey. Signed-off-by: Ruslan Kuprieiev <[email protected]>
106 lines
3.7 KiB
Python
106 lines
3.7 KiB
Python
import os
|
|
|
|
from dvc.command.target import CmdTarget
|
|
from dvc.config import ConfigI
|
|
from dvc.git_wrapper import GitWrapperI
|
|
from dvc.path.factory import PathFactory
|
|
from dvc.settings import Settings
|
|
from dvc.system import System
|
|
from tests.basic_env import BasicEnvironment
|
|
|
|
|
|
class TestCmdTarget(BasicEnvironment):
|
|
def setUp(self):
|
|
self._test_dir = os.path.join(os.path.sep, 'tmp', 'dvc_unit_test')
|
|
curr_dir = None
|
|
commit = 'abc1234'
|
|
|
|
BasicEnvironment.init_environment(self, self._test_dir, curr_dir)
|
|
|
|
self._commit = commit
|
|
|
|
self._git = GitWrapperI(git_dir=self._test_git_dir, commit=self._commit)
|
|
self._config = ConfigI('data', 'cache', 'state', '.target')
|
|
self.path_factory = PathFactory(self._git, self._config)
|
|
self.settings = Settings(['target'], self._git, self._config)
|
|
|
|
os.chdir(self._test_git_dir)
|
|
|
|
os.mkdir(os.path.join('data', 'dir1'))
|
|
os.mkdir(os.path.join('cache', 'dir1'))
|
|
|
|
self.file1_cache = os.path.join('cache', 'dir1', 'file1')
|
|
self.file1_data = os.path.join('data', 'dir1', 'file1')
|
|
|
|
open(self.file1_cache, 'w').write('ddfdff')
|
|
System.symlink(self.file1_cache, self.file1_data)
|
|
|
|
self.file2_cache = os.path.join('cache', 'file2')
|
|
self.file2_data = os.path.join('data', 'file2')
|
|
|
|
open(self.file2_cache, 'w').write('ddfdff')
|
|
System.symlink(self.file2_cache, self.file2_data)
|
|
|
|
def test_initial_default_target(self):
|
|
self.assertFalse(os.path.exists('.target'))
|
|
|
|
def test_single_file(self):
|
|
self.settings.parse_args('target {}'.format(self.file1_data))
|
|
cmd = CmdTarget(self.settings)
|
|
|
|
self.assertEqual(cmd.run(), 0)
|
|
self.assertEqual(open('.target').read(), self.file1_data)
|
|
|
|
def test_multiple_files(self):
|
|
self.settings.parse_args('target {}'.format(self.file1_data))
|
|
cmd = CmdTarget(self.settings)
|
|
cmd.run()
|
|
|
|
# Another target
|
|
self.settings.parse_args('target {}'.format(self.file2_data))
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 0)
|
|
self.assertEqual(open('.target').read(), self.file2_data)
|
|
|
|
# Unset target
|
|
self.settings.parse_args('target --unset')
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 0)
|
|
self.assertEqual(open('.target').read(), '')
|
|
|
|
def test_initial_unset(self):
|
|
self.settings.parse_args('target --unset')
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 1)
|
|
self.assertFalse(os.path.exists('.target'))
|
|
|
|
def test_unset_existing_target(self):
|
|
self.settings.parse_args('target {}'.format(self.file1_data))
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 0)
|
|
self.assertEqual(open('.target').read(), self.file1_data)
|
|
|
|
self.settings.parse_args('target --unset')
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 0)
|
|
self.assertEqual(open('.target').read(), '')
|
|
|
|
def test_the_same(self):
|
|
self.settings.parse_args('target {}'.format(self.file1_data))
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 0)
|
|
self.assertEqual(open('.target').read(), self.file1_data)
|
|
|
|
self.assertEqual(cmd.run(), 0)
|
|
self.assertEqual(open('.target').read(), self.file1_data)
|
|
|
|
def test_args_conflict(self):
|
|
self.settings.parse_args('target {} --unset'.format(self.file1_data))
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 1)
|
|
|
|
def test_no_args(self):
|
|
self.settings.parse_args('target --unset')
|
|
cmd = CmdTarget(self.settings)
|
|
self.assertEqual(cmd.run(), 1)
|