talos

Форк
0
/
copy.go 
59 строк · 1.4 Кб
1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
package utils
6

7
import (
8
	"fmt"
9
	"io"
10
	"os"
11
	"path/filepath"
12

13
	"github.com/siderolabs/gen/pair/ordered"
14
)
15

16
// CopyInstruction describes a file copy operation.
17
type CopyInstruction = ordered.Pair[string, string]
18

19
// SourceDestination returns a CopyInstruction that copies src to dest.
20
func SourceDestination(src, dest string) CopyInstruction {
21
	return ordered.MakePair[string, string](src, dest)
22
}
23

24
// CopyFiles copies files according to the given instructions.
25
func CopyFiles(printf func(string, ...any), instructions ...CopyInstruction) error {
26
	for _, instruction := range instructions {
27
		if err := func(instruction CopyInstruction) error {
28
			src, dest := instruction.F1, instruction.F2
29

30
			if err := os.MkdirAll(filepath.Dir(dest), 0o755); err != nil {
31
				return err
32
			}
33

34
			printf("copying %s to %s", src, dest)
35

36
			from, err := os.Open(src)
37
			if err != nil {
38
				return err
39
			}
40
			//nolint:errcheck
41
			defer from.Close()
42

43
			to, err := os.OpenFile(dest, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o666)
44
			if err != nil {
45
				return err
46
			}
47
			//nolint:errcheck
48
			defer to.Close()
49

50
			_, err = io.Copy(to, from)
51

52
			return err
53
		}(instruction); err != nil {
54
			return fmt.Errorf("error copying %s -> %s: %w", instruction.F1, instruction.F2, err)
55
		}
56
	}
57

58
	return nil
59
}
60

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.