17385196 generate traceback when bypassing dependencies
19850056 pkgdepend resolve -e traceback when its operand is bad
--- a/src/modules/flavor/elf.py Mon Feb 01 16:04:27 2016 -0800
+++ b/src/modules/flavor/elf.py Wed Feb 17 11:48:21 2016 -0800
@@ -21,7 +21,7 @@
#
#
-# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
#
import os
@@ -95,7 +95,7 @@
# may be due to the library search path being set outside the
# file that generates the dependency.
if err == self.ERROR and vars.is_satisfied() and \
- self.base_names[0] in delivered_base_names:
+ self.base_names and self.base_names[0] in delivered_base_names:
self.err_type = self.WARNING
self.attrs["{0}.severity".format(self.DEPEND_DEBUG_PREFIX)] =\
"warning"
@@ -107,8 +107,11 @@
return err, vars
def __repr__(self):
+ if self.base_names:
+ return "ElfDep({0}, {1}, {2}, {3})".format(self.action,
+ self.base_names[0], self.run_paths, self.pkg_vars)
return "ElfDep({0}, {1}, {2}, {3})".format(self.action,
- self.base_names[0], self.run_paths, self.pkg_vars)
+ self.base_names, self.run_paths, self.pkg_vars)
def expand_variables(paths, dyn_tok_conv):
"""Replace dynamic tokens, such as $PLATFORM, in the paths in the
--- a/src/pkgdep.py Mon Feb 01 16:04:27 2016 -0800
+++ b/src/pkgdep.py Wed Feb 17 11:48:21 2016 -0800
@@ -21,7 +21,7 @@
#
#
-# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
#
import errno
@@ -290,7 +290,7 @@
system_patterns.append(
l)
except EnvironmentError as e:
- if e.errno == errno.ENOENT:
+ if e.errno in (errno.ENOENT, errno.EISDIR):
error("{0}: '{1}'".format(
e.args[1], e.filename),
cmd="resolve")
--- a/src/tests/cli/t_pkgdep.py Mon Feb 01 16:04:27 2016 -0800
+++ b/src/tests/cli/t_pkgdep.py Wed Feb 17 11:48:21 2016 -0800
@@ -20,7 +20,7 @@
# CDDL HEADER END
#
-# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
import testutils
if __name__ == "__main__":
@@ -69,6 +69,10 @@
file group=bin mode=0755 owner=root path=etc/libc.so.1
"""
+ test_bypass_manf = """\
+file NOHASH group=bin mode=0755 owner=root path=usr/xpg4/lib/libcurses.so.1 pkg.depend.bypass-generate=lib/libc.so.1
+"""
+
test_64bit_manf = """\
file NOHASH group=bin mode=0755 owner=root path=usr/bin/x64
"""
@@ -858,6 +862,11 @@
depend fmri=__TBD pkg.debug.depend.file=libc.so.1 pkg.debug.depend.path=lib pkg.debug.depend.path=usr/lib pkg.debug.depend.reason=usr/xpg4/lib/libcurses.so.1 pkg.debug.depend.severity=warning pkg.debug.depend.type=elf type=require
"""
+ res_bypass = """\
+depend fmri=__TBD pkg.debug.depend.fullpath=usr/lib/libc.so.1 pkg.debug.depend.reason=usr/xpg4/lib/libcurses.so.1 pkg.debug.depend.type=elf type=require
+set name=pkg.debug.depend.bypassed value=lib/libc.so.1
+"""
+
bug_16013_simple_a_dep_manf = """\
set name=pkg.fmri value=pkg:/[email protected],5.11-0.151
depend fmri=__TBD pkg.debug.depend.file=perl pkg.debug.depend.path=usr/bin pkg.debug.depend.reason=usr/bin/perl_app pkg.debug.depend.type=script type=require
@@ -3034,5 +3043,18 @@
self.check_res("", self.errout)
+ def test_bypass_full_paths(self):
+ """Test that when a match between the full paths of a dependency
+ and something specified in the pkg.depend.bypass-generate is
+ found, pkgdepend ignores the dependency as expected.
+ """
+
+ tp = self.make_manifest(self.test_bypass_manf)
+ self.make_elf([], "usr/xpg4/lib/libcurses.so.1")
+ self.pkgdepend_generate("-d {0} {1}".format(
+ self.test_proto_dir, tp))
+ self.check_res("", self.errout)
+ self.check_res(self.res_bypass, self.output)
+
if __name__ == "__main__":
unittest.main()
--- a/src/tests/cli/t_pkgdep_resolve.py Mon Feb 01 16:04:27 2016 -0800
+++ b/src/tests/cli/t_pkgdep_resolve.py Wed Feb 17 11:48:21 2016 -0800
@@ -20,7 +20,7 @@
# CDDL HEADER END
#
-# Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
import testutils
if __name__ == "__main__":
@@ -738,6 +738,10 @@
ex_path + "foobar", var_fmri_path, empty_path, m1_path),
exit=1)
+ # Check that if -e points at a directory, no traceback happens.
+ self.pkgdepend_resolve("-e {0} -E -m {1}".format(
+ self.test_root, m1_path), exit=1)
+
def test_resolve_permissions(self):
"""Test that a manifest or constraint file that pkgdepend
resolve can't access doesn't cause a traceback."""