loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request '[BUG] Allow to exclude files in dump' (#2876) from gusted/forgejo-dump into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/2876
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>

+128 -7
+11 -7
cmd/dump.go
··· 454 454 for _, file := range files { 455 455 currentAbsPath := filepath.Join(absPath, file.Name()) 456 456 currentInsidePath := path.Join(insidePath, file.Name()) 457 + 458 + if util.SliceContainsString(excludeAbsPath, currentAbsPath) { 459 + log.Debug("Skipping %q because matched an excluded path.", currentAbsPath) 460 + continue 461 + } 462 + 457 463 if file.IsDir() { 458 - if !util.SliceContainsString(excludeAbsPath, currentAbsPath) { 459 - if err := addFile(w, currentInsidePath, currentAbsPath, false); err != nil { 460 - return err 461 - } 462 - if err = addRecursiveExclude(w, currentInsidePath, currentAbsPath, excludeAbsPath, verbose); err != nil { 463 - return err 464 - } 464 + if err := addFile(w, currentInsidePath, currentAbsPath, false); err != nil { 465 + return err 466 + } 467 + if err = addRecursiveExclude(w, currentInsidePath, currentAbsPath, excludeAbsPath, verbose); err != nil { 468 + return err 465 469 } 466 470 } else { 467 471 // only copy regular files and symlink regular files, skip non-regular files like socket/pipe/...
+117
cmd/dump_test.go
··· 1 + // Copyright 2024 The Forgejo Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package cmd 5 + 6 + import ( 7 + "io" 8 + "os" 9 + "testing" 10 + 11 + "github.com/mholt/archiver/v3" 12 + "github.com/stretchr/testify/assert" 13 + ) 14 + 15 + type mockArchiver struct { 16 + addedFiles []string 17 + } 18 + 19 + func (mockArchiver) Create(out io.Writer) error { 20 + return nil 21 + } 22 + 23 + func (m *mockArchiver) Write(f archiver.File) error { 24 + m.addedFiles = append(m.addedFiles, f.Name()) 25 + return nil 26 + } 27 + 28 + func (mockArchiver) Close() error { 29 + return nil 30 + } 31 + 32 + func TestAddRecursiveExclude(t *testing.T) { 33 + t.Run("Empty", func(t *testing.T) { 34 + dir := t.TempDir() 35 + archiver := &mockArchiver{} 36 + 37 + err := addRecursiveExclude(archiver, "", dir, []string{}, false) 38 + assert.NoError(t, err) 39 + assert.Empty(t, archiver.addedFiles) 40 + }) 41 + 42 + t.Run("Single file", func(t *testing.T) { 43 + dir := t.TempDir() 44 + err := os.WriteFile(dir+"/example", nil, 0o666) 45 + assert.NoError(t, err) 46 + 47 + t.Run("No exclude", func(t *testing.T) { 48 + archiver := &mockArchiver{} 49 + 50 + err = addRecursiveExclude(archiver, "", dir, nil, false) 51 + assert.NoError(t, err) 52 + assert.Len(t, archiver.addedFiles, 1) 53 + assert.EqualValues(t, "example", archiver.addedFiles[0]) 54 + }) 55 + 56 + t.Run("With exclude", func(t *testing.T) { 57 + archiver := &mockArchiver{} 58 + 59 + err = addRecursiveExclude(archiver, "", dir, []string{dir + "/example"}, false) 60 + assert.NoError(t, err) 61 + assert.Empty(t, archiver.addedFiles) 62 + }) 63 + }) 64 + 65 + t.Run("File inside directory", func(t *testing.T) { 66 + dir := t.TempDir() 67 + err := os.MkdirAll(dir+"/deep/nested/folder", 0o750) 68 + assert.NoError(t, err) 69 + err = os.WriteFile(dir+"/deep/nested/folder/example", nil, 0o666) 70 + assert.NoError(t, err) 71 + err = os.WriteFile(dir+"/deep/nested/folder/another-file", nil, 0o666) 72 + assert.NoError(t, err) 73 + 74 + t.Run("No exclude", func(t *testing.T) { 75 + archiver := &mockArchiver{} 76 + 77 + err = addRecursiveExclude(archiver, "", dir, nil, false) 78 + assert.NoError(t, err) 79 + assert.Len(t, archiver.addedFiles, 5) 80 + assert.EqualValues(t, "deep", archiver.addedFiles[0]) 81 + assert.EqualValues(t, "deep/nested", archiver.addedFiles[1]) 82 + assert.EqualValues(t, "deep/nested/folder", archiver.addedFiles[2]) 83 + assert.EqualValues(t, "deep/nested/folder/example", archiver.addedFiles[3]) 84 + assert.EqualValues(t, "deep/nested/folder/another-file", archiver.addedFiles[4]) 85 + }) 86 + 87 + t.Run("Exclude first directory", func(t *testing.T) { 88 + archiver := &mockArchiver{} 89 + 90 + err = addRecursiveExclude(archiver, "", dir, []string{dir + "/deep"}, false) 91 + assert.NoError(t, err) 92 + assert.Empty(t, archiver.addedFiles) 93 + }) 94 + 95 + t.Run("Exclude nested directory", func(t *testing.T) { 96 + archiver := &mockArchiver{} 97 + 98 + err = addRecursiveExclude(archiver, "", dir, []string{dir + "/deep/nested/folder"}, false) 99 + assert.NoError(t, err) 100 + assert.Len(t, archiver.addedFiles, 2) 101 + assert.EqualValues(t, "deep", archiver.addedFiles[0]) 102 + assert.EqualValues(t, "deep/nested", archiver.addedFiles[1]) 103 + }) 104 + 105 + t.Run("Exclude file", func(t *testing.T) { 106 + archiver := &mockArchiver{} 107 + 108 + err = addRecursiveExclude(archiver, "", dir, []string{dir + "/deep/nested/folder/example"}, false) 109 + assert.NoError(t, err) 110 + assert.Len(t, archiver.addedFiles, 4) 111 + assert.EqualValues(t, "deep", archiver.addedFiles[0]) 112 + assert.EqualValues(t, "deep/nested", archiver.addedFiles[1]) 113 + assert.EqualValues(t, "deep/nested/folder", archiver.addedFiles[2]) 114 + assert.EqualValues(t, "deep/nested/folder/another-file", archiver.addedFiles[3]) 115 + }) 116 + }) 117 + }