Skip to content
This repository has been archived by the owner on Jun 18, 2020. It is now read-only.

Commit

Permalink
Fix issue with local directories not being created
Browse files Browse the repository at this point in the history
Also handle all files inside a directory first before traversing into
sub-directories. This way the order of the log statements makes a lot
more sense.
  • Loading branch information
wilriker committed Jun 4, 2019
1 parent a15d06b commit f1a80d8
Showing 1 changed file with 43 additions and 23 deletions.
66 changes: 43 additions & 23 deletions duetbackup.go
Expand Up @@ -16,7 +16,9 @@ import (
)

const (
sysDir = "0:/sys"
sysDir = "0:/sys"
Directory = "d"
File = "f"
)

var httpClient *http.Client
Expand Down Expand Up @@ -108,15 +110,42 @@ func getFileList(baseURL string, dir string, first uint64) (*filelist, error) {
return &fl, nil
}

func ensureOutDirExists(outDir string, verbose bool) error {
path, err := filepath.Abs(outDir)
if err != nil {
return err
}
fi, err := os.Stat(path)
if err != nil && !os.IsNotExist(err) {
return err
}
if fi == nil {
if verbose {
log.Println(" Creating directory", path)
}
if err = os.MkdirAll(path, 0755); err != nil {
return err
}
}
return nil
}

func updateLocalFiles(baseURL string, fl *filelist, outDir string, excls excludes, removeLocal, verbose bool) error {

if err := ensureOutDirExists(outDir, verbose); err != nil {
return err
}

fileDownloadURL := "rr_download?name="

for _, file := range fl.Files {
if file.Type == Directory {
continue
}
remoteFilename := fl.Dir + "/" + file.Name
if excls.Contains(remoteFilename) {
if verbose {
log.Println(" Skipping: ", remoteFilename)
log.Println(" Excluded: ", remoteFilename)
}
continue
}
Expand All @@ -126,26 +155,6 @@ func updateLocalFiles(baseURL string, fl *filelist, outDir string, excls exclude
return err
}

// It's a directory
if file.Type == "d" {

// Does not exist yet so try to create it
if fi == nil {
if verbose {
log.Println(" Creating directory", fileName)
}
if err = os.MkdirAll(fileName, 0755); err != nil {
return err
}
}

// Go recursively into this directory
if err = syncFolder(baseURL, remoteFilename, fileName, excls, removeLocal, verbose); err != nil {
return err
}
continue
}

// File does not exist or is outdated so get it
if fi == nil || fi.ModTime().Before(file.Date.Time) {
if verbose {
Expand Down Expand Up @@ -212,7 +221,7 @@ func removeDeletedFiles(fl *filelist, outDir string, verbose bool) error {
return err
}
if verbose {
log.Println("Removed", f.Name())
log.Println(" Removed: ", f.Name())
}
}
}
Expand All @@ -239,6 +248,17 @@ func syncFolder(address, folder, outDir string, excls excludes, removeLocal, ver
}
}

for _, file := range fl.Files {
if file.Type != Directory {
continue
}
remoteFilename := fl.Dir + "/" + file.Name
fileName := filepath.Join(outDir, file.Name)
if err = syncFolder(address, remoteFilename, fileName, excls, removeLocal, verbose); err != nil {
return err
}
}

return nil
}

Expand Down

0 comments on commit f1a80d8

Please sign in to comment.