summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bin/isolated-functions.sh3
-rwxr-xr-xbin/repoman9
-rw-r--r--pym/portage/sets/dbapi.py4
-rw-r--r--pym/portage/tests/lint/test_bash_syntax.py42
-rw-r--r--pym/repoman/herdbase.py12
-rw-r--r--pym/repoman/utilities.py3
6 files changed, 64 insertions, 9 deletions
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index bf11c0d4b..b743cefa0 100644
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -1,4 +1,5 @@
-# Copyright 1999-2009 Gentoo Foundation
+#!/bin/bash
+# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# We need this next line for "die" and "assert". It expands
diff --git a/bin/repoman b/bin/repoman
index ffc4c948b..a76bc8de5 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -68,10 +68,9 @@ import portage.checksum
import portage.const
import portage.dep
portage.dep._dep_check_strict = True
-import portage.exception
from portage import cvstree, normalize_path
from portage import util
-from portage.exception import ParseError
+from portage.exception import FileNotFound, ParseError, PermissionDenied
from portage.manifest import Manifest
from portage.process import find_binary, spawn
from portage.output import bold, create_color_func, darkgreen, \
@@ -984,8 +983,12 @@ thirdpartymirrors = portage.flatten(list(repoman_settings.thirdpartymirrors().va
try:
herd_base = make_herd_base(os.path.join(repoman_settings["PORTDIR"], "metadata/herds.xml"))
-except (EnvironmentError, ParseError) as e:
+except (EnvironmentError, ParseError, PermissionDenied) as e:
err(str(e))
+except FileNotFound:
+ # TODO: Download as we do for metadata.dtd, but add a way to
+ # disable for non-gentoo repoman users who may not have herds.
+ herd_base = None
for x in scanlist:
#ebuilds and digests added to cvs respectively.
diff --git a/pym/portage/sets/dbapi.py b/pym/portage/sets/dbapi.py
index 5bd7e1688..8bacb72fc 100644
--- a/pym/portage/sets/dbapi.py
+++ b/pym/portage/sets/dbapi.py
@@ -1,4 +1,4 @@
-# Copyright 2007 Gentoo Foundation
+# Copyright 2007-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import time
@@ -328,7 +328,7 @@ class RebuiltBinaries(EverythingSet):
bin_build_time, = self._bindb.aux_get(cpv, self._aux_keys)
except KeyError:
return False
- return inst_build_time != bin_build_time
+ return bool(bin_build_time and (inst_build_time != bin_build_time))
def singleBuilder(cls, options, settings, trees):
return RebuiltBinaries(trees["vartree"].dbapi,
diff --git a/pym/portage/tests/lint/test_bash_syntax.py b/pym/portage/tests/lint/test_bash_syntax.py
new file mode 100644
index 000000000..aef8d74f1
--- /dev/null
+++ b/pym/portage/tests/lint/test_bash_syntax.py
@@ -0,0 +1,42 @@
+# Copyright 2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+import stat
+
+from portage.const import BASH_BINARY, PORTAGE_BIN_PATH
+from portage.tests import TestCase
+from portage import os
+from portage import subprocess_getstatusoutput
+from portage import _encodings
+from portage import _shell_quote
+from portage import _unicode_decode, _unicode_encode
+
+class BashSyntaxTestCase(TestCase):
+
+ def testBashSyntax(self):
+ for parent, dirs, files in os.walk(PORTAGE_BIN_PATH):
+ parent = _unicode_decode(parent,
+ encoding=_encodings['fs'], errors='strict')
+ for x in files:
+ x = _unicode_decode(x,
+ encoding=_encodings['fs'], errors='strict')
+ ext = x.split('.')[-1]
+ if ext in ('.py', '.pyc', '.pyo'):
+ continue
+ x = os.path.join(parent, x)
+ st = os.lstat(x)
+ if not stat.S_ISREG(st.st_mode):
+ continue
+
+ # Check for bash shebang
+ f = open(_unicode_encode(x,
+ encoding=_encodings['fs'], errors='strict'), 'rb')
+ line = _unicode_decode(f.readline(),
+ encoding=_encodings['content'], errors='replace')
+ f.close()
+ if line[:2] == '#!' and \
+ 'bash' in line:
+ cmd = "%s -n %s" % (_shell_quote(BASH_BINARY), _shell_quote(x))
+ status, output = subprocess_getstatusoutput(cmd)
+ self.assertEqual(os.WIFEXITED(status) and \
+ os.WEXITSTATUS(status) == os.EX_OK, True, msg=output)
diff --git a/pym/repoman/herdbase.py b/pym/repoman/herdbase.py
index 924839a61..6f92abfb8 100644
--- a/pym/repoman/herdbase.py
+++ b/pym/repoman/herdbase.py
@@ -3,9 +3,10 @@
# Copyright 2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
+import errno
import xml.etree.ElementTree as ET
from xml.parsers.expat import ExpatError
-from portage.exception import ParseError
+from portage.exception import FileNotFound, ParseError, PermissionDenied
__all__ = [
"make_herd_base"
@@ -44,7 +45,14 @@ def make_herd_base(filename):
xml_tree = ET.parse(filename)
except ExpatError as e:
raise ParseError("metadata.xml: " + str(e))
-
+ except EnvironmentError as e:
+ func_call = "open('%s')" % filename
+ if e.errno == errno.EACCES:
+ raise PermissionDenied(func_call)
+ elif e.errno == errno.ENOENT:
+ raise FileNotFound(filename)
+ raise
+
herds = xml_tree.findall('herd')
for h in herds:
_herd_name = h.find('name')
diff --git a/pym/repoman/utilities.py b/pym/repoman/utilities.py
index cd7f5ea87..719e910d7 100644
--- a/pym/repoman/utilities.py
+++ b/pym/repoman/utilities.py
@@ -176,7 +176,8 @@ def check_metadata(metadata_xml_content, herd_base):
except (ExpatError, ) as e:
raise exception.ParseError("metadata.xml: " + str(e))
- check_metadata_herds(xml_tree, herd_base)
+ if herd_base is not None:
+ check_metadata_herds(xml_tree, herd_base)
def FindPackagesToScan(settings, startdir, reposplit):