casperdcl: also not sure whether this is a bug/feature request/enhancement :D
efiop: `dvc run` comes to mind as well. Same with `dvc import -o` and `dvc import-url`. You might want to just do that convertion in the OutputBASE/LOCAL class, when we mutating the `def_path`.


casperdcl: will that also affect paths written in `*.dvc` files?
efiop: @casperdcl Yes, but that is the point of this PR, right?
efiop: @casperdcl ?
casperdcl: > `dvc run` comes to mind as well. Same with `dvc import -o` and `dvc import-url`. You might want to just do that convertion in the OutputBASE/LOCAL class, when we mutating the `def_path`.

I think `dvc.output.local.OutputLOCAL` is already fine (there's a lot of complicated logic in it).

Just pushed an update for `dvc.output.base.OutputBASE`...
efiop: Thanks @casperdcl ! Looks good! Please see some comments above 🙂 
casperdcl: @efiop ok the style inconsistencies are now annoying. I feel like opening a new PR to fix things like relative imports and linting bash scripts...

Would you prefer I revert imports here?
efiop: @casperdcl We have issues for both of those already IIRC.

> Would you prefer I revert imports here?

Let them be this time, but please don't include things like that next time.

efiop: @Suor Using abs paths to in-repo files will cause adding them as external local outputs, which is not right. This change will break cases where there was a misuse, which is ok. There is no reason to drop this PR.
Suor: @efiop but is within and out of repo dir is not constant. 
efiop: @Suor Git doesn't have "external" stuff, but same as it, anything inside of our repo is an in-repo data, even if user has specified an absolute path. We've received reports from confused users, hence why we are fixing it here this way. 
casperdcl: I think maybe we could print a warning about converting abs => relative?

> Git doesn't have "external" stuff

Well actually I regularly do things like mess with `--local core.worktree` but in general I think it's safe to assume *"external" suff* isn't intended.
casperdcl: I think there are more people who e.g. drag-drop files into terminals (autofilling abs paths) and then expect them to be treated as relative to the repo than people who deliberately want in-repo paths to be tracked as external/absolute paths.
efiop: > I think maybe we could print a warning about converting abs => relative?

No need, when users add files this way they _expect_ them to become in-repo ones. Our current behavior is a bug, no need to put a warning on top. 🙂 

> Well actually I regularly do things like mess with --local core.worktree but in general I think it's safe to assume "external" suff isn't intended.

That is not the same "external" stuff that I'm talking about. `git add /absolute/out/of/repo/path` won't work, but `dvc add /absolute/out/of/repo/path` does.

So let's add a test here and we can merge it 🙂 

efiop: @casperdcl Also https://github.com/iterative/dvc/pull/2975#discussion_r368566499 
Suor: @casperdcl if you are going to add it to `OutputLocal` then it should be `OutputLocal._parse_path()`.
Suor: If we are going to fix this, we should not do that at `Output*` level, we should handle that somewhere closer to UI. `OutputBase/Local` doesn't know whether it got path from user or from `.dvc` file. 
efiop: @Suor There is `is_in_repo` already in Output*, handling abs path is suitable there as well.
casperdcl: Hmm. Maybe @efiop/@Suor you want to open an alternative PR and close this one? It looks like it's going to be just a couple of lines to change but requires a lot of discussion.
Suor: @efiop It could be easier to implement it in `Output*`, but it doesn't make it right. This will ignore whatever user wrote in `.dvc` file. Will rewrite it to rel path on `.dvc` file rewrite, but otherwise it will be silent.

So if this is user input bug then it should be handled where a user input is handled.
efiop: > It could be easier to implement it in Output*, but it doesn't make it right. This will ignore whatever user wrote in .dvc file. Will rewrite it to rel path on .dvc file rewrite, but otherwise it will be silent.

I think that it is alright. Can see someone writing a dvc file with `$(pwd)/output`, still expecting it to be handled properly as an in-repo file. So it is a user input bug and solving it in Output* will make it right once and for all.
efiop: @casperdcl Let's finish this one as proposed in this PR.
casperdcl: > Can see someone writing a dvc file with `$(pwd)/output`, still expecting it to be handled properly as an in-repo file

Not sure about that. If I manually edit a dvc-file by hand, I wouldn't want it to be silently changed.
casperdcl: @efiop the failing tests are the ones that need to be changed for the new behaviour. I'll fix them but first wanted some feedback on the implementation.
efiop: > Not sure about that. If I manually edit a dvc-file by hand, I wouldn't want it to be silently changed.

We do that in other fields, it is only changed when re-written.

> not sure about the distinction between def_path and path_info

`def_path` is what is recorded into the dvc-file, while `path_info` is a resolved path (e.g. we support stuff like `remote://mylocalremote/path`.
casperdcl: > We do that in other fields, it is only changed when re-written (e.g. on `dvc repro`).

Right sounds like discussion for a different issue.

> `def_path` is what is recorded into the dvc-file, while `path_info` is a resolved path (e.g. we support stuff like `remote://mylocalremote/path`.

So I think that means `path_info` should not be modified? i.e.

```python
# path_info before == after
assert self._parse_path(self.remote, self.def_path) == \
  self._parse_path(self.remote, relpath(self.def_path, self.repo.root_dir))
```
efiop: > So I think that means path_info should not be modified? i.e.

I'm pretty sure it doesn't matter, as long as def_path is the same, as path_infos will be used by abspath anyway.
Suor: Stumbled upon this while doing some updates to `dvcx` publishing, looks like we need to make `.is_in_repo` say `True` for absolute paths when that path is in repo root. This will trigger automatic in repo handling for `Stage.create(..., add=True)`, which will do the job naturally.
casperdcl: > Stumbled upon this while doing some updates to `dvcx` publishing, looks like we need to make `.is_in_repo` say `True` for absolute paths when that path is in repo root. This will trigger automatic in repo handling for `Stage.create(..., add=True)`, which will do the job naturally.

If that fixes this issue I'd say it's a bug because of

> def_path is resolved relative to `stage.wdir` when it is loaded, so it has to be relative to `stage.wdir` not the repo root

See https://github.com/iterative/dvc/pull/2975#discussion_r375414004
Suor: > If that fixes this issue I'd say it's a bug because of

If `def_path` or more precisely `dvc add` argument is absolute it is not resolved as relative to anything. So I can't see any bug.
efiop: > Stumbled upon this while doing some updates to dvcx publishing, looks like we need to make .is_in_repo say True for absolute paths when that path is in repo root. This will trigger automatic in repo handling for Stage.create(..., add=True), which will do the job naturally.

Good point, that might work, but I'm worried about `def_path` being not quire right until we actually write the dvc-file. Might be still suitable though.
casperdcl: I decided not to touch `is_in_repo` for now; not sure if changing its behaviour will break anything else.
efiop: @casperdcl `is_in_repo` now works automatically because you've adjusted def_path. :+1:

@Suor Adjusting `is_in_repo` will affect def_path only in `dumpd`, so effectively only after reloading, which is not the best way of handling it, as it will break the symmetry between "before" and "after" reloading. 
diff --git a/dvc/analytics.py b/dvc/analytics.py
index 7c0a69310..76dbc335c 100644
--- a/dvc/analytics.py
+++ b/dvc/analytics.py
@@ -76,7 +76,10 @@ def send(report):
     headers = {"content-type": "application/json"}
 
     with open(report, "rb") as fobj:
-        requests.post(url, data=fobj, headers=headers, timeout=5)
+        try:
+            requests.post(url, data=fobj, headers=headers, timeout=5)
+        except requests.exceptions.RequestException:
+            logger.debug("failed to send analytics report", exc_info=True)
 
     os.remove(report)
 
diff --git a/dvc/logger.py b/dvc/logger.py
index 9385a6aa2..d1cf08e83 100644
--- a/dvc/logger.py
+++ b/dvc/logger.py
@@ -51,7 +51,6 @@ class ColorFormatter(logging.Formatter):
 
     color_code = {
         "DEBUG": colorama.Fore.BLUE,
-        "INFO": "",
         "WARNING": colorama.Fore.YELLOW,
         "ERROR": colorama.Fore.RED,
         "CRITICAL": colorama.Fore.RED,
@@ -59,29 +58,21 @@ class ColorFormatter(logging.Formatter):
 
     def format(self, record):
         msg = record.msg.format(*record.args) if record.args else record.msg
+        exception, stack_trace = self._parse_exc(record)
+        return ("{prefix}{description}{stack_trace}").format(
+            prefix=self._prefix(record),
+            description=self._description(msg, exception),
+            stack_trace=stack_trace,
+        )
 
+    def _prefix(self, record):
         if record.levelname == "INFO":
-            return msg
-
-        if record.levelname == "ERROR" or record.levelname == "CRITICAL":
-            exception, stack_trace = self._parse_exc(record)
-
-            return (
-                "{color}{levelname}{nc}: {description}" "{stack_trace}\n"
-            ).format(
-                color=self.color_code.get(record.levelname, ""),
-                nc=colorama.Fore.RESET,
-                levelname=record.levelname,
-                description=self._description(msg, exception),
-                msg=msg,
-                stack_trace=stack_trace,
-            )
+            return ""
 
-        return "{color}{levelname}{nc}: {msg}".format(
+        return "{color}{levelname}{nc}: ".format(
             color=self.color_code.get(record.levelname, ""),
-            nc=colorama.Fore.RESET,
             levelname=record.levelname,
-            msg=msg,
+            nc=colorama.Fore.RESET,
         )
 
     def _current_level(self):
diff --git a/dvc/output/local.py b/dvc/output/local.py
index 0e1b72dc9..6e4123d1e 100644
--- a/dvc/output/local.py
+++ b/dvc/output/local.py
@@ -18,6 +18,12 @@ class OutputLOCAL(OutputBase):
     REMOTE = RemoteLOCAL
     sep = os.sep
 
+    def __init__(self, stage, path, *args, **kwargs):
+        if stage and path_isin(path, stage.repo.root_dir):
+            path = relpath(path, stage.wdir)
+
+        super().__init__(stage, path, *args, **kwargs)
+
     def _parse_path(self, remote, path):
         parsed = urlparse(path)
         if parsed.scheme == "remote":
diff --git a/dvc/remote/gdrive.py b/dvc/remote/gdrive.py
index 9cbca729e..4bffb60b4 100644
--- a/dvc/remote/gdrive.py
+++ b/dvc/remote/gdrive.py
@@ -275,6 +275,13 @@ class RemoteGDrive(RemoteBASE):
         item.Upload()
         return item
 
+    @gdrive_retry
+    def delete_remote_file(self, remote_id):
+        param = {"id": remote_id}
+        # it does not create a file on the remote
+        item = self.drive.CreateFile(param)
+        item.Delete()
+
     @gdrive_retry
     def get_remote_item(self, name, parents_ids):
         if not parents_ids:
@@ -387,3 +394,7 @@ class RemoteGDrive(RemoteBASE):
             except ValueError:
                 # We ignore all the non-cache looking files
                 logger.debug('Ignoring path as "non-cache looking"')
+
+    def remove(self, path_info):
+        remote_id = self.get_remote_id(path_info)
+        self.delete_remote_file(remote_id)
diff --git a/dvc/version.py b/dvc/version.py
index 586e45286..089533383 100644
--- a/dvc/version.py
+++ b/dvc/version.py
@@ -7,7 +7,7 @@ import os
 import subprocess
 
 
-_BASE_VERSION = "0.82.9"
+_BASE_VERSION = "0.83.0"
 
 
 def _generate_version(base_version):
diff --git a/setup.py b/setup.py
index 1eac416a2..40b3b16c5 100644
--- a/setup.py
+++ b/setup.py
@@ -85,7 +85,7 @@ install_requires = [
 # Extra dependencies for remote integrations
 
 gs = ["google-cloud-storage==1.19.0"]
-gdrive = ["pydrive2>=1.4.2"]
+gdrive = ["pydrive2>=1.4.5"]
 s3 = ["boto3>=1.9.201"]
 azure = ["azure-storage-blob==2.1.0"]
 oss = ["oss2==2.6.1"]

dvc add absolute_path
`~/repo$ dvc add $HOME/repo/file` should realise that the file is not "external" and add it as a relative path rather than absolute.
diff --git a/tests/func/test_add.py b/tests/func/test_add.py
index 1ce44a0b0..002722f52 100644
--- a/tests/func/test_add.py
+++ b/tests/func/test_add.py
@@ -216,7 +216,7 @@ class TestAddLocalRemoteFile(TestDvc):
         self.assertEqual(ret, 0)
 
         d = load_stage_file("bar.dvc")
-        self.assertEqual(d["outs"][0]["path"], bar)
+        self.assertEqual(d["outs"][0]["path"], self.BAR)
 
 
 class TestCmdAdd(TestDvc):
diff --git a/tests/unit/output/test_local.py b/tests/unit/output/test_local.py
index 50059e6ea..ef029d294 100644
--- a/tests/unit/output/test_local.py
+++ b/tests/unit/output/test_local.py
@@ -42,13 +42,28 @@ def test_str_workdir_inside_repo(dvc):
     assert os.path.join("some_folder", "path") == str(output)
 
 
-def test_str_on_absolute_path(dvc):
+def test_str_on_local_absolute_path(dvc):
     stage = Stage(dvc)
 
-    path = os.path.abspath(os.path.join("path", "to", "file"))
-    output = OutputLOCAL(stage, path, cache=False)
+    rel_path = os.path.join("path", "to", "file")
+    abs_path = os.path.abspath(rel_path)
+    output = OutputLOCAL(stage, abs_path, cache=False)
 
-    assert path == str(output)
+    assert output.def_path == rel_path
+    assert output.path_info.fspath == abs_path
+    assert str(output) == rel_path
+
+
+def test_str_on_external_absolute_path(dvc):
+    stage = Stage(dvc)
+
+    rel_path = os.path.join("..", "path", "to", "file")
+    abs_path = os.path.abspath(rel_path)
+    output = OutputLOCAL(stage, abs_path, cache=False)
+
+    assert output.def_path == abs_path
+    assert output.path_info.fspath == abs_path
+    assert str(output) == abs_path
 
 
 class TestGetFilesNumber(TestDvc):
diff --git a/tests/unit/test_analytics.py b/tests/unit/test_analytics.py
index 3179aeff0..9413e781b 100644
--- a/tests/unit/test_analytics.py
+++ b/tests/unit/test_analytics.py
@@ -61,16 +61,19 @@ def test_runtime_info(tmp_global_config):
 
 @mock.patch("requests.post")
 def test_send(mock_post, tmp_path):
+    import requests
+
     url = "https://analytics.dvc.org"
     report = {"name": "dummy report"}
-    fname = str(tmp_path / "report")
+    report_file = tmp_path / "report"
 
-    with open(fname, "w") as fobj:
-        json.dump(report, fobj)
+    report_file.write_text(json.dumps(report))
+    mock_post.side_effect = requests.exceptions.RequestException
 
-    analytics.send(fname)
+    analytics.send(str(report_file))
     assert mock_post.called
     assert mock_post.call_args.args[0] == url
+    assert not report_file.exists()
 
 
 @pytest.mark.parametrize(
diff --git a/tests/unit/test_logger.py b/tests/unit/test_logger.py
index 0847a5e45..1b7d906e1 100644
--- a/tests/unit/test_logger.py
+++ b/tests/unit/test_logger.py
@@ -44,7 +44,7 @@ class TestColorFormatter:
         with caplog.at_level(logging.INFO, logger="dvc"):
             logger.error("message")
 
-            expected = "{red}ERROR{nc}: message\n".format(**colors)
+            expected = "{red}ERROR{nc}: message".format(**colors)
 
             assert expected == formatter.format(caplog.records[0])
 
@@ -55,7 +55,7 @@ class TestColorFormatter:
             except Exception:
                 logger.exception("message")
 
-            expected = "{red}ERROR{nc}: message\n".format(**colors)
+            expected = "{red}ERROR{nc}: message".format(**colors)
 
             assert expected == formatter.format(caplog.records[0])
 
@@ -66,7 +66,7 @@ class TestColorFormatter:
             except Exception:
                 logger.exception("")
 
-            expected = "{red}ERROR{nc}: description\n".format(**colors)
+            expected = "{red}ERROR{nc}: description".format(**colors)
 
             assert expected == formatter.format(caplog.records[0])
 
@@ -77,9 +77,7 @@ class TestColorFormatter:
             except Exception:
                 logger.exception("message")
 
-            expected = "{red}ERROR{nc}: message - description\n".format(
-                **colors
-            )
+            expected = "{red}ERROR{nc}: message - description".format(**colors)
 
             assert expected == formatter.format(caplog.records[0])
 
@@ -95,7 +93,7 @@ class TestColorFormatter:
                 "{red}ERROR{nc}: description\n"
                 "{red}{line}{nc}\n"
                 "{stack_trace}"
-                "{red}{line}{nc}\n".format(
+                "{red}{line}{nc}".format(
                     line="-" * 60, stack_trace=stack_trace, **colors
                 )
             )
@@ -114,7 +112,7 @@ class TestColorFormatter:
                 "{red}ERROR{nc}: something\n"
                 "{red}{line}{nc}\n"
                 "{stack_trace}"
-                "{red}{line}{nc}\n".format(
+                "{red}{line}{nc}".format(
                     line="-" * 60, stack_trace=stack_trace, **colors
                 )
             )
@@ -136,7 +134,7 @@ class TestColorFormatter:
                 "{red}ERROR{nc}: message - second: first\n"
                 "{red}{line}{nc}\n"
                 "{stack_trace}"
-                "{red}{line}{nc}\n".format(
+                "{red}{line}{nc}".format(
                     line="-" * 60, stack_trace=stack_trace, **colors
                 )
             )

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
aliyun-python-sdk-core==2.16.0
aliyun-python-sdk-core-v3==2.13.33
aliyun-python-sdk-kms==2.16.5
appdirs==1.4.4
atpublic==3.1.2
attrs @ file:///croot/attrs_1668696182826/work
autocommand==2.2.2
awscli==1.31.13
azure-common==1.1.28
azure-storage-blob==2.1.0
azure-storage-common==2.1.0
bcrypt==4.2.1
boto==2.49.0
boto3==1.33.13
botocore==1.33.13
cachetools==4.2.4
certifi @ file:///croot/certifi_1671487769961/work/certifi
cffi==1.15.1
charset-normalizer==3.4.1
collective.checkdocs==0.2
colorama==0.4.4
configobj==5.0.9
coverage==7.2.7
crcmod==1.7
cryptography==44.0.2
decorator==5.1.1
distro==1.9.0
docutils==0.16
-e git+https://github.com/iterative/dvc.git@e7b3297c2d6ae1ad633cd0435cca81093cac86ff#egg=dvc
execnet==2.0.2
flake8==5.0.4
flake8-docstrings==1.7.0
flaky==3.8.1
flatten-json==0.1.14
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
flufl.lock==7.1.1
funcy==2.0
future==1.0.0
gitdb==4.0.12
gitdb2==4.0.2
GitPython==3.1.44
google-api-core==2.10.2
google-api-python-client==2.166.0
google-auth==1.35.0
google-auth-httplib2==0.2.0
google-cloud-core==1.7.3
google-cloud-storage==1.19.0
google-compute-engine==2.8.13
google-crc32c==1.5.0
google-resumable-media==2.7.2
googleapis-common-protos==1.69.2
grandalf==0.6
httplib2==0.22.0
humanize==4.6.0
idna==3.10
importlib-metadata==4.2.0
importlib-resources==5.12.0
inflect==3.0.2
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
jaraco.classes==3.2.3
jaraco.collections==4.2.0
jaraco.context==4.3.0
jaraco.functools==3.7.0
jaraco.structures==2.1.0
jaraco.text==3.11.1
jaraco.ui==2.3.0
jaraco.windows==5.7.0
Jinja2==3.1.6
jmespath==0.10.0
jsonpath-ng==1.7.0
MarkupSafe==2.1.5
mccabe==0.7.0
mock==5.2.0
mock-ssh-server==0.9.1
more-itertools==9.1.0
moto==4.2.14
nanotime==0.5.2
networkx==2.3
numpy==1.21.6
oauth2client==4.1.3
oss2==2.6.1
packaging @ file:///croot/packaging_1671697413597/work
paramiko==3.5.1
path==16.6.0
pathspec==0.11.2
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
ply==3.11
protobuf==4.24.4
psutil==7.0.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyarrow==0.15.1
pyasn1==0.5.1
pyasn1-modules==0.3.0
pycodestyle==2.9.1
pycparser==2.21
pycryptodome==3.22.0
pydantic==1.10.21
pydocstyle==6.3.0
pydot==2.0.0
PyDrive2==1.15.4
pyfastcopy==1.0.3
pyflakes==2.5.0
Pygments==2.17.2
PyNaCl==1.5.0
pyOpenSSL==25.0.0
pyparsing==3.1.4
pytest==7.1.2
pytest-cov==4.1.0
pytest-mock==3.11.1
pytest-timeout==2.3.1
pytest-xdist==3.5.0
python-dateutil==2.8.0
PyYAML==5.1.2
rangehttpserver==1.4.0
requests==2.31.0
responses==0.23.3
rsa==4.7.2
ruamel.yaml==0.18.10
ruamel.yaml.clib==0.2.8
s3transfer==0.8.2
shortuuid==1.0.13
six==1.17.0
smmap==5.0.2
snowballstemmer==2.2.0
speedcopy==2.1.5
texttable==1.7.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
tqdm==4.67.1
treelib==1.7.1
types-PyYAML==6.0.12.12
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
uritemplate==4.1.1
urllib3==1.26.20
voluptuous==0.14.1
Werkzeug==2.2.3
xmltodict==0.14.2
zc.lockfile==3.0.post1
zipp @ file:///croot/zipp_1672387121353/work

name: dvc
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aliyun-python-sdk-core==2.16.0
      - aliyun-python-sdk-core-v3==2.13.33
      - aliyun-python-sdk-kms==2.16.5
      - appdirs==1.4.4
      - atpublic==3.1.2
      - autocommand==2.2.2
      - awscli==1.31.13
      - azure-common==1.1.28
      - azure-storage-blob==2.1.0
      - azure-storage-common==2.1.0
      - bcrypt==4.2.1
      - boto==2.49.0
      - boto3==1.33.13
      - botocore==1.33.13
      - cachetools==4.2.4
      - cffi==1.15.1
      - charset-normalizer==3.4.1
      - collective-checkdocs==0.2
      - colorama==0.4.4
      - configobj==5.0.9
      - coverage==7.2.7
      - crcmod==1.7
      - cryptography==44.0.2
      - decorator==5.1.1
      - distro==1.9.0
      - docutils==0.16
      - dvc==0.82.9+e7b329
      - execnet==2.0.2
      - flake8==5.0.4
      - flake8-docstrings==1.7.0
      - flaky==3.8.1
      - flatten-json==0.1.14
      - flufl-lock==7.1.1
      - funcy==2.0
      - future==1.0.0
      - gitdb==4.0.12
      - gitdb2==4.0.2
      - gitpython==3.1.44
      - google-api-core==2.10.2
      - google-api-python-client==2.166.0
      - google-auth==1.35.0
      - google-auth-httplib2==0.2.0
      - google-cloud-core==1.7.3
      - google-cloud-storage==1.19.0
      - google-compute-engine==2.8.13
      - google-crc32c==1.5.0
      - google-resumable-media==2.7.2
      - googleapis-common-protos==1.69.2
      - grandalf==0.6
      - httplib2==0.22.0
      - humanize==4.6.0
      - idna==3.10
      - importlib-metadata==4.2.0
      - importlib-resources==5.12.0
      - inflect==3.0.2
      - jaraco-classes==3.2.3
      - jaraco-collections==4.2.0
      - jaraco-context==4.3.0
      - jaraco-functools==3.7.0
      - jaraco-structures==2.1.0
      - jaraco-text==3.11.1
      - jaraco-ui==2.3.0
      - jaraco-windows==5.7.0
      - jinja2==3.1.6
      - jmespath==0.10.0
      - jsonpath-ng==1.7.0
      - markupsafe==2.1.5
      - mccabe==0.7.0
      - mock==5.2.0
      - mock-ssh-server==0.9.1
      - more-itertools==9.1.0
      - moto==4.2.14
      - nanotime==0.5.2
      - networkx==2.3
      - numpy==1.21.6
      - oauth2client==4.1.3
      - oss2==2.6.1
      - paramiko==3.5.1
      - path==16.6.0
      - pathspec==0.11.2
      - ply==3.11
      - protobuf==4.24.4
      - psutil==7.0.0
      - pyarrow==0.15.1
      - pyasn1==0.5.1
      - pyasn1-modules==0.3.0
      - pycodestyle==2.9.1
      - pycparser==2.21
      - pycryptodome==3.22.0
      - pydantic==1.10.21
      - pydocstyle==6.3.0
      - pydot==2.0.0
      - pydrive2==1.15.4
      - pyfastcopy==1.0.3
      - pyflakes==2.5.0
      - pygments==2.17.2
      - pynacl==1.5.0
      - pyopenssl==25.0.0
      - pyparsing==3.1.4
      - pytest-cov==4.1.0
      - pytest-mock==3.11.1
      - pytest-timeout==2.3.1
      - pytest-xdist==3.5.0
      - python-dateutil==2.8.0
      - pyyaml==5.1.2
      - rangehttpserver==1.4.0
      - requests==2.31.0
      - responses==0.23.3
      - rsa==4.7.2
      - ruamel-yaml==0.18.10
      - ruamel-yaml-clib==0.2.8
      - s3transfer==0.8.2
      - shortuuid==1.0.13
      - six==1.17.0
      - smmap==5.0.2
      - snowballstemmer==2.2.0
      - speedcopy==2.1.5
      - texttable==1.7.0
      - tqdm==4.67.1
      - treelib==1.7.1
      - types-pyyaml==6.0.12.12
      - uritemplate==4.1.1
      - urllib3==1.26.20
      - voluptuous==0.14.1
      - werkzeug==2.2.3
      - xmltodict==0.14.2
      - zc-lockfile==3.0.post1
prefix: /opt/conda/envs/dvc

tests/func/test_add.py::TestAddLocalRemoteFile::test tests/unit/output/test_local.py::test_str_on_local_absolute_path tests/unit/test_analytics.py::test_send tests/unit/test_logger.py::TestColorFormatter::test_error tests/unit/test_logger.py::TestColorFormatter::test_exception tests/unit/test_logger.py::TestColorFormatter::test_exception_with_description_and_without_message tests/unit/test_logger.py::TestColorFormatter::test_exception_with_description_and_message tests/unit/test_logger.py::TestColorFormatter::test_exception_under_verbose tests/unit/test_logger.py::TestColorFormatter::test_tb_only tests/unit/test_logger.py::TestColorFormatter::test_nested_exceptions
tests/func/test_add.py::TestAddUnprotected::test tests/func/test_add.py::test_should_protect_on_repeated_add[hardlink] tests/func/test_add.py::test_should_protect_on_repeated_add[symlink] tests/func/test_add.py::test_should_protect_on_repeated_add[copy]
tests/func/test_add.py::test_add tests/func/test_add.py::test_add_unicode tests/func/test_add.py::test_add_unsupported_file tests/func/test_add.py::test_add_directory tests/func/test_add.py::TestAddDirectoryRecursive::test tests/func/test_add.py::TestAddCmdDirectoryRecursive::test tests/func/test_add.py::TestAddCmdDirectoryRecursive::test_warn_about_large_directories tests/func/test_add.py::TestAddDirectoryWithForwardSlash::test tests/func/test_add.py::test_add_tracked_file tests/func/test_add.py::TestAddDirWithExistingCache::test tests/func/test_add.py::TestAddModifiedDir::test tests/func/test_add.py::test_add_file_in_dir tests/func/test_add.py::TestAddExternalLocalFile::test tests/func/test_add.py::TestCmdAdd::test tests/func/test_add.py::TestDoubleAddUnchanged::test_dir tests/func/test_add.py::TestDoubleAddUnchanged::test_file tests/func/test_add.py::test_should_update_state_entry_for_file_after_add tests/func/test_add.py::test_should_update_state_entry_for_directory_after_add tests/func/test_add.py::TestAddCommit::test tests/func/test_add.py::test_should_collect_dir_cache_only_once tests/func/test_add.py::TestShouldAddDataFromExternalSymlink::test tests/func/test_add.py::TestShouldAddDataFromInternalSymlink::test tests/func/test_add.py::TestShouldPlaceStageInDataDirIfRepositoryBelowSymlink::test tests/func/test_add.py::TestShouldThrowProperExceptionOnCorruptedStageFile::test tests/func/test_add.py::TestAddFilename::test tests/func/test_add.py::test_failed_add_cleanup tests/func/test_add.py::test_should_not_track_git_internal_files tests/func/test_add.py::test_readding_dir_should_not_unprotect_all tests/func/test_add.py::test_should_not_checkout_when_adding_cached_copy tests/func/test_add.py::test_should_relink_on_repeated_add[hardlink-copy-<lambda>] tests/func/test_add.py::test_should_relink_on_repeated_add[symlink-copy-<lambda>] tests/func/test_add.py::test_should_relink_on_repeated_add[copy-hardlink-is_hardlink] tests/func/test_add.py::test_should_relink_on_repeated_add[copy-symlink-is_symlink] tests/func/test_add.py::test_escape_gitignore_entries tests/unit/output/test_local.py::TestOutputLOCAL::test_save_missing tests/unit/output/test_local.py::test_str_workdir_outside_repo tests/unit/output/test_local.py::test_str_workdir_inside_repo tests/unit/output/test_local.py::test_str_on_external_absolute_path 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_local.py::TestGetFilesNumber::test_return_multiple_for_dir tests/unit/test_analytics.py::test_collect_and_send_report tests/unit/test_analytics.py::test_runtime_info tests/unit/test_analytics.py::test_is_enabled[config0-True] tests/unit/test_analytics.py::test_is_enabled[config1-False] tests/unit/test_analytics.py::test_is_enabled[config2-True] tests/unit/test_analytics.py::test_is_enabled[config3-True] tests/unit/test_analytics.py::test_is_enabled[config4-False] tests/unit/test_analytics.py::test_system_info tests/unit/test_analytics.py::test_find_or_create_user_id tests/unit/test_logger.py::TestColorFormatter::test_debug tests/unit/test_logger.py::TestColorFormatter::test_info tests/unit/test_logger.py::TestColorFormatter::test_warning tests/unit/test_logger.py::TestColorFormatter::test_progress_awareness tests/unit/test_logger.py::test_handlers
dvc/version.py dvc/remote/gdrive.py setup.py dvc/output/local.py dvc/logger.py dvc/analytics.py
dvc/version.py dvc/remote/gdrive.py setup.py dvc/output/local.py dvc/logger.py dvc/analytics.py