def save_link(self, path_info): """Adds the specified path to the list of links created by dvc. This list is later used on `dvc checkout` to cleanup old links. Args: path_info (dict): path info to add to the list of links. """ assert isinstance(path_info, str) or path_info.scheme == "local" if not self.tree.exists(path_info): return mtime, _ = get_mtime_and_size(path_info, self.tree) inode = get_inode(path_info) relative_path = relpath(path_info, self.root_dir) cmd = "REPLACE INTO {}(path, inode, mtime) " "VALUES (?, ?, ?)".format( self.LINK_STATE_TABLE) self._execute(cmd, (relative_path, self._to_sqlite(inode), mtime))
def save_link(self, path_info, fs): """Adds the specified path to the list of links created by dvc. This list is later used on `dvc checkout` to cleanup old links. Args: path_info (dict): path info to add to the list of links. """ if not isinstance(fs, LocalFileSystem): return try: mtime, _ = get_mtime_and_size(path_info, fs, self.dvcignore) except FileNotFoundError: return inode = get_inode(path_info) relative_path = relpath(path_info, self.root_dir) with self.links as ref: ref[relative_path] = (inode, mtime)
def save_link(self, path_info, fs): """Adds the specified path to the list of links created by dvc. This list is later used on `dvc checkout` to cleanup old links. Args: path_info (dict): path info to add to the list of links. """ if not isinstance(fs, LocalFileSystem): return assert isinstance(path_info, str) or path_info.scheme == "local" if not self.fs.exists(path_info): return mtime, _ = get_mtime_and_size(path_info, self.fs) inode = get_inode(path_info) relative_path = relpath(path_info, self.root_dir) with self.links as ref: ref[relative_path] = (inode, mtime)
def save_link(self, path_info): """Adds the specified path to the list of links created by dvc. This list is later used on `dvc checkout` to cleanup old links. Args: path_info (dict): path info to add to the list of links. """ assert path_info["scheme"] == "local" path = path_info["path"] if not os.path.exists(path): return mtime, _ = get_mtime_and_size(path) inode = get_inode(path) relpath = os.path.relpath(path, self.root_dir) cmd = ("REPLACE INTO {}(path, inode, mtime) " 'VALUES ("{}", {}, "{}")'.format(self.LINK_STATE_TABLE, relpath, self._to_sqlite(inode), mtime)) self._execute(cmd)
def save(self, path_info, checksum): """Save checksum for the specified path info. Args: path_info (dict): path_info to save checksum for. checksum (str): checksum to save. """ assert isinstance(path_info, str) or path_info.scheme == "local" assert checksum is not None assert os.path.exists(path_info) actual_mtime, actual_size = get_mtime_and_size(path_info, self.tree) actual_inode = get_inode(path_info) existing_record = self.get_state_record_for_inode(actual_inode) if not existing_record: self._insert_new_state_record(actual_inode, actual_mtime, actual_size, checksum) return self._update_state_for_path_changed(actual_inode, actual_mtime, actual_size, checksum)
def save(self, path_info, fs, hash_info): """Save hash for the specified path info. Args: path_info (dict): path_info to save hash for. hash_info (HashInfo): hash to save. """ if not isinstance(fs, LocalFileSystem): return assert isinstance(path_info, str) or path_info.scheme == "local" assert hash_info assert isinstance(hash_info, HashInfo) assert os.path.exists(path_info) mtime, size = get_mtime_and_size(path_info, self.fs) inode = get_inode(path_info) logger.debug("state save (%s, %s, %s) %s", inode, mtime, size, hash_info.value) self.md5s[inode] = (mtime, size, hash_info.value)
def save(self, path_info, hash_info): """Save hash for the specified path info. Args: path_info (dict): path_info to save hash for. hash_info (HashInfo): hash to save. """ assert isinstance(path_info, str) or path_info.scheme == "local" assert hash_info assert isinstance(hash_info, HashInfo) assert os.path.exists(path_info) actual_mtime, actual_size = get_mtime_and_size(path_info, self.tree) actual_inode = get_inode(path_info) existing_record = self.get_state_record_for_inode(actual_inode) if not existing_record: self._insert_new_state_record(actual_inode, actual_mtime, actual_size, hash_info.value) return self._update_state_for_path_changed(actual_inode, actual_mtime, actual_size, hash_info.value)
def save(self, path_info, fs, hash_info): """Save hash for the specified path info. Args: path_info (dict): path_info to save hash for. hash_info (HashInfo): hash to save. """ if not isinstance(fs, LocalFileSystem): return mtime, size = get_mtime_and_size(path_info, fs, self.dvcignore) inode = get_inode(path_info) logger.debug( "state save (%s, %s, %s) %s", inode, mtime, str(size), hash_info.value, ) self.md5s[inode] = (mtime, str(size), hash_info.value)
def get(self, path_info, fs): """Gets the hash for the specified path info. Hash will be retrieved from the state database if available. Args: path_info (dict): path info to get the hash for. Returns: HashInfo or None: hash for the specified path info or None if it doesn't exist in the state database. """ if not isinstance(fs, LocalFileSystem): return None assert isinstance(path_info, str) or path_info.scheme == "local" path = os.fspath(path_info) # NOTE: use os.path.exists instead of LocalFileSystem.exists # because it uses lexists() and will return True for broken # symlinks that we cannot stat() in get_mtime_and_size if not os.path.exists(path): return None actual_mtime, actual_size = get_mtime_and_size(path, self.fs) actual_inode = get_inode(path) existing_record = self.get_state_record_for_inode(actual_inode) if not existing_record: return None mtime, size, value, _ = existing_record if self._file_metadata_changed(actual_mtime, mtime, actual_size, size): return None self._update_state_record_timestamp_for_inode(actual_inode) return HashInfo("md5", value, size=int(actual_size))