示例#1
0
    def test_list_all(self):
        depends = Depends(dedent("""\
            install1
            install2 [test]
            install3 [platform:rpm]
            install4 [platform:dpkg]
            install5 [quark]
            install6 [platform:dpkg test]
            install7 [quark test]
            install8 [platform:dpkg platform:rpm]
            install9 [platform:dpkg platform:rpm test]
            installA [!platform:dpkg]
            installB [!platform:dpkg test]
            installC [!platform:dpkg !test]
            installD [platform:dpkg !test]
            installE [platform:dpkg !platform:rpm]
            installF [platform:dpkg !platform:rpm test]
            installG [!platform:dpkg !platform:rpm]
            installH [!platform:dpkg !platform:rpm test]
            installI [!platform:dpkg !platform:rpm !test]
            installJ [platform:dpkg !platform:rpm !test]
            """))

        rules_dpkg = depends.active_rules(['platform:dpkg'])
        result_dpkg = set(r[0] for r in rules_dpkg)
        self.assertEqual(result_dpkg,
                         set(depends.list_all_packages(rules_dpkg,
                             output_format='newline')))
        self.assertEqual(result_dpkg,
                         set(depends.list_all_packages(rules_dpkg,
                             output_format='csv')))

        rules_dpkg_test = depends.active_rules(['platform:dpkg', 'test'])
        result_dpkg_test = set(r[0] for r in rules_dpkg_test)
        self.assertEqual(result_dpkg_test, set(depends.list_all_packages(
                                               rules_dpkg_test,
                                               output_format='newline')))
        self.assertEqual(result_dpkg_test, set(depends.list_all_packages(
                                               rules_dpkg_test,
                                               output_format='csv')))

        rules_rpm = depends.active_rules(['platform:rpm'])
        result_rpm = set(r[0] for r in rules_rpm)
        self.assertEqual(result_rpm, set(depends.list_all_packages(rules_rpm,
                                         output_format='newline')))
        self.assertEqual(result_rpm, set(depends.list_all_packages(rules_rpm,
                                         output_format='csv')))

        rules_rpm_test = depends.active_rules(['platform:rpm', 'test'])
        result_rpm_test = set(r[0] for r in rules_rpm_test)
        self.assertEqual(result_rpm_test,
                         set(depends.list_all_packages(
                             rules_rpm_test,
                             output_format='newline')))
        self.assertEqual(result_rpm_test,
                         set(depends.list_all_packages(
                             rules_rpm_test,
                             output_format='csv')))
示例#2
0
    def test_platforms(self):
        depends = Depends(
            dedent("""\
            install1
            install2 [test]
            install3 [platform:rpm]
            install4 [platform:dpkg]
            install5 [quark]
            install6 [platform:dpkg test]
            install7 [quark test]
            install8 [platform:dpkg platform:rpm]
            install9 [platform:dpkg platform:rpm test]
            installA [!platform:dpkg]
            installB [!platform:dpkg test]
            installC [!platform:dpkg !test]
            installD [platform:dpkg !test]
            installE [platform:dpkg !platform:rpm]
            installF [platform:dpkg !platform:rpm test]
            installG [!platform:dpkg !platform:rpm]
            installH [!platform:dpkg !platform:rpm test]
            installI [!platform:dpkg !platform:rpm !test]
            installJ [platform:dpkg !platform:rpm !test]
            """))

        # Platform-only rules and rules with no platform are activated
        # by a matching platform.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:dpkg'])),
            Equals({
                "install1", "install4", "install8", "installD", "installE",
                "installJ"
            }))

        # Non-platform rules matching one-or-more profiles plus any
        # matching platform guarded rules.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:dpkg', 'test'])),
            Equals({
                "install1", "install2", "install4", "install6", "install7",
                "install8", "install9", "installE", "installF"
            }))

        # When multiple platforms are present, none-or-any-platform is
        # enough to match.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:rpm'])),
            Equals(
                {"install1", "install3", "install8", "installA", "installC"}))

        # If there are any platform profiles on a rule one of them
        # must match an active platform even when other profiles match
        # for the rule to be active.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:rpm', 'test'])),
            Equals({
                "install1", "install2", "install3", "install7", "install8",
                "install9", "installA", "installB"
            }))
示例#3
0
    def test_platforms(self):
        depends = Depends(dedent("""\
            install1
            install2 [test]
            install3 [platform:rpm]
            install4 [platform:dpkg]
            install5 [quark]
            install6 [platform:dpkg test]
            install7 [quark test]
            install8 [platform:dpkg platform:rpm]
            install9 [platform:dpkg platform:rpm test]
            installA [!platform:dpkg]
            installB [!platform:dpkg test]
            installC [!platform:dpkg !test]
            installD [platform:dpkg !test]
            installE [platform:dpkg !platform:rpm]
            installF [platform:dpkg !platform:rpm test]
            installG [!platform:dpkg !platform:rpm]
            installH [!platform:dpkg !platform:rpm test]
            installI [!platform:dpkg !platform:rpm !test]
            installJ [platform:dpkg !platform:rpm !test]
            """))

        # Platform-only rules and rules with no platform are activated
        # by a matching platform.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:dpkg'])),
            Equals({"install1", "install4", "install8", "installD",
                    "installE", "installJ"}))

        # Non-platform rules matching one-or-more profiles plus any
        # matching platform guarded rules.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:dpkg', 'test'])),
            Equals({"install1", "install2", "install4", "install6", "install7",
                    "install8", "install9", "installE", "installF"}))

        # When multiple platforms are present, none-or-any-platform is
        # enough to match.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:rpm'])),
            Equals({"install1", "install3", "install8", "installA",
                    "installC"}))

        # If there are any platform profiles on a rule one of them
        # must match an active platform even when other profiles match
        # for the rule to be active.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:rpm', 'test'])),
            Equals({"install1", "install2", "install3", "install7", "install8",
                    "install9", "installA", "installB"}))
示例#4
0
    def test_platforms_include(self):
        # 9 tests for the nine cases of _include in Depends
        depends = Depends(dedent("""\
            # False, False -> False
            install1 [platform:dpkg quark]
            # False, None -> False
            install2 [platform:dpkg]
            # False, True -> False
            install3 [platform:dpkg test]
            # None, False -> False
            install4 [quark]
            # None, None -> True
            install5
            # None, True -> True
            install6 [test]
            # True, False -> False
            install7 [platform:rpm quark]
            # True, None -> True
            install8 [platform:rpm]
            # True, True -> True
            install9 [platform:rpm test]
            """))

        # With platform:dpkg and quark False and platform:rpm and test
        # True, the above mimics the conditions from _include.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:rpm', 'test'])),
            Equals({"install5", "install6", "install8", "install9"}))
示例#5
0
    def test_platforms_include(self):
        # 9 tests for the nine cases of _include in Depends
        depends = Depends(
            dedent("""\
            # False, False -> False
            install1 [platform:dpkg quark]
            # False, None -> False
            install2 [platform:dpkg]
            # False, True -> False
            install3 [platform:dpkg test]
            # None, False -> False
            install4 [quark]
            # None, None -> True
            install5
            # None, True -> True
            install6 [test]
            # True, False -> False
            install7 [platform:rpm quark]
            # True, None -> True
            install8 [platform:rpm]
            # True, True -> True
            install9 [platform:rpm test]
            """))

        # With platform:dpkg and quark False and platform:rpm and test
        # True, the above mimics the conditions from _include.
        self.expectThat(
            set(r[0] for r in depends.active_rules(['platform:rpm', 'test'])),
            Equals({"install5", "install6", "install8", "install9"}))
示例#6
0
 def test_parser_accepts_full_path_to_tools(self):
     # at least yum/dnf allow these instead of mentioning rpm names
     depends = Depends(dedent("""\
         /usr/bin/bash
         """))
     self.assertEqual(
         [("/usr/bin/bash", [], [])],
         depends.active_rules(["default"]))
示例#7
0
 def test_parser_accepts_full_path_to_tools(self):
     # at least yum/dnf allow these instead of mentioning rpm names
     depends = Depends(
         dedent("""\
         /usr/bin/bash
         """))
     self.assertEqual([("/usr/bin/bash", [], [])],
                      depends.active_rules(["default"]))
示例#8
0
    def test_parser_patterns(self):
        depends = Depends(dedent("""\
            foo
            bar [something]
            category/packagename # for gentoo
            baz [platform:this platform:that-those]
            blaz [platform:rpm !platform:opensuseproject-42.2]
            quux [anotherthing !nothing] <=12
            womp # and a comment
            # a standalone comment and a blank line

            # all's ok? good then
            """))
        self.assertEqual(len(depends.active_rules(['default'])), 3)
示例#9
0
    def test_parser_patterns(self):
        depends = Depends(
            dedent("""\
            foo
            bar [something]
            category/packagename # for gentoo
            baz [platform:this platform:that-those]
            blaz [platform:rpm !platform:opensuseproject-42.2]
            quux [anotherthing !nothing] <=12
            womp # and a comment
            # a standalone comment and a blank line

            # all's ok? good then
            """))
        self.assertEqual(len(depends.active_rules(['default'])), 3)
示例#10
0
文件: main.py 项目: rbtcollins/bindep
def main(depends=None):
    if depends is None:
        try:
            content = open('other-requirements.txt', 'rt').read()
        except IOError:
            logging.error('No other-requirements.txt file found.')
            return 1
        depends = Depends(content)
    parser = optparse.OptionParser()
    parser.add_option("--profiles",
                      action="store_true",
                      help="List the platform and configuration profiles.")
    opts, args = parser.parse_args()
    if opts.profiles:
        logging.info("Platform profiles:")
        for profile in depends.platform_profiles():
            logging.info("%s", profile)
        logging.info("")
        logging.info("Configuration profiles:")
        for profile in depends.profiles():
            logging.info("%s", profile)
    else:
        if args:
            profiles = args
        else:
            profiles = ["default"]
        profiles = profiles + depends.platform_profiles()
        rules = depends.active_rules(profiles)
        errors = depends.check_rules(rules)
        for error in errors:
            if error[0] == 'missing':
                logging.info("Missing packages:")
                logging.info("    %s", " ".join(error[1]))
            if error[0] == 'badversion':
                logging.info("Bad versions of installed packages:")
                for pkg, constraint, version in error[1]:
                    logging.info("    %s version %s does not match %s", pkg,
                                 version, constraint)
        if errors:
            return 1
    return 0
示例#11
0
def main(depends=None):
    if depends is None:
        try:
            content = open("other-requirements.txt", "rt").read()
        except IOError:
            logging.error("No other-requirements.txt file found.")
            return 1
        depends = Depends(content)
    parser = optparse.OptionParser()
    parser.add_option("--profiles", action="store_true", help="List the platform and configuration profiles.")
    opts, args = parser.parse_args()
    if opts.profiles:
        logging.info("Platform profiles:")
        for profile in depends.platform_profiles():
            logging.info("%s", profile)
        logging.info("")
        logging.info("Configuration profiles:")
        for profile in depends.profiles():
            logging.info("%s", profile)
    else:
        if args:
            profiles = args
        else:
            profiles = ["default"]
        profiles = profiles + depends.platform_profiles()
        rules = depends.active_rules(profiles)
        errors = depends.check_rules(rules)
        for error in errors:
            if error[0] == "missing":
                logging.info("Missing packages:")
                logging.info("    %s", " ".join(error[1]))
            if error[0] == "badversion":
                logging.info("Bad versions of installed packages:")
                for pkg, constraint, version in error[1]:
                    logging.info("    %s version %s does not match %s", pkg, version, constraint)
        if errors:
            return 1
    return 0
示例#12
0
 def test_no_selector_active(self):
     depends = Depends("foo\n")
     self.assertEqual([("foo", [], [])], depends.active_rules(["default"]))
示例#13
0
    def test_list_all(self):
        depends = Depends(
            dedent("""\
            install1
            install2 [test]
            install3 [platform:rpm]
            install4 [platform:dpkg]
            install5 [quark]
            install6 [platform:dpkg test]
            install7 [quark test]
            install8 [platform:dpkg platform:rpm]
            install9 [platform:dpkg platform:rpm test]
            installA [!platform:dpkg]
            installB [!platform:dpkg test]
            installC [!platform:dpkg !test]
            installD [platform:dpkg !test]
            installE [platform:dpkg !platform:rpm]
            installF [platform:dpkg !platform:rpm test]
            installG [!platform:dpkg !platform:rpm]
            installH [!platform:dpkg !platform:rpm test]
            installI [!platform:dpkg !platform:rpm !test]
            installJ [platform:dpkg !platform:rpm !test]
            """))

        rules_dpkg = depends.active_rules(['platform:dpkg'])
        result_dpkg = set(r[0] for r in rules_dpkg)
        self.assertEqual(
            result_dpkg,
            set(depends.list_all_packages(rules_dpkg,
                                          output_format='newline')))
        self.assertEqual(
            result_dpkg,
            set(depends.list_all_packages(rules_dpkg, output_format='csv')))

        rules_dpkg_test = depends.active_rules(['platform:dpkg', 'test'])
        result_dpkg_test = set(r[0] for r in rules_dpkg_test)
        self.assertEqual(
            result_dpkg_test,
            set(
                depends.list_all_packages(rules_dpkg_test,
                                          output_format='newline')))
        self.assertEqual(
            result_dpkg_test,
            set(depends.list_all_packages(rules_dpkg_test,
                                          output_format='csv')))

        rules_rpm = depends.active_rules(['platform:rpm'])
        result_rpm = set(r[0] for r in rules_rpm)
        self.assertEqual(
            result_rpm,
            set(depends.list_all_packages(rules_rpm, output_format='newline')))
        self.assertEqual(
            result_rpm,
            set(depends.list_all_packages(rules_rpm, output_format='csv')))

        rules_rpm_test = depends.active_rules(['platform:rpm', 'test'])
        result_rpm_test = set(r[0] for r in rules_rpm_test)
        self.assertEqual(
            result_rpm_test,
            set(
                depends.list_all_packages(rules_rpm_test,
                                          output_format='newline')))
        self.assertEqual(
            result_rpm_test,
            set(depends.list_all_packages(rules_rpm_test,
                                          output_format='csv')))
示例#14
0
 def test_positive_selector_not_in_profiles_inactive(self):
     depends = Depends("foo [on]\n")
     self.assertEqual([], depends.active_rules(["default"]))
示例#15
0
 def test_no_selector_active(self):
     depends = Depends("foo\n")
     self.assertEqual([("foo", [], [])], depends.active_rules(["default"]))
示例#16
0
 def test_negative_selector_removes_rule(self):
     depends = Depends("foo [!off]\n")
     self.assertEqual([], depends.active_rules(["on", "off"]))
示例#17
0
 def test_positive_selector_includes_rule(self):
     depends = Depends("foo [on]\n")
     self.assertEqual([("foo", [(True, "on")], [])],
                      depends.active_rules(["on", "off"]))
示例#18
0
 def test_positive_selector_not_in_profiles_inactive(self):
     depends = Depends("foo [on]\n")
     self.assertEqual([], depends.active_rules(["default"]))
示例#19
0
 def test_positive_selector_includes_rule(self):
     depends = Depends("foo [on]\n")
     self.assertEqual(
         [("foo", [(True, "on")], [])],
         depends.active_rules(["on", "off"]))
示例#20
0
 def test_negative_selector_removes_rule(self):
     depends = Depends("foo [!off]\n")
     self.assertEqual([], depends.active_rules(["on", "off"]))