From 5923d0166761303346225dd9fa5198c8e02ba8e2 Mon Sep 17 00:00:00 2001 From: Roman Andreev Date: Fri, 7 Jul 2023 13:30:56 +0700 Subject: [PATCH] Fix * suppression of non-critical warnings --- modules/backend/targz/targz.go | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/backend/targz/targz.go b/modules/backend/targz/targz.go index fdca099..d837995 100644 --- a/modules/backend/targz/targz.go +++ b/modules/backend/targz/targz.go @@ -7,8 +7,11 @@ import ( "os" "os/exec" "path" + "regexp" ) +const regexToIgnoreErr = "^tar:.*(Removing leading|socket ignored|file changed as we read it|Удаляется начальный|сокет проигнорирован|файл изменился во время чтения)" + type Error struct { Err error Stderr string @@ -71,6 +74,7 @@ func Tar(src, dst string, incremental, gzip, saveAbsPath bool, excludes []string args = append(args, "--exclude="+ex) } + args = append(args, "--ignore-failed-read") args = append(args, "--create") args = append(args, "--file=-") if saveAbsPath { @@ -85,11 +89,28 @@ func Tar(src, dst string, incremental, gzip, saveAbsPath bool, excludes []string cmd.Stderr = &stderr if err = cmd.Run(); err != nil { - return Error{ - Err: err, - Stderr: stderr.String(), + if cmd.ProcessState.ExitCode() == 2 || checkIsRealError(stderr.String()) { + return Error{ + Err: err, + Stderr: stderr.String(), + } } } return nil } + +func checkIsRealError(stderr string) bool { + realErr := false + reTar := regexp.MustCompile("^tar:.*\n") + reErr := regexp.MustCompile(regexToIgnoreErr) + strTupl := reTar.FindAllString(stderr, -1) + for _, s := range strTupl { + if match := reErr.MatchString(s); !match { + realErr = true + break + } + } + + return realErr +}