mirror of
https://github.com/rclone/rclone.git
synced 2025-12-11 22:14:05 +01:00
bisync: implementation #5164
Fixes #118 Co-authored-by: Chris Nelson <stuff@cjnaz.com>
This commit is contained in:
61
cmd/bisync/bilib/names.go
Normal file
61
cmd/bisync/bilib/names.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package bilib
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io/ioutil"
|
||||
"sort"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// Names comprises a set of file names
|
||||
type Names map[string]interface{}
|
||||
|
||||
// ToNames converts string slice to a set of names
|
||||
func ToNames(list []string) Names {
|
||||
ns := Names{}
|
||||
for _, f := range list {
|
||||
ns.Add(f)
|
||||
}
|
||||
return ns
|
||||
}
|
||||
|
||||
// Add adds new file name to the set
|
||||
func (ns Names) Add(name string) {
|
||||
ns[name] = nil
|
||||
}
|
||||
|
||||
// Has checks whether given name is present in the set
|
||||
func (ns Names) Has(name string) bool {
|
||||
_, ok := ns[name]
|
||||
return ok
|
||||
}
|
||||
|
||||
// NotEmpty checks whether set is not empty
|
||||
func (ns Names) NotEmpty() bool {
|
||||
return len(ns) > 0
|
||||
}
|
||||
|
||||
// ToList converts name set to string slice
|
||||
func (ns Names) ToList() []string {
|
||||
list := []string{}
|
||||
for file := range ns {
|
||||
list = append(list, file)
|
||||
}
|
||||
sort.Strings(list)
|
||||
return list
|
||||
}
|
||||
|
||||
// Save saves name set in a text file
|
||||
func (ns Names) Save(path string) error {
|
||||
return SaveList(ns.ToList(), path)
|
||||
}
|
||||
|
||||
// SaveList saves file name list in a text file
|
||||
func SaveList(list []string, path string) error {
|
||||
buf := &bytes.Buffer{}
|
||||
for _, s := range list {
|
||||
_, _ = buf.WriteString(strconv.Quote(s))
|
||||
_ = buf.WriteByte('\n')
|
||||
}
|
||||
return ioutil.WriteFile(path, buf.Bytes(), PermSecure)
|
||||
}
|
||||
Reference in New Issue
Block a user