# Buggy code
def _checkout_dir(self, path_info, checksum, force, progress_callback=None):
    # Create dir separately so that dir is created
    # even if there are no files in it
    if not self.exists(path_info):
        self.makedirs(path_info)

    dir_info = self.get_dir_cache(checksum)

    logger.debug("Linking directory '{}'.".format(path_info))

    for entry in dir_info:
        relpath = entry[self.PARAM_RELPATH]
        entry_checksum = entry[self.PARAM_CHECKSUM]
        entry_cache_info = self.checksum_to_path_info(entry_checksum)
        entry_info = path_info / relpath

        entry_checksum_info = {self.PARAM_CHECKSUM: entry_checksum}
        if self.changed(entry_info, entry_checksum_info):
            if self.exists(entry_info):
                self.safe_remove(entry_info, force=force)
            self.link(entry_cache_info, entry_info)
            self.state.save(entry_info, entry_checksum)
        if progress_callback:
            progress_callback.update(str(entry_info))

    self._remove_redundant_files(path_info, dir_info, force)

    self.state.save_link(path_info)
    self.state.save(path_info, checksum)


# 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 _checkout_dir(self, path_info, checksum, force, progress_callback=None):
    # Create dir separately so that dir is created
    # even if there are no files in it
    if not self.exists(path_info):
        self.makedirs(path_info)

    dir_info = self.get_dir_cache(checksum)

    logger.debug("Linking directory '{}'.".format(path_info))

    for entry in dir_info:
        relative_path = entry[self.PARAM_RELPATH]
        entry_checksum = entry[self.PARAM_CHECKSUM]
        entry_cache_info = self.checksum_to_path_info(entry_checksum)
        entry_info = path_info / relative_path

        entry_checksum_info = {self.PARAM_CHECKSUM: entry_checksum}
        if self.changed(entry_info, entry_checksum_info):
            if self.exists(entry_info):
                self.safe_remove(entry_info, force=force)
            self.link(entry_cache_info, entry_info)
            self.state.save(entry_info, entry_checksum)
        if progress_callback:
            progress_callback.update(str(entry_info))

    self._remove_redundant_files(path_info, dir_info, force)

    self.state.save_link(path_info)
    self.state.save(path_info, checksum)