efiop: @Suor Please take a look.
diff --git a/dvc/analytics.py b/dvc/analytics.py
index e4b0dc425..95fda9b9a 100644
--- a/dvc/analytics.py
+++ b/dvc/analytics.py
@@ -10,6 +10,7 @@ import errno
 import logging
 
 from dvc import __version__
+from dvc.utils import env2bool
 
 
 logger = logging.getLogger(__name__)
@@ -229,7 +230,7 @@ class Analytics(object):
     def is_enabled(cmd=None):
         from dvc.command.daemon import CmdDaemonBase
 
-        if os.getenv("DVC_TEST"):
+        if env2bool("DVC_TEST"):
             return False
 
         if isinstance(cmd, CmdDaemonBase):
diff --git a/dvc/lock.py b/dvc/lock.py
index 3ab223adf..eebd8db2e 100644
--- a/dvc/lock.py
+++ b/dvc/lock.py
@@ -22,7 +22,38 @@ class LockError(DvcException):
 
 
 if is_py3:
+    import socket
+
     import flufl.lock
+    from funcy import monkey
+
+    # Workaround for slow and obsoleted gethostbyaddr used in
+    # `socket.getfqdn()`. See [1], [2] and [3] for more info.
+    #
+    # [1] https://bugs.python.org/issue5004
+    # [2] https://github.com/iterative/dvc/issues/2582
+    # [3] https://gitlab.com/warsaw/flufl.lock/merge_requests/12
+    @monkey(socket)
+    def getfqdn(name=""):
+        """Get fully qualified domain name from name.
+
+        An empty argument is interpreted as meaning the local host.
+        """
+        name = name.strip()
+        if not name or name == "0.0.0.0":
+            name = socket.gethostname()
+        try:
+            addrs = socket.getaddrinfo(
+                name, None, 0, socket.SOCK_DGRAM, 0, socket.AI_CANONNAME
+            )
+        except socket.error:
+            pass
+        else:
+            for addr in addrs:
+                if addr[3]:
+                    name = addr[3]
+                    break
+        return name
 
     class Lock(flufl.lock.Lock):
         """Class for dvc repo lock.
diff --git a/dvc/progress.py b/dvc/progress.py
index f64459601..588211eb8 100644
--- a/dvc/progress.py
+++ b/dvc/progress.py
@@ -1,9 +1,11 @@
 """Manages progress bars for dvc repo."""
 from __future__ import print_function
 import logging
+import sys
 from tqdm import tqdm
 from concurrent.futures import ThreadPoolExecutor
 from funcy import merge
+from dvc.utils import env2bool
 
 logger = logging.getLogger(__name__)
 
@@ -54,6 +56,7 @@ class Tqdm(tqdm):
         leave=False,
         bar_format=None,
         bytes=False,  # pylint: disable=W0622
+        file=None,
         **kwargs
     ):
         """
@@ -62,6 +65,9 @@ class Tqdm(tqdm):
         desc  : persists after `close()`
         level  : effective logging level for determining `disable`;
             used only if `disable` is unspecified
+        disable  : If (default: None), will be determined by logging level.
+            May be overridden to `True` due to non-TTY status.
+            Skip override by specifying env var `DVC_IGNORE_ISATTY`.
         kwargs  : anything accepted by `tqdm.tqdm()`
         """
         kwargs = kwargs.copy()
@@ -71,9 +77,19 @@ class Tqdm(tqdm):
                 unit="B", unit_scale=True, unit_divisor=1024, miniters=1
             )
             kwargs = merge(bytes_defaults, kwargs)
+        if file is None:
+            file = sys.stderr
         self.desc_persist = desc
+        # auto-disable based on `logger.level`
         if disable is None:
             disable = logger.getEffectiveLevel() > level
+        # auto-disable based on TTY
+        if (
+            not disable
+            and not env2bool("DVC_IGNORE_ISATTY")
+            and hasattr(file, "isatty")
+        ):
+            disable = file.isatty()
         super(Tqdm, self).__init__(
             iterable=iterable,
             disable=disable,
diff --git a/dvc/remote/local.py b/dvc/remote/local.py
index 5c73a4729..384077180 100644
--- a/dvc/remote/local.py
+++ b/dvc/remote/local.py
@@ -1,15 +1,14 @@
 from __future__ import unicode_literals
-
-from dvc.scheme import Schemes
-from dvc.utils.compat import str, fspath_py35, open
-
 import os
 import stat
 import errno
-from shortuuid import uuid
 import logging
 from functools import partial
 
+from shortuuid import uuid
+
+from dvc.scheme import Schemes
+from dvc.utils.compat import str, fspath_py35, open
 from dvc.system import System
 from dvc.remote.base import (
     RemoteBASE,
diff --git a/dvc/system.py b/dvc/system.py
index c7c7cf8e4..eaa3deaf2 100644
--- a/dvc/system.py
+++ b/dvc/system.py
@@ -1,11 +1,10 @@
 from __future__ import unicode_literals
-
-from dvc.utils.compat import str, open, fspath
-
 import os
 import errno
 import shutil
 
+from dvc.utils.compat import str, open, fspath
+
 
 class System(object):
     @staticmethod
diff --git a/dvc/updater.py b/dvc/updater.py
index fc1e8d58e..21251e4da 100644
--- a/dvc/updater.py
+++ b/dvc/updater.py
@@ -9,7 +9,7 @@ from packaging import version
 
 from dvc import __version__
 from dvc.lock import Lock, LockError
-from dvc.utils import is_binary, boxify
+from dvc.utils import is_binary, boxify, env2bool
 
 
 logger = logging.getLogger(__name__)
@@ -45,7 +45,7 @@ class Updater(object):  # pragma: no cover
             logger.debug(msg.format(self.lock.lockfile, action))
 
     def check(self):
-        if os.getenv("CI") or os.getenv("DVC_TEST"):
+        if os.getenv("CI") or env2bool("DVC_TEST"):
             return
 
         self._with_lock(self._check, "checking")
diff --git a/dvc/utils/__init__.py b/dvc/utils/__init__.py
index 594d6cce6..538b7a97e 100644
--- a/dvc/utils/__init__.py
+++ b/dvc/utils/__init__.py
@@ -462,6 +462,16 @@ def relpath(path, start=os.curdir):
     return os.path.relpath(path, start)
 
 
+def env2bool(var, undefined=False):
+    """
+    undefined: return value if env var is unset
+    """
+    var = os.getenv(var, None)
+    if var is None:
+        return undefined
+    return bool(re.search("1|y|yes|true", var, flags=re.I))
+
+
 def resolve_output(inp, out):
     from dvc.utils.compat import urlparse
 
diff --git a/dvc/version.py b/dvc/version.py
index 2b88ecb00..84b1f416e 100644
--- a/dvc/version.py
+++ b/dvc/version.py
@@ -7,7 +7,7 @@ import os
 import subprocess
 
 
-_BASE_VERSION = "0.63.2"
+_BASE_VERSION = "0.63.3"
 
 
 def _generate_version(base_version):

suppress progress when `isatty`
from https://github.com/iterative/dvc/issues/2539#issuecomment-536311782, check `isatty` before attempting to print progressbars
diff --git a/tests/__main__.py b/tests/__main__.py
index 2068d7f7d..ba115ae68 100644
--- a/tests/__main__.py
+++ b/tests/__main__.py
@@ -7,7 +7,7 @@ REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 os.chdir(REPO_ROOT)
 
 os.putenv(
-    "PATH", "{}:{}".format(os.path.join(REPO_ROOT, "bin"), os.getenv("PATH"))
+    "PATH", ":".join([os.path.join(REPO_ROOT, "bin"), os.getenv("PATH")])
 )
 os.putenv("DVC_HOME", REPO_ROOT)
 
diff --git a/tests/conftest.py b/tests/conftest.py
index e9855056d..9ca00335f 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -13,6 +13,8 @@ from .basic_env import TestDirFixture, TestDvcGitFixture, TestGitFixture
 
 # Prevent updater and analytics from running their processes
 os.environ[cast_bytes_py2("DVC_TEST")] = cast_bytes_py2("true")
+# Ensure progress output even when not outputting to raw sys.stderr console
+os.environ[cast_bytes_py2("DVC_IGNORE_ISATTY")] = cast_bytes_py2("true")
 
 
 @pytest.fixture(autouse=True)
diff --git a/tests/func/test_data_cloud.py b/tests/func/test_data_cloud.py
index 11c9eceed..6633a4f81 100644
--- a/tests/func/test_data_cloud.py
+++ b/tests/func/test_data_cloud.py
@@ -13,6 +13,7 @@ import pytest
 from mock import patch
 
 from dvc.utils.compat import str
+from dvc.utils import env2bool
 from dvc.main import main
 from dvc.config import Config
 from dvc.data_cloud import DataCloud
@@ -57,11 +58,9 @@ os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = TEST_GCP_CREDS_FILE
 
 
 def _should_test_aws():
-    dvc_test_aws = os.getenv("DVC_TEST_AWS")
-    if dvc_test_aws == "true":
-        return True
-    elif dvc_test_aws == "false":
-        return False
+    do_test = env2bool("DVC_TEST_AWS", undefined=None)
+    if do_test is not None:
+        return do_test
 
     if os.getenv("AWS_ACCESS_KEY_ID") and os.getenv("AWS_SECRET_ACCESS_KEY"):
         return True
@@ -70,8 +69,9 @@ def _should_test_aws():
 
 
 def _should_test_gcp():
-    if os.getenv("DVC_TEST_GCP") == "true":
-        return True
+    do_test = env2bool("DVC_TEST_GCP", undefined=None)
+    if do_test is not None:
+        return do_test
 
     if not os.path.exists(TEST_GCP_CREDS_FILE):
         return False
@@ -92,10 +92,9 @@ def _should_test_gcp():
 
 
 def _should_test_azure():
-    if os.getenv("DVC_TEST_AZURE") == "true":
-        return True
-    elif os.getenv("DVC_TEST_AZURE") == "false":
-        return False
+    do_test = env2bool("DVC_TEST_AZURE", undefined=None)
+    if do_test is not None:
+        return do_test
 
     return os.getenv("AZURE_STORAGE_CONTAINER_NAME") and os.getenv(
         "AZURE_STORAGE_CONNECTION_STRING"
@@ -103,10 +102,9 @@ def _should_test_azure():
 
 
 def _should_test_oss():
-    if os.getenv("DVC_TEST_OSS") == "true":
-        return True
-    elif os.getenv("DVC_TEST_OSS") == "false":
-        return False
+    do_test = env2bool("DVC_TEST_OSS", undefined=None)
+    if do_test is not None:
+        return do_test
 
     return (
         os.getenv("OSS_ENDPOINT")
@@ -116,8 +114,9 @@ def _should_test_oss():
 
 
 def _should_test_ssh():
-    if os.getenv("DVC_TEST_SSH") == "true":
-        return True
+    do_test = env2bool("DVC_TEST_SSH", undefined=None)
+    if do_test is not None:
+        return do_test
 
     # FIXME: enable on windows
     if os.name == "nt":
diff --git a/tests/unit/test_progress.py b/tests/unit/test_progress.py
index 8149300c0..36ba35e44 100644
--- a/tests/unit/test_progress.py
+++ b/tests/unit/test_progress.py
@@ -1,17 +1,37 @@
 import logging
 from dvc.progress import Tqdm
+from dvc.utils import env2bool
+import sys
+import mock
 
 
-def test_quiet(caplog, capsys):
+def test_quiet_logging(caplog, capsys):
     with caplog.at_level(logging.CRITICAL, logger="dvc"):
         for _ in Tqdm(range(10)):
             pass
         out_err = capsys.readouterr()
         assert out_err.out == ""
         assert out_err.err == ""
+
+
+def test_quiet_notty(caplog, capsys):
     with caplog.at_level(logging.INFO, logger="dvc"):
         for _ in Tqdm(range(10)):
             pass
         out_err = capsys.readouterr()
         assert out_err.out == ""
-        assert "0/10" in out_err.err
+        if env2bool("DVC_IGNORE_ISATTY"):
+            assert "0/10" in out_err.err
+        else:
+            assert out_err.err == ""
+
+
+def test_default(caplog, capsys):
+    with caplog.at_level(logging.INFO, logger="dvc"):
+        # simulate interactive terminal
+        with mock.patch.object(sys.stderr, "isatty", return_value=True):
+            for _ in Tqdm(range(10)):
+                pass
+            out_err = capsys.readouterr()
+            assert out_err.out == ""
+            assert "0/10" in out_err.err

pip install -e .[all]
parse_log_pytest
pytest
pytest pytest-timeout pytest-cov pytest-xdist pytest-mock flaky mock xmltodict awscli google-compute-engine Pygments collective.checkdocs flake8 psutil flake8-docstrings pydocstyle jaraco.windows mock-ssh-server moto rangehttpserver
apt-get update apt-get install -y gcc
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
tests/unit/test_progress.py::test_quiet_logging tests/unit/test_progress.py::test_default tests/unit/test_progress.py::test_quiet_notty
tests/func/test_add.py::TestAdd::test tests/func/test_cli.py::TestAdd::test tests/func/test_cache.py::TestSharedCacheDir::test tests/func/test_cli.py::TestGC::test tests/func/test_analytics.py::TestAnalyticsGit::test_send tests/func/test_add.py::TestAdd::test_unicode tests/func/test_add.py::TestAddUnupportedFile::test tests/func/test_cache.py::TestCacheLinkType::test tests/func/test_cli.py::TestGCMultipleDvcRepos::test tests/func/test_add.py::TestAddDirectory::test tests/func/test_analytics.py::TestAnalyticsGit::test_send_failed tests/func/test_cache.py::TestCmdCacheDir::test tests/func/test_cli.py::TestConfig::test tests/func/test_analytics.py::TestAnalyticsDvc::test tests/func/test_add.py::TestAddDirectoryRecursive::test tests/func/test_cli.py::TestCheckout::test tests/func/test_cache.py::TestCmdCacheDir::test_abs_path tests/func/test_analytics.py::TestAnalyticsDvc::test_send tests/func/test_add.py::TestAddCmdDirectoryRecursive::test tests/func/test_cli.py::TestFindRoot::test tests/func/test_cache.py::TestCmdCacheDir::test_relative_path tests/func/test_analytics.py::TestAnalyticsDvc::test_send_disabled tests/func/test_analytics.py::TestAnalyticsDvc::test_send_failed tests/func/test_cache.py::TestShouldCacheBeReflinkOrCopyByDefault::test tests/func/test_add.py::TestAddCmdDirectoryRecursive::test_warn_about_large_directories tests/func/test_add.py::TestAddDirectoryWithForwardSlash::test tests/func/test_add.py::TestAddDirWithExistingCache::test tests/func/test_config.py::TestConfigCLI::test tests/func/test_checkout.py::TestCheckout::test tests/func/test_add.py::TestAddModifiedDir::test tests/func/test_config.py::TestConfigCLI::test_local tests/func/test_config.py::TestConfigCLI::test_non_existing tests/func/test_checkout.py::TestCheckoutSingleStage::test tests/func/test_config.py::TestConfigCLI::test_root tests/func/test_add.py::TestAddExternalLocalFile::test tests/func/test_add.py::TestAddLocalRemoteFile::test tests/func/test_data_cloud.py::TestDataCloud::test tests/func/test_checkout.py::TestCheckoutCorruptedCacheFile::test tests/func/test_checkout.py::TestCheckoutCorruptedCacheDir::test tests/func/test_add.py::TestCmdAdd::test tests/func/test_data_cloud.py::TestDataCloudBase::test tests/func/test_data_cloud.py::TestRemoteS3::test tests/func/test_checkout.py::TestCmdCheckout::test tests/func/test_data_cloud.py::TestRemoteGS::test tests/func/test_add.py::TestDoubleAddUnchanged::test_dir tests/func/test_add.py::TestDoubleAddUnchanged::test_file tests/func/test_checkout.py::TestRemoveFilesWhenCheckout::test tests/func/test_data_cloud.py::TestRemoteAZURE::test tests/func/test_add.py::TestShouldUpdateStateEntryForFileAfterAdd::test tests/func/test_checkout.py::TestCheckoutCleanWorkingDir::test tests/func/test_data_cloud.py::TestRemoteOSS::test tests/func/test_add.py::TestShouldUpdateStateEntryForDirectoryAfterAdd::test tests/func/test_data_cloud.py::TestRemoteLOCAL::test tests/func/test_checkout.py::TestCheckoutCleanWorkingDir::test_force tests/func/test_add.py::TestAddCommit::test tests/func/test_data_cloud.py::TestRemoteSSH::test tests/func/test_add.py::TestShouldCollectDirCacheOnlyOnce::test tests/func/test_add.py::TestShouldAddDataFromExternalSymlink::test tests/func/test_data_cloud.py::TestRemoteSSHMocked::test tests/func/test_checkout.py::TestCheckoutSelectiveRemove::test tests/func/test_add.py::TestShouldAddDataFromInternalSymlink::test tests/func/test_data_cloud.py::TestRemoteHDFS::test tests/func/test_add.py::TestShouldPlaceStageInDataDirIfRepositoryBelowSymlink::test tests/func/test_checkout.py::TestGitIgnoreBasic::test tests/func/test_checkout.py::TestGitIgnoreWhenCheckout::test tests/func/test_add.py::TestShouldThrowProperExceptionOnCorruptedStageFile::test tests/func/test_data_cloud.py::TestDataCloudCLIBase::test tests/func/test_add.py::TestAddFilename::test tests/func/test_data_cloud.py::TestRemoteLOCALCLI::test tests/func/test_checkout.py::TestCheckoutMissingMd5InStageFile::test tests/func/test_checkout.py::TestCheckoutEmptyDir::test tests/func/test_data_cloud.py::TestRemoteSSHCLI::test tests/func/test_checkout.py::TestCheckoutNotCachedFile::test tests/func/test_add.py::TestShouldNotTrackGitInternalFiles::test tests/func/test_data_cloud.py::TestRemoteHDFSCLI::test tests/func/test_add.py::TestAddUnprotected::test tests/func/test_data_cloud.py::TestRemoteS3CLI::test tests/func/test_data_cloud.py::TestRemoteGSCLI::test tests/func/test_data_cloud.py::TestRemoteAZURECLI::test tests/func/test_checkout.py::TestCheckoutWithDeps::test tests/func/test_data_cloud.py::TestRemoteOSSCLI::test tests/func/test_data_cloud.py::TestDataCloudErrorCLI::test_error tests/func/test_checkout.py::TestCheckoutDirectory::test tests/func/test_checkout.py::TestCheckoutHook::test tests/func/test_checkout.py::TestCheckoutSuggestGit::test tests/func/test_data_cloud.py::TestWarnOnOutdatedStage::test tests/func/test_checkout.py::TestCheckoutTargetRecursiveShouldNotRemoveOtherUsedFiles::test tests/func/test_data_cloud.py::TestRecursiveSyncOperations::test tests/func/test_checkout.py::TestCheckoutRecursiveNotDirectory::test tests/func/test_data_cloud.py::TestCheckSumRecalculation::test tests/func/test_data_cloud.py::TestShouldWarnOnNoChecksumInLocalAndRemoteCache::test tests/func/test_checkout.py::TestCheckoutMovedCacheDirWithSymlinks::test tests/func/test_analytics.py::TestAnalytics::test tests/func/test_analytics.py::TestAnalytics::test_send tests/func/test_analytics.py::TestAnalytics::test_send_failed tests/func/test_analytics.py::TestAnalyticsGit::test tests/func/test_cache.py::TestCache::test_all tests/func/test_cache.py::TestCache::test_get tests/func/test_cache.py::TestCacheLoadBadDirCache::test tests/func/test_cli.py::TestArgParse::test tests/func/test_import_url.py::TestImportFilename::test tests/func/test_cache.py::TestExternalCacheDir::test tests/func/test_cli.py::TestRun::test tests/func/test_cli.py::TestPull::test tests/func/test_cache.py::TestExternalCacheDir::test_remote_references tests/func/test_cli.py::TestPush::test tests/func/test_cli.py::TestStatus::test tests/func/test_cli.py::TestRepro::test tests/func/test_diff.py::TestDiff::test tests/func/test_cli.py::TestRemove::test tests/func/test_init.py::TestInit::test_api tests/func/test_diff.py::TestDiffRepo::test tests/func/test_init.py::TestInit::test_cli tests/func/test_diff.py::TestDiffCmdLine::test tests/func/test_pipeline.py::TestPipelineListSingle::test_dot_outs tests/func/test_init.py::TestDoubleInit::test tests/func/test_diff.py::TestDiffDir::test tests/func/test_pipeline.py::TestPipelineListSingle::test_outs tests/func/test_diff.py::TestDiffDirRepo::test tests/func/test_init.py::TestDoubleInit::test_api tests/func/test_pipeline.py::TestDvcRepoPipeline::test_no_stages tests/func/test_remote.py::TestRemote::test tests/func/test_init.py::TestDoubleInit::test_cli tests/func/test_diff.py::TestDiffDirRepoDeletedFile::test tests/func/test_remote.py::TestRemote::test_overwrite tests/func/test_init.py::TestInitNoSCMFail::test_cli tests/func/test_diff.py::TestDiffFileNotFound::test tests/func/test_init.py::TestInitNoSCM::test_api tests/func/test_remote.py::TestRemote::test_referencing_other_remotes tests/func/test_diff.py::TestDiffModifiedFile::test tests/func/test_remote.py::TestRemote::test_relative_path tests/func/test_remote.py::TestRemoteRemoveDefault::test tests/func/test_diff.py::TestDiffDirWithFile::test tests/func/test_init.py::TestInitNoSCM::test_cli tests/func/test_remote.py::TestRemoteRemove::test tests/func/test_remote.py::TestRemoteDefault::test tests/func/test_init.py::test_init_quiet_should_not_display_welcome_screen tests/func/test_diff.py::TestDiffCmdMessage::test tests/func/test_remote.py::TestRemoteShouldHandleUppercaseRemoteName::test tests/func/test_gc.py::TestGC::test_api tests/func/test_pipeline.py::TestReproChangedDeepData::test tests/func/test_pipeline.py::TestPipelineShowSingle::test tests/func/test_remove.py::TestRemove::test tests/func/test_pipeline.py::TestPipelineShowSingle::test_ascii_outs tests/func/test_remove.py::TestRemoveNonExistentFile::test tests/func/test_pipeline.py::TestPipelineShowSingle::test_commands tests/func/test_gc.py::TestGC::test_cli tests/func/test_remove.py::TestRemoveBrokenSymlink::test tests/func/test_pipeline.py::TestPipelineShowSingle::test_dot tests/func/test_remove.py::TestRemoveDirectory::test tests/func/test_gc.py::TestGCBranchesTags::test tests/func/test_remove.py::TestCmdRemove::test tests/func/test_lock.py::TestLock::test_cli tests/func/test_lock.py::TestLock::test_with tests/func/test_remove.py::TestRemovePurge::test tests/func/test_pipeline.py::TestPipelineShowSingle::test_dot_commands tests/func/test_remove.py::TestRemovePurge::test_force tests/func/test_pipeline.py::TestPipelineShowSingle::test_dot_outs tests/func/test_gc.py::TestGCMultipleDvcRepos::test tests/func/test_pipeline.py::TestPipelineShowSingle::test_non_existing tests/func/test_repo.py::TestCollect::test tests/func/test_pipeline.py::TestPipelineShowSingle::test_not_dvc_file tests/func/test_metrics.py::TestMetrics::test_formatted_output tests/func/test_pipeline.py::TestPipelineShowSingle::test_outs tests/func/test_repo.py::TestIgnore::test_should_not_gather_stage_files_from_ignored_dir tests/func/test_metrics.py::TestMetrics::test_show tests/func/test_pipeline.py::TestPipelineShowSingle::test_tree tests/func/test_metrics.py::TestMetrics::test_show_all_should_be_current_dir_agnostic tests/func/test_repro.py::TestReproFail::test tests/func/test_metrics.py::TestMetrics::test_type_case_normalized tests/func/test_repro.py::TestReproCyclicGraph::test tests/func/test_repro.py::TestReproWorkingDirectoryAsOutput::test tests/func/test_metrics.py::TestMetrics::test_unknown_type_ignored tests/func/test_pipeline.py::TestPipelineShow::test tests/func/test_repro.py::TestReproWorkingDirectoryAsOutput::test_nested tests/func/test_pipeline.py::TestPipelineShow::test_ascii tests/func/test_repro.py::TestReproWorkingDirectoryAsOutput::test_similar_paths tests/func/test_repro.py::TestReproDepUnderDir::test tests/func/test_pipeline.py::TestPipelineShow::test_ascii_commands tests/func/test_repro.py::TestReproDepDirWithOutputsUnderIt::test tests/func/test_metrics.py::TestMetrics::test_xpath_all tests/func/test_pipeline.py::TestPipelineShow::test_ascii_outs tests/func/test_metrics.py::TestMetrics::test_xpath_all_columns tests/func/test_repro.py::TestReproNoDeps::test tests/func/test_pipeline.py::TestPipelineShow::test_commands tests/func/test_repro.py::TestReproForce::test tests/func/test_pipeline.py::TestPipelineShow::test_dot tests/func/test_metrics.py::TestMetrics::test_xpath_all_rows tests/func/test_repro.py::TestReproChangedCode::test tests/func/test_pipeline.py::TestPipelineShow::test_dot_commands tests/func/test_ignore.py::TestDvcIgnore::test_ignore_in_child_dir tests/func/test_metrics.py::TestMetrics::test_xpath_all_with_header tests/func/test_repro.py::TestReproChangedData::test tests/func/test_ignore.py::TestDvcIgnore::test_ignore_in_child_dir_unicode tests/func/test_ignore.py::TestDvcIgnore::test_ignore_in_parent_dir tests/func/test_metrics.py::TestMetrics::test_xpath_is_empty tests/func/test_repro.py::TestReproDry::test tests/func/test_metrics.py::TestMetrics::test_xpath_is_none tests/func/test_pipeline.py::TestPipelineShowOuts::test_outs tests/func/test_metrics.py::TestMetricsRecursive::test tests/func/test_repro.py::TestReproUpToDate::test tests/func/test_pipeline.py::TestPipelineShowDeep::test tests/func/test_metrics.py::TestMetricsReproCLI::test tests/func/test_repro.py::TestReproDryNoExec::test tests/func/test_metrics.py::TestMetricsReproCLI::test_binary tests/func/test_repro.py::TestReproChangedDeepData::test tests/func/test_pipeline.py::TestPipelineShowDeep::test_ascii tests/func/test_metrics.py::TestMetricsReproCLI::test_dir tests/func/test_repro.py::TestReproIgnoreBuildCache::test tests/func/test_pipeline.py::TestPipelineShowDeep::test_ascii_commands tests/func/test_metrics.py::TestMetricsCLI::test tests/func/test_metrics.py::TestMetricsCLI::test_binary tests/func/test_pipeline.py::TestPipelineShowDeep::test_ascii_outs tests/func/test_repro.py::TestReproPipeline::test tests/func/test_pipeline.py::TestPipelineShowDeep::test_commands tests/func/test_repro.py::TestReproPipeline::test_cli tests/func/test_metrics.py::TestMetricsCLI::test_dir tests/func/test_repro.py::TestReproPipelines::test tests/func/test_metrics.py::TestMetricsCLI::test_non_existing tests/func/test_import_url.py::TestCmdImport::test tests/func/test_metrics.py::TestMetricsCLI::test_wrong_type_add tests/func/test_pipeline.py::TestPipelineShowDeep::test_dot tests/func/test_import_url.py::TestCmdImport::test_unsupported tests/func/test_repro.py::TestReproPipelines::test_cli tests/func/test_import_url.py::TestDefaultOutput::test tests/func/test_pipeline.py::TestPipelineShowDeep::test_dot_commands tests/func/test_import_url.py::TestShouldRemoveOutsBeforeImport::test tests/func/test_repro.py::TestReproLocked::test tests/func/test_repro.py::TestReproMetricsAddUnchanged::test tests/func/test_metrics.py::TestMetricsCLI::test_wrong_type_modify tests/func/test_pipeline.py::TestPipelineShowDeep::test_dot_outs tests/func/test_repro.py::TestReproLocked::test_non_existing tests/func/test_repro.py::TestReproLockedCallback::test tests/func/test_pipeline.py::TestPipelineShowDeep::test_outs tests/func/test_metrics.py::TestMetricsCLI::test_wrong_type_show tests/func/test_repro.py::TestReproPhony::test tests/func/test_repro.py::TestNonExistingOutput::test tests/func/test_pipeline.py::TestPipelineListEmpty::test tests/func/test_repro.py::TestReproLockedUnchanged::test tests/func/test_metrics.py::TestNoMetrics::test tests/func/test_repro.py::TestReproDataSource::test tests/func/test_repro.py::TestReproChangedDir::test tests/func/test_metrics.py::TestNoMetrics::test_cli tests/func/test_repro.py::TestReproAlreadyCached::test_force_with_dependencies tests/func/test_pipeline.py::TestPipelineListSingle::test tests/func/test_metrics.py::TestCachedMetrics::test_add tests/func/test_repro.py::TestShouldDisplayMetricsOnReproWithMetricsOption::test tests/func/test_repro.py::TestReproChangedDirData::test tests/func/test_metrics.py::TestCachedMetrics::test_run tests/func/test_pipeline.py::TestPipelineListSingle::test_ascii tests/func/test_repro.py::TestReproMissingMd5InStageFile::test tests/func/test_metrics.py::TestMetricsType::test_show tests/func/test_repro.py::TestCmdRepro::test tests/func/test_pipeline.py::TestPipelineListSingle::test_ascii_commands tests/func/test_repro.py::TestCmdReproChdirCwdBackwardCompatible::test tests/func/test_repro.py::TestCmdReproChdir::test tests/func/test_repro.py::TestReproExternalBase::test tests/func/test_repro.py::TestReproExternalS3::test tests/func/test_pipeline.py::TestPipelineListSingle::test_ascii_outs tests/func/test_move.py::TestMove::test tests/func/test_repro.py::TestReproExternalGS::test tests/func/test_pipeline.py::TestPipelineListSingle::test_commands tests/func/test_move.py::TestMoveNonExistentFile::test tests/func/test_repro.py::TestReproExternalHDFS::test tests/func/test_repro.py::TestReproDownstream::test tests/func/test_move.py::TestMoveDirectory::test tests/func/test_pipeline.py::TestPipelineListSingle::test_dot tests/func/test_repro.py::TestReproExternalSSH::test tests/func/test_move.py::TestCmdMove::test tests/func/test_run.py::TestRun::test tests/func/test_run.py::TestRunEmpty::test tests/func/test_move.py::TestMoveNotDataSource::test tests/func/test_run.py::TestRunMissingDep::test tests/func/test_pipeline.py::TestPipelineListSingle::test_dot_commands tests/func/test_repro.py::TestReproExternalLOCAL::test tests/func/test_move.py::TestMoveFileWithExtension::test tests/func/test_run.py::TestRunBadStageFilename::test tests/func/test_run.py::TestCmdRunOverwrite::test tests/func/test_repro.py::TestReproExternalHTTP::test tests/func/test_run.py::TestCmdRunCliMetrics::test_cached tests/func/test_move.py::TestMoveFileToDirectory::test tests/func/test_repro.py::TestReproShell::test tests/func/test_move.py::TestMoveFileToDirectoryWithoutSpecifiedTargetName::test tests/func/test_run.py::TestCmdRunCliMetrics::test_not_cached tests/func/test_run.py::TestCmdRunWorkingDirectory::test_cwd_is_ignored tests/func/test_run.py::TestRunNoExec::test tests/func/test_repro.py::TestReproAllPipelines::test tests/func/test_run.py::TestCmdRunWorkingDirectory::test_default_wdir_is_not_written tests/func/test_move.py::TestMoveDirectoryShouldNotOverwriteExisting::test tests/func/test_run.py::TestRunCircularDependency::test tests/func/test_run.py::TestCmdRunWorkingDirectory::test_fname_changes_path_and_wdir tests/func/test_repro.py::TestReproNoCommit::test tests/func/test_run.py::TestRunCircularDependency::test_graph tests/func/test_move.py::TestMoveFileBetweenDirectories::test tests/func/test_move.py::TestMoveFileInsideDirectory::test tests/func/test_repro.py::TestReproAlreadyCached::test tests/func/test_run.py::TestRunCircularDependency::test_non_normalized_paths tests/func/test_run.py::TestRunCircularDependency::test_outs_no_cache tests/func/test_repro.py::TestReproAlreadyCached::test_force_import tests/func/test_run.py::TestRunDuplicatedArguments::test tests/func/test_run.py::TestRunDuplicatedArguments::test_non_normalized_paths tests/func/test_run.py::TestRunDuplicatedArguments::test_outs_no_cache tests/func/test_tag.py::TestTagAll::test tests/func/test_run.py::TestRunStageInsideOutput::test_cwd tests/func/test_tag.py::TestTagAddNoChecksumInfo::test tests/func/test_tag.py::TestTagRemoveNoTag::test tests/func/test_run.py::TestRunStageInsideOutput::test_file_name tests/func/test_stage.py::TestSchemaCmd::test_cmd_none tests/func/test_run.py::TestRunBadCwd::test tests/func/test_stage.py::TestSchemaCmd::test_cmd_object tests/func/test_stage.py::TestSchemaCmd::test_cmd_str tests/func/test_run.py::TestRunBadCwd::test_same_prefix tests/func/test_run.py::TestRunCommit::test tests/func/test_stage.py::TestSchemaCmd::test_no_cmd tests/func/test_run.py::TestRunBadWdir::test tests/func/test_run.py::TestRunPersistOuts::test tests/func/test_run.py::TestRunBadWdir::test_not_dir tests/func/test_stage.py::TestSchemaDepsOuts::test_empty_list tests/func/test_run.py::TestRunPersistOutsNoCache::test tests/func/test_stage.py::TestSchemaDepsOuts::test_list tests/func/test_run.py::TestRunBadWdir::test_not_found tests/func/test_run.py::TestRunBadWdir::test_same_prefix tests/func/test_stage.py::TestSchemaDepsOuts::test_none tests/func/test_run.py::TestShouldRaiseOnOverlappingOutputPaths::test tests/func/test_run.py::TestRunBadName::test tests/func/test_stage.py::TestSchemaDepsOuts::test_object tests/func/test_run.py::TestRunBadName::test_not_found tests/func/test_run.py::TestNewRunShouldRemoveOutsOnNoPersist::test tests/func/test_run.py::TestRunBadName::test_same_prefix tests/func/test_stage.py::TestReload::test tests/func/test_run.py::TestNewRunShouldNotRemoveOutsOnPersist::test tests/func/test_stage.py::TestDefaultWorkingDirectory::test_ignored_in_checksum tests/func/test_run.py::TestShouldNotCheckoutUponCorruptedLocalHardlinkCache::test tests/func/test_run.py::TestRunRemoveOuts::test tests/func/test_run.py::TestPersistentOutput::test_ignore_build_cache tests/func/test_stage.py::TestExternalRemoteResolution::test_remote_dependency tests/func/test_run.py::TestRunUnprotectOutsCopy::test tests/func/test_stage.py::TestExternalRemoteResolution::test_remote_output tests/func/test_run.py::TestRunUnprotectOutsSymlink::test tests/func/test_run.py::TestRunUnprotectOutsHardlink::test tests/func/test_utils.py::TestUtils::test_boxify tests/func/test_utils.py::TestUtils::test_copyfile tests/func/test_utils.py::TestUtils::test_dict_md5 tests/func/test_utils.py::TestUtils::test_file_md5_crlf tests/func/test_unprotect.py::TestUnprotect::test tests/func/test_status.py::TestStatus::test_implied_cloud tests/func/test_status.py::TestStatus::test_quiet tests/func/test_version.py::test_info_outside_of_repo tests/func/test_tag.py::TestTag::test tests/func/test_version.py::test_fs_info_outside_of_repo tests/unit/test_repo.py::TestIsDvcInternal::test_return_false_on_non_dvc_file tests/unit/test_repo.py::TestIsDvcInternal::test_return_true_on_dvc_internal_file tests/unit/dependency/test_gs.py::TestDependencyGS::test_save_missing tests/unit/dependency/test_hdfs.py::TestDependencyLOCAL::test_save_missing tests/unit/dependency/test_hdfs.py::TestDependencyHDFS::test_save_missing tests/unit/dependency/test_http.py::TestDependencyLOCAL::test_save_missing tests/unit/dependency/test_http.py::TestDependencyHTTP::test_save_missing tests/unit/dependency/test_local.py::TestDependencyLOCAL::test_save_missing tests/unit/output/test_hdfs.py::TestOutputLOCAL::test_save_missing tests/unit/output/test_hdfs.py::TestOutputHDFS::test_save_missing tests/unit/output/test_s3.py::TestOutputS3::test_save_missing tests/unit/dependency/test_s3.py::TestDependencyLOCAL::test_save_missing tests/unit/dependency/test_s3.py::TestDependencyS3::test_save_missing tests/unit/output/test_local.py::TestOutputLOCAL::test_save_missing tests/unit/dependency/test_ssh.py::TestDependencyLOCAL::test_save_missing tests/unit/output/test_ssh.py::TestOutputLOCAL::test_save_missing tests/unit/output/test_local.py::TestGetFilesNumber::test_return_0_on_no_cache tests/unit/output/test_local.py::TestGetFilesNumber::test_return_1_on_single_file_cache tests/unit/output/test_ssh.py::TestOutputSSH::test_save_missing tests/unit/output/test_local.py::TestGetFilesNumber::test_return_mutiple_for_dir tests/unit/dependency/test_ssh.py::TestDependencySSH::test_save_missing tests/unit/output/test_s3.py::TestOutputLOCAL::test_save_missing tests/unit/command/test_update.py::test_update tests/unit/output/test_gs.py::TestOutputLOCAL::test_save_missing tests/unit/dependency/test_gs.py::TestDependencyLOCAL::test_save_missing tests/unit/output/test_gs.py::TestOutputGS::test_save_missing tests/unit/scm/test_git.py::TestGit::test_belongs_to_scm_false tests/unit/scm/test_git.py::TestGit::test_belongs_to_scm_true_on_gitignore tests/unit/scm/test_git.py::TestGit::test_belongs_to_scm_true_on_git_internal tests/unit/utils/test_http.py::test_open_url
dvc/version.py dvc/system.py dvc/utils/__init__.py dvc/progress.py dvc/remote/local.py dvc/updater.py dvc/lock.py dvc/analytics.py
dvc/version.py dvc/system.py dvc/utils/__init__.py dvc/progress.py dvc/remote/local.py dvc/updater.py dvc/lock.py dvc/analytics.py