[BUG] Allow to exclude files in dump

- Move the skip path check outside the `file.IsDir()` condition, so it
can be used to skip files.
- Add unit tests.
- Resolves https://codeberg.org/forgejo/forgejo/issues/1397
- Ref: https://codeberg.org/forgejo/forgejo/pulls/1438
This commit is contained in:
Gusted 2024-03-29 12:55:01 +01:00
parent 22315117ac
commit 92aaa14117
No known key found for this signature in database
GPG key ID: FD821B732837125F
2 changed files with 128 additions and 7 deletions

View file

@ -454,14 +454,18 @@ func addRecursiveExclude(w archiver.Writer, insidePath, absPath string, excludeA
for _, file := range files {
currentAbsPath := filepath.Join(absPath, file.Name())
currentInsidePath := path.Join(insidePath, file.Name())
if util.SliceContainsString(excludeAbsPath, currentAbsPath) {
log.Debug("Skipping %q because matched an excluded path.", currentAbsPath)
continue
}
if file.IsDir() {
if !util.SliceContainsString(excludeAbsPath, currentAbsPath) {
if err := addFile(w, currentInsidePath, currentAbsPath, false); err != nil {
return err
}
if err = addRecursiveExclude(w, currentInsidePath, currentAbsPath, excludeAbsPath, verbose); err != nil {
return err
}
if err := addFile(w, currentInsidePath, currentAbsPath, false); err != nil {
return err
}
if err = addRecursiveExclude(w, currentInsidePath, currentAbsPath, excludeAbsPath, verbose); err != nil {
return err
}
} else {
// only copy regular files and symlink regular files, skip non-regular files like socket/pipe/...