ALR

Форк
1
/
install.go 
122 строки · 3.2 Кб
1
/*
2
 * ALR - Any Linux Repository
3
 * Copyright (C) 2024 Евгений Храмов
4
 *
5
 * This program is free software: you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation, either version 3 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
 */
18

19
package main
20

21
import (
22
	"fmt"
23

24
	"github.com/urfave/cli/v2"
25
	"plemya-x.ru/alr/internal/cliutils"
26
	"plemya-x.ru/alr/internal/config"
27
	"plemya-x.ru/alr/internal/db"
28
	"plemya-x.ru/alr/internal/types"
29
	"plemya-x.ru/alr/pkg/build"
30
	"plemya-x.ru/alr/pkg/loggerctx"
31
	"plemya-x.ru/alr/pkg/manager"
32
	"plemya-x.ru/alr/pkg/repos"
33
)
34

35
var installCmd = &cli.Command{
36
	Name:    "install",
37
	Usage:   "Install a new package",
38
	Aliases: []string{"in"},
39
	Flags: []cli.Flag{
40
		&cli.BoolFlag{
41
			Name:    "clean",
42
			Aliases: []string{"c"},
43
			Usage:   "Build package from scratch even if there's an already built package available",
44
		},
45
	},
46
	Action: func(c *cli.Context) error {
47
		ctx := c.Context
48
		log := loggerctx.From(ctx)
49

50
		args := c.Args()
51
		if args.Len() < 1 {
52
			log.Fatalf("Command install expected at least 1 argument, got %d", args.Len()).Send()
53
		}
54

55
		mgr := manager.Detect()
56
		if mgr == nil {
57
			log.Fatal("Unable to detect a supported package manager on the system").Send()
58
		}
59

60
		err := repos.Pull(ctx, config.Config(ctx).Repos)
61
		if err != nil {
62
			log.Fatal("Error pulling repositories").Err(err).Send()
63
		}
64

65
		found, notFound, err := repos.FindPkgs(ctx, args.Slice())
66
		if err != nil {
67
			log.Fatal("Error finding packages").Err(err).Send()
68
		}
69

70
		pkgs := cliutils.FlattenPkgs(ctx, found, "install", c.Bool("interactive"))
71
		build.InstallPkgs(ctx, pkgs, notFound, types.BuildOpts{
72
			Manager:     mgr,
73
			Clean:       c.Bool("clean"),
74
			Interactive: c.Bool("interactive"),
75
		})
76
		return nil
77
	},
78
	BashComplete: func(c *cli.Context) {
79
		log := loggerctx.From(c.Context)
80
		result, err := db.GetPkgs(c.Context, "true")
81
		if err != nil {
82
			log.Fatal("Error getting packages").Err(err).Send()
83
		}
84
		defer result.Close()
85

86
		for result.Next() {
87
			var pkg db.Package
88
			err = result.StructScan(&pkg)
89
			if err != nil {
90
				log.Fatal("Error iterating over packages").Err(err).Send()
91
			}
92

93
			fmt.Println(pkg.Name)
94
		}
95
	},
96
}
97

98
var removeCmd = &cli.Command{
99
	Name:    "remove",
100
	Usage:   "Remove an installed package",
101
	Aliases: []string{"rm"},
102
	Action: func(c *cli.Context) error {
103
		log := loggerctx.From(c.Context)
104

105
		args := c.Args()
106
		if args.Len() < 1 {
107
			log.Fatalf("Command remove expected at least 1 argument, got %d", args.Len()).Send()
108
		}
109

110
		mgr := manager.Detect()
111
		if mgr == nil {
112
			log.Fatal("Unable to detect a supported package manager on the system").Send()
113
		}
114

115
		err := mgr.Remove(nil, c.Args().Slice()...)
116
		if err != nil {
117
			log.Fatal("Error removing packages").Err(err).Send()
118
		}
119

120
		return nil
121
	},
122
}
123

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

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

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

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