forked from Plemya-x/ALR
		
	Merge pull request 'chore: add tests for dl' (#34) from Maks1mS/ALR:chore/add-tests into master
Reviewed-on: Plemya-x/ALR#34
This commit is contained in:
		@@ -11,7 +11,7 @@
 | 
				
			|||||||
    <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
 | 
					    <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
 | 
				
			||||||
        <text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
 | 
					        <text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
 | 
				
			||||||
        <text x="33.5" y="14">coverage</text>
 | 
					        <text x="33.5" y="14">coverage</text>
 | 
				
			||||||
        <text x="86" y="15" fill="#010101" fill-opacity=".3">14.4%</text>
 | 
					        <text x="86" y="15" fill="#010101" fill-opacity=".3">19.2%</text>
 | 
				
			||||||
        <text x="86" y="14">14.4%</text>
 | 
					        <text x="86" y="14">19.2%</text>
 | 
				
			||||||
    </g>
 | 
					    </g>
 | 
				
			||||||
</svg>
 | 
					</svg>
 | 
				
			||||||
 
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 926 B  | 
@@ -42,9 +42,6 @@ import (
 | 
				
			|||||||
	"golang.org/x/crypto/blake2b"
 | 
						"golang.org/x/crypto/blake2b"
 | 
				
			||||||
	"golang.org/x/crypto/blake2s"
 | 
						"golang.org/x/crypto/blake2s"
 | 
				
			||||||
	"golang.org/x/exp/slices"
 | 
						"golang.org/x/exp/slices"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
					 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/dlcache"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Константа для имени файла манифеста кэша
 | 
					// Константа для имени файла манифеста кэша
 | 
				
			||||||
@@ -83,6 +80,11 @@ func (t Type) String() string {
 | 
				
			|||||||
	return "<unknown>"
 | 
						return "<unknown>"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type DlCache interface {
 | 
				
			||||||
 | 
						Get(context.Context, string) (string, bool)
 | 
				
			||||||
 | 
						New(context.Context, string) (string, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Структура Options содержит параметры для загрузки файлов и каталогов
 | 
					// Структура Options содержит параметры для загрузки файлов и каталогов
 | 
				
			||||||
type Options struct {
 | 
					type Options struct {
 | 
				
			||||||
	Hash             []byte
 | 
						Hash             []byte
 | 
				
			||||||
@@ -94,6 +96,7 @@ type Options struct {
 | 
				
			|||||||
	PostprocDisabled bool
 | 
						PostprocDisabled bool
 | 
				
			||||||
	Progress         io.Writer
 | 
						Progress         io.Writer
 | 
				
			||||||
	LocalDir         string
 | 
						LocalDir         string
 | 
				
			||||||
 | 
						DlCache          DlCache
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Метод для создания нового хеша на основе указанного алгоритма хеширования
 | 
					// Метод для создания нового хеша на основе указанного алгоритма хеширования
 | 
				
			||||||
@@ -145,9 +148,6 @@ type UpdatingDownloader interface {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Функция Download загружает файл или каталог с использованием указанных параметров
 | 
					// Функция Download загружает файл или каталог с использованием указанных параметров
 | 
				
			||||||
func Download(ctx context.Context, opts Options) (err error) {
 | 
					func Download(ctx context.Context, opts Options) (err error) {
 | 
				
			||||||
	cfg := config.GetInstance(ctx)
 | 
					 | 
				
			||||||
	dc := dlcache.New(cfg)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	normalized, err := normalizeURL(opts.URL)
 | 
						normalized, err := normalizeURL(opts.URL)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -162,7 +162,7 @@ func Download(ctx context.Context, opts Options) (err error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var t Type
 | 
						var t Type
 | 
				
			||||||
	cacheDir, ok := dc.Get(ctx, opts.URL)
 | 
						cacheDir, ok := opts.DlCache.Get(ctx, opts.URL)
 | 
				
			||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		var updated bool
 | 
							var updated bool
 | 
				
			||||||
		if d, ok := d.(UpdatingDownloader); ok {
 | 
							if d, ok := d.(UpdatingDownloader); ok {
 | 
				
			||||||
@@ -221,7 +221,7 @@ func Download(ctx context.Context, opts Options) (err error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	slog.Info(gotext.Get("Downloading source"), "source", opts.Name, "downloader", d.Name())
 | 
						slog.Info(gotext.Get("Downloading source"), "source", opts.Name, "downloader", d.Name())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cacheDir, err = dc.New(ctx, opts.URL)
 | 
						cacheDir, err = opts.DlCache.New(ctx, opts.URL)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										176
									
								
								internal/dl/dl_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								internal/dl/dl_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,176 @@
 | 
				
			|||||||
 | 
					// ALR - Any Linux Repository
 | 
				
			||||||
 | 
					// Copyright (C) 2025 Евгений Храмов
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					// it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					// the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					// (at your option) any later version.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					// but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					// GNU General Public License for more details.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package dl_test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"log"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
						"net/http/httptest"
 | 
				
			||||||
 | 
						"net/http/httputil"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"path"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
 | 
				
			||||||
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/dl"
 | 
				
			||||||
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/dlcache"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type TestALRConfig struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *TestALRConfig) GetPaths(ctx context.Context) *config.Paths {
 | 
				
			||||||
 | 
						return &config.Paths{
 | 
				
			||||||
 | 
							CacheDir: "/tmp",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDownloadWithoutCache(t *testing.T) {
 | 
				
			||||||
 | 
						type testCase struct {
 | 
				
			||||||
 | 
							name     string
 | 
				
			||||||
 | 
							path     string
 | 
				
			||||||
 | 
							expected func(*testing.T, error, string)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						prepareServer := func() *httptest.Server {
 | 
				
			||||||
 | 
							// URL вашего Git-сервера
 | 
				
			||||||
 | 
							gitServerURL, err := url.Parse("https://gitea.plemya-x.ru")
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Fatalf("Failed to parse git server URL: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							proxy := httputil.NewSingleHostReverseProxy(gitServerURL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
								switch {
 | 
				
			||||||
 | 
								case r.URL.Path == "/file-downloader/file":
 | 
				
			||||||
 | 
									w.WriteHeader(http.StatusOK)
 | 
				
			||||||
 | 
									w.Write([]byte("Hello, World!"))
 | 
				
			||||||
 | 
								case strings.HasPrefix(r.URL.Path, "/git-downloader/git"):
 | 
				
			||||||
 | 
									r.URL.Host = gitServerURL.Host
 | 
				
			||||||
 | 
									r.URL.Scheme = gitServerURL.Scheme
 | 
				
			||||||
 | 
									r.Host = gitServerURL.Host
 | 
				
			||||||
 | 
									r.URL.Path, _ = strings.CutPrefix(r.URL.Path, "/git-downloader/git")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									proxy.ServeHTTP(w, r)
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									w.WriteHeader(http.StatusNotFound)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, tc := range []testCase{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "simple file download",
 | 
				
			||||||
 | 
								path: "%s/file-downloader/file",
 | 
				
			||||||
 | 
								expected: func(t *testing.T, err error, tmpdir string) {
 | 
				
			||||||
 | 
									assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									_, err = os.Stat(path.Join(tmpdir, "file"))
 | 
				
			||||||
 | 
									assert.NoError(t, err)
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "git download",
 | 
				
			||||||
 | 
								path: "git+%s/git-downloader/git/Plemya-x/xpamych-alr-repo",
 | 
				
			||||||
 | 
								expected: func(t *testing.T, err error, tmpdir string) {
 | 
				
			||||||
 | 
									assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									_, err = os.Stat(path.Join(tmpdir, "alr-repo.toml"))
 | 
				
			||||||
 | 
									assert.NoError(t, err)
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						} {
 | 
				
			||||||
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
 | 
								server := prepareServer()
 | 
				
			||||||
 | 
								defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								tmpdir, err := os.MkdirTemp("", "test-download")
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
								defer os.RemoveAll(tmpdir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								opts := dl.Options{
 | 
				
			||||||
 | 
									CacheDisabled: true,
 | 
				
			||||||
 | 
									URL:           fmt.Sprintf(tc.path, server.URL),
 | 
				
			||||||
 | 
									Destination:   tmpdir,
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								err = dl.Download(context.Background(), opts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								tc.expected(t, err, tmpdir)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDownloadFileWithCache(t *testing.T) {
 | 
				
			||||||
 | 
						type testCase struct {
 | 
				
			||||||
 | 
							name string
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, tc := range []testCase{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "simple download",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						} {
 | 
				
			||||||
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
 | 
								called := 0
 | 
				
			||||||
 | 
								server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
									switch {
 | 
				
			||||||
 | 
									case r.URL.Path == "/file":
 | 
				
			||||||
 | 
										called += 1
 | 
				
			||||||
 | 
										w.WriteHeader(http.StatusOK)
 | 
				
			||||||
 | 
										w.Write([]byte("Hello, World!"))
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										w.WriteHeader(http.StatusNotFound)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}))
 | 
				
			||||||
 | 
								defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								tmpdir, err := os.MkdirTemp("", "test-download")
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
								defer os.RemoveAll(tmpdir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								cfg := &TestALRConfig{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								opts := dl.Options{
 | 
				
			||||||
 | 
									CacheDisabled: false,
 | 
				
			||||||
 | 
									URL:           server.URL + "/file",
 | 
				
			||||||
 | 
									Destination:   tmpdir,
 | 
				
			||||||
 | 
									DlCache:       dlcache.New(cfg),
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								outputFile := path.Join(tmpdir, "file")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								err = dl.Download(context.Background(), opts)
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
								_, err = os.Stat(outputFile)
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								err = os.Remove(outputFile)
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								err = dl.Download(context.Background(), opts)
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
								assert.Equal(t, 1, called)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -143,7 +143,6 @@ func (FileDownloader) Download(ctx context.Context, opts Options) (Type, string,
 | 
				
			|||||||
		return 0, "", err
 | 
							return 0, "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	r.Close()
 | 
						r.Close()
 | 
				
			||||||
	out.Close()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Проверка контрольной суммы
 | 
						// Проверка контрольной суммы
 | 
				
			||||||
	if opts.Hash != nil {
 | 
						if opts.Hash != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -169,21 +169,7 @@ type ScriptFunc func(ctx context.Context, opts ...interp.RunnerOption) error
 | 
				
			|||||||
// GetFunc returns a function corresponding to a bash function
 | 
					// GetFunc returns a function corresponding to a bash function
 | 
				
			||||||
// with the given name
 | 
					// with the given name
 | 
				
			||||||
func (d *Decoder) GetFunc(name string) (ScriptFunc, bool) {
 | 
					func (d *Decoder) GetFunc(name string) (ScriptFunc, bool) {
 | 
				
			||||||
	fn := d.getFunc(name)
 | 
						return d.GetFuncP(name, nil)
 | 
				
			||||||
	if fn == nil {
 | 
					 | 
				
			||||||
		return nil, false
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return func(ctx context.Context, opts ...interp.RunnerOption) error {
 | 
					 | 
				
			||||||
		sub := d.Runner.Subshell()
 | 
					 | 
				
			||||||
		for _, opt := range opts {
 | 
					 | 
				
			||||||
			err := opt(sub)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return sub.Run(ctx, fn)
 | 
					 | 
				
			||||||
	}, true
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type PrepareFunc func(context.Context, *interp.Runner) error
 | 
					type PrepareFunc func(context.Context, *interp.Runner) error
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -293,81 +293,81 @@ msgstr ""
 | 
				
			|||||||
msgid "Error while running app"
 | 
					msgid "Error while running app"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:107
 | 
					#: pkg/build/build.go:108
 | 
				
			||||||
msgid "Failed to prompt user to view build script"
 | 
					msgid "Failed to prompt user to view build script"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:111
 | 
					#: pkg/build/build.go:112
 | 
				
			||||||
msgid "Building package"
 | 
					msgid "Building package"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:155
 | 
					#: pkg/build/build.go:156
 | 
				
			||||||
msgid "Downloading sources"
 | 
					msgid "Downloading sources"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:167
 | 
					#: pkg/build/build.go:168
 | 
				
			||||||
msgid "Building package metadata"
 | 
					msgid "Building package metadata"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:189
 | 
					#: pkg/build/build.go:190
 | 
				
			||||||
msgid "Compressing package"
 | 
					msgid "Compressing package"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:315
 | 
					#: pkg/build/build.go:316
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"Your system's CPU architecture doesn't match this package. Do you want to "
 | 
					"Your system's CPU architecture doesn't match this package. Do you want to "
 | 
				
			||||||
"build anyway?"
 | 
					"build anyway?"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:326
 | 
					#: pkg/build/build.go:327
 | 
				
			||||||
msgid "This package is already installed"
 | 
					msgid "This package is already installed"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:354
 | 
					#: pkg/build/build.go:355
 | 
				
			||||||
msgid "Installing build dependencies"
 | 
					msgid "Installing build dependencies"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:396
 | 
					#: pkg/build/build.go:397
 | 
				
			||||||
msgid "Installing dependencies"
 | 
					msgid "Installing dependencies"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:442
 | 
					#: pkg/build/build.go:443
 | 
				
			||||||
msgid "Executing version()"
 | 
					msgid "Executing version()"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:462
 | 
					#: pkg/build/build.go:463
 | 
				
			||||||
msgid "Updating version"
 | 
					msgid "Updating version"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:467
 | 
					#: pkg/build/build.go:468
 | 
				
			||||||
msgid "Executing prepare()"
 | 
					msgid "Executing prepare()"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:477
 | 
					#: pkg/build/build.go:478
 | 
				
			||||||
msgid "Executing build()"
 | 
					msgid "Executing build()"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:487
 | 
					#: pkg/build/build.go:488
 | 
				
			||||||
msgid "Executing package()"
 | 
					msgid "Executing package()"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:509
 | 
					#: pkg/build/build.go:510
 | 
				
			||||||
msgid "Executing files()"
 | 
					msgid "Executing files()"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:587
 | 
					#: pkg/build/build.go:588
 | 
				
			||||||
msgid "AutoProv is not implemented for this package format, so it's skipped"
 | 
					msgid "AutoProv is not implemented for this package format, so it's skipped"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:598
 | 
					#: pkg/build/build.go:599
 | 
				
			||||||
msgid "AutoReq is not implemented for this package format, so it's skipped"
 | 
					msgid "AutoReq is not implemented for this package format, so it's skipped"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:705
 | 
					#: pkg/build/build.go:706
 | 
				
			||||||
msgid "Would you like to remove the build dependencies?"
 | 
					msgid "Would you like to remove the build dependencies?"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:811
 | 
					#: pkg/build/build.go:812
 | 
				
			||||||
msgid "The checksums array must be the same length as sources"
 | 
					msgid "The checksums array must be the same length as sources"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -307,27 +307,27 @@ msgstr ""
 | 
				
			|||||||
msgid "Error while running app"
 | 
					msgid "Error while running app"
 | 
				
			||||||
msgstr "Ошибка при запуске приложения"
 | 
					msgstr "Ошибка при запуске приложения"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:107
 | 
					#: pkg/build/build.go:108
 | 
				
			||||||
msgid "Failed to prompt user to view build script"
 | 
					msgid "Failed to prompt user to view build script"
 | 
				
			||||||
msgstr "Не удалось предложить пользователю просмотреть скрипт сборки"
 | 
					msgstr "Не удалось предложить пользователю просмотреть скрипт сборки"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:111
 | 
					#: pkg/build/build.go:112
 | 
				
			||||||
msgid "Building package"
 | 
					msgid "Building package"
 | 
				
			||||||
msgstr "Сборка пакета"
 | 
					msgstr "Сборка пакета"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:155
 | 
					#: pkg/build/build.go:156
 | 
				
			||||||
msgid "Downloading sources"
 | 
					msgid "Downloading sources"
 | 
				
			||||||
msgstr "Скачивание источников"
 | 
					msgstr "Скачивание источников"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:167
 | 
					#: pkg/build/build.go:168
 | 
				
			||||||
msgid "Building package metadata"
 | 
					msgid "Building package metadata"
 | 
				
			||||||
msgstr "Сборка метаданных пакета"
 | 
					msgstr "Сборка метаданных пакета"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:189
 | 
					#: pkg/build/build.go:190
 | 
				
			||||||
msgid "Compressing package"
 | 
					msgid "Compressing package"
 | 
				
			||||||
msgstr "Сжатие пакета"
 | 
					msgstr "Сжатие пакета"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:315
 | 
					#: pkg/build/build.go:316
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"Your system's CPU architecture doesn't match this package. Do you want to "
 | 
					"Your system's CPU architecture doesn't match this package. Do you want to "
 | 
				
			||||||
"build anyway?"
 | 
					"build anyway?"
 | 
				
			||||||
@@ -335,57 +335,57 @@ msgstr ""
 | 
				
			|||||||
"Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
 | 
					"Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
 | 
				
			||||||
"равно хотите выполнить сборку?"
 | 
					"равно хотите выполнить сборку?"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:326
 | 
					#: pkg/build/build.go:327
 | 
				
			||||||
msgid "This package is already installed"
 | 
					msgid "This package is already installed"
 | 
				
			||||||
msgstr "Этот пакет уже установлен"
 | 
					msgstr "Этот пакет уже установлен"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:354
 | 
					#: pkg/build/build.go:355
 | 
				
			||||||
msgid "Installing build dependencies"
 | 
					msgid "Installing build dependencies"
 | 
				
			||||||
msgstr "Установка зависимостей сборки"
 | 
					msgstr "Установка зависимостей сборки"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:396
 | 
					#: pkg/build/build.go:397
 | 
				
			||||||
msgid "Installing dependencies"
 | 
					msgid "Installing dependencies"
 | 
				
			||||||
msgstr "Установка зависимостей"
 | 
					msgstr "Установка зависимостей"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:442
 | 
					#: pkg/build/build.go:443
 | 
				
			||||||
msgid "Executing version()"
 | 
					msgid "Executing version()"
 | 
				
			||||||
msgstr "Исполнение версия()"
 | 
					msgstr "Исполнение версия()"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:462
 | 
					#: pkg/build/build.go:463
 | 
				
			||||||
msgid "Updating version"
 | 
					msgid "Updating version"
 | 
				
			||||||
msgstr "Обновление версии"
 | 
					msgstr "Обновление версии"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:467
 | 
					#: pkg/build/build.go:468
 | 
				
			||||||
msgid "Executing prepare()"
 | 
					msgid "Executing prepare()"
 | 
				
			||||||
msgstr "Исполнение prepare()"
 | 
					msgstr "Исполнение prepare()"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:477
 | 
					#: pkg/build/build.go:478
 | 
				
			||||||
msgid "Executing build()"
 | 
					msgid "Executing build()"
 | 
				
			||||||
msgstr "Исполнение build()"
 | 
					msgstr "Исполнение build()"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:487
 | 
					#: pkg/build/build.go:488
 | 
				
			||||||
msgid "Executing package()"
 | 
					msgid "Executing package()"
 | 
				
			||||||
msgstr "Исполнение package()"
 | 
					msgstr "Исполнение package()"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:509
 | 
					#: pkg/build/build.go:510
 | 
				
			||||||
msgid "Executing files()"
 | 
					msgid "Executing files()"
 | 
				
			||||||
msgstr "Исполнение files()"
 | 
					msgstr "Исполнение files()"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:587
 | 
					#: pkg/build/build.go:588
 | 
				
			||||||
msgid "AutoProv is not implemented for this package format, so it's skipped"
 | 
					msgid "AutoProv is not implemented for this package format, so it's skipped"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
 | 
					"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:598
 | 
					#: pkg/build/build.go:599
 | 
				
			||||||
msgid "AutoReq is not implemented for this package format, so it's skipped"
 | 
					msgid "AutoReq is not implemented for this package format, so it's skipped"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"
 | 
					"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:705
 | 
					#: pkg/build/build.go:706
 | 
				
			||||||
msgid "Would you like to remove the build dependencies?"
 | 
					msgid "Would you like to remove the build dependencies?"
 | 
				
			||||||
msgstr "Хотели бы вы удалить зависимости сборки?"
 | 
					msgstr "Хотели бы вы удалить зависимости сборки?"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: pkg/build/build.go:811
 | 
					#: pkg/build/build.go:812
 | 
				
			||||||
msgid "The checksums array must be the same length as sources"
 | 
					msgid "The checksums array must be the same length as sources"
 | 
				
			||||||
msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
 | 
					msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,7 @@ import (
 | 
				
			|||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/cpu"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/cpu"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/dl"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/dl"
 | 
				
			||||||
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/dlcache"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/decoder"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/decoder"
 | 
				
			||||||
	"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/handlers"
 | 
						"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/handlers"
 | 
				
			||||||
@@ -842,6 +843,9 @@ func getSources(ctx context.Context, dirs types.Directories, bv *types.BuildVars
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							cfg := config.GetInstance(ctx)
 | 
				
			||||||
 | 
							opts.DlCache = dlcache.New(cfg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err := dl.Download(ctx, opts)
 | 
							err := dl.Download(ctx, opts)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user