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
|