aboutsummaryrefslogtreecommitdiff
blob: f72b9964c791e69338a92a63dc4df2f8847719a9 (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
"""Subroutines with repositories"""
from os import path, mkdirs, remove, rmdir
from shutil import copy2

from git import Repo
import portage

class Repository():
    def __init__(self, root):
        if not pomu_status(root):
            raise ValueError('This path is not a valid pomu repository')
        self.root = root

    repo = property()
    @repo.getter
    def repo(self):
        return Repo(repo_path)

    def merge(self, package):
        r = self.repo
        for wd, f in package.files:
            dst = path.join(self.root, wd)
            os.makedirs(dst)
            copy2(path.join(package.root, wd, f), dst)
            r.index.add(path.join(dst, f))
        r.index.commit('Merged package ' + package.name)
        return Result.Ok('Merged package ' + package.name ' successfully')

    def unmerge(self, package):
        r = self.repo
        for wd, f in package.files:
            dst = path.join(self.root, wd)
            r.index.remove(path.join(self.root, wd, f))
            os.remove(path.join(self.root, wd, f))
            try:
                rmdir(dst)
            except OSError: pass
        self.repo.commit('Removed package ' + package.name + ' successfully')


def portage_repos():
    """Yield the repositories configured for portage"""
    rsets = portage.db[portage.root]['vartree'].settings.repositories

    for repo in rsets.prepos_order:
        yield repo

def portage_repo_path(repo):
    """Get the path of a given portage repository"""
    rsets = portage.db[portage.root]['vartree'].settings.repositories

    if repo in rsets.prepos:
        return rsets.prepos[repo].location
    return None

def pomu_status(repo_path):
    """Check if pomu is enabled for a repository at a given path"""
    return path.isdir(path.join(repo_path, 'metadata', 'pomu'))

def pomu_active_repo():
    """Returns a portage repo, for which pomu is enabled"""
    for repo in portage_repos():
        if pomu_status(portage_repo_path(repo)):
            return repo
    return None