Ejemplo n.º 1
0
    def add_to_install_queue(self, widget, data=None):
        tree = self.gld.get_widget("pacs_tree")
        model, l_iter = tree.get_selection().get_selected()

        name = model.get_value(l_iter, 2)
        if name in self.queues["add"]:
            return
        if name in self.database.holdPkg:
           dlg = holdpkg_dialog(name, self.icon)
           res = dlg.run()
           dlg.destroy()
           if res == RESPONSE_OK:
               pacs_queues = { "add": [self.database.get_by_name(name)], "remove": [] }
               retcode = self._confirm(pacs_queues)
               if retcode:
                   stat_bar = self.gld.get_widget("statusbar")
                   stat_bar.pop(self.stat_id)
                   stat_bar.push(self.stat_id, _("Executing queued operations"))
                   dlg = do_dialog(pacs_queues, self.icon)
                   dlg.run()
           return
        if name in self.database.ignorePkg:
            dlg = ignorepkg_dialog(name, self.icon)
            res = dlg.run()
            dlg.destroy()
            if res is RESPONSE_NO:
                return
            
        if name in self.queues["remove"]:
            self.queues["remove"].remove(name)

        self.queues["add"].append(name)

        image = model.get_value(l_iter, 0)
        if image == "red":
            model.set_value(l_iter, 1, STOCK_ADD)
        else:
            model.set_value(l_iter, 1, STOCK_GO_UP)
        return
Ejemplo n.º 2
0
    def execute(self, widget=None, data=None):
        pacs_queues = { "add": [], "remove": [] }
        
        for name in self.queues["add"]:
            try:
                pac = self.database.get_by_name(name)
            except NameError:
                dlg = error_dialog(self.gld.get_widget("main_win"), _("%s is not in the database.\nThis is probably a bug in gtkpacman. If you think it's so, please send me a bug report.") %name, self.icon)
                dlg.run()
                dlg.destroy()
                continue
            
            if not pac.prop_setted:
                self.database.set_pac_properties(pac)

            pacs_queues["add"].append(pac)
            
            deps = pac.dependencies.split(", ")
            for dep in deps:
                if dep.count(">="):
                    dep = dep.split(">=")[0]
                    
                try:
                    dep_pac = self.database.get_by_name(dep)
                except NameError:
                    dlg = error_dialog(self.gld.get_widget("main_win"),
                                       _("%(dep)s is not in the database. %(dep)s is required by %(pkg)s.\nThis maybe either an error in %(pkg)s packaging or a gtkpacman's bug.\nIf you think it's the first, contact the %(pkg)s maintainer, else fill a bug report for gtkpacman, please.") %{'dep': dep, "pkg": name}, self.icon)
                    dlg.run()
                    dlg.destroy()
                    pacs_queues["add"].remove(pac)
                    self.queues["add"].remove(name)
                    break
                if not dep_pac.installed:
                    pacs_queues["add"].append(dep_pac)
            continue

        for name in self.queues["remove"]:
            pac = self.database.get_by_name(name)
            if not pac.prop_setted:
                self.database.set_pac_properties(pac)

            pacs_queues["remove"].append(pac)
            if pac.req_by:
                req_pacs = []
                for req in pac.req_by.split(", "):
                    if not (req in self.queues["remove"]):
                        req_pac = self.database.get_by_name(req)
                        req_pacs.append(req_pac)

                if req_pacs:
                    dlg = warning_dialog(self.gld.get_widget("main_win"),
                                     req_pacs, self.icon)
                    if dlg.run() == RESPONSE_YES:
                        pacs_queues["remove"].extend(req_pacs)
                    else:
                        self.queues["remove"].remove(name)
                        pacs_queues["remove"].remove(pac)
                    dlg.destroy()
            continue

        if not (pacs_queues["add"] or pacs_queues["remove"]):
            self._refresh_trees_and_queues()
            return

        retcode = self._confirm(pacs_queues)
        if retcode:
            stat_bar = self.gld.get_widget("statusbar")
            stat_bar.pop(self.stat_id)
            stat_bar.push(self.stat_id, _("Executing queued operations"))
            dlg = do_dialog(pacs_queues, self.icon)
            dlg.connect("destroy", self._refresh_trees_and_queues, pacs_queues)
            dlg.run()
        else:
            self.queues["add"] = []
            self.queues["remove"] = []
            self._refresh_trees_and_queues()
        return
Ejemplo n.º 3
0
    def execute(self, widget=None, data=None):
        def _req_pac_check(to_check, flag):
            to_do = []
	    try:
		pac = self.database.get_by_name(to_check)
	    except NameError:
		dlg = error_dialog(self.gld.get_widget("main_win"),
		_("%(dep)s is not in the database. %(dep)s is required by %(pkg)s.\nThis maybe either an error in %(pkg)s packaging or a gtkpacman's bug.\nIf you think it's the first, contact the %(pkg)s maintainer, else fill a bug report for gtkpacman, please.") %{'dep': dep, "pkg": name}, self.icon)
		dlg.run()
		dlg.destroy()
		pacs_queues["add"].remove(pac)
		self.queues["add"].remove(name)
		return
	    try:
		if not pac.prop_setted:
		    self.database.set_pac_properties(pac)
	    except:
		return pac, to_do
	    
	    if flag == "req":
		for req in pac.req_by.split(", "):
		    if len(req) >= 1:
			to_do.append(req)
	    else:
		if not pac.installed:
		    for dep in pac.dependencies.split(", "):
			if len(dep) >= 1:
			    to_do.append(dep)
			else:
			    pac = None
		    return pac, to_do
		pac = None
            return pac, to_do

        pacs_queues = { "add": [], "remove": [] }
        deps = []
        
        for name in self.queues["add"]:
            try:
                pac = self.database.get_by_name(name)
            except NameError:
                dlg = error_dialog(self.gld.get_widget("main_win"), _("%s is not in the database.\nThis is probably a bug in gtkpacman. If you think it's so, please send me a bug report.") %name, self.icon)
                dlg.run()
                dlg.destroy()
                continue
            
            if not pac.prop_setted:
                self.database.set_pac_properties(pac)

            pacs_queues["add"].append(pac)
            
            if pac.dependencies:
                dep_todo_list = []
                dep_black_list = []
                deps = pac.dependencies.split(", ")
            for dep in deps:
                if not dep in self.queues["add"]:
		    dep_todo_list.append(dep)
	    while dep_todo_list:
		dep = dep_todo_list.pop(0)
		if dep.count(">="):
                    dep = dep.split(">=")[0]
		if not (dep in self.queues["add"]):
		    done, to_do = _req_pac_check(dep, "dep")
		    if done and not done in pacs_queues["add"]:
			pacs_queues["add"].append(done)
		    for add in to_do:
			if not add in dep_black_list:
			    dep_todo_list.append(add)
			    dep_black_list.append(add)

        for name in self.queues["remove"]:
            pac = self.database.get_by_name(name)
            if not pac.prop_setted:
                self.database.set_pac_properties(pac)

            pacs_queues["remove"].append(pac)
            if pac.req_by:
                req_pacs = []
                req_todo_list = []
                req_black_list = []
                for req in pac.req_by.split(", "):
                    if not (req in self.queues["remove"]):
                        req_todo_list.append(req)
                while req_todo_list:
                    req = req_todo_list.pop(0)
                    if not (req in self.queues["remove"]):
                        done, to_do = _req_pac_check(req, "req")
                        if done and not done in req_pacs:
                            req_pacs.append(done)
                        for add in to_do:
                            if not add in req_black_list:
                                req_todo_list.append(add)
                                req_black_list.append(add)
                    continue

                if req_pacs:
                    dlg = warning_dialog(self.gld.get_widget("main_win"),
                                     req_pacs, self.icon)
                    if dlg.run() == RESPONSE_YES:
                        pacs_queues["remove"].extend(req_pacs)
                    else:
                        self.queues["remove"].remove(name)
                        pacs_queues["remove"].remove(pac)
                    dlg.destroy()
            continue

        if not (pacs_queues["add"] or pacs_queues["remove"]):
            self._refresh_trees_and_queues()
            return

        retcode = self._confirm(pacs_queues)
        if retcode:
	    self._statusbar(_("Executing queued operations..."))
            dlg = do_dialog(pacs_queues, self.icon)
            dlg.connect("destroy", self._refresh_trees_and_queues, pacs_queues)
            dlg.run()
        else:
            self.queues["add"] = []
            self.queues["remove"] = []
            self._refresh_trees_and_queues()
        return
Ejemplo n.º 4
0
    def execute(self, widget=None, data=None):
        pacs_queues = { "add": [], "remove": [] }
        deps = []
        req_pacs = []
        
        if self.queues['add']:
            pacs_queues['add'] = self._execute_queue_add()
            # Check if packages are listed as ignorePkg
            b_list = self._blacklist( pacs_queues['add'], 0x01)
            if b_list:
                dlg = ignorepkg_dialog( b_list, self.icon)
                res = dlg.run()
                dlg.destroy()
                if res == RESPONSE_NO:
                    self._done(None)
                    return
            
        if self.queues['remove']:
            pacs_queues['remove'], req_pacs = self._execute_queue_remove()
            #pacs_queues["remove"] = self._execute_queue_remove()
            # Check if packages are listed as holdPkg
            b_list = self._blacklist( pacs_queues['remove'], 0x02)
            if b_list:
                dlg = holdpkg_dialog( b_list, self.icon)
                res = dlg.run()
                dlg.destroy()
                if res == RESPONSE_NO:
                    self._done(None)
                    return
            
        if not (pacs_queues["add"] or pacs_queues["remove"]):
            self._refresh_trees_and_queues()
            return
        
        self.gld.get_widget("main_win").set_sensitive(False)
        if req_pacs:
            dlg = warning_dialog(self.gld.get_widget("main_win"),
                             req_pacs, self.icon)
            if dlg.run() == RESPONSE_YES:
                pacs_queues["remove"].extend(req_pacs)
                dlg.destroy()
            else:
                dlg.destroy()

        # Open new dialog and execute commands ie. install/remove packages
        do_dlg = do_dialog( self.gld.get_widget("main_win"), self.icon, pacs_queues)
        do_dlg.connect("destroy", self._refresh_trees_and_queues)
        
        resp = do_dlg.run()
        if resp == RESPONSE_YES:
            self._statusbar(_("Executing queued operations..."))
            do_dlg.set_sensitive(False)
            if self._passwd_dlg_init(do_dlg):
                do_dlg.install()
                do_dlg.set_sensitive(True)
            # User clicked cancel
            else:
                do_dlg.destroy()
                self.queues["add"] = []
                self.queues["remove"] = []
                self._statusbar(_("Upgrade canceled"))
                self.gld.get_widget("main_win").set_sensitive(True)
                
        elif resp == RESPONSE_NO:
            do_dlg.destroy()
            self.queues["add"] = []
            self.queues["remove"] = []
            self._statusbar(_("Upgrade canceled"))
            self.gld.get_widget("main_win").set_sensitive(True)