Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var Debugf = func(f string, a ...interface{}) {}
Debugf can be used to add a debug output writer
Functions ¶
This section is empty.
Types ¶
type DebugFunc ¶
type DebugFunc func(f string, a ...interface{})
DebugFunc can be used to overwrite the Debugf function
type DirectoryReport ¶
type DirectoryReport struct { Files map[string]string `json:"files"` Dirs map[string]struct{} `json:"dirs"` // contains filtered or unexported fields }
DirectoryReport holds a report of a directory. This includes subdirectories and hashes of all files.
func NewDirectoryReport ¶
func NewDirectoryReport(path string) (*DirectoryReport, error)
NewDirectoryReport walks through the specified path and generates a DirectoryReport.
func (*DirectoryReport) Diff ¶
func (r *DirectoryReport) Diff(other *DirectoryReport) (newFiles, removedFiles, modifiedFiles, newDirs, removedDirs []string)
Diff calculates the difference between two directory reports. It generates a list of new, removed and modified files and new dirs and removed dirs.
Example ¶
defer reset() // before state mustCreateFile(rootOld, "file1.txt", "content a") mustCreateFile(rootOld, "file2.txt", "content b") before, _ := NewDirectoryReport(rootOld) // after state mustCreateFile(rootNew, "file1.txt", "content c") // changed content of file1.txt mustCreateFile(rootNew, "file3.txt", "content b") // renamed file2.txt to file3.txt after, _ := NewDirectoryReport(rootNew) newFiles, removedFiles, modifiedFiles, _, _ := before.Diff(after) fmt.Printf("New Files: %+v\n", newFiles) fmt.Printf("Removed Files: %+v\n", removedFiles) fmt.Printf("Modified Files: %+v\n", modifiedFiles)
Output: New Files: [file3.txt] Removed Files: [file2.txt] Modified Files: [file1.txt]
Example (Second) ¶
defer reset() // before state mustCreateDirectory(rootOld, "dir1") mustCreateDirectory(rootOld, "dir1/subdir1") mustCreateDirectory(rootOld, "dir1/subdir2") before, _ := NewDirectoryReport(rootOld) // after state mustCreateDirectory(rootNew, "dir1") mustCreateDirectory(rootNew, "dir1/subdir1") mustCreateDirectory(rootNew, "dir1/subdir3") // renamed subdir2 to subdir 3 after, _ := NewDirectoryReport(rootNew) _, _, _, newDirectories, removedDirectories := before.Diff(after) fmt.Printf("New Directories: %+v\n", newDirectories) fmt.Printf("Removed Directies: %+v\n", removedDirectories)
Output: New Directories: [dir1/subdir3] Removed Directies: [dir1/subdir2]
Example (Third) ¶
defer reset() // before state mustCreateDirectory(rootOld, "dir1") mustCreateDirectory(rootOld, "dir1/subdir1") mustCreateDirectory(rootOld, "dir1/subdir2") mustCreateFile(rootOld, "file1.txt", "content a") mustCreateFile(rootOld, "dir1/file2.txt", "content b") mustCreateFile(rootOld, "dir1/subdir1/file3.txt", "content c") mustCreateFile(rootOld, "dir1/subdir2/file4.txt", "content d") before, err := NewDirectoryReport(rootOld) if err != nil { panic(err) } // after state mustCreateDirectory(rootNew, "dir1") mustCreateDirectory(rootNew, "dir1/subdir1") /* mustCreateDirectory(rootNew, "dir1/subdir2") */ // this directory is removed mustCreateDirectory(rootNew, "dir1/subdir3") // this directory is new mustCreateFile(rootNew, "file1.txt", "content a") mustCreateFile(rootNew, "dir1/file2.txt", "content b") mustCreateFile(rootNew, "dir1/subdir1/file3.txt", "modcontent c") // the content of this file has changed mustCreateFile(rootNew, "dir1/subdir3/file4.txt", "content d") // this files has moved from subdir2 to subdir3 mustCreateFile(rootNew, "dir1/subdir3/file5.txt", "content e") // this files is new after, err := NewDirectoryReport(rootNew) if err != nil { panic(err) } newFiles, removedFiles, modifiedFiles, newDirectories, removedDirectories := before.Diff(after) fmt.Printf("New Files: %+v\n", newFiles) fmt.Printf("Removed Files: %+v\n", removedFiles) fmt.Printf("Modified Files: %+v\n", modifiedFiles) fmt.Printf("New Directories: %+v\n", newDirectories) fmt.Printf("Removed Directies: %+v\n", removedDirectories)
Output: New Files: [dir1/subdir3/file4.txt dir1/subdir3/file5.txt] Removed Files: [dir1/subdir2/file4.txt] Modified Files: [dir1/subdir1/file3.txt] New Directories: [dir1/subdir3] Removed Directies: [dir1/subdir2]
Click to show internal directories.
Click to hide internal directories.