from portage import os
from portage import dispatch_conf
from portage import _unicode_decode
+ from portage.dispatch_conf import diffstatusoutput_len
from portage.process import find_binary
+from portage.const import EPREFIX
FIND_EXTANT_CONFIGS = "find '%s' %s -name '._cfg????_%s' ! -name '.*~' ! -iname '.*.bak' -print"
DIFF_CONTENTS = "diff -Nu '%s' '%s'"
SCRATCH_DIR = None
while SCRATCH_DIR is None:
try:
- mydir = EPREFIX+"/var/tmp/dispatch-conf."
- mydir = "/tmp/dispatch-conf."
++ mydir = EPREFIX+"/tmp/dispatch-conf."
for x in range(0,8):
if int(random() * 3) == 0:
mydir += chr(int(65+random()*26.0))
import os, sys, shutil
try:
- from subprocess import getoutput as subprocess_getoutput
+ from subprocess import getstatusoutput as subprocess_getstatusoutput
except ImportError:
- from commands import getoutput as subprocess_getoutput
+ from commands import getstatusoutput as subprocess_getstatusoutput
-import portage
+import portage, portage.const
from portage.localization import _
RCS_BRANCH = '1.1.1'
DIFF3_MERGE = "diff3 -mE '%s' '%s' '%s' > '%s'"
+ def diffstatusoutput_len(cmd):
+ """
+ Execute the string cmd in a shell with getstatusoutput() and return a
+ 2-tuple (status, output_length). If getstatusoutput() raises
+ UnicodeDecodeError (known to happen with python3.1), return a
+ 2-tuple (1, 1). This provides a simple way to check for non-zero
+ output length of diff commands, while providing simple handling of
+ UnicodeDecodeError when necessary.
+ """
+ try:
+ status, output = subprocess_getstatusoutput(cmd)
+ return (status, len(output))
+ except UnicodeDecodeError:
+ return (1, 1)
+
def read_config(mandatory_opts):
loader = portage.env.loaders.KeyValuePairFileLoader(
- '/etc/dispatch-conf.conf', None)
+ portage.const.EPREFIX+'/etc/dispatch-conf.conf', None)
opts, errors = loader.load()
if not opts:
- print(_('dispatch-conf: Error reading /etc/dispatch-conf.conf; fatal'), file=sys.stderr)
+ print(_('dispatch-conf: Error reading %s/etc/dispatch-conf.conf; fatal') % (portage.const.EPREFIX,), file=sys.stderr)
sys.exit(1)
# Handle quote removal here, since KeyValuePairFileLoader doesn't do that.
self.backup_changes("PORTAGE_CONFIGROOT")
self["ROOT"] = target_root
self.backup_changes("ROOT")
+ self["EPREFIX"] = EPREFIX
- # Prefix forward compatability, set EPREFIX to the empty string
- self["EPREFIX"] = ''
self.backup_changes("EPREFIX")
- self["EROOT"] = target_root
+ self["EROOT"] = target_root + EPREFIX_LSTRIP + os.path.sep
self.backup_changes("EROOT")
- self.pusedict = {}
- self.pkeywordsdict = {}
- self._plicensedict = {}
- self._ppropertiesdict = {}
- self.punmaskdict = {}
+ self.pusedict = portage.dep.ExtendedAtomDict(dict)
+ self.pkeywordsdict = portage.dep.ExtendedAtomDict(dict)
+ self._plicensedict = portage.dep.ExtendedAtomDict(dict)
+ self._ppropertiesdict = portage.dep.ExtendedAtomDict(dict)
+ self.punmaskdict = portage.dep.ExtendedAtomDict(list)
abs_user_config = os.path.join(config_root, USER_CONFIG_PATH)
# locations for "categories" and "arch.list" files