forked from Plemya-x/ALR
Compare commits
6 Commits
8978cc2855
...
083df3c7aa
| Author | SHA1 | Date | |
|---|---|---|---|
| 083df3c7aa | |||
| 100739c419 | |||
| 17bbb2f4c5 | |||
| ec053f7e6a | |||
| ad1696d507 | |||
| a57602a278 |
30
build.go
30
build.go
@@ -23,6 +23,7 @@ import (
|
|||||||
"log/slog"
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/leonelquinteros/gotext"
|
"github.com/leonelquinteros/gotext"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
@@ -48,6 +49,11 @@ func BuildCmd() *cli.Command {
|
|||||||
Value: "alr.sh",
|
Value: "alr.sh",
|
||||||
Usage: gotext.Get("Path to the build script"),
|
Usage: gotext.Get("Path to the build script"),
|
||||||
},
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "script-package",
|
||||||
|
Aliases: []string{"sp"},
|
||||||
|
Usage: gotext.Get("Specify package in script (for multi package script only)"),
|
||||||
|
},
|
||||||
&cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "package",
|
Name: "package",
|
||||||
Aliases: []string{"p"},
|
Aliases: []string{"p"},
|
||||||
@@ -79,18 +85,32 @@ func BuildCmd() *cli.Command {
|
|||||||
switch {
|
switch {
|
||||||
case c.IsSet("script"):
|
case c.IsSet("script"):
|
||||||
script = c.String("script")
|
script = c.String("script")
|
||||||
|
packageName = c.String("script-package")
|
||||||
case c.IsSet("package"):
|
case c.IsSet("package"):
|
||||||
// TODO: refactor
|
// TODO: handle multiple packages
|
||||||
packageInput := c.String("package")
|
packageInput := c.String("package")
|
||||||
pkgs, _, _ := rs.FindPkgs(ctx, []string{packageInput})
|
|
||||||
pkg := pkgs[packageInput]
|
arr := strings.Split(packageInput, "/")
|
||||||
|
var packageSearch string
|
||||||
|
if len(arr) == 2 {
|
||||||
|
packageSearch = arr[1]
|
||||||
|
} else {
|
||||||
|
packageSearch = arr[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
pkgs, _, _ := rs.FindPkgs(ctx, []string{packageSearch})
|
||||||
|
pkg, ok := pkgs[packageSearch]
|
||||||
|
if len(pkg) < 1 || !ok {
|
||||||
|
slog.Error(gotext.Get("Package not found"))
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
if pkg[0].BasePkgName != "" {
|
if pkg[0].BasePkgName != "" {
|
||||||
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].BasePkgName, "alr.sh")
|
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].BasePkgName, "alr.sh")
|
||||||
packageName = pkg[0].Name
|
packageName = pkg[0].Name
|
||||||
} else {
|
} else {
|
||||||
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].Name, "alr.sh")
|
script = filepath.Join(repoDir, pkg[0].Repository, pkg[0].Name, "alr.sh")
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
script = filepath.Join(repoDir, "alr.sh")
|
script = filepath.Join(repoDir, "alr.sh")
|
||||||
}
|
}
|
||||||
@@ -117,7 +137,7 @@ func BuildCmd() *cli.Command {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
builder := build.New(
|
builder := build.NewBuilder(
|
||||||
ctx,
|
ctx,
|
||||||
types.BuildOpts{
|
types.BuildOpts{
|
||||||
Package: packageName,
|
Package: packageName,
|
||||||
|
|||||||
@@ -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">19.7%</text>
|
<text x="86" y="15" fill="#010101" fill-opacity=".3">20.8%</text>
|
||||||
<text x="86" y="14">19.7%</text>
|
<text x="86" y="14">20.8%</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 926 B After Width: | Height: | Size: 926 B |
7
go.mod
7
go.mod
@@ -5,6 +5,7 @@ go 1.22
|
|||||||
toolchain go1.23.5
|
toolchain go1.23.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
gitea.plemya-x.ru/Plemya-x/fakeroot v0.0.1
|
||||||
github.com/AlecAivazis/survey/v2 v2.3.7
|
github.com/AlecAivazis/survey/v2 v2.3.7
|
||||||
github.com/PuerkitoBio/purell v1.2.0
|
github.com/PuerkitoBio/purell v1.2.0
|
||||||
github.com/alecthomas/chroma/v2 v2.9.1
|
github.com/alecthomas/chroma/v2 v2.9.1
|
||||||
@@ -14,6 +15,7 @@ require (
|
|||||||
github.com/charmbracelet/log v0.4.0
|
github.com/charmbracelet/log v0.4.0
|
||||||
github.com/go-git/go-billy/v5 v5.5.0
|
github.com/go-git/go-billy/v5 v5.5.0
|
||||||
github.com/go-git/go-git/v5 v5.12.0
|
github.com/go-git/go-git/v5 v5.12.0
|
||||||
|
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
|
||||||
github.com/goreleaser/nfpm/v2 v2.41.0
|
github.com/goreleaser/nfpm/v2 v2.41.0
|
||||||
github.com/jeandeaual/go-locale v0.0.0-20241217141322-fcc2cadd6f08
|
github.com/jeandeaual/go-locale v0.0.0-20241217141322-fcc2cadd6f08
|
||||||
github.com/jmoiron/sqlx v1.3.5
|
github.com/jmoiron/sqlx v1.3.5
|
||||||
@@ -23,7 +25,6 @@ require (
|
|||||||
github.com/mitchellh/mapstructure v1.5.0
|
github.com/mitchellh/mapstructure v1.5.0
|
||||||
github.com/muesli/reflow v0.3.0
|
github.com/muesli/reflow v0.3.0
|
||||||
github.com/pelletier/go-toml/v2 v2.1.0
|
github.com/pelletier/go-toml/v2 v2.1.0
|
||||||
github.com/schollz/progressbar/v3 v3.18.0
|
|
||||||
github.com/stretchr/testify v1.10.0
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/urfave/cli/v2 v2.25.7
|
github.com/urfave/cli/v2 v2.25.7
|
||||||
github.com/vmihailenco/msgpack/v5 v5.3.5
|
github.com/vmihailenco/msgpack/v5 v5.3.5
|
||||||
@@ -35,7 +36,6 @@ require (
|
|||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
modernc.org/sqlite v1.25.0
|
modernc.org/sqlite v1.25.0
|
||||||
mvdan.cc/sh/v3 v3.10.0
|
mvdan.cc/sh/v3 v3.10.0
|
||||||
plemya-x.ru/fakeroot v0.0.0-20240601131003-c638a3543283
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -58,7 +58,6 @@ require (
|
|||||||
github.com/charmbracelet/x/term v0.2.1 // indirect
|
github.com/charmbracelet/x/term v0.2.1 // indirect
|
||||||
github.com/cloudflare/circl v1.3.8 // indirect
|
github.com/cloudflare/circl v1.3.8 // indirect
|
||||||
github.com/connesc/cipherio v0.2.1 // indirect
|
github.com/connesc/cipherio v0.2.1 // indirect
|
||||||
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
|
||||||
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
@@ -73,7 +72,6 @@ require (
|
|||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
github.com/google/rpmpack v0.6.1-0.20240329070804-c2247cbb881a // indirect
|
github.com/google/rpmpack v0.6.1-0.20240329070804-c2247cbb881a // indirect
|
||||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
|
||||||
github.com/google/uuid v1.4.0 // indirect
|
github.com/google/uuid v1.4.0 // indirect
|
||||||
github.com/goreleaser/chglog v0.6.1 // indirect
|
github.com/goreleaser/chglog v0.6.1 // indirect
|
||||||
github.com/goreleaser/fileglob v1.3.0 // indirect
|
github.com/goreleaser/fileglob v1.3.0 // indirect
|
||||||
@@ -91,7 +89,6 @@ require (
|
|||||||
github.com/mattn/go-localereader v0.0.1 // indirect
|
github.com/mattn/go-localereader v0.0.1 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.16 // indirect
|
github.com/mattn/go-runewidth v0.0.16 // indirect
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
|
||||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
|
|
||||||
github.com/mitchellh/copystructure v1.2.0 // indirect
|
github.com/mitchellh/copystructure v1.2.0 // indirect
|
||||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
||||||
|
|||||||
29
go.sum
29
go.sum
@@ -17,6 +17,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
|
|||||||
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
|
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
|
||||||
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
|
gitea.plemya-x.ru/Plemya-x/fakeroot v0.0.1 h1:c7F4OsyQbiVpSOrYGMrNsRL37BwoOfrgoKxAwULBKZo=
|
||||||
|
gitea.plemya-x.ru/Plemya-x/fakeroot v0.0.1/go.mod h1:iKQM6uttMJgE5CFrPw6SQqAV7TKtlJNICRAie/dTciw=
|
||||||
github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ=
|
github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ=
|
||||||
github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo=
|
github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo=
|
||||||
github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w=
|
github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w=
|
||||||
@@ -73,36 +75,20 @@ github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTli
|
|||||||
github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM=
|
github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM=
|
||||||
github.com/cavaliergopher/cpio v1.0.1/go.mod h1:pBdaqQjnvXxdS/6CvNDwIANIFSP0xRKI16PX4xejRQc=
|
github.com/cavaliergopher/cpio v1.0.1/go.mod h1:pBdaqQjnvXxdS/6CvNDwIANIFSP0xRKI16PX4xejRQc=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY=
|
|
||||||
github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc=
|
|
||||||
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
|
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
|
||||||
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
|
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
|
||||||
github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY=
|
|
||||||
github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg=
|
|
||||||
github.com/charmbracelet/bubbletea v1.1.0 h1:FjAl9eAL3HBCHenhz/ZPjkKdScmaS5SK69JAK2YJK9c=
|
|
||||||
github.com/charmbracelet/bubbletea v1.1.0/go.mod h1:9Ogk0HrdbHolIKHdjfFpyXJmiCzGwy+FesYkZr7hYU4=
|
|
||||||
github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE=
|
github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE=
|
||||||
github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM=
|
github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM=
|
||||||
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
|
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
|
||||||
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
|
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
|
||||||
github.com/charmbracelet/lipgloss v0.10.0 h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMtwg/AFW3s=
|
|
||||||
github.com/charmbracelet/lipgloss v0.10.0/go.mod h1:Wig9DSfvANsxqkRsqj6x87irdy123SR4dOXlKa91ciE=
|
|
||||||
github.com/charmbracelet/lipgloss v0.13.0 h1:4X3PPeoWEDCMvzDvGmTajSyYPcZM4+y8sCA/SsA3cjw=
|
|
||||||
github.com/charmbracelet/lipgloss v0.13.0/go.mod h1:nw4zy0SBX/F/eAO1cWdcvy6qnkDUxr8Lw7dvFrAIbbY=
|
|
||||||
github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg=
|
github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg=
|
||||||
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
|
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
|
||||||
github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM=
|
github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM=
|
||||||
github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM=
|
github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM=
|
||||||
github.com/charmbracelet/x/ansi v0.2.3 h1:VfFN0NUpcjBRd4DnKfRaIRo53KRgey/nhOoEqosGDEY=
|
|
||||||
github.com/charmbracelet/x/ansi v0.2.3/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
|
|
||||||
github.com/charmbracelet/x/ansi v0.4.5 h1:LqK4vwBNaXw2AyGIICa5/29Sbdq58GbGdFngSexTdRM=
|
github.com/charmbracelet/x/ansi v0.4.5 h1:LqK4vwBNaXw2AyGIICa5/29Sbdq58GbGdFngSexTdRM=
|
||||||
github.com/charmbracelet/x/ansi v0.4.5/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
|
github.com/charmbracelet/x/ansi v0.4.5/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
|
||||||
github.com/charmbracelet/x/term v0.2.0 h1:cNB9Ot9q8I711MyZ7myUR5HFWL/lc3OpU8jZ4hwm0x0=
|
|
||||||
github.com/charmbracelet/x/term v0.2.0/go.mod h1:GVxgxAbjUrmpvIINHIQnJJKpMlHiZ4cktEQCN6GWyF0=
|
|
||||||
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
|
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
|
||||||
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
|
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
|
||||||
github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM=
|
|
||||||
github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY=
|
|
||||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||||
@@ -112,8 +98,6 @@ github.com/cloudflare/circl v1.3.8 h1:j+V8jJt09PoeMFIu2uh5JUyEaIHTXVOHslFoLNAKqw
|
|||||||
github.com/cloudflare/circl v1.3.8/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU=
|
github.com/cloudflare/circl v1.3.8/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU=
|
||||||
github.com/connesc/cipherio v0.2.1 h1:FGtpTPMbKNNWByNrr9aEBtaJtXjqOzkIXNYJp6OEycw=
|
github.com/connesc/cipherio v0.2.1 h1:FGtpTPMbKNNWByNrr9aEBtaJtXjqOzkIXNYJp6OEycw=
|
||||||
github.com/connesc/cipherio v0.2.1/go.mod h1:ukY0MWJDFnJEbXMQtOcn2VmTpRfzcTz4OoVrWGGJZcA=
|
github.com/connesc/cipherio v0.2.1/go.mod h1:ukY0MWJDFnJEbXMQtOcn2VmTpRfzcTz4OoVrWGGJZcA=
|
||||||
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY=
|
|
||||||
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
|
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
|
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
|
||||||
@@ -282,8 +266,6 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1f
|
|||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||||
github.com/mholt/archiver/v4 v4.0.0-alpha.8 h1:tRGQuDVPh66WCOelqe6LIGh0gwmfwxUrSSDunscGsRM=
|
github.com/mholt/archiver/v4 v4.0.0-alpha.8 h1:tRGQuDVPh66WCOelqe6LIGh0gwmfwxUrSSDunscGsRM=
|
||||||
github.com/mholt/archiver/v4 v4.0.0-alpha.8/go.mod h1:5f7FUYGXdJWUjESffJaYR4R60VhnHxb2X3T1teMyv5A=
|
github.com/mholt/archiver/v4 v4.0.0-alpha.8/go.mod h1:5f7FUYGXdJWUjESffJaYR4R60VhnHxb2X3T1teMyv5A=
|
||||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
|
|
||||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
|
|
||||||
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
|
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
|
||||||
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
|
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
|
||||||
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
|
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
|
||||||
@@ -292,8 +274,6 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
|
|||||||
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||||
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
|
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
|
||||||
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||||
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34=
|
|
||||||
github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho=
|
|
||||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
|
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
|
||||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
|
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
|
||||||
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
|
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
|
||||||
@@ -332,8 +312,6 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
|
|||||||
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
|
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
|
||||||
github.com/sassoftware/go-rpmutils v0.4.0 h1:ojND82NYBxgwrV+mX1CWsd5QJvvEZTKddtCdFLPWhpg=
|
github.com/sassoftware/go-rpmutils v0.4.0 h1:ojND82NYBxgwrV+mX1CWsd5QJvvEZTKddtCdFLPWhpg=
|
||||||
github.com/sassoftware/go-rpmutils v0.4.0/go.mod h1:3goNWi7PGAT3/dlql2lv3+MSN5jNYPjT5mVcQcIsYzI=
|
github.com/sassoftware/go-rpmutils v0.4.0/go.mod h1:3goNWi7PGAT3/dlql2lv3+MSN5jNYPjT5mVcQcIsYzI=
|
||||||
github.com/schollz/progressbar/v3 v3.18.0 h1:uXdoHABRFmNIjUfte/Ex7WtuyVslrw2wVPQmCN62HpA=
|
|
||||||
github.com/schollz/progressbar/v3 v3.18.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec=
|
|
||||||
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
|
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
|
||||||
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
|
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
|
||||||
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
|
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
|
||||||
@@ -491,7 +469,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
@@ -632,8 +609,6 @@ modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY=
|
|||||||
modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE=
|
modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE=
|
||||||
mvdan.cc/sh/v3 v3.10.0 h1:v9z7N1DLZ7owyLM/SXZQkBSXcwr2IGMm2LY2pmhVXj4=
|
mvdan.cc/sh/v3 v3.10.0 h1:v9z7N1DLZ7owyLM/SXZQkBSXcwr2IGMm2LY2pmhVXj4=
|
||||||
mvdan.cc/sh/v3 v3.10.0/go.mod h1:z/mSSVyLFGZzqb3ZIKojjyqIx/xbmz/UHdCSv9HmqXY=
|
mvdan.cc/sh/v3 v3.10.0/go.mod h1:z/mSSVyLFGZzqb3ZIKojjyqIx/xbmz/UHdCSv9HmqXY=
|
||||||
plemya-x.ru/fakeroot v0.0.0-20240601131003-c638a3543283 h1:BXCLPeA8g2M6qYngicyxyB/2Bo4J54Q9Rb+8jMmE3ik=
|
|
||||||
plemya-x.ru/fakeroot v0.0.0-20240601131003-c638a3543283/go.mod h1:itzL9Jx52VXOhRaucFHuMpa3y7iwjnuLGdNvypoh/S4=
|
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
|
|||||||
45
install.go
45
install.go
@@ -29,9 +29,10 @@ import (
|
|||||||
|
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
|
database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build"
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build"
|
||||||
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
|
||||||
)
|
)
|
||||||
@@ -63,22 +64,52 @@ func InstallCmd() *cli.Command {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.GetInstance(ctx).AutoPull(ctx) {
|
cfg := config.New()
|
||||||
err := repos.Pull(ctx, config.Config(ctx).Repos)
|
db := database.New(cfg)
|
||||||
|
rs := repos.New(cfg, db)
|
||||||
|
err := db.Init(ctx)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(gotext.Get("Error db init"), "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.AutoPull(ctx) {
|
||||||
|
err := rs.Pull(ctx, cfg.Repos(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error pulling repositories"), "err", err)
|
slog.Error(gotext.Get("Error pulling repositories"), "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
found, notFound, err := repos.FindPkgs(ctx, args.Slice())
|
found, notFound, err := rs.FindPkgs(ctx, args.Slice())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error finding packages"), "err", err)
|
slog.Error(gotext.Get("Error finding packages"), "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
pkgs := cliutils.FlattenPkgs(ctx, found, "install", c.Bool("interactive"))
|
pkgs := cliutils.FlattenPkgs(ctx, found, "install", c.Bool("interactive"))
|
||||||
build.InstallPkgs(ctx, pkgs, notFound, types.BuildOpts{
|
|
||||||
|
opts := types.BuildOpts{
|
||||||
|
Manager: mgr,
|
||||||
|
Clean: c.Bool("clean"),
|
||||||
|
Interactive: c.Bool("interactive"),
|
||||||
|
}
|
||||||
|
|
||||||
|
info, err := distro.ParseOSRelease(ctx)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(gotext.Get("Error parsing os release"), "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
builder := build.NewBuilder(
|
||||||
|
ctx,
|
||||||
|
opts,
|
||||||
|
rs,
|
||||||
|
info,
|
||||||
|
cfg,
|
||||||
|
)
|
||||||
|
|
||||||
|
builder.InstallPkgs(ctx, pkgs, notFound, types.BuildOpts{
|
||||||
Manager: mgr,
|
Manager: mgr,
|
||||||
Clean: c.Bool("clean"),
|
Clean: c.Bool("clean"),
|
||||||
Interactive: c.Bool("interactive"),
|
Interactive: c.Bool("interactive"),
|
||||||
@@ -86,6 +117,8 @@ func InstallCmd() *cli.Command {
|
|||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
BashComplete: func(c *cli.Context) {
|
BashComplete: func(c *cli.Context) {
|
||||||
|
cfg := config.New()
|
||||||
|
db := database.New(cfg)
|
||||||
result, err := db.GetPkgs(c.Context, "true")
|
result, err := db.GetPkgs(c.Context, "true")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error getting packages"), "err", err)
|
slog.Error(gotext.Get("Error getting packages"), "err", err)
|
||||||
@@ -94,7 +127,7 @@ func InstallCmd() *cli.Command {
|
|||||||
defer result.Close()
|
defer result.Close()
|
||||||
|
|
||||||
for result.Next() {
|
for result.Next() {
|
||||||
var pkg db.Package
|
var pkg database.Package
|
||||||
err = result.StructScan(&pkg)
|
err = result.StructScan(&pkg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error iterating over packages"), "err", err)
|
slog.Error(gotext.Get("Error iterating over packages"), "err", err)
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"gitea.plemya-x.ru/Plemya-x/fakeroot"
|
||||||
"mvdan.cc/sh/v3/expand"
|
"mvdan.cc/sh/v3/expand"
|
||||||
"mvdan.cc/sh/v3/interp"
|
"mvdan.cc/sh/v3/interp"
|
||||||
"plemya-x.ru/fakeroot"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// FakerootExecHandler was extracted from github.com/mvdan/sh/interp/handler.go
|
// FakerootExecHandler was extracted from github.com/mvdan/sh/interp/handler.go
|
||||||
|
|||||||
@@ -9,48 +9,56 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: build.go:43
|
#: build.go:44
|
||||||
msgid "Build a local package"
|
msgid "Build a local package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:49
|
#: build.go:50
|
||||||
msgid "Path to the build script"
|
msgid "Path to the build script"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:54
|
#: build.go:55
|
||||||
|
msgid "Specify package in script (for multi package script only)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build.go:60
|
||||||
msgid "Name of the package to build and its repo (example: default/go-bin)"
|
msgid "Name of the package to build and its repo (example: default/go-bin)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:59
|
#: build.go:65
|
||||||
msgid ""
|
msgid ""
|
||||||
"Build package from scratch even if there's an already built package available"
|
"Build package from scratch even if there's an already built package available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:69
|
#: build.go:75
|
||||||
msgid "Error db init"
|
msgid "Error db init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:102
|
#: build.go:104
|
||||||
|
msgid "Package not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build.go:122
|
||||||
msgid "Error pulling repositories"
|
msgid "Error pulling repositories"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:110
|
#: build.go:130
|
||||||
msgid "Unable to detect a supported package manager on the system"
|
msgid "Unable to detect a supported package manager on the system"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:116
|
#: build.go:136
|
||||||
msgid "Error parsing os release"
|
msgid "Error parsing os release"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:137
|
#: build.go:157
|
||||||
msgid "Error building package"
|
msgid "Error building package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:144
|
#: build.go:164
|
||||||
msgid "Error getting working directory"
|
msgid "Error getting working directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:153
|
#: build.go:173
|
||||||
msgid "Error moving the package"
|
msgid "Error moving the package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -138,31 +146,31 @@ msgstr ""
|
|||||||
msgid "Error encoding script variables"
|
msgid "Error encoding script variables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:42
|
#: install.go:43
|
||||||
msgid "Install a new package"
|
msgid "Install a new package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:56
|
#: install.go:57
|
||||||
msgid "Command install expected at least 1 argument, got %d"
|
msgid "Command install expected at least 1 argument, got %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:91
|
#: install.go:124
|
||||||
msgid "Error getting packages"
|
msgid "Error getting packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:100
|
#: install.go:133
|
||||||
msgid "Error iterating over packages"
|
msgid "Error iterating over packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:113
|
#: install.go:146
|
||||||
msgid "Remove an installed package"
|
msgid "Remove an installed package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:118
|
#: install.go:151
|
||||||
msgid "Command remove expected at least 1 argument, got %d"
|
msgid "Command remove expected at least 1 argument, got %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: install.go:130
|
#: install.go:163
|
||||||
msgid "Error removing packages"
|
msgid "Error removing packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -301,78 +309,78 @@ msgstr ""
|
|||||||
msgid "Error while running app"
|
msgid "Error while running app"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:116
|
#: pkg/build/build.go:135
|
||||||
msgid "Failed to prompt user to view build script"
|
msgid "Failed to prompt user to view build script"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:120
|
#: pkg/build/build.go:139
|
||||||
msgid "Building package"
|
msgid "Building package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:164
|
#: pkg/build/build.go:183
|
||||||
msgid "Downloading sources"
|
msgid "Downloading sources"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:176
|
#: pkg/build/build.go:195
|
||||||
msgid "Building package metadata"
|
msgid "Building package metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:198
|
#: pkg/build/build.go:217
|
||||||
msgid "Compressing package"
|
msgid "Compressing package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:322
|
#: pkg/build/build.go:359
|
||||||
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:336
|
#: pkg/build/build.go:373
|
||||||
msgid "This package is already installed"
|
msgid "This package is already installed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:360
|
#: pkg/build/build.go:397
|
||||||
msgid "Installing build dependencies"
|
msgid "Installing build dependencies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:371
|
#: pkg/build/build.go:408
|
||||||
msgid "Installing dependencies"
|
msgid "Installing dependencies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:419
|
#: pkg/build/build.go:449
|
||||||
msgid "The checksums array must be the same length as sources"
|
msgid "The checksums array must be the same length as sources"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:470
|
#: pkg/build/build.go:500
|
||||||
msgid "Would you like to remove the build dependencies?"
|
msgid "Would you like to remove the build dependencies?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:507
|
#: pkg/build/build.go:537
|
||||||
msgid "Executing version()"
|
msgid "Executing version()"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:527
|
#: pkg/build/build.go:557
|
||||||
msgid "Updating version"
|
msgid "Updating version"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:532
|
#: pkg/build/build.go:562
|
||||||
msgid "Executing prepare()"
|
msgid "Executing prepare()"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:542
|
#: pkg/build/build.go:572
|
||||||
msgid "Executing build()"
|
msgid "Executing build()"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build.go:558 pkg/build/build.go:586
|
#: pkg/build/build.go:588 pkg/build/build.go:616
|
||||||
msgid "Executing %s()"
|
msgid "Executing %s()"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build_legacy.go:196
|
#: pkg/build/build.go:675
|
||||||
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
msgid "Error installing native packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/build_legacy.go:207
|
#: pkg/build/build.go:701
|
||||||
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
msgid "Error installing package"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/findDeps.go:35
|
#: pkg/build/findDeps.go:35
|
||||||
@@ -387,12 +395,12 @@ msgstr ""
|
|||||||
msgid "Required dependency found"
|
msgid "Required dependency found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/install.go:44
|
#: pkg/build/utils.go:136
|
||||||
msgid "Error installing native packages"
|
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/build/install.go:94
|
#: pkg/build/utils.go:147
|
||||||
msgid "Error installing package"
|
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pkg/repos/pull.go:79
|
#: pkg/repos/pull.go:79
|
||||||
@@ -461,10 +469,10 @@ msgstr ""
|
|||||||
msgid "Upgrade all installed packages"
|
msgid "Upgrade all installed packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: upgrade.go:83
|
#: upgrade.go:90
|
||||||
msgid "Error checking for updates"
|
msgid "Error checking for updates"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: upgrade.go:94
|
#: upgrade.go:112
|
||||||
msgid "There is nothing to do."
|
msgid "There is nothing to do."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -16,49 +16,57 @@ msgstr ""
|
|||||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
"X-Generator: Gtranslator 47.1\n"
|
"X-Generator: Gtranslator 47.1\n"
|
||||||
|
|
||||||
#: build.go:43
|
#: build.go:44
|
||||||
msgid "Build a local package"
|
msgid "Build a local package"
|
||||||
msgstr "Сборка локального пакета"
|
msgstr "Сборка локального пакета"
|
||||||
|
|
||||||
#: build.go:49
|
#: build.go:50
|
||||||
msgid "Path to the build script"
|
msgid "Path to the build script"
|
||||||
msgstr "Путь к скрипту сборки"
|
msgstr "Путь к скрипту сборки"
|
||||||
|
|
||||||
#: build.go:54
|
#: build.go:55
|
||||||
|
msgid "Specify package in script (for multi package script only)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build.go:60
|
||||||
msgid "Name of the package to build and its repo (example: default/go-bin)"
|
msgid "Name of the package to build and its repo (example: default/go-bin)"
|
||||||
msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)"
|
msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)"
|
||||||
|
|
||||||
#: build.go:59
|
#: build.go:65
|
||||||
msgid ""
|
msgid ""
|
||||||
"Build package from scratch even if there's an already built package available"
|
"Build package from scratch even if there's an already built package available"
|
||||||
msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет"
|
msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет"
|
||||||
|
|
||||||
#: build.go:69
|
#: build.go:75
|
||||||
msgid "Error db init"
|
msgid "Error db init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: build.go:102
|
#: build.go:104
|
||||||
|
msgid "Package not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: build.go:122
|
||||||
msgid "Error pulling repositories"
|
msgid "Error pulling repositories"
|
||||||
msgstr "Ошибка при извлечении репозиториев"
|
msgstr "Ошибка при извлечении репозиториев"
|
||||||
|
|
||||||
#: build.go:110
|
#: build.go:130
|
||||||
msgid "Unable to detect a supported package manager on the system"
|
msgid "Unable to detect a supported package manager on the system"
|
||||||
msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе"
|
msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе"
|
||||||
|
|
||||||
#: build.go:116
|
#: build.go:136
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Error parsing os release"
|
msgid "Error parsing os release"
|
||||||
msgstr "Ошибка при разборе файла выпуска операционной системы"
|
msgstr "Ошибка при разборе файла выпуска операционной системы"
|
||||||
|
|
||||||
#: build.go:137
|
#: build.go:157
|
||||||
msgid "Error building package"
|
msgid "Error building package"
|
||||||
msgstr "Ошибка при сборке пакета"
|
msgstr "Ошибка при сборке пакета"
|
||||||
|
|
||||||
#: build.go:144
|
#: build.go:164
|
||||||
msgid "Error getting working directory"
|
msgid "Error getting working directory"
|
||||||
msgstr "Ошибка при получении рабочего каталога"
|
msgstr "Ошибка при получении рабочего каталога"
|
||||||
|
|
||||||
#: build.go:153
|
#: build.go:173
|
||||||
msgid "Error moving the package"
|
msgid "Error moving the package"
|
||||||
msgstr "Ошибка при перемещении пакета"
|
msgstr "Ошибка при перемещении пакета"
|
||||||
|
|
||||||
@@ -146,31 +154,31 @@ msgstr "Ошибка устранения переорпеделений"
|
|||||||
msgid "Error encoding script variables"
|
msgid "Error encoding script variables"
|
||||||
msgstr "Ошибка кодирования переменных скрита"
|
msgstr "Ошибка кодирования переменных скрита"
|
||||||
|
|
||||||
#: install.go:42
|
#: install.go:43
|
||||||
msgid "Install a new package"
|
msgid "Install a new package"
|
||||||
msgstr "Установить новый пакет"
|
msgstr "Установить новый пакет"
|
||||||
|
|
||||||
#: install.go:56
|
#: install.go:57
|
||||||
msgid "Command install expected at least 1 argument, got %d"
|
msgid "Command install expected at least 1 argument, got %d"
|
||||||
msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %d"
|
msgstr "Для команды install ожидался хотя бы 1 аргумент, получено %d"
|
||||||
|
|
||||||
#: install.go:91
|
#: install.go:124
|
||||||
msgid "Error getting packages"
|
msgid "Error getting packages"
|
||||||
msgstr "Ошибка при получении пакетов"
|
msgstr "Ошибка при получении пакетов"
|
||||||
|
|
||||||
#: install.go:100
|
#: install.go:133
|
||||||
msgid "Error iterating over packages"
|
msgid "Error iterating over packages"
|
||||||
msgstr "Ошибка при переборе пакетов"
|
msgstr "Ошибка при переборе пакетов"
|
||||||
|
|
||||||
#: install.go:113
|
#: install.go:146
|
||||||
msgid "Remove an installed package"
|
msgid "Remove an installed package"
|
||||||
msgstr "Удалить установленный пакет"
|
msgstr "Удалить установленный пакет"
|
||||||
|
|
||||||
#: install.go:118
|
#: install.go:151
|
||||||
msgid "Command remove expected at least 1 argument, got %d"
|
msgid "Command remove expected at least 1 argument, got %d"
|
||||||
msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d"
|
msgstr "Для команды remove ожидался хотя бы 1 аргумент, получено %d"
|
||||||
|
|
||||||
#: install.go:130
|
#: install.go:163
|
||||||
msgid "Error removing packages"
|
msgid "Error removing packages"
|
||||||
msgstr "Ошибка при удалении пакетов"
|
msgstr "Ошибка при удалении пакетов"
|
||||||
|
|
||||||
@@ -316,27 +324,27 @@ msgstr ""
|
|||||||
msgid "Error while running app"
|
msgid "Error while running app"
|
||||||
msgstr "Ошибка при запуске приложения"
|
msgstr "Ошибка при запуске приложения"
|
||||||
|
|
||||||
#: pkg/build/build.go:116
|
#: pkg/build/build.go:135
|
||||||
msgid "Failed to prompt user to view build script"
|
msgid "Failed to prompt user to view build script"
|
||||||
msgstr "Не удалось предложить пользователю просмотреть скрипт сборки"
|
msgstr "Не удалось предложить пользователю просмотреть скрипт сборки"
|
||||||
|
|
||||||
#: pkg/build/build.go:120
|
#: pkg/build/build.go:139
|
||||||
msgid "Building package"
|
msgid "Building package"
|
||||||
msgstr "Сборка пакета"
|
msgstr "Сборка пакета"
|
||||||
|
|
||||||
#: pkg/build/build.go:164
|
#: pkg/build/build.go:183
|
||||||
msgid "Downloading sources"
|
msgid "Downloading sources"
|
||||||
msgstr "Скачивание источников"
|
msgstr "Скачивание источников"
|
||||||
|
|
||||||
#: pkg/build/build.go:176
|
#: pkg/build/build.go:195
|
||||||
msgid "Building package metadata"
|
msgid "Building package metadata"
|
||||||
msgstr "Сборка метаданных пакета"
|
msgstr "Сборка метаданных пакета"
|
||||||
|
|
||||||
#: pkg/build/build.go:198
|
#: pkg/build/build.go:217
|
||||||
msgid "Compressing package"
|
msgid "Compressing package"
|
||||||
msgstr "Сжатие пакета"
|
msgstr "Сжатие пакета"
|
||||||
|
|
||||||
#: pkg/build/build.go:322
|
#: pkg/build/build.go:359
|
||||||
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?"
|
||||||
@@ -344,56 +352,54 @@ msgstr ""
|
|||||||
"Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
|
"Архитектура процессора вашей системы не соответствует этому пакету. Вы все "
|
||||||
"равно хотите выполнить сборку?"
|
"равно хотите выполнить сборку?"
|
||||||
|
|
||||||
#: pkg/build/build.go:336
|
#: pkg/build/build.go:373
|
||||||
msgid "This package is already installed"
|
msgid "This package is already installed"
|
||||||
msgstr "Этот пакет уже установлен"
|
msgstr "Этот пакет уже установлен"
|
||||||
|
|
||||||
#: pkg/build/build.go:360
|
#: pkg/build/build.go:397
|
||||||
msgid "Installing build dependencies"
|
msgid "Installing build dependencies"
|
||||||
msgstr "Установка зависимостей сборки"
|
msgstr "Установка зависимостей сборки"
|
||||||
|
|
||||||
#: pkg/build/build.go:371
|
#: pkg/build/build.go:408
|
||||||
msgid "Installing dependencies"
|
msgid "Installing dependencies"
|
||||||
msgstr "Установка зависимостей"
|
msgstr "Установка зависимостей"
|
||||||
|
|
||||||
#: pkg/build/build.go:419
|
#: pkg/build/build.go:449
|
||||||
msgid "The checksums array must be the same length as sources"
|
msgid "The checksums array must be the same length as sources"
|
||||||
msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
|
msgstr "Массив контрольных сумм должен быть той же длины, что и источники"
|
||||||
|
|
||||||
#: pkg/build/build.go:470
|
#: pkg/build/build.go:500
|
||||||
msgid "Would you like to remove the build dependencies?"
|
msgid "Would you like to remove the build dependencies?"
|
||||||
msgstr "Хотели бы вы удалить зависимости сборки?"
|
msgstr "Хотели бы вы удалить зависимости сборки?"
|
||||||
|
|
||||||
#: pkg/build/build.go:507
|
#: pkg/build/build.go:537
|
||||||
msgid "Executing version()"
|
msgid "Executing version()"
|
||||||
msgstr "Исполнение версия()"
|
msgstr "Исполнение версия()"
|
||||||
|
|
||||||
#: pkg/build/build.go:527
|
#: pkg/build/build.go:557
|
||||||
msgid "Updating version"
|
msgid "Updating version"
|
||||||
msgstr "Обновление версии"
|
msgstr "Обновление версии"
|
||||||
|
|
||||||
#: pkg/build/build.go:532
|
#: pkg/build/build.go:562
|
||||||
msgid "Executing prepare()"
|
msgid "Executing prepare()"
|
||||||
msgstr "Исполнение prepare()"
|
msgstr "Исполнение prepare()"
|
||||||
|
|
||||||
#: pkg/build/build.go:542
|
#: pkg/build/build.go:572
|
||||||
msgid "Executing build()"
|
msgid "Executing build()"
|
||||||
msgstr "Исполнение build()"
|
msgstr "Исполнение build()"
|
||||||
|
|
||||||
#: pkg/build/build.go:558 pkg/build/build.go:586
|
#: pkg/build/build.go:588 pkg/build/build.go:616
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Executing %s()"
|
msgid "Executing %s()"
|
||||||
msgstr "Исполнение files()"
|
msgstr "Исполнение files()"
|
||||||
|
|
||||||
#: pkg/build/build_legacy.go:196
|
#: pkg/build/build.go:675
|
||||||
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
msgid "Error installing native packages"
|
||||||
msgstr ""
|
msgstr "Ошибка при установке нативных пакетов"
|
||||||
"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
|
|
||||||
|
|
||||||
#: pkg/build/build_legacy.go:207
|
#: pkg/build/build.go:701
|
||||||
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
msgid "Error installing package"
|
||||||
msgstr ""
|
msgstr "Ошибка при установке пакета"
|
||||||
"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"
|
|
||||||
|
|
||||||
#: pkg/build/findDeps.go:35
|
#: pkg/build/findDeps.go:35
|
||||||
msgid "Command not found on the system"
|
msgid "Command not found on the system"
|
||||||
@@ -407,13 +413,15 @@ msgstr "Найденная предоставленная зависимость
|
|||||||
msgid "Required dependency found"
|
msgid "Required dependency found"
|
||||||
msgstr "Найдена требуемая зависимость"
|
msgstr "Найдена требуемая зависимость"
|
||||||
|
|
||||||
#: pkg/build/install.go:44
|
#: pkg/build/utils.go:136
|
||||||
msgid "Error installing native packages"
|
msgid "AutoProv is not implemented for this package format, so it's skipped"
|
||||||
msgstr "Ошибка при установке нативных пакетов"
|
msgstr ""
|
||||||
|
"AutoProv не реализовано для этого формата пакета, поэтому будет пропущено"
|
||||||
|
|
||||||
#: pkg/build/install.go:94
|
#: pkg/build/utils.go:147
|
||||||
msgid "Error installing package"
|
msgid "AutoReq is not implemented for this package format, so it's skipped"
|
||||||
msgstr "Ошибка при установке пакета"
|
msgstr ""
|
||||||
|
"AutoReq не реализовано для этого формата пакета, поэтому будет пропущено"
|
||||||
|
|
||||||
#: pkg/repos/pull.go:79
|
#: pkg/repos/pull.go:79
|
||||||
msgid "Pulling repository"
|
msgid "Pulling repository"
|
||||||
@@ -483,11 +491,11 @@ msgstr "Скачать все изменённые репозитории"
|
|||||||
msgid "Upgrade all installed packages"
|
msgid "Upgrade all installed packages"
|
||||||
msgstr "Обновить все установленные пакеты"
|
msgstr "Обновить все установленные пакеты"
|
||||||
|
|
||||||
#: upgrade.go:83
|
#: upgrade.go:90
|
||||||
msgid "Error checking for updates"
|
msgid "Error checking for updates"
|
||||||
msgstr "Ошибка при проверке обновлений"
|
msgstr "Ошибка при проверке обновлений"
|
||||||
|
|
||||||
#: upgrade.go:94
|
#: upgrade.go:112
|
||||||
msgid "There is nothing to do."
|
msgid "There is nothing to do."
|
||||||
msgstr "Здесь нечего делать."
|
msgstr "Здесь нечего делать."
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import (
|
|||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
|
||||||
"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/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/dlcache"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/decoder"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/shutils/decoder"
|
||||||
@@ -49,23 +50,31 @@ import (
|
|||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type PackageFinder interface {
|
||||||
|
FindPkgs(ctx context.Context, pkgs []string) (map[string][]db.Package, []string, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Config interface {
|
||||||
|
GetPaths(ctx context.Context) *config.Paths
|
||||||
|
PagerStyle(ctx context.Context) string
|
||||||
|
}
|
||||||
|
|
||||||
type Builder struct {
|
type Builder struct {
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
opts types.BuildOpts
|
opts types.BuildOpts
|
||||||
info *distro.OSRelease
|
info *distro.OSRelease
|
||||||
repos *repos.Repos
|
repos PackageFinder
|
||||||
config *config.ALRConfig
|
config Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func NewBuilder(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
opts types.BuildOpts,
|
opts types.BuildOpts,
|
||||||
repos *repos.Repos,
|
repos PackageFinder,
|
||||||
info *distro.OSRelease,
|
info *distro.OSRelease,
|
||||||
config *config.ALRConfig,
|
config Config,
|
||||||
) *Builder {
|
) *Builder {
|
||||||
return &Builder{
|
return &Builder{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
@@ -76,6 +85,16 @@ func New(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Builder) UpdateOptsFromPkg(pkg *db.Package) {
|
||||||
|
repodir := b.config.GetPaths(b.ctx).RepoDir
|
||||||
|
if pkg.BasePkgName != "" {
|
||||||
|
b.opts.Script = filepath.Join(repodir, pkg.Repository, pkg.BasePkgName, "alr.sh")
|
||||||
|
b.opts.Package = pkg.Name
|
||||||
|
} else {
|
||||||
|
b.opts.Script = filepath.Join(repodir, pkg.Repository, pkg.Name, "alr.sh")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error) {
|
func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error) {
|
||||||
fl, err := readScript(b.opts.Script)
|
fl, err := readScript(b.opts.Script)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -151,7 +170,7 @@ func (b *Builder) BuildPackage(ctx context.Context) ([]string, []string, error)
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = installOptDeps(ctx, b.repos, vars, b.opts) // Устанавливаем опциональные зависимости
|
err = b.installOptDeps(ctx, vars) // Устанавливаем опциональные зависимости
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@@ -247,14 +266,32 @@ func (b *Builder) executeFirstPass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
dec := decoder.New(b.info, runner) // Создаём новый декодер
|
dec := decoder.New(b.info, runner) // Создаём новый декодер
|
||||||
|
|
||||||
|
type packages struct {
|
||||||
|
BasePkgName string `sh:"basepkg_name"`
|
||||||
|
Names []string `sh:"name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var pkgs packages
|
||||||
|
err = dec.DecodeVars(&pkgs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(pkgs.Names) == 0 {
|
||||||
|
return nil, errors.New("package name is missing")
|
||||||
|
}
|
||||||
var vars types.BuildVars
|
var vars types.BuildVars
|
||||||
if b.opts.Package == "" {
|
if len(pkgs.Names) == 1 {
|
||||||
err = dec.DecodeVars(&vars) // Декодируем переменные
|
err = dec.DecodeVars(&vars) // Декодируем переменные
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &vars, nil
|
return &vars, nil
|
||||||
}
|
}
|
||||||
|
if b.opts.Package == "" {
|
||||||
|
return nil, errors.New("script has multiple packages but package is not specified")
|
||||||
|
}
|
||||||
|
|
||||||
var preVars types.BuildVarsPre
|
var preVars types.BuildVarsPre
|
||||||
funcName := fmt.Sprintf("meta_%s", b.opts.Package)
|
funcName := fmt.Sprintf("meta_%s", b.opts.Package)
|
||||||
meta, ok := dec.GetFuncSub(funcName)
|
meta, ok := dec.GetFuncSub(funcName)
|
||||||
@@ -352,7 +389,7 @@ func (b *Builder) installBuildDeps(ctx context.Context, vars *types.BuildVars) (
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
found, notFound, err := repos.FindPkgs(ctx, deps) // Находим пакеты-зависимости
|
found, notFound, err := b.repos.FindPkgs(ctx, deps) // Находим пакеты-зависимости
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -361,7 +398,7 @@ func (b *Builder) installBuildDeps(ctx context.Context, vars *types.BuildVars) (
|
|||||||
|
|
||||||
flattened := cliutils.FlattenPkgs(ctx, found, "install", b.opts.Interactive) // Уплощаем список зависимостей
|
flattened := cliutils.FlattenPkgs(ctx, found, "install", b.opts.Interactive) // Уплощаем список зависимостей
|
||||||
buildDeps = packageNames(flattened)
|
buildDeps = packageNames(flattened)
|
||||||
InstallPkgs(ctx, flattened, notFound, b.opts) // Устанавливаем пакеты
|
b.InstallPkgs(ctx, flattened, notFound, b.opts) // Устанавливаем пакеты
|
||||||
}
|
}
|
||||||
return buildDeps, nil
|
return buildDeps, nil
|
||||||
}
|
}
|
||||||
@@ -370,7 +407,7 @@ func (b *Builder) buildALRDeps(ctx context.Context, vars *types.BuildVars) (buil
|
|||||||
if len(vars.Depends) > 0 {
|
if len(vars.Depends) > 0 {
|
||||||
slog.Info(gotext.Get("Installing dependencies"))
|
slog.Info(gotext.Get("Installing dependencies"))
|
||||||
|
|
||||||
found, notFound, err := repos.FindPkgs(ctx, vars.Depends) // Поиск зависимостей
|
found, notFound, err := b.repos.FindPkgs(ctx, vars.Depends) // Поиск зависимостей
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
@@ -380,16 +417,9 @@ func (b *Builder) buildALRDeps(ctx context.Context, vars *types.BuildVars) (buil
|
|||||||
pkgs := cliutils.FlattenPkgs(ctx, found, "install", b.opts.Interactive)
|
pkgs := cliutils.FlattenPkgs(ctx, found, "install", b.opts.Interactive)
|
||||||
|
|
||||||
for _, pkg := range pkgs {
|
for _, pkg := range pkgs {
|
||||||
newOpts := b.opts
|
|
||||||
UpdateOpts(ctx, &newOpts, &pkg)
|
|
||||||
|
|
||||||
newB := New(
|
newB := *b
|
||||||
ctx,
|
newB.UpdateOptsFromPkg(&pkg)
|
||||||
newOpts,
|
|
||||||
b.repos,
|
|
||||||
b.info,
|
|
||||||
b.config,
|
|
||||||
)
|
|
||||||
|
|
||||||
// Собираем зависимости
|
// Собираем зависимости
|
||||||
pkgPaths, pkgNames, err := newB.BuildPackage(ctx)
|
pkgPaths, pkgNames, err := newB.BuildPackage(ctx)
|
||||||
@@ -402,7 +432,7 @@ func (b *Builder) buildALRDeps(ctx context.Context, vars *types.BuildVars) (buil
|
|||||||
// Добавляем пути всех собранных пакетов в builtPaths
|
// Добавляем пути всех собранных пакетов в builtPaths
|
||||||
builtNames = append(builtNames, pkgNames...)
|
builtNames = append(builtNames, pkgNames...)
|
||||||
// Добавляем имя текущего пакета в builtNames
|
// Добавляем имя текущего пакета в builtNames
|
||||||
builtNames = append(builtNames, filepath.Base(filepath.Dir(newOpts.Script)))
|
builtNames = append(builtNames, filepath.Base(filepath.Dir(newB.opts.Script)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -605,3 +635,72 @@ func (b *Builder) executeFunctions(
|
|||||||
|
|
||||||
return output, nil
|
return output, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Builder) installOptDeps(ctx context.Context, vars *types.BuildVars) error {
|
||||||
|
optDeps, err := removeAlreadyInstalled(b.opts, vars.OptDepends)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(optDeps) > 0 {
|
||||||
|
optDeps, err := cliutils.ChooseOptDepends(ctx, optDeps, "install", b.opts.Interactive) // Пользователя просят выбрать опциональные зависимости
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(optDeps) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
found, notFound, err := b.repos.FindPkgs(ctx, optDeps) // Находим опциональные зависимости
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
flattened := cliutils.FlattenPkgs(ctx, found, "install", b.opts.Interactive)
|
||||||
|
b.InstallPkgs(ctx, flattened, notFound, b.opts) // Устанавливаем выбранные пакеты
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Builder) InstallPkgs(
|
||||||
|
ctx context.Context,
|
||||||
|
alrPkgs []db.Package,
|
||||||
|
nativePkgs []string,
|
||||||
|
opts types.BuildOpts,
|
||||||
|
) {
|
||||||
|
if len(nativePkgs) > 0 {
|
||||||
|
err := opts.Manager.Install(nil, nativePkgs...)
|
||||||
|
// Если есть нативные пакеты, выполняем их установку
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(gotext.Get("Error installing native packages"), "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
// Логируем и завершаем выполнение при ошибке
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b.InstallALRPackages(ctx, alrPkgs, opts)
|
||||||
|
// Устанавливаем скрипты сборки через функцию InstallScripts
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Builder) InstallALRPackages(ctx context.Context, pkgs []db.Package, opts types.BuildOpts) {
|
||||||
|
for _, pkg := range pkgs {
|
||||||
|
builder := *b
|
||||||
|
builder.UpdateOptsFromPkg(&pkg)
|
||||||
|
|
||||||
|
builtPkgs, _, err := builder.BuildPackage(ctx)
|
||||||
|
// Выполняем сборку пакета
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(gotext.Get("Error building package"), "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
// Логируем и завершаем выполнение при ошибке сборки
|
||||||
|
}
|
||||||
|
|
||||||
|
err = opts.Manager.InstallLocal(nil, builtPkgs...)
|
||||||
|
// Устанавливаем локально собранные пакеты
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(gotext.Get("Error installing package"), "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
// Логируем и завершаем выполнение при ошибке установки
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,10 +18,18 @@ package build
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"mvdan.cc/sh/v3/syntax"
|
||||||
|
|
||||||
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
|
||||||
"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/types"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
|
||||||
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/manager"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -134,93 +142,143 @@ func (m *TestManager) IsInstalled(pkg string) (bool, error) {
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fix test
|
type TestConfig struct{}
|
||||||
func TestInstallBuildDeps(t *testing.T) {
|
|
||||||
type testEnv struct {
|
|
||||||
pf PackageFinder
|
|
||||||
vars *types.BuildVars
|
|
||||||
opts types.BuildOpts
|
|
||||||
|
|
||||||
// Contains pkgs captured by FindPkgsFunc
|
func (c *TestConfig) PagerStyle(ctx context.Context) string {
|
||||||
// capturedPkgs []string
|
return "native"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *TestConfig) GetPaths(ctx context.Context) *config.Paths {
|
||||||
|
return &config.Paths{
|
||||||
|
CacheDir: "/tmp",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExecuteFirstPassIsSecure(t *testing.T) {
|
||||||
|
cfg := &TestConfig{}
|
||||||
|
pf := &TestPackageFinder{}
|
||||||
|
info := &distro.OSRelease{}
|
||||||
|
m := &TestManager{}
|
||||||
|
|
||||||
|
opts := types.BuildOpts{
|
||||||
|
Manager: m,
|
||||||
|
Interactive: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
b := NewBuilder(
|
||||||
|
ctx,
|
||||||
|
opts,
|
||||||
|
pf,
|
||||||
|
info,
|
||||||
|
cfg,
|
||||||
|
)
|
||||||
|
|
||||||
|
tmpFile, err := os.CreateTemp("", "testfile-")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
tmpFilePath := tmpFile.Name()
|
||||||
|
defer os.Remove(tmpFilePath)
|
||||||
|
|
||||||
|
_, err = os.Stat(tmpFilePath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
testScript := fmt.Sprintf(`name='test'
|
||||||
|
version=1.0.0
|
||||||
|
release=1
|
||||||
|
rm -f %s`, tmpFilePath)
|
||||||
|
|
||||||
|
fl, err := syntax.NewParser().Parse(strings.NewReader(testScript), "alr.sh")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = b.executeFirstPass(fl)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = os.Stat(tmpFilePath)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExecuteFirstPassIsCorrect(t *testing.T) {
|
||||||
type testCase struct {
|
type testCase struct {
|
||||||
Name string
|
Name string
|
||||||
Prepare func() *testEnv
|
Script string
|
||||||
Expected func(t *testing.T, e *testEnv, res []string, err error)
|
Opts types.BuildOpts
|
||||||
|
Expected func(t *testing.T, vars *types.BuildVars)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range []testCase{
|
for _, tc := range []testCase{{
|
||||||
/*
|
Name: "single package",
|
||||||
{
|
Script: `name='test'
|
||||||
Name: "install only needed deps",
|
version='1.0.0'
|
||||||
Prepare: func() *testEnv {
|
release=1
|
||||||
pf := TestPackageFinder{}
|
epoch=2
|
||||||
vars := types.BuildVars{}
|
desc="Test package"
|
||||||
m := TestManager{}
|
homepage='https://example.com'
|
||||||
opts := types.BuildOpts{
|
maintainer='Ivan Ivanov'
|
||||||
Manager: &m,
|
`,
|
||||||
Interactive: false,
|
Opts: types.BuildOpts{
|
||||||
}
|
Manager: &TestManager{},
|
||||||
|
Interactive: false,
|
||||||
|
},
|
||||||
|
Expected: func(t *testing.T, vars *types.BuildVars) {
|
||||||
|
assert.Equal(t, vars.Name, "test")
|
||||||
|
assert.Equal(t, vars.Version, "1.0.0")
|
||||||
|
assert.Equal(t, vars.Release, int(1))
|
||||||
|
assert.Equal(t, vars.Epoch, uint(2))
|
||||||
|
assert.Equal(t, vars.Description, "Test package")
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Name: "multiple packages",
|
||||||
|
Script: `name=(
|
||||||
|
foo
|
||||||
|
bar
|
||||||
|
)
|
||||||
|
|
||||||
env := &testEnv{
|
version='0.0.1'
|
||||||
pf: &pf,
|
release=1
|
||||||
vars: &vars,
|
epoch=2
|
||||||
opts: opts,
|
desc="Test package"
|
||||||
capturedPkgs: []string{},
|
|
||||||
}
|
|
||||||
|
|
||||||
pf.FindPkgsFunc = func(ctx context.Context, pkgs []string) (map[string][]db.Package, []string, error) {
|
meta_foo() {
|
||||||
env.capturedPkgs = append(env.capturedPkgs, pkgs...)
|
desc="Foo package"
|
||||||
result := make(map[string][]db.Package)
|
}
|
||||||
result["bar"] = []db.Package{{
|
|
||||||
Name: "bar-pkg",
|
|
||||||
}}
|
|
||||||
result["buz"] = []db.Package{{
|
|
||||||
Name: "buz-pkg",
|
|
||||||
}}
|
|
||||||
|
|
||||||
return result, []string{}, nil
|
meta_bar() {
|
||||||
}
|
|
||||||
|
|
||||||
vars.BuildDepends = []string{
|
}
|
||||||
"foo",
|
`,
|
||||||
"bar",
|
Opts: types.BuildOpts{
|
||||||
"buz",
|
Package: "foo",
|
||||||
}
|
Manager: &TestManager{},
|
||||||
m.IsInstalledFunc = func(pkg string) (bool, error) {
|
Interactive: false,
|
||||||
if pkg == "foo" {
|
},
|
||||||
return true, nil
|
Expected: func(t *testing.T, vars *types.BuildVars) {
|
||||||
} else {
|
assert.Equal(t, vars.Name, "foo")
|
||||||
return false, nil
|
assert.Equal(t, vars.Description, "Foo package")
|
||||||
}
|
},
|
||||||
}
|
}} {
|
||||||
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
|
cfg := &TestConfig{}
|
||||||
|
pf := &TestPackageFinder{}
|
||||||
|
info := &distro.OSRelease{}
|
||||||
|
|
||||||
return env
|
|
||||||
},
|
|
||||||
Expected: func(t *testing.T, e *testEnv, res []string, err error) {
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.Len(t, res, 2)
|
|
||||||
assert.ElementsMatch(t, res, []string{"bar-pkg", "buz-pkg"})
|
|
||||||
|
|
||||||
assert.ElementsMatch(t, e.capturedPkgs, []string{"bar", "buz"})
|
|
||||||
},
|
|
||||||
},
|
|
||||||
*/
|
|
||||||
} {
|
|
||||||
t.Run(tc.Name, func(tt *testing.T) {
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
env := tc.Prepare()
|
|
||||||
|
|
||||||
result, err := installBuildDeps(
|
b := NewBuilder(
|
||||||
ctx,
|
ctx,
|
||||||
env.pf,
|
tc.Opts,
|
||||||
env.vars,
|
pf,
|
||||||
env.opts,
|
info,
|
||||||
|
cfg,
|
||||||
)
|
)
|
||||||
|
|
||||||
tc.Expected(tt, env, result, err)
|
fl, err := syntax.NewParser().Parse(strings.NewReader(tc.Script), "alr.sh")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
vars, err := b.executeFirstPass(fl)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
tc.Expected(t, vars)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
// This file was originally part of the project "LURE - Linux User REpository", created by Elara Musayelyan.
|
|
||||||
// It has been modified as part of "ALR - Any Linux Repository" by Евгений Храмов.
|
|
||||||
//
|
|
||||||
// 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 build
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"log/slog"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
"github.com/leonelquinteros/gotext"
|
|
||||||
|
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/config"
|
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
|
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
|
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/distro"
|
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/repos"
|
|
||||||
)
|
|
||||||
|
|
||||||
// InstallPkgs устанавливает нативные пакеты с использованием менеджера пакетов,
|
|
||||||
// затем строит и устанавливает пакеты ALR
|
|
||||||
func InstallPkgs(ctx context.Context, alrPkgs []db.Package, nativePkgs []string, opts types.BuildOpts) {
|
|
||||||
if len(nativePkgs) > 0 {
|
|
||||||
err := opts.Manager.Install(nil, nativePkgs...)
|
|
||||||
// Если есть нативные пакеты, выполняем их установку
|
|
||||||
if err != nil {
|
|
||||||
slog.Error(gotext.Get("Error installing native packages"), "err", err)
|
|
||||||
os.Exit(1)
|
|
||||||
// Логируем и завершаем выполнение при ошибке
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
InstallALRPackages(ctx, alrPkgs, opts)
|
|
||||||
// Устанавливаем скрипты сборки через функцию InstallScripts
|
|
||||||
}
|
|
||||||
|
|
||||||
func UpdateOpts(ctx context.Context, opts *types.BuildOpts, pkg *db.Package) {
|
|
||||||
repodir := config.GetPaths(ctx).RepoDir
|
|
||||||
if pkg.BasePkgName != "" {
|
|
||||||
opts.Script = filepath.Join(repodir, pkg.Repository, pkg.BasePkgName, "alr.sh")
|
|
||||||
opts.Package = pkg.Name
|
|
||||||
} else {
|
|
||||||
opts.Script = filepath.Join(repodir, pkg.Repository, pkg.Name, "alr.sh")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// InstallALRPackages строит и устанавливает переданные alr скрипты сборки
|
|
||||||
func InstallALRPackages(ctx context.Context, pkgs []db.Package, opts types.BuildOpts) {
|
|
||||||
info, err := distro.ParseOSRelease(ctx)
|
|
||||||
if err != nil {
|
|
||||||
slog.Error(gotext.Get("Error parsing os release"), "err", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pkg := range pkgs {
|
|
||||||
UpdateOpts(ctx, &opts, &pkg)
|
|
||||||
|
|
||||||
builder := New(
|
|
||||||
ctx,
|
|
||||||
opts,
|
|
||||||
repos.GetInstance(ctx),
|
|
||||||
info,
|
|
||||||
config.GetInstance(ctx),
|
|
||||||
)
|
|
||||||
|
|
||||||
builtPkgs, _, err := builder.BuildPackage(ctx)
|
|
||||||
// Выполняем сборку пакета
|
|
||||||
if err != nil {
|
|
||||||
slog.Error(gotext.Get("Error building package"), "err", err)
|
|
||||||
os.Exit(1)
|
|
||||||
// Логируем и завершаем выполнение при ошибке сборки
|
|
||||||
}
|
|
||||||
|
|
||||||
err = opts.Manager.InstallLocal(nil, builtPkgs...)
|
|
||||||
// Устанавливаем локально собранные пакеты
|
|
||||||
if err != nil {
|
|
||||||
slog.Error(gotext.Get("Error installing package"), "err", err)
|
|
||||||
os.Exit(1)
|
|
||||||
// Логируем и завершаем выполнение при ошибке установки
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
// This file was originally part of the project "LURE - Linux User REpository", created by Elara Musayelyan.
|
|
||||||
// It has been modified as part of "ALR - Any Linux Repository" by Евгений Храмов.
|
|
||||||
//
|
|
||||||
// ALR - Any Linux Repository
|
// ALR - Any Linux Repository
|
||||||
// Copyright (C) 2025 Евгений Храмов
|
// Copyright (C) 2025 Евгений Храмов
|
||||||
//
|
//
|
||||||
@@ -43,7 +40,6 @@ import (
|
|||||||
"github.com/goreleaser/nfpm/v2"
|
"github.com/goreleaser/nfpm/v2"
|
||||||
"github.com/goreleaser/nfpm/v2/files"
|
"github.com/goreleaser/nfpm/v2/files"
|
||||||
|
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
|
|
||||||
"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/overrides"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/overrides"
|
||||||
@@ -82,62 +78,6 @@ func prepareDirs(dirs types.Directories) error {
|
|||||||
return os.MkdirAll(dirs.PkgDir, 0o755) // Создаем директорию для пакетов
|
return os.MkdirAll(dirs.PkgDir, 0o755) // Создаем директорию для пакетов
|
||||||
}
|
}
|
||||||
|
|
||||||
type PackageFinder interface {
|
|
||||||
FindPkgs(ctx context.Context, pkgs []string) (map[string][]db.Package, []string, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Функция installBuildDeps устанавливает все зависимости сборки, которые еще не установлены, и возвращает
|
|
||||||
// срез, содержащий имена всех установленных пакетов.
|
|
||||||
func installBuildDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) ([]string, error) {
|
|
||||||
var buildDeps []string
|
|
||||||
if len(vars.BuildDepends) > 0 {
|
|
||||||
deps, err := removeAlreadyInstalled(opts, vars.BuildDepends)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
found, notFound, err := repos.FindPkgs(ctx, deps) // Находим пакеты-зависимости
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
slog.Info(gotext.Get("Installing build dependencies")) // Логгируем установку зависимостей
|
|
||||||
|
|
||||||
flattened := cliutils.FlattenPkgs(ctx, found, "install", opts.Interactive) // Уплощаем список зависимостей
|
|
||||||
buildDeps = packageNames(flattened)
|
|
||||||
InstallPkgs(ctx, flattened, notFound, opts) // Устанавливаем пакеты
|
|
||||||
}
|
|
||||||
return buildDeps, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Функция installOptDeps спрашивает у пользователя, какие, если таковые имеются, опциональные зависимости он хочет установить.
|
|
||||||
// Если пользователь решает установить какие-либо опциональные зависимости, выполняется их установка.
|
|
||||||
func installOptDeps(ctx context.Context, repos PackageFinder, vars *types.BuildVars, opts types.BuildOpts) error {
|
|
||||||
optDeps, err := removeAlreadyInstalled(opts, vars.OptDepends)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if len(optDeps) > 0 {
|
|
||||||
optDeps, err := cliutils.ChooseOptDepends(ctx, optDeps, "install", opts.Interactive) // Пользователя просят выбрать опциональные зависимости
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(optDeps) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
found, notFound, err := repos.FindPkgs(ctx, optDeps) // Находим опциональные зависимости
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
flattened := cliutils.FlattenPkgs(ctx, found, "install", opts.Interactive)
|
|
||||||
InstallPkgs(ctx, flattened, notFound, opts) // Устанавливаем выбранные пакеты
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Функция buildPkgMetadata создает метаданные для пакета, который будет собран.
|
// Функция buildPkgMetadata создает метаданные для пакета, который будет собран.
|
||||||
func buildPkgMetadata(
|
func buildPkgMetadata(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
@@ -40,7 +40,7 @@ func Pull(ctx context.Context, repos []types.Repo) error {
|
|||||||
// It also returns a slice that contains the names of all packages that were not found.
|
// It also returns a slice that contains the names of all packages that were not found.
|
||||||
//
|
//
|
||||||
// Deprecated: use struct method
|
// Deprecated: use struct method
|
||||||
func FindPkgs(ctx context.Context, pkgs []string) (map[string][]database.Package, []string, error) {
|
func FindPkgs_(ctx context.Context, pkgs []string) (map[string][]database.Package, []string, error) {
|
||||||
return GetInstance(ctx).FindPkgs(ctx, pkgs)
|
return GetInstance(ctx).FindPkgs(ctx, pkgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,10 @@ elif command -v apk &>/dev/null; then
|
|||||||
info "Обнаружен apk"
|
info "Обнаружен apk"
|
||||||
pkgFormat="apk"
|
pkgFormat="apk"
|
||||||
pkgMgr="apk"
|
pkgMgr="apk"
|
||||||
|
elif command -v apt-get &>/dev/null; then
|
||||||
|
info "Обнаружен apt-get"
|
||||||
|
pkgFormat="rpm"
|
||||||
|
pkgMgr="apt-get"
|
||||||
else
|
else
|
||||||
warn "Не обнаружен поддерживаемый менеджер пакетов!"
|
warn "Не обнаружен поддерживаемый менеджер пакетов!"
|
||||||
noPkgMgr=true
|
noPkgMgr=true
|
||||||
@@ -98,7 +102,10 @@ if [ -z "$noPkgMgr" ]; then
|
|||||||
elif [ "$pkgMgr" == "apt" ]; then
|
elif [ "$pkgMgr" == "apt" ]; then
|
||||||
latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*.amd64.deb' | sort -V | tail -n 1)
|
latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*.amd64.deb' | sort -V | tail -n 1)
|
||||||
elif [[ "$pkgMgr" == "dnf" || "$pkgMgr" == "yum" || "$pkgMgr" == "zypper" ]]; then
|
elif [[ "$pkgMgr" == "dnf" || "$pkgMgr" == "yum" || "$pkgMgr" == "zypper" ]]; then
|
||||||
latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*.x86_64.rpm' | sort -V | tail -n 1)
|
latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*\.x86_64\.rpm' | grep -v 'alt1' | sort -V | tail -n 1)
|
||||||
|
elif [[ "$pkgMgr" == "apt-get" ]]; then
|
||||||
|
latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*alt1.x86_64.rpm' | sort -V | tail -n 1)
|
||||||
|
|
||||||
else
|
else
|
||||||
error "Не поддерживаемый менеджер пакетов для автоматической установки"
|
error "Не поддерживаемый менеджер пакетов для автоматической установки"
|
||||||
fi
|
fi
|
||||||
|
|||||||
44
upgrade.go
44
upgrade.go
@@ -32,7 +32,7 @@ import (
|
|||||||
"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/config"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
|
database "gitea.plemya-x.ru/Plemya-x/ALR/internal/db"
|
||||||
"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/types"
|
"gitea.plemya-x.ru/Plemya-x/ALR/internal/types"
|
||||||
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build"
|
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/build"
|
||||||
@@ -56,7 +56,14 @@ func UpgradeCmd() *cli.Command {
|
|||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
ctx := c.Context
|
ctx := c.Context
|
||||||
|
|
||||||
cfg := config.GetInstance(ctx)
|
cfg := config.New()
|
||||||
|
db := database.New(cfg)
|
||||||
|
rs := repos.New(cfg, db)
|
||||||
|
err := db.Init(ctx)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(gotext.Get("Error db init"), "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
info, err := distro.ParseOSRelease(ctx)
|
info, err := distro.ParseOSRelease(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -71,21 +78,32 @@ func UpgradeCmd() *cli.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if cfg.AutoPull(ctx) {
|
if cfg.AutoPull(ctx) {
|
||||||
err = repos.Pull(ctx, config.Config(ctx).Repos)
|
err = rs.Pull(ctx, cfg.Repos(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error pulling repos"), "err", err)
|
slog.Error(gotext.Get("Error pulling repos"), "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updates, err := checkForUpdates(ctx, mgr, info)
|
updates, err := checkForUpdates(ctx, mgr, cfg, rs, info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(gotext.Get("Error checking for updates"), "err", err)
|
slog.Error(gotext.Get("Error checking for updates"), "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(updates) > 0 {
|
if len(updates) > 0 {
|
||||||
build.InstallPkgs(ctx, updates, nil, types.BuildOpts{
|
builder := build.NewBuilder(
|
||||||
|
ctx,
|
||||||
|
types.BuildOpts{
|
||||||
|
Manager: mgr,
|
||||||
|
Clean: c.Bool("clean"),
|
||||||
|
Interactive: c.Bool("interactive"),
|
||||||
|
},
|
||||||
|
rs,
|
||||||
|
info,
|
||||||
|
cfg,
|
||||||
|
)
|
||||||
|
builder.InstallPkgs(ctx, updates, nil, types.BuildOpts{
|
||||||
Manager: mgr,
|
Manager: mgr,
|
||||||
Clean: c.Bool("clean"),
|
Clean: c.Bool("clean"),
|
||||||
Interactive: c.Bool("interactive"),
|
Interactive: c.Bool("interactive"),
|
||||||
@@ -99,27 +117,33 @@ func UpgradeCmd() *cli.Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkForUpdates(ctx context.Context, mgr manager.Manager, info *distro.OSRelease) ([]db.Package, error) {
|
func checkForUpdates(
|
||||||
|
ctx context.Context,
|
||||||
|
mgr manager.Manager,
|
||||||
|
cfg *config.ALRConfig,
|
||||||
|
rs *repos.Repos,
|
||||||
|
info *distro.OSRelease,
|
||||||
|
) ([]database.Package, error) {
|
||||||
installed, err := mgr.ListInstalled(nil)
|
installed, err := mgr.ListInstalled(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
pkgNames := maps.Keys(installed)
|
pkgNames := maps.Keys(installed)
|
||||||
found, _, err := repos.FindPkgs(ctx, pkgNames)
|
found, _, err := rs.FindPkgs(ctx, pkgNames)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var out []db.Package
|
var out []database.Package
|
||||||
for pkgName, pkgs := range found {
|
for pkgName, pkgs := range found {
|
||||||
if slices.Contains(config.Config(ctx).IgnorePkgUpdates, pkgName) {
|
if slices.Contains(cfg.IgnorePkgUpdates(ctx), pkgName) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(pkgs) > 1 {
|
if len(pkgs) > 1 {
|
||||||
// Puts the element with the highest version first
|
// Puts the element with the highest version first
|
||||||
slices.SortFunc(pkgs, func(a, b db.Package) int {
|
slices.SortFunc(pkgs, func(a, b database.Package) int {
|
||||||
return vercmp.Compare(a.Version, b.Version)
|
return vercmp.Compare(a.Version, b.Version)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user