Добавлен объект для управления пакетами из var/db/pkg

legacy27 3.6.7.19
Mike Hiretsky 4 years ago
parent 847413171c
commit b7017e8501

@ -0,0 +1,103 @@
# -*- coding: utf-8 -*-
# Copyright 2008-2016 Mir Calculate. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from os import path
import bz2
import os
import shutil
from calculate.lib.utils.files import readFile, listDirectory
class VardbPackage(object):
"""
Объект для модификации пакета из /var/db/pkg
"""
def __init__(self, infodn):
self.infodn = infodn
self.CATEGORY, self.PF = path.split(infodn)
self.CATEGORY = path.basename(self.CATEGORY)
self.environment = path.join(self.infodn, "environment.bz2")
self.depend = path.join(self.infodn, "DEPEND")
self.bdepend = path.join(self.infodn, "BDEPEND")
self.depend_binary = path.join(self.infodn, "DEPEND.binary")
self.bdepend_binary = path.join(self.infodn, "BDEPEND.binary")
self.detected_mark = path.join(self.infodn, "EMERGE_FROM")
def __repr__(self):
return "%s/%s"%(self.CATEGORY, self.PF)
def set_detected(self, binary):
with open(self.detected_mark, 'w') as f:
f.write("binary" if binary else "ebuild")
@property
def binary(self):
# detect by mark file
if path.exists(self.detected_mark):
return readFile(self.detected_mark).strip() == "binary"
# detect by old detect
if path.exists(self.bdepend_binary) or path.exists(self.depend_binary):
self.set_detected(True)
return True
buf = None
# detect by environment.bz2
with bz2.BZ2File(self.environment, 'r') as f:
for n in xrange(0,3):
if buf is None:
buf = f.read(10000)
else:
buf += f.read(10000)
if "isz=" in buf:
self.set_detected(True)
return True
self.set_detected(False)
return False
def hide_depends(self):
for dep, depb in [(self.depend, self.depend_binary),
(self.bdepend, self.bdepend_binary)]:
if path.exists(dep):
os.rename(dep, depb)
def unhide_depends(self):
for dep, depb in [(self.depend, self.depend_binary),
(self.bdepend, self.bdepend_binary)]:
if path.exists(depb):
os.rename(depb, dep)
class Vardb(object):
"""
Объект для получения пакетов из /var/db/pkg
"""
def __init__(self, dbdn):
self.dbdn = dbdn
def __iter__(self):
for category in listDirectory(self.dbdn, fullPath=True):
if path.isdir(category):
for pkg in listDirectory(category, fullPath=True):
if "MERGING-" not in pkg and path.isdir(pkg):
yield VardbPackage(pkg)
def hide_binary_depends(self):
for pkg in self:
if pkg.binary:
pkg.hide_depends()
def unhide_binary_depends(self):
for pkg in self:
if pkg.binary:
pkg.unhide_depends()
Loading…
Cancel
Save