mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-13 17:20:27 +08:00

This changes the pin behavior. It uses the filenames given through the api, and allows files to be streamed faltly (not a hierarchy), which is easier for other things (like vinyl in node-ipfs-api land). Files can also be entirely out of order, and the garbage intermediate directories will not be pinned (gc-ed later). The changes also mean the output of add has changed slightly-- it no longer shows the local path added, but rather the dag path relative to the added roots. This is a small difference, but changes tests. The dagutils.Editor creates a lot of chaff (intermediate objects) along the way. Wonder how we might minimize the writes to the datastore... This commit also removes the "NilRepo()" part of the --only-hash mode. We need to store at least in an in-mem repo/datastore because otherwise the dagutils.Editor breaks. License: MIT Signed-off-by: Juan Batiz-Benet <juan@benet.ai>
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package files
|
|
|
|
import (
|
|
"errors"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
var (
|
|
ErrNotDirectory = errors.New("Couln't call NextFile(), this isn't a directory")
|
|
ErrNotReader = errors.New("This file is a directory, can't use Reader functions")
|
|
)
|
|
|
|
// File is an interface that provides functionality for handling files/directories
|
|
// as values that can be supplied to commands. For directories, child files are
|
|
// accessed serially by calling `NextFile()`.
|
|
type File interface {
|
|
// Files implement ReadCloser, but can only be read from or closed if they are not directories
|
|
io.ReadCloser
|
|
|
|
// FileName returns a filename path associated with this file
|
|
FileName() string
|
|
|
|
// FullPath returns the full path in the os associated with this file
|
|
FullPath() string
|
|
|
|
// IsDirectory returns true if the File is a directory (and therefore supports calling `NextFile`)
|
|
// and false if the File is a normal file (and therefor supports calling `Read` and `Close`)
|
|
IsDirectory() bool
|
|
|
|
// NextFile returns the next child file available (if the File is a directory).
|
|
// It will return (nil, io.EOF) if no more files are available.
|
|
// If the file is a regular file (not a directory), NextFile will return a non-nil error.
|
|
NextFile() (File, error)
|
|
}
|
|
|
|
type StatFile interface {
|
|
File
|
|
|
|
Stat() os.FileInfo
|
|
}
|
|
|
|
type PeekFile interface {
|
|
SizeFile
|
|
|
|
Peek(n int) File
|
|
Length() int
|
|
}
|
|
|
|
type SizeFile interface {
|
|
File
|
|
|
|
Size() (int64, error)
|
|
}
|