mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-10 07:18:27 +01:00
Convert all paths in config to posix-style (#3665)
* Convert all paths in config to posix-style * Use PathInfo for consistancy, add unit test and change functional tests * Exclude Windows test on Linux * Don't patch Config for all the tests! * Don't do the linux test on Windows either * De-hackify the unit test, make the functional test more explicit * tests: adjust tests Co-authored-by: Charles Baynham <[email protected]> Co-authored-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
co-authored by
Charles Baynham
Ruslan Kuprieiev
parent
a2de48bdfb
commit
a8b7e33010
+26
-12
@@ -1,16 +1,27 @@
|
||||
"""DVC config objects."""
|
||||
from contextlib import contextmanager
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
from contextlib import contextmanager
|
||||
from functools import partial
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from funcy import cached_property, re_find, walk_values, compact
|
||||
import configobj
|
||||
from voluptuous import Schema, Optional, Invalid, ALLOW_EXTRA
|
||||
from voluptuous import All, Any, Lower, Range, Coerce
|
||||
from funcy import cached_property, compact, re_find, walk_values
|
||||
from voluptuous import (
|
||||
ALLOW_EXTRA,
|
||||
All,
|
||||
Any,
|
||||
Coerce,
|
||||
Invalid,
|
||||
Lower,
|
||||
Optional,
|
||||
Range,
|
||||
Schema,
|
||||
)
|
||||
|
||||
from dvc.exceptions import DvcException, NotDvcRepoError
|
||||
from dvc.path_info import PathInfo
|
||||
from dvc.utils import relpath
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -311,17 +322,20 @@ class Config(dict):
|
||||
|
||||
return Config._map_dirs(conf, resolve)
|
||||
|
||||
@staticmethod
|
||||
def _to_relpath(conf_dir, path):
|
||||
if re.match(r"\w+://", path):
|
||||
return path
|
||||
|
||||
if isinstance(path, RelPath) or not os.path.isabs(path):
|
||||
path = relpath(path, conf_dir)
|
||||
|
||||
return PathInfo(path).as_posix()
|
||||
|
||||
@staticmethod
|
||||
def _save_paths(conf, filename):
|
||||
conf_dir = os.path.dirname(filename)
|
||||
|
||||
def rel(path):
|
||||
if re.match(r"\w+://", path):
|
||||
return path
|
||||
|
||||
if isinstance(path, RelPath) or not os.path.isabs(path):
|
||||
return relpath(path, conf_dir)
|
||||
return path
|
||||
rel = partial(Config._to_relpath, conf_dir)
|
||||
|
||||
return Config._map_dirs(conf, rel)
|
||||
|
||||
|
||||
@@ -8,8 +8,7 @@ from dvc.cache import Cache
|
||||
from dvc.main import main
|
||||
from dvc.remote.base import DirCacheError
|
||||
from dvc.utils import relpath
|
||||
from tests.basic_env import TestDir
|
||||
from tests.basic_env import TestDvc
|
||||
from tests.basic_env import TestDir, TestDvc
|
||||
|
||||
|
||||
class TestCache(TestDvc):
|
||||
@@ -155,7 +154,7 @@ class TestCmdCacheDir(TestDvc):
|
||||
self.assertEqual(ret, 0)
|
||||
|
||||
config = configobj.ConfigObj(self.dvc.config.files["repo"])
|
||||
self.assertEqual(config["cache"]["dir"], dname)
|
||||
self.assertEqual(config["cache"]["dir"], dname.replace("\\", "/"))
|
||||
|
||||
def test_relative_path(self):
|
||||
tmpdir = self.mkdtemp()
|
||||
@@ -167,7 +166,7 @@ class TestCmdCacheDir(TestDvc):
|
||||
# dir path written to config should be just one level above.
|
||||
rel = os.path.join("..", dname)
|
||||
config = configobj.ConfigObj(self.dvc.config.files["repo"])
|
||||
self.assertEqual(config["cache"]["dir"], rel)
|
||||
self.assertEqual(config["cache"]["dir"], rel.replace("\\", "/"))
|
||||
|
||||
ret = main(["add", self.FOO])
|
||||
self.assertEqual(ret, 0)
|
||||
|
||||
@@ -47,7 +47,9 @@ class TestRemote(TestDvc):
|
||||
# dir path written to config should be just one level above.
|
||||
rel = os.path.join("..", dname)
|
||||
config = configobj.ConfigObj(self.dvc.config.files["repo"])
|
||||
self.assertEqual(config['remote "mylocal"']["url"], rel)
|
||||
self.assertEqual(
|
||||
config['remote "mylocal"']["url"], rel.replace("\\", "/")
|
||||
)
|
||||
|
||||
def test_overwrite(self):
|
||||
remote_name = "a"
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import os
|
||||
import pytest
|
||||
|
||||
from dvc.config import Config
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"path, expected",
|
||||
[
|
||||
("cache", "../cache"),
|
||||
(os.path.join("..", "cache"), "../../cache"),
|
||||
(os.getcwd(), os.getcwd().replace("\\", "/")),
|
||||
("ssh://some/path", "ssh://some/path"),
|
||||
],
|
||||
)
|
||||
def test_to_relpath(path, expected):
|
||||
assert Config._to_relpath(os.path.join(".", "config"), path) == expected
|
||||
Reference in New Issue
Block a user