Ejemplo n.º 1
0
    def setUp(self):
        unittest.TestCase.setUp(self);
        self.obj = CygAptArgParser("usage", "scriptname");

        self.__originArgv = sys.argv[:];
        sys.argv = sys.argv[:1];

        def tearDown(self):
            sys.argv = self.__originArgv;
Ejemplo n.º 2
0
class TestArgParser(unittest.TestCase):
    def setUp(self):
        unittest.TestCase.setUp(self);
        self.obj = CygAptArgParser("usage", "scriptname");

        self.__originArgv = sys.argv[:];
        sys.argv = sys.argv[:1];

        def tearDown(self):
            sys.argv = self.__originArgv;

    def test___init__(self):
        self.assertTrue(isinstance(self.obj, CygAptArgParser));
        self.assertEqual(self.obj.getUsage(), "usage");
        self.assertEqual(self.obj.getAppName(), "scriptname");

    def testParse(self):
        sys.argv.append("install");
        sys.argv.append("pkg");

        ret = self.obj.parse();

        self.assertTrue(ret.verbose);
        self.assertEqual(ret.command, "install");
        self.assertEqual(ret.package, ['pkg']);


    def testArgumentType(self):
        sys.argv.append("--mirror=http://a.mirror.str");
        sys.argv.append("update");
        sys.argv.append("--dist=test");

        ret = self.obj.parse();

        self.assertEqual("test", ret.distname);
        self.assertEqual("http://a.mirror.str", ret.mirror);


    def testArgumentTypeDefault(self):
        ret = self.obj.parse();

        self.assertEqual("curr", ret.distname);
        self.assertEqual(True, ret.verbose);
Ejemplo n.º 3
0
    def main(self):
        # parse command line arguments
        cap = CygAptArgParser(scriptname=self.getAppName())
        args = cap.parse()

        # initialize main variables with command line arguments and options
        main_command = args.command
        main_files = args.package[:]
        main_files.insert(0, main_command)
        main_packagename = None
        if len(args.package) > 0:
            main_packagename = args.package[0]
        main_verbose = args.verbose
        main_download_p = args.download_p
        main_mirror = args.mirror
        main_distname = args.distname
        main_noupdate = args.noupdate
        main_nodeps_p = args.nodeps_p
        main_regex_search = args.regex_search
        main_nobarred = args.force
        main_verify = args.verify
        main_nopostinstall = args.nopostinstall
        main_nopostremove = args.nopostremove
        main_downloads = None
        main_dists = 0
        main_installed = 0

        # locate and parse the configuration file
        main_cyg_apt_rc = self.getConfigPath()

        config = None
        if main_cyg_apt_rc:
            config = cautils.parse_rc(main_cyg_apt_rc)
        elif (main_command != "setup"):
            print("{0}: no .{0}: run \"{0} setup\"".format(self.getAppName()),
                  file=sys.stderr)
            return 1

        # create a CygAptSetup instance and its dependencies
        main_cygwin_p = (sys.platform == "cygwin")

        is_64_bit = False
        if main_cygwin_p:
            # Running Cygwin python, so python architecture == Cygwin architecture
            if 2**32 < sys.maxsize:
                is_64_bit = True
        elif config and main_command != 'setup':
            # Running Windows python, so examine cygwin1.dll
            pathMapper = PathMapper(config.ROOT.rstrip('\\/'), main_cygwin_p)
            if cautils.pe_is_64_bit(pathMapper.mapPath("/bin/cygwin1.dll")):
                is_64_bit = True

        if is_64_bit:
            main_arch = 'x86_64'
        else:
            main_arch = 'x86'

        cas = CygAptSetup(main_cygwin_p, main_verbose, main_arch)

        # run command
        if (main_command == "setup"):
            cas.setup(args.force)
            return 0
        elif (main_command == "help"):
            cas.usage(main_cyg_apt_rc)
            return 0
        elif (main_command == "update"):
            cas.update(main_cyg_apt_rc, main_verify, main_mirror=main_mirror)
            return 0

        # make an update if needed
        update_not_needed = [
            "ball",
            "find",
            "help",
            "purge",
            "remove",
            "version",
            "filelist",
            "update",
            "setup",
            "md5",
        ]
        always_update = config.always_update
        always_update = always_update and\
            main_command not in update_not_needed and\
            not main_noupdate
        if always_update:
            cas.update(main_cyg_apt_rc, main_verify, main_mirror=main_mirror)

        if main_command and main_command in dir(CygApt):
            cyg_apt = CygApt(
                main_packagename,
                main_files,
                main_cyg_apt_rc,
                main_cygwin_p,
                main_download_p,
                main_mirror,
                main_downloads,
                main_distname,
                main_nodeps_p,
                main_regex_search,
                main_nobarred,
                main_nopostinstall,
                main_nopostremove,
                main_dists,
                main_installed,
                self.getAppName(),
                main_verbose,
                main_arch,
            )

            getattr(cyg_apt, main_command)()
        else:
            cas.usage(main_cyg_apt_rc)

        return 0
Ejemplo n.º 4
0
    def main(self):
        main_downloads = None;
        main_dists = 0;
        main_installed = 0;
        main_packagename = None;
        main_cyg_apt_rc = None;
        home_cyg_apt_rc = None;
        main_verbose = False;

        main_cygwin_p = (sys.platform == "cygwin");
        cas = CygAptSetup(main_cygwin_p, main_verbose);
        update_not_needed = [
            "ball", "find", "help", "purge", "remove", "version", 
            "filelist", "update", "setup", "md5",
        ];

        ob = CygAptOb(True);
        cas.usage();
        usage = ob.getFlush();

        cap = CygAptArgParser(usage=usage, scriptname=self.getAppName());
        args = cap.parse();

        main_command = args.command;

        main_files = args.package[:];
        main_files.insert(0, main_command);
        if len(args.package) > 0:
            main_packagename = args.package[0];
        else:
            main_packagename = None;

        main_verbose = args.verbose;
        main_download_p = args.download_p;
        main_mirror = args.mirror;
        main_distname = args.distname;
        main_noupdate = args.noupdate;
        main_nodeps_p = args.nodeps_p;
        main_regex_search = args.regex_search;
        main_nobarred = args.force;
        main_verify = args.verify;
        main_nopostinstall = args.nopostinstall;
        main_nopostremove = args.nopostremove;


        cas.setVerbose(main_verbose);

        # Take most of our configuration from .cyg-apt
        # preferring .cyg-apt in current directory over $(HOME)/.cyg-apt
        cwd_cyg_apt_rc = os.path.join(
            os.getcwd(),
            ".{0}".format(self.getAppName())
        );
        if os.path.exists(cwd_cyg_apt_rc):
            main_cyg_apt_rc = cwd_cyg_apt_rc;
        elif "HOME" in os.environ:
            home_cyg_apt_rc = os.path.join(
                os.environ['HOME'],
                ".{0}".format(self.getAppName())
            );
            if os.path.exists(home_cyg_apt_rc):
                main_cyg_apt_rc = home_cyg_apt_rc;


        if main_cyg_apt_rc:
            # Take our configuration from .cyg-apt
            # Command line options can override, but only for this run.
            main_cyg_apt_rc = main_cyg_apt_rc.replace("\\","/");
        elif (main_command != "setup"):
            print(
                "{0}: no .{0}: run \"{0} setup\"".format(self.getAppName()),
                file=sys.stderr
            );
            return 1;

        if (main_command == "setup"):
            cas.setup(args.force);
            return 0;
        elif (main_command == "help"):
            cas.usage(main_cyg_apt_rc);
            return 0;
        elif (main_command == "update"):
            cas.update(main_cyg_apt_rc, main_verify, main_mirror=main_mirror);
            return 0;
        always_update = cautils.parse_rc(main_cyg_apt_rc);
        always_update = always_update and\
            main_command not in update_not_needed and\
            not main_noupdate;
        if always_update:
            cas.update(main_cyg_apt_rc, main_verify, main_mirror=main_mirror);

        if main_command and main_command in dir(CygApt):
            cyg_apt = CygApt(
                main_packagename,
                main_files,
                main_cyg_apt_rc,
                main_cygwin_p,
                main_download_p,
                main_mirror,
                main_downloads,
                main_distname,
                main_nodeps_p,
                main_regex_search,
                main_nobarred,
                main_nopostinstall,
                main_nopostremove,
                main_dists,
                main_installed,
                self.getAppName(),
                main_verbose
            );

            getattr(cyg_apt, main_command)();
        else:
            cas.usage(main_cyg_apt_rc);

        return 0;
Ejemplo n.º 5
0
    def setUp(self):
        TestCase.setUp(self);
        self.obj = CygAptArgParser("scriptname");

        self.__originArgv = sys.argv[:];
        sys.argv = sys.argv[:1];
Ejemplo n.º 6
0
class TestArgParser(TestCase):
    def setUp(self):
        TestCase.setUp(self);
        self.obj = CygAptArgParser("scriptname");

        self.__originArgv = sys.argv[:];
        sys.argv = sys.argv[:1];

    def tearDown(self):
        sys.argv = self.__originArgv;

        TestCase.tearDown(self);

    def test___init__(self):
        self.assertTrue(isinstance(self.obj, CygAptArgParser));
        self.assertEqual(self.obj.getAppName(), "scriptname");

    def testParse(self):
        sys.argv.append("install");
        sys.argv.append("pkg");

        ret = self.obj.parse();

        self.assertTrue(ret.verbose);
        self.assertEqual(ret.command, "install");
        self.assertEqual(ret.package, ['pkg']);

    def testArgumentType(self):
        sys.argv.append("--mirror=http://a.mirror.str");
        sys.argv.append("update");
        sys.argv.append("--dist=test");

        ret = self.obj.parse();

        self.assertEqual("test", ret.distname);
        self.assertEqual("http://a.mirror.str", ret.mirror);


    def testArgumentTypeDefault(self):
        ret = self.obj.parse();

        self.assertEqual("curr", ret.distname);
        self.assertEqual(True, ret.verbose);

    def testNoPostInstallOptionIsDeprecated(self):
        sys.argv.append("-y");

        ret = self._assertDeprecatedWarning(
            "The option -y, --nopostinstall is deprecated since version "
            "1.1 and will be removed in 2.0.",
            self.obj.parse
        );

        self.assertTrue(ret.nopostinstall);

    def testNoPostRemoveOptionIsDeprecated(self):
        sys.argv.append("-z");

        ret = self._assertDeprecatedWarning(
            "The option -z, --nopostremove is deprecated since version "
            "1.1 and will be removed in 2.0.",
            self.obj.parse
        );

        self.assertTrue(ret.nopostremove);

    def testMd5CommandIsDeprecated(self):
        sys.argv.append("md5");

        ret = self._assertDeprecatedWarning(
            "The command md5 is deprecated since version 1.2 and will be "
            "removed in 2.0, use checksum instead.",
            self.obj.parse
        );

        self.assertEqual(ret.command, "checksum");

    @dataProvider('getParseCommandData')
    def testParseCommand(self, command, args=None):
        """
        @param command: str
        @param args:    list
        """
        if None is args :
            args = list();

        sys.argv.append(command);
        for arg in args :
            sys.argv.append(arg);

        ret = self.obj.parse();

        self.assertEqual(ret.command, command);
        self.assertEqual(ret.package, args);

    def getParseCommandData(self):
        return [
            ['postinstall'],
            ['postremove', ['pkg']],
            ['checksum', ['pkg']],
        ];
Ejemplo n.º 7
0
    def setUp(self):
        TestCase.setUp(self)
        self.obj = CygAptArgParser("scriptname")

        self.__originArgv = sys.argv[:]
        sys.argv = sys.argv[:1]
Ejemplo n.º 8
0
class TestArgParser(TestCase):
    def setUp(self):
        TestCase.setUp(self)
        self.obj = CygAptArgParser("scriptname")

        self.__originArgv = sys.argv[:]
        sys.argv = sys.argv[:1]

    def tearDown(self):
        sys.argv = self.__originArgv

        TestCase.tearDown(self)

    def test___init__(self):
        self.assertTrue(isinstance(self.obj, CygAptArgParser))
        self.assertEqual(self.obj.getAppName(), "scriptname")

    def testParse(self):
        sys.argv.append("install")
        sys.argv.append("pkg")

        ret = self.obj.parse()

        self.assertTrue(ret.verbose)
        self.assertEqual(ret.command, "install")
        self.assertEqual(ret.package, ['pkg'])

    def testArgumentType(self):
        sys.argv.append("--mirror=http://a.mirror.str")
        sys.argv.append("update")
        sys.argv.append("--dist=test")

        ret = self.obj.parse()

        self.assertEqual("test", ret.distname)
        self.assertEqual("http://a.mirror.str", ret.mirror)

    def testArgumentTypeDefault(self):
        ret = self.obj.parse()

        self.assertEqual("curr", ret.distname)
        self.assertEqual(True, ret.verbose)

    def testNoPostInstallOptionIsDeprecated(self):
        sys.argv.append("-y")

        ret = self._assertDeprecatedWarning(
            "The option -y, --nopostinstall is deprecated since version "
            "1.1 and will be removed in 2.0.", self.obj.parse)

        self.assertTrue(ret.nopostinstall)

    def testNoPostRemoveOptionIsDeprecated(self):
        sys.argv.append("-z")

        ret = self._assertDeprecatedWarning(
            "The option -z, --nopostremove is deprecated since version "
            "1.1 and will be removed in 2.0.", self.obj.parse)

        self.assertTrue(ret.nopostremove)

    def testMd5CommandIsDeprecated(self):
        sys.argv.append("md5")

        ret = self._assertDeprecatedWarning(
            "The command md5 is deprecated since version 1.2 and will be "
            "removed in 2.0, use checksum instead.", self.obj.parse)

        self.assertEqual(ret.command, "checksum")

    @dataProvider('getParseCommandData')
    def testParseCommand(self, command, args=None):
        """
        @param command: str
        @param args:    list
        """
        if None is args:
            args = list()

        sys.argv.append(command)
        for arg in args:
            sys.argv.append(arg)

        ret = self.obj.parse()

        self.assertEqual(ret.command, command)
        self.assertEqual(ret.package, args)

    def getParseCommandData(self):
        return [
            ['postinstall'],
            ['postremove', ['pkg']],
            ['checksum', ['pkg']],
        ]
Ejemplo n.º 9
0
    def main(self):
        # parse command line arguments
        cap = CygAptArgParser(scriptname=self.getAppName());
        args = cap.parse();

        # initialize main variables with command line arguments and options
        main_command = args.command;
        main_files = args.package[:];
        main_files.insert(0, main_command);
        main_packagename = None;
        if len(args.package) > 0:
            main_packagename = args.package[0];
        main_verbose = args.verbose;
        main_download_p = args.download_p;
        main_mirror = args.mirror;
        main_distname = args.distname;
        main_noupdate = args.noupdate;
        main_nodeps_p = args.nodeps_p;
        main_regex_search = args.regex_search;
        main_nobarred = args.force;
        main_verify = args.verify;
        main_nopostinstall = args.nopostinstall;
        main_nopostremove = args.nopostremove;
        main_downloads = None;
        main_dists = 0;
        main_installed = 0;

        # locate and parse the configuration file
        main_cyg_apt_rc = self.getConfigPath();

        config = None;
        if main_cyg_apt_rc:
            config = cautils.parse_rc(main_cyg_apt_rc);
        elif (main_command != "setup"):
            print(
                "{0}: no .{0}: run \"{0} setup\"".format(self.getAppName()),
                file=sys.stderr
            );
            return 1;

        # create a CygAptSetup instance and its dependencies
        main_cygwin_p = (sys.platform == "cygwin");

        is_64_bit = False;
        if main_cygwin_p :
            # Running Cygwin python, so python architecture == Cygwin architecture
            if 2**32 < sys.maxsize :
                is_64_bit = True;
        elif config and main_command != 'setup' :
            # Running Windows python, so examine cygwin1.dll
            pathMapper = PathMapper(config.ROOT.rstrip('\\/'), main_cygwin_p);
            if cautils.pe_is_64_bit(pathMapper.mapPath("/bin/cygwin1.dll")) :
                is_64_bit = True;

        if is_64_bit :
            main_arch = 'x86_64';
        else:
            main_arch = 'x86';

        cas = CygAptSetup(main_cygwin_p, main_verbose, main_arch);

        # run command
        if (main_command == "setup"):
            cas.setup(args.force);
            return 0;
        elif (main_command == "help"):
            cas.usage(main_cyg_apt_rc);
            return 0;
        elif (main_command == "update"):
            cas.update(main_cyg_apt_rc, main_verify, main_mirror=main_mirror);
            return 0;

        # make an update if needed
        update_not_needed = [
            "ball", "find", "help", "purge", "remove", "version",
            "filelist", "update", "setup", "md5",
        ];
        always_update = config.always_update;
        always_update = always_update and\
            main_command not in update_not_needed and\
            not main_noupdate;
        if always_update:
            cas.update(main_cyg_apt_rc, main_verify, main_mirror=main_mirror);

        if main_command and main_command in dir(CygApt):
            cyg_apt = CygApt(
                main_packagename,
                main_files,
                main_cyg_apt_rc,
                main_cygwin_p,
                main_download_p,
                main_mirror,
                main_downloads,
                main_distname,
                main_nodeps_p,
                main_regex_search,
                main_nobarred,
                main_nopostinstall,
                main_nopostremove,
                main_dists,
                main_installed,
                self.getAppName(),
                main_verbose,
                main_arch,
            );

            getattr(cyg_apt, main_command)();
        else:
            cas.usage(main_cyg_apt_rc);

        return 0;