aboutsummaryrefslogtreecommitdiffstats
path: root/sync.go
diff options
context:
space:
mode:
Diffstat (limited to 'sync.go')
-rw-r--r--sync.go24
1 files changed, 14 insertions, 10 deletions
diff --git a/sync.go b/sync.go
index 293f20b..526e143 100644
--- a/sync.go
+++ b/sync.go
@@ -5,22 +5,19 @@ import (
"log"
"os"
"path/filepath"
- "strings"
-
- ignore "github.com/sabhiram/go-gitignore"
)
type FileMeta struct {
- Size int64
- Mode os.FileMode
- Symlink string
+ Size int64
+ Mode os.FileMode
+ Symlink string
}
type Manifest struct {
Files map[string]FileMeta
}
-func initialSync(hostDir, dataDir string, rules *ignore.GitIgnore, dryRun bool) (*Manifest, error) {
+func initialSync(hostDir, dataDir string, stack *GitignoreStack, dryRun bool) (*Manifest, error) {
manifest := &Manifest{Files: make(map[string]FileMeta)}
err := filepath.Walk(hostDir, func(path string, info os.FileInfo, err error) error {
@@ -37,11 +34,18 @@ func initialSync(hostDir, dataDir string, rules *ignore.GitIgnore, dryRun bool)
return nil
}
- if relPath == ".git" || strings.HasPrefix(relPath, ".git"+string(filepath.Separator)) {
- return filepath.SkipDir
+ if isGitDir(relPath) {
+ if info.IsDir() {
+ return filepath.SkipDir
+ }
+ return nil
+ }
+
+ if info.IsDir() && hasGitignore(path) {
+ stack.Push(path)
}
- if rules.MatchesPath(relPath) {
+ if stack.IsIgnored(relPath) {
if info.IsDir() {
return filepath.SkipDir
}