# Buggy code
def _collect_dir(self, path_info):
    dir_info = []

    for root, dirs, files in self.walk(path_info):
        if len(files) > LARGE_DIR_SIZE:
            msg = "Computing md5 for a large directory {}. This is only done once."
            title = str(self.path_cls(root))
            logger.info(msg.format(title))
            files = progress(files, name=title)

        for fname in files:
            file_info = self.path_cls(root) / fname
            relpath = file_info.relative_to(path_info)
            dir_info.append(
                {
                    # NOTE: this is lossy transformation:
                    #   "hey\there" -> "hey/there"
                    #   "hey/there" -> "hey/there"
                    # The latter is fine filename on Windows,
                    # which will transform to dir/file on back transform.
                    #
                    # Yes, this is a BUG, as long as we permit "/" in
                    # filenames on Windows and "\" on Unix
                    self.PARAM_RELPATH: relpath.as_posix(),
                    self.PARAM_CHECKSUM: self.get_file_checksum(file_info),
                }
            )

    # NOTE: sorting the list by path to ensure reproducibility
    return sorted(dir_info, key=itemgetter(self.PARAM_RELPATH))


# Traceback (ValueError)
ERROR: failed to pull data from the cloud - path is on mount 'F:', start on mount 'C:'
Traceback (most recent call last):
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\command\data_sync.py", line 46, in
do_run recursive=self.args.recursive,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\repo\pull.py", line 24, in pull
recursive=recursive,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\repo\fetch.py", line 27, in fetch
used, jobs, remote=remote, show_checksums=show_checksums
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\data_cloud.py", line 144, in pull
show_checksums=show_checksums,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 493, in pull
download=True,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 459, in _process
download=download,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 358, in status
local_exists = self.cache_exists(md5s)
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 232, in cache_exists
return list(filter(lambda md5: not self.changed_cache_file(md5), md5s))
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 232, in <lambda>
return list(filter(lambda md5: not self.changed_cache_file(md5), md5s))
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\base.py", line 518, in changed_cache_file
actual = self.get_checksum(cache_info)
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\base.py", line 275, in get_checksum
checksum = self.get_file_checksum(path_info)
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 208, in get_file_checksum
return file_md5(path_info.path)[0]
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\utils\__init__.py", line 48, in file_md5                      logger.info(msg.format(os.path.relpath(fname)))
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\ntpath.py", line 584, in relpath
path_drive, start_drive))                                                                                                                        ValueError: path is on mount 'F:', start on mount 'C:'

# Fixed code
def _collect_dir(self, path_info):
    dir_info = []

    for root, dirs, files in self.walk(path_info):
        if len(files) > LARGE_DIR_SIZE:
            msg = "Computing md5 for a large directory {}. This is only done once."
            title = str(self.path_cls(root))
            logger.info(msg.format(title))
            files = progress(files, name=title)

        for fname in files:
            file_info = self.path_cls(root) / fname
            relative_path = file_info.relative_to(path_info)
            dir_info.append(
                {
                    # NOTE: this is lossy transformation:
                    #   "hey\there" -> "hey/there"
                    #   "hey/there" -> "hey/there"
                    # The latter is fine filename on Windows,
                    # which will transform to dir/file on back transform.
                    #
                    # Yes, this is a BUG, as long as we permit "/" in
                    # filenames on Windows and "\" on Unix
                    self.PARAM_RELPATH: relative_path.as_posix(),
                    self.PARAM_CHECKSUM: self.get_file_checksum(file_info),
                }
            )

    # NOTE: sorting the list by path to ensure reproducibility
    return sorted(dir_info, key=itemgetter(self.PARAM_RELPATH))