scanner

package
v0.14.25 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2017 License: MPL-2.0 Imports: 22 Imported by: 4

Documentation

Overview

Package scanner implements a file system scanner and hasher.

Index

Constants

This section is empty.

Variables

View Source
var SHA256OfNothing = []uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}

Functions

func BlockDiff

func BlockDiff(src, tgt []protocol.BlockInfo) (have, need []protocol.BlockInfo)

BlockDiff returns lists of common and missing (to transform src into tgt) blocks. Both block lists must have been created with the same block size.

func Blocks

func Blocks(r io.Reader, blocksize int, sizehint int64, counter Counter, useWeakHashes bool) ([]protocol.BlockInfo, error)

Blocks returns the blockwise hash of the reader.

func BlocksEqual

func BlocksEqual(src, tgt []protocol.BlockInfo) bool

BlocksEqual returns whether two slices of blocks are exactly the same hash and index pair wise.

func HashFile

func HashFile(path string, blockSize int, counter Counter, useWeakHashes bool) ([]protocol.BlockInfo, error)

HashFile hashes the files and returns a list of blocks representing the file.

func PermsEqual

func PermsEqual(a, b uint32) bool

func PopulateOffsets

func PopulateOffsets(blocks []protocol.BlockInfo)

PopulateOffsets sets the Offset field on each block

func Verify

func Verify(r io.Reader, blocksize int, blocks []protocol.BlockInfo) error

Verify returns nil or an error describing the mismatch between the block list and actual reader contents

func VerifyBuffer

func VerifyBuffer(buf []byte, block protocol.BlockInfo) ([]byte, error)

func Walk added in v0.13.0

func Walk(cfg Config) (chan protocol.FileInfo, error)

Types

type Config added in v0.13.0

type Config struct {
	// Folder for which the walker has been created
	Folder string
	// Dir is the base directory for the walk
	Dir string
	// Limit walking to these paths within Dir, or no limit if Sub is empty
	Subs []string
	// BlockSize controls the size of the block used when hashing.
	BlockSize int
	// If Matcher is not nil, it is used to identify files to ignore which were specified by the user.
	Matcher *ignore.Matcher
	// Number of hours to keep temporary files for
	TempLifetime time.Duration
	// If CurrentFiler is not nil, it is queried for the current file before rescanning.
	CurrentFiler CurrentFiler
	// The Lstater provides reliable mtimes on top of the regular filesystem.
	Lstater Lstater
	// If IgnorePerms is true, changes to permission bits will not be
	// detected. Scanned files will get zero permission bits and the
	// NoPermissionBits flag set.
	IgnorePerms bool
	// When AutoNormalize is set, file names that are in UTF8 but incorrect
	// normalization form will be corrected.
	AutoNormalize bool
	// Number of routines to use for hashing
	Hashers int
	// Our vector clock id
	ShortID protocol.ShortID
	// Optional progress tick interval which defines how often FolderScanProgress
	// events are emitted. Negative number means disabled.
	ProgressTickIntervalS int
	// Signals cancel from the outside - when closed, we should stop walking.
	Cancel chan struct{}
	// Whether or not we should also compute weak hashes
	UseWeakHashes bool
}

type Counter added in v0.12.4

type Counter interface {
	Update(bytes int64)
}

type CurrentFiler

type CurrentFiler interface {
	// CurrentFile returns the file as seen at last scan.
	CurrentFile(name string) (protocol.FileInfo, bool)
}

type Lstater added in v0.14.4

type Lstater interface {
	Lstat(name string) (os.FileInfo, error)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL