summaryrefslogtreecommitdiff
path: root/src/backend/setbranch.py
blob: 4763b6082126bc3227cc154a17825b53b4b1c431 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/python3

import animation
import git
import os
import random
import signal
import sys
import sisyphus.checkenv
import sisyphus.getclr
import sisyphus.getfs
import sisyphus.purgeenv
import sisyphus.setjobs
import sisyphus.setmirror
import sisyphus.setprofile


brch_rmt_map = {
    "master": {
        "github": sisyphus.getfs.rmt_gh_addr,
        "gitlab": sisyphus.getfs.rmt_gl_addr,
        "pagure": sisyphus.getfs.rmt_pg_addr
    },
    "next": {
        "github": sisyphus.getfs.rmt_gh_addr,
        "gitlab": sisyphus.getfs.rmt_gl_addr,
        "pagure": sisyphus.getfs.rmt_pg_addr
    }
}


def sigint_handler(signal, frame):
    sys.exit(0)


signal.signal(signal.SIGINT, sigint_handler)


def get_brch_rmt(branch, remote):
    g_rmt = []
    r_rmt = []
    p_cfg_rmt = []

    if branch in brch_rmt_map and remote in brch_rmt_map[branch]:
        remote = brch_rmt_map[branch][remote]
    else:
        # set a default remote here if needed
        pass

    g_rmt = [remote, sisyphus.getfs.g_repo]
    r_rmt = [remote, sisyphus.getfs.r_repo]
    p_cfg_rmt = [remote, sisyphus.getfs.p_cfg_repo]

    return g_rmt, r_rmt, p_cfg_rmt


@animation.wait('injecting Gentoo Linux portage tree')
def ins_g_repo(branch, remote):
    g_rmt, r_rmt, p_cfg_rmt = get_brch_rmt(branch, remote)

    if not os.path.isdir(os.path.join(sisyphus.getfs.g_src_dir, '.git')):
        git.Repo.clone_from(
            "/".join(g_rmt), sisyphus.getfs.g_src_dir, depth=1, branch=branch)


@animation.wait('injecting Redcore Linux ebuild overlay')
def ins_r_repo(branch, remote):
    g_rmt, r_rmt, p_cfg_rmt = get_brch_rmt(branch, remote)

    if not os.path.isdir(os.path.join(sisyphus.getfs.r_src_dir, '.git')):
        git.Repo.clone_from(
            "/".join(r_rmt), sisyphus.getfs.r_src_dir, depth=1, branch=branch)


@animation.wait('injecting Redcore Linux portage config')
def ins_p_cfg_repo(branch, remote):
    g_rmt, r_rmt, p_cfg_rmt = get_brch_rmt(branch, remote)

    if not os.path.isdir(os.path.join(sisyphus.getfs.p_cfg_dir, '.git')):
        git.Repo.clone_from("/".join(p_cfg_rmt),
                            sisyphus.getfs.p_cfg_dir, depth=1, branch=branch)


def set_brch_master_index():
    mirrorList = sisyphus.setmirror.getList()
    odd_indices = [i + 1 for i in range(len(mirrorList)) if (i + 1) % 2 == 1]
    chosen_index = random.choice(odd_indices)
    sisyphus.setmirror.setActive(chosen_index)


def set_brch_next_index():
    mirrorList = sisyphus.setmirror.getList()
    even_indices = [i + 1 for i in range(len(mirrorList)) if (i + 1) % 2 == 0]
    chosen_index = random.choice(even_indices)
    sisyphus.setmirror.setActive(chosen_index)


def set_bhst_index(branch, remote):
    if "master" in branch:
        print(sisyphus.getclr.green + "\nActive branch switched:" +
              " " + sisyphus.getclr.reset + "'" + branch + "'")
        print(sisyphus.getclr.green + "Active remote switched:" +
              " " + sisyphus.getclr.reset + "'" + remote + "'")
        set_brch_master_index()  # Set binhost index for branch 'master' (random odd index)
    elif "next" in branch:
        print(sisyphus.getclr.green + "\nActive branch switched:" +
              " " + sisyphus.getclr.reset + "'" + branch + "'")
        print(sisyphus.getclr.green + "Active remote switched:" +
              " " + sisyphus.getclr.reset + "'" + remote + "'")
        set_brch_next_index()  # Set binhost index for branch 'next' (random even index)


def start(branch, remote):
    is_online = sisyphus.checkenv.connectivity()

    if sisyphus.checkenv.root():
        if is_online == 1:
            sisyphus.purgeenv.branch()
            sisyphus.purgeenv.metadata()
            ins_g_repo(branch, remote)
            ins_r_repo(branch, remote)
            ins_p_cfg_repo(branch, remote)
            sisyphus.setjobs.start()
            sisyphus.setprofile.start()
            set_bhst_index(branch, remote)
        else:
            print(sisyphus.getclr.bright_red +
                  "\nNo internet connection; Aborting!\n" + sisyphus.getclr.reset)
            sys.exit()
    else:
        print(sisyphus.getclr.bright_red +
              "\nYou need root permissions to do this!\n" + sisyphus.getclr.reset)
        sys.exit()