You are not logged in.
When I click the search icon and enter any word into the input dialog, nothing happens. The terminal spews out this:
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/gtkPacman/gui.py", line 506, in search
pacs = self.database.get_by_keywords(keywords)
File "/usr/lib/python2.5/site-packages/gtkPacman/pacman.py", line 436, in get_by_keywords
pacs.extend(self.get_by_desc(keys))
File "/usr/lib/python2.5/site-packages/gtkPacman/pacman.py", line 400, in get_by_desc
self.set_pac_properties(pac)
File "/usr/lib/python2.5/site-packages/gtkPacman/pacman.py", line 205, in set_pac_properties
self._set_summary(pac, path)
File "/usr/lib/python2.5/site-packages/gtkPacman/pacman.py", line 215, in _set_summary
size = self._get_size(desc_file)
File "/usr/lib/python2.5/site-packages/gtkPacman/pacman.py", line 241, in _get_size
end = desc.index("%", begin)
ValueError: substring not foundAny idea what's wrong?
- Dave
Offline
It was already said there :
http://aur.archlinux.org/packages.php?d … s=0&SeB=nd
You could try contacting the author (ragnarok) directly.
pacman roulette : pacman -S $(pacman -Slq | LANG=C sort -R | head -n $((RANDOM % 10)))
Offline
It was already said there :
http://aur.archlinux.org/packages.php?d … s=0&SeB=ndYou could try contacting the author (ragnarok) directly.
Pants, well noticed
I'll try contacting him.
- Dave
Offline
Hi all, solution for this problem is to change some stuff in the source code for gtkpacman 2.0:
1:Find file "pacman.py" open it in text editor
2:Go to line 241 and change:
From: end = desc.index("%", begin)
TO: end = desc.find("%", begin)
#t---->This will not rise an error if it can't get index position<----#
3:Go to line 278 and add:
def _get_reason(self, desc):
if "%REASON%" in desc: #<---ADD THIS LINE
begin = desc.index("%REASON%") + len("%REASON%")
reason_int = int(desc[begin:].strip())
if reason_int:
reason = _("Installed as a dependency for another package")
else:
reason = _("Excplicitly installed")
else: #<---ADD THIS LINE
return '' #<---ADD THIS LINE
return reason
#----->This has to be exactly same as above, coppy above code if needed<-----#
4:Go to line 292 and change:
From: begin = desc.index("%DESC%") + len("%DESC%")
TO: begin = desc.find("%DESC%") + len("%DESC%")
#--->this will not rise an error if it can't get index position<----#
5:Go to line 329 and change:
From: begin = files.index("%FILES%") + len("%FILES%")
To: begin = files.find("%FILES%") + len("%FILES%")
#--->This will not rise an error if it can't get index position<----#
This changes will make you able to click on an installed package and not getting error and you will be able to search for packages with no error ![]()
This changes worked for me and I hoppe It will work for you. I'm beginer in python so I don't guarantee nothing.
PEACE OUT
Last edited by seti (2007-07-22 15:55:43)
remember! don't trust anyone above 30
Offline
Hi all, solution for this problem is to change some stuff in the source code for gtkpacman 2.0:
1:Find file "pacman.py" open it in text editor
2:Go to line 241 and change:
Patch are useful for this.
say the original source is in gtkpacman/ , do the following :
cp -r gtkpacman gtkpacman-new
/* fix pacman.py in gtkpacman-new/.. */
diff -uNr gtkpacman gtkpacman-new > fix.diffLast edited by shining (2007-07-22 18:08:01)
pacman roulette : pacman -S $(pacman -Slq | LANG=C sort -R | head -n $((RANDOM % 10)))
Offline
Made another modification in the source code, this one will eliminate error when in search window cancel button is clicked on or when ok button is clicked with nothing in search dialog.
In file "gui.py" line 500:
def search(self, widget, data=None): #<------line 500
keywords='' #<-------ADD THIS
dlg = search_dialog(self.gld.get_widget("main_win"), self.icon)
if dlg.run() == RESPONSE_ACCEPT:
keywords = dlg.entry.get_text()
dlg.destroy()
if keywords: #<------ADD THIS
pacs = self.database.get_by_keywords(keywords)
else: #<------ADD THIS
return #<------ADD THIS
Thx shining for the tip.I made "diff -uNr..." after I made changes to gui.py so both pacman.py and gui.py are in the fix.diff patch. If anyone want this patch just ask
PEACE OUT
Last edited by seti (2007-07-22 21:42:06)
remember! don't trust anyone above 30
Offline
Have You ppl had problems with uninstalling package? Mabey some errors, not anymore:
Added stuff in pacman.py on line 316:
if "%REQUIREDBY%" in depends: #<----ADDED
begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
end = depends.find("%", begin) - len("%")
else: #<-----ADDED
return #<-----ADDED
I'll try to fix some more bugs... after installing package an error pops out ![]()
PEACE OUT
remember! don't trust anyone above 30
Offline
I would suggest copy/paste the patch here, and also mail it to the author.
pacman roulette : pacman -S $(pacman -Slq | LANG=C sort -R | head -n $((RANDOM % 10)))
Offline
Here is the patch I made for gtkpacman 2.0:
This patch fix install, remove, search errors + some more. I'm not soure if after upgrading package an error will pop out, let me know if it do so, I don't have an old package to test it on
Binary files gtkPacman/__init__.pyc and gtkPacman_new/__init__.pyc differ
Binary files gtkPacman/dialogs.pyc and gtkPacman_new/dialogs.pyc differ
diff -uNr gtkPacman/gui.py gtkPacman_new/gui.py
--- gtkPacman/gui.py 2007-01-01 23:16:03.000000000 +0000
+++ gtkPacman_new/gui.py 2007-07-24 16:47:19.000000000 +0000
@@ -417,7 +417,7 @@
break
if not dep_pac.installed:
pacs_queues["add"].append(dep_pac)
- continue
+ continue
for name in self.queues["remove"]:
pac = self.database.get_by_name(name)
@@ -444,7 +444,7 @@
continue
if not (pacs_queues["add"] or pacs_queues["remove"]):
- self._refresh_trees_and_queues()
+ #self._refresh_trees_and_queues() #<----Comment out,I think this is not needed
return
retcode = self._confirm(pacs_queues)
@@ -498,12 +498,16 @@
self.popup.popdown()
def search(self, widget, data=None):
+ keywords="" #<-----------ADDED LINE
dlg = search_dialog(self.gld.get_widget("main_win"), self.icon)
if dlg.run() == RESPONSE_ACCEPT:
keywords = dlg.entry.get_text()
dlg.destroy()
- pacs = self.database.get_by_keywords(keywords)
+ if keywords: #<-----------ADDED LINE
+ pacs = self.database.get_by_keywords(keywords)
+ else: #<-----------ADDED LINE
+ return #<-----------ADDED LINE
repos_model = self.gld.get_widget("repos_tree").get_model()
if self.search_iter:
Binary files gtkPacman/gui.pyc and gtkPacman_new/gui.pyc differ
Binary files gtkPacman/models.pyc and gtkPacman_new/models.pyc differ
diff -uNr gtkPacman/pacman.py gtkPacman_new/pacman.py
--- gtkPacman/pacman.py 2007-01-01 23:16:31.000000000 +0000
+++ gtkPacman_new/pacman.py 2007-07-24 18:29:20.000000000 +0000
@@ -194,8 +194,12 @@
def set_pac_properties(self, pac):
"""Set the properties for the given pac"""
if pac.installed:
- version = pac.inst_ver
- repo = "local"
+ if not pac.inst_ver == '-' and pac.version : #-----ADDED LINE
+ version = pac.inst_ver
+ repo = "local"
+ else: #-----ADDED LINE
+ version = pac.version #-----ADDED LINE
+ repo = 'local' #-----ADDED LINE
else:
version = pac.version
repo = pac.repo
@@ -238,7 +242,7 @@
except ValueError:
begin = desc.index("%SIZE%") + len("%SIZE%")
- end = desc.index("%", begin)
+ end = desc.find("%", begin) #----CHANGED FROM: desc.index TO: desc.find
size_s = desc[begin:end].strip()
size_int = int(size_s)
measure = "byte(s)"
@@ -275,21 +279,25 @@
return installdate
def _get_reason(self, desc):
- begin = desc.index("%REASON%") + len("%REASON%")
- reason_int = int(desc[begin:].strip())
-
- if reason_int:
- reason = _("Installed as a dependency for another package")
- else:
- reason = _("Excplicitly installed")
+ if "%REASON%" in desc: #<---ADDED LINE
+ begin = desc.index("%REASON%") + len("%REASON%")
+ reason_int = int(desc[begin:].strip())
+ if reason_int:
+ reason = _("Installed as a dependency for another package")
+ else:
+ reason = _("Excplicitly installed")
+ else: #<---ADDED LINE
+ reason = _("Excplicitly installed") #<---ADDED LINE
return reason
- def _get_description(self, desc):
+ def _get_description(self, desc):
"""Set description for the given pac"""
- begin = desc.index("%DESC%") + len("%DESC%")
+
+ begin = desc.find("%DESC%") + len("%DESC%") #<---CHANGED FROM: desc.index TO desc.find
end = desc.index("%", begin)
description = unicode(desc[begin:end].strip(), errors="ignore")
+
return description
def _get_dependencies(self, path):
@@ -310,9 +318,11 @@
def _get_req_by(self, path):
"""Set list of packages that needs given pac"""
depends = open("%s/depends" %path).read()
-
- begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
- end = depends.find("%", begin) - len("%")
+ if "%REQUIREDBY%" in depends: #<----ADDED LINE
+ begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
+ end = depends.find("%", begin) - len("%")
+ else: #<----ADDED LINE
+ return #<----ADDED LINE
reqs = depends[begin:end].strip().split("\n")
req_by = ", ".join(reqs)
@@ -324,8 +334,8 @@
return _("%s is not installed") %pac.name
files = open("%s/files" %path).read()
- begin = files.index("%FILES%") + len("%FILES%")
- end = files.find("%", begin) - len("%")
+ begin = files.find("%FILES%") + len("%FILES%") #<----HANGED FORM:files.index TO: files.find
+ end = files.find("%", begin) - len("%") #<----HANGED FORM:files.index TO: files.find
filelist = files[begin:end].strip()
pac.filelist = filelist
return
@@ -398,7 +408,7 @@
for pac in self[repo]:
if not pac.prop_setted:
self.set_pac_properties(pac)
- if pac.description.count(desc):
+ if pac.description.count(desc):
pacs.append(pac)
continue
continue
Binary files gtkPacman/pacman.pyc and gtkPacman_new/pacman.pyc differ
Binary files gtkPacman/terminal.pyc and gtkPacman_new/terminal.pyc differ=TO APPLY PATCH=:Create new file "fix.diff" copy above text and paste it in to the "fix.diff" and save file in
~/gtkpacman-2.0/gtkPacman/. open terminal, go in to gtkPacman folder and type: patch -p1 -i fix.diff.
Anyone knows an email to "ragnarok" mabey? This is the creator of this progam.
BE IN PEACE
Last edited by seti (2007-07-23 17:13:46)
remember! don't trust anyone above 30
Offline
diff is very handy :
1) No need to add comments like "ADDED LINE"
2) No need for instructions like : go there, add this, then there change this, etc..
3) Easier reviewing of the changes
4) Easier applying of the changes (even if done manually, without patch tool).
So it actually makes everything easier ![]()
pacman roulette : pacman -S $(pacman -Slq | LANG=C sort -R | head -n $((RANDOM % 10)))
Offline
Thx for this tip, actually I made these comments for my self to know where and what I changed.
I aggre that comments I made looks silly and unnecessary in patch file ![]()
Last edited by seti (2007-07-23 17:47:17)
remember! don't trust anyone above 30
Offline
Could you edit the aur pkgbuild with the patchs? Thanks ![]()
Offline
Sorry, I'm not the mantainer of this package, First I need to solve an error, aftert upgrading a package an error pops out. Then I will send patch to ragnarok, He is mantaining gtkpacman
Last edited by seti (2007-07-24 11:04:31)
remember! don't trust anyone above 30
Offline
Finally upgrading package is working now. Here is the patch nr2:
Binary files gtkPacman/__init__.pyc and gtkPacman_new/__init__.pyc differ
diff -uNr gtkPacman/dialogs.py gtkPacman_new/dialogs.py
--- gtkPacman/dialogs.py 2007-01-01 23:15:51.000000000 +0000
+++ gtkPacman_new/dialogs.py 2007-07-25 18:15:21.000000000 +0000
@@ -312,7 +312,7 @@
self.rem_tree.set_model(self.rem_model)
- def _setup_layout(self):
+ def _setup_layout(self): #AFTER PACKAGE IS INSTALLED AND WINDOW WITH TERMINAL IS ON TOP
self.hpaned = HPaned()
self.hpaned.add1(self.inst_tree)
Binary files gtkPacman/dialogs.pyc and gtkPacman_new/dialogs.pyc differ
diff -uNr gtkPacman/gui.py gtkPacman_new/gui.py
--- gtkPacman/gui.py 2007-01-01 23:16:03.000000000 +0000
+++ gtkPacman_new/gui.py 2007-07-25 18:15:21.000000000 +0000
@@ -229,8 +229,7 @@
except AttributeError:
pass
continue
- return
-
+ return
def _refresh_model(self, model, submodel=None):
if submodel:
liststore = self.models[model][submodel]
@@ -246,7 +245,7 @@
row[0] = "red"
row[3] = "-"
continue
- return
+ return
def quit(self, widget, data=None):
main_quit()
@@ -417,7 +416,7 @@
break
if not dep_pac.installed:
pacs_queues["add"].append(dep_pac)
- continue
+ continue
for name in self.queues["remove"]:
pac = self.database.get_by_name(name)
@@ -444,7 +443,10 @@
continue
if not (pacs_queues["add"] or pacs_queues["remove"]):
- self._refresh_trees_and_queues()
+ dlg = error_dialog(self.gld.get_widget("main_win"),'\tNothing to do\nAdd package to action list',self.icon)
+ dlg.run()
+ dlg.destroy()
+ self._refresh_trees_and_queues()
return
retcode = self._confirm(pacs_queues)
@@ -471,18 +473,20 @@
self._refresh_trees()
self.queues["add"] = []
self.queues["remove"] = []
- for pac in pacs_queues["add"]:
- pac.installed = True
- self.database.set_pac_properties(pac)
- continue
- for pac in pacs_queues["remove"]:
- pac.installed = False
- self.database.set_pac_properties(pac)
- continue
- del(pacs_queues)
- stat_bar = self.gld.get_widget("statusbar")
- stat_bar.pop(self.stat_id)
- stat_bar.push(self.stat_id, _("Done."))
+ if pacs_queues:
+ for pac in pacs_queues["add"]:
+ pac.installed = True
+ self.database.set_pac_properties(pac)
+ continue
+ for pac in pacs_queues["remove"]:
+ pac.installed = False
+ self.database.set_pac_properties(pac)
+ continue
+ else:
+ del(pacs_queues)
+ stat_bar = self.gld.get_widget("statusbar")
+ stat_bar.pop(self.stat_id)
+ stat_bar.push(self.stat_id, _("Done."))
return
def about(self, widget, data=None):
@@ -498,12 +502,16 @@
self.popup.popdown()
def search(self, widget, data=None):
+ keywords="" #<-----------ADDED LINE
dlg = search_dialog(self.gld.get_widget("main_win"), self.icon)
if dlg.run() == RESPONSE_ACCEPT:
keywords = dlg.entry.get_text()
dlg.destroy()
- pacs = self.database.get_by_keywords(keywords)
+ if keywords: #<-----------ADDED LINE
+ pacs = self.database.get_by_keywords(keywords)
+ else: #<-----------ADDED LINE
+ return #<-----------ADDED LINE
repos_model = self.gld.get_widget("repos_tree").get_model()
if self.search_iter:
Binary files gtkPacman/gui.pyc and gtkPacman_new/gui.pyc differ
Binary files gtkPacman/models.pyc and gtkPacman_new/models.pyc differ
diff -uNr gtkPacman/pacman.py gtkPacman_new/pacman.py
--- gtkPacman/pacman.py 2007-01-01 23:16:31.000000000 +0000
+++ gtkPacman_new/pacman.py 2007-07-25 18:15:21.000000000 +0000
@@ -193,11 +193,27 @@
def set_pac_properties(self, pac):
"""Set the properties for the given pac"""
- if pac.installed:
- version = pac.inst_ver
- repo = "local"
+ from os.path import exists
+ if pac.installed: # Jump in if package is installed
+ #comper=cmp(pac.inst_ver,pac.version)
+ path_old = '/var/lib/pacman/local/%s-%s'%(pac.name,pac.version)
+ if pac.isold and exists(path_old):
+ version = pac.version # After Upgrading, package use this
+ repo = 'local'
+ elif pac.isold:
+ version = pac.inst_ver # Is installed but is old, (newer package is available)
+ repo = "local"
+ elif not pac.inst_ver == '-':
+ version = pac.inst_ver # Is Installed (no more no less)
+ repo = "local"
+ elif pac.installed:
+ version = pac.version # After package is installed, It uses this
+ repo = 'local'
+ #else: # I think 'else' is not used
+# version = pac.version
+# repo = pac.repo
else:
- version = pac.version
+ version = pac.version # Package not installed
repo = pac.repo
pack_dir = "-".join((pac.name, version))
@@ -238,7 +254,7 @@
except ValueError:
begin = desc.index("%SIZE%") + len("%SIZE%")
- end = desc.index("%", begin)
+ end = desc.find("%", begin) #----CHANGED FROM: desc.index TO: desc.find
size_s = desc[begin:end].strip()
size_int = int(size_s)
measure = "byte(s)"
@@ -275,21 +291,25 @@
return installdate
def _get_reason(self, desc):
- begin = desc.index("%REASON%") + len("%REASON%")
- reason_int = int(desc[begin:].strip())
-
- if reason_int:
- reason = _("Installed as a dependency for another package")
- else:
- reason = _("Excplicitly installed")
+ if "%REASON%" in desc: #<---ADDED LINE
+ begin = desc.index("%REASON%") + len("%REASON%")
+ reason_int = int(desc[begin:].strip())
+ if reason_int:
+ reason = _("Installed as a dependency for another package")
+ else:
+ reason = _("Excplicitly installed")
+ else: #<---ADDED LINE
+ reason = _("Excplicitly installed") #<---ADDED LINE
return reason
- def _get_description(self, desc):
+ def _get_description(self, desc):
"""Set description for the given pac"""
- begin = desc.index("%DESC%") + len("%DESC%")
+
+ begin = desc.find("%DESC%") + len("%DESC%") #<---CHANGED FROM: desc.index TO desc.find
end = desc.index("%", begin)
description = unicode(desc[begin:end].strip(), errors="ignore")
+
return description
def _get_dependencies(self, path):
@@ -310,9 +330,11 @@
def _get_req_by(self, path):
"""Set list of packages that needs given pac"""
depends = open("%s/depends" %path).read()
-
- begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
- end = depends.find("%", begin) - len("%")
+ if "%REQUIREDBY%" in depends: #<----ADDED LINE
+ begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
+ end = depends.find("%", begin) - len("%")
+ else: #<----ADDED LINE
+ return #<----ADDED LINE
reqs = depends[begin:end].strip().split("\n")
req_by = ", ".join(reqs)
@@ -324,8 +346,8 @@
return _("%s is not installed") %pac.name
files = open("%s/files" %path).read()
- begin = files.index("%FILES%") + len("%FILES%")
- end = files.find("%", begin) - len("%")
+ begin = files.find("%FILES%") + len("%FILES%") #<----HANGED FORM:files.index TO: files.find
+ end = files.find("%", begin) - len("%") #<----HANGED FORM:files.index TO: files.find
filelist = files[begin:end].strip()
pac.filelist = filelist
return
@@ -398,7 +420,7 @@
for pac in self[repo]:
if not pac.prop_setted:
self.set_pac_properties(pac)
- if pac.description.count(desc):
+ if pac.description.count(desc):
pacs.append(pac)
continue
continue
Binary files gtkPacman/pacman.pyc and gtkPacman_new/pacman.pyc differ
Binary files gtkPacman/terminal.pyc and gtkPacman_new/terminal.pyc differ=TO APPLY PATCH=:Create new file "fix.diff" copy above text and paste it in to the "fix.diff" and save file in
~/gtkpacman-2.0/gtkPacman/. open terminal, go in to gtkPacman folder and type: patch -p1 -i fix.diff.
PEACE OUT
Last edited by seti (2007-07-25 15:00:44)
remember! don't trust anyone above 30
Offline
still no fixed PKGBUILD?
https://developer.berlios.de/projects/gtkpacman
isend an email to the developer today Stefano Esposito <ragnarok@email.it>
Cancel me not -- for what then shall remain?
Abscissas, some mantissas, modules, modes, A root or two, a torus and a node:
The inverse of my verse, a null domain.
-- Stanislaw Lem, The Cyberiad
Offline
In order that such "easy GUI package Installer" is for nobs :
the Patch File "fix.diff" must copied to "/usr/lib/python2.5/site-packages/gtkPacman/fix.diff/" after installing the build Package ...from AUR...
Cancel me not -- for what then shall remain?
Abscissas, some mantissas, modules, modes, A root or two, a torus and a node:
The inverse of my verse, a null domain.
-- Stanislaw Lem, The Cyberiad
Offline
Hello
I made another patch. This one is more like enhancement than a patch, oh well see it for yourself.
Changed / fixed:
* No more is IgnorePkg or HoldPkg ignored, when clicked on a package that is listed as ignorePkg or holdPkg window will pop up and ask if user want to add this package to install/remove queue, same thins happens when upgrading whole system
* Changed main window size
* Repository list is unfolded by default
* Removed "search" item from pop up menu, when you clicked on package, this was useless and didn't working
* Some small fixes
diff -uNr gtkpacman/data/gtkpacman.glade gtkpacman-2.0/data/gtkpacman.glade
--- gtkpacman/data/gtkpacman.glade 2007-11-27 13:22:39.182008729 +0100
+++ gtkpacman-2.0/data/gtkpacman.glade 2006-12-30 18:55:26.000000000 +0100
@@ -10,7 +10,7 @@
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="default_width">650</property>
- <property name="default_height">500</property>
+ <property name="default_height">433</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
@@ -891,6 +891,34 @@
</child>
</widget>
</child>
+
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator6">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="search">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Search</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="search" last_modification_time="Tue, 18 Apr 2006 11:01:36 GMT"/>
+ <accelerator key="S" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+
+ <child internal-child="image">
+ <widget class="GtkImage" id="image71">
+ <property name="visible">True</property>
+ <property name="stock">gtk-find</property>
+ <property name="icon_size">1</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</glade-interface>
diff -uNr gtkpacman/gtkPacman/dialogs.py gtkpacman-2.0/gtkPacman/dialogs.py
--- gtkpacman/gtkPacman/dialogs.py 2007-11-30 15:54:30.883609016 +0100
+++ gtkpacman-2.0/gtkPacman/dialogs.py 2007-01-02 00:15:51.000000000 +0100
@@ -26,8 +26,8 @@
from gtk import STOCK_CLOSE, STOCK_OK, STOCK_CANCEL, STOCK_GO_FORWARD
from gtk import STOCK_APPLY, STOCK_REMOVE, STOCK_YES, STOCK_NO, STOCK_OPEN
from gtk import DIALOG_MODAL, DIALOG_DESTROY_WITH_PARENT
-from gtk import MESSAGE_WARNING, FILE_CHOOSER_ACTION_OPEN, MESSAGE_INFO
-from gtk import BUTTONS_CLOSE, MESSAGE_ERROR, BUTTONS_YES_NO
+from gtk import MESSAGE_WARNING, FILE_CHOOSER_ACTION_OPEN
+from gtk import BUTTONS_CLOSE, MESSAGE_ERROR
from gtk import RESPONSE_ACCEPT, RESPONSE_REJECT, RESPONSE_YES, RESPONSE_CLOSE
from gtk import image_new_from_stock, ICON_SIZE_BUTTON, ICON_SIZE_DIALOG
from gtk import main_iteration, expander_new_with_mnemonic
@@ -236,17 +236,14 @@
class do_dialog(Window):
def __init__(self, queues, icon):
- self.size = ()
Window.__init__(self, WINDOW_TOPLEVEL)
self.set_property("skip-taskbar-hint", True)
self.set_property("destroy-with-parent", True)
- #self.set_property("resizable", False)
-
self.set_modal(True)
self.connect("delete-event", self._stop_closing)
self.set_position(WIN_POS_CENTER)
-
+
self.set_icon(pixbuf_new_from_file(icon))
self._setup_trees(queues)
self._setup_layout()
@@ -329,11 +326,8 @@
self.terminal.connect("child-exited", lambda _: self.close_button.show())
self.expander = Expander(_("Terminal"))
- self.expander.connect("notify::expanded", self.expanderCb)
-
- #self.expander.add(self.terminal)
- #self.expander.show_all()
- self.expander.show()
+ self.expander.add(self.terminal)
+ self.expander.show_all()
self.vbox = VBox(False, 0)
self.vbox.show()
@@ -353,17 +347,7 @@
def _stop_closing(self, widget, event):
self.stop_emission("delete-event")
- return True
-
- def expanderCb(self, widget, event, data=None):
- if self.expander.get_expanded():
- self.size = self.get_size()
- self.expander.add(self.terminal)
- self.terminal.show()
- else:
- self.expander.remove(self.terminal)
- self.resize(self.size[0], self.size[1])
- self.show_all()
+ return True
class local_install_fchooser_dialog(FileChooserDialog):
@@ -446,19 +430,14 @@
self.set_property("skip-taskbar-hint", True)
self.set_property("modal", True)
self.set_property("destroy-with-parent", True)
- #self.set_property("resizable", False)
self.set_position(WIN_POS_CENTER)
self.set_default_size (300, 300)
- self.unrealize()
-
- #self.set_resizable(True)
self.set_icon(pixbuf_new_from_file(icon))
self._setup_tree(to_upgrade)
self._setup_layout()
def _setup_layout(self):
- self.size = ()
self.vbox = VBox(False, 0)
self.vbox.show()
@@ -466,12 +445,9 @@
self.terminal.connect("child-exited", lambda _: self.close_button.show())
self.expander = expander_new_with_mnemonic(_("_Terminal"))
- self.expander.connect("notify::expanded", self.expanderCb)
-
self.expander.set_expanded(False)
- #self.expander.add(self.terminal)
- #self.expander.show_all()
- self.expander.show()
+ self.expander.add(self.terminal)
+ self.expander.show_all()
self.close_button = Button(stock=STOCK_CLOSE)
self.close_button.connect("clicked", lambda _: self.destroy())
@@ -492,16 +468,6 @@
self.add(self.vbox)
return
-
- def expanderCb(self, widget, event, data=None):
- if self.expander.get_expanded():
- self.size = self.get_size()
- self.expander.add(self.terminal)
- self.terminal.show()
- else:
- self.expander.remove(self.terminal)
- self.resize(self.size[0], self.size[1])
- self.show_all()
def _setup_tree(self, pacs):
self.model = ListStore(str, str, str)
@@ -624,16 +590,3 @@
DIALOG_MODAL | DIALOG_DESTROY_WITH_PARENT,
MESSAGE_ERROR, BUTTONS_CLOSE, msg)
self.set_icon(pixbuf_new_from_file(icon))
-
-class infoMessage(MessageDialog):
-
- def __init__(self, type=None, buttons=None, msg=None):
-
- MessageDialog.__init__(self
- , None
- , DIALOG_MODAL | DIALOG_DESTROY_WITH_PARENT
- , type
- , buttons
- , message_format=msg)
- self.set_position(WIN_POS_CENTER)
-
\ No newline at end of file
Binary files gtkpacman/gtkPacman/dialogs.pyc and gtkpacman-2.0/gtkPacman/dialogs.pyc differ
diff -uNr gtkpacman/gtkPacman/gui.py gtkpacman-2.0/gtkPacman/gui.py
--- gtkpacman/gtkPacman/gui.py 2007-12-01 05:30:42.171459702 +0100
+++ gtkpacman-2.0/gtkPacman/gui.py 2007-01-02 00:16:03.000000000 +0100
@@ -21,8 +21,7 @@
from gtk import main, main_quit, TreeStore, TreeView, ListStore, Button
from gtk import CellRendererText, CellRendererPixbuf, ScrolledWindow
from gtk import STOCK_ADD, STOCK_GO_UP, STOCK_REMOVE, STOCK_CLOSE
-from gtk import RESPONSE_YES, RESPONSE_ACCEPT, MESSAGE_INFO, BUTTONS_CLOSE
-from gtk import MESSAGE_WARNING, BUTTONS_YES_NO
+from gtk import RESPONSE_YES, RESPONSE_ACCEPT
from gtk.gdk import pixbuf_new_from_file
from gtk.glade import XML
@@ -30,7 +29,7 @@
from dialogs import confirm_dialog, search_dialog, upgrade_dialog
from dialogs import upgrade_confirm_dialog, local_install_dialog
from dialogs import local_install_fchooser_dialog, local_confirm_dialog
-from dialogs import command_dialog, error_dialog, infoMessage
+from dialogs import command_dialog, error_dialog
from models import installed_list, all_list, whole_list, search_list, file_list
@@ -91,7 +90,7 @@
self.gld.get_widget("immediate").set_sensitive(False)
self.gld.get_widget("add_install").set_sensitive(False)
self.gld.get_widget("remove_install").set_sensitive(False)
- self.gld.get_widget("add_remove").set_sensitive(False)
+ self.gld.get_widget("add_remove").set_sensitive(False)
self.gld.get_widget("remove_remove").set_sensitive(False)
self.gld.get_widget("execute").set_sensitive(False)
self.gld.get_widget("up_sys").set_sensitive(False)
@@ -101,7 +100,6 @@
self.popup_gld.get_widget("popup_remove_install").set_sensitive(False)
self.popup_gld.get_widget("popup_add_remove").set_sensitive(False)
self.popup_gld.get_widget("popup_remove_remove").set_sensitive(False)
- pass
def _adjust_queues (self):
for name in self.queues["add"]:
@@ -185,7 +183,6 @@
repos_tree.insert_column_with_attributes(-1, "", CellRendererText(),
text=0)
repos_tree.set_model(repos_model)
- repos_tree.expand_row(0, False)
return
def _setup_files_tree(self):
@@ -232,7 +229,8 @@
except AttributeError:
pass
continue
- return
+ return
+
def _refresh_model(self, model, submodel=None):
if submodel:
liststore = self.models[model][submodel]
@@ -248,7 +246,7 @@
row[0] = "red"
row[3] = "-"
continue
- return
+ return
def quit(self, widget, data=None):
main_quit()
@@ -271,10 +269,9 @@
-1, "", CellRendererText(), text=5
)
if not self.inst_ver_col:
- #self.inst_ver_col = pacs_tree.insert_column_with_atrributes(
- # -1, "", CellRendererText(), text=4
- # )
- pass
+ self.inst_ver_col = pacs_tree.insert_column_with_atrributes(
+ -1, "", CellRendererText(), text=4
+ )
elif selected == _("foreigners"):
if self.repo_col:
@@ -326,27 +323,10 @@
def add_to_install_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
-
- if not l_iter:
- return
+
name = model.get_value(l_iter, 2)
-
if name in self.queues["add"]:
return
-
- if name in self.database.options['IgnorePkg']:
- dlg = infoMessage(type=MESSAGE_WARNING
- , buttons= BUTTONS_YES_NO
- , msg='\"%s\" is in IgnorePkg list.\nAdd it to install queue anyway?' % name)
- dlg.set_title("Warning...")
-
- if dlg.run() == RESPONSE_YES:
- pass
- else:
- dlg.destroy()
- return
- dlg.destroy()
-
if name in self.queues["remove"]:
self.queues["remove"].remove(name)
@@ -362,9 +342,6 @@
def remove_from_install_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
-
- if not l_iter:
- return
name = model.get_value(l_iter, 2)
if not (name in self.queues["add"]):
@@ -377,25 +354,8 @@
def add_to_remove_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
-
- if not l_iter:
- return
name = model.get_value(l_iter, 2)
- if name in self.database.options['HoldPkg']:
- dlg = infoMessage(type=MESSAGE_WARNING
- , buttons= BUTTONS_YES_NO
- , msg='\"%s\" is designated as HoldPkg.\nAdd it to remove queue anyway?' % name)
- dlg.set_title("Warning...")
-
- if dlg.run() == RESPONSE_YES:
- pass
- else:
- dlg.destroy()
- return
- dlg.destroy()
-
-
if name in self.queues["remove"]:
return
@@ -414,12 +374,8 @@
def remove_from_remove_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
-
- if not l_iter:
- return
name = model.get_value(l_iter, 2)
-
if not (name in self.queues["remove"]):
return
@@ -428,19 +384,8 @@
return
def execute(self, widget, data=None):
- check = True
pacs_queues = { "add": [], "remove": [] }
- if not (self.queues["add"] or self.queues["remove"]):
- dlg = infoMessage(type=MESSAGE_INFO
- , buttons= BUTTONS_CLOSE
- , msg='Nothing to do.\nAdd package to queue list first.')
- dlg.set_title("Info...")
- dlg.run()
- dlg.destroy()
- #self._refresh_trees_and_queues()
- return
-
for name in self.queues["add"]:
try:
pac = self.database.get_by_name(name)
@@ -454,11 +399,12 @@
self.database.set_pac_properties(pac)
pacs_queues["add"].append(pac)
- if pac.dependencies:
- deps = pac.dependencies.split(", ")
- for dep in deps:
- if dep.count(">="):
- dep = dep.split(">=")[0]
+
+ 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:
@@ -466,22 +412,20 @@
_("%(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
+ 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)
+ self.database.set_pac_properties(pac)
+
pacs_queues["remove"].append(pac)
-
- if pac.req_by: #********************************************
- retcode = False
+ if pac.req_by:
req_pacs = []
for req in pac.req_by.split(", "):
if not (req in self.queues["remove"]):
@@ -496,13 +440,14 @@
else:
self.queues["remove"].remove(name)
pacs_queues["remove"].remove(pac)
- check = False
dlg.destroy()
- continue #**********************************************
-
- if check:
- retcode = self._confirm(pacs_queues)
-
+ 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)
@@ -526,20 +471,18 @@
self._refresh_trees()
self.queues["add"] = []
self.queues["remove"] = []
- if pacs_queues:
- for pac in pacs_queues["add"]:
- pac.installed = True
- self.database.set_pac_properties(pac)
- continue
- for pac in pacs_queues["remove"]:
- pac.installed = False
- self.database.set_pac_properties(pac)
- continue
- else:
- del(pacs_queues)
- stat_bar = self.gld.get_widget("statusbar")
- stat_bar.pop(self.stat_id)
- stat_bar.push(self.stat_id, _("Done."))
+ for pac in pacs_queues["add"]:
+ pac.installed = True
+ self.database.set_pac_properties(pac)
+ continue
+ for pac in pacs_queues["remove"]:
+ pac.installed = False
+ self.database.set_pac_properties(pac)
+ continue
+ del(pacs_queues)
+ stat_bar = self.gld.get_widget("statusbar")
+ stat_bar.pop(self.stat_id)
+ stat_bar.push(self.stat_id, _("Done."))
return
def about(self, widget, data=None):
@@ -555,16 +498,12 @@
self.popup.popdown()
def search(self, widget, data=None):
- keywords=""
dlg = search_dialog(self.gld.get_widget("main_win"), self.icon)
if dlg.run() == RESPONSE_ACCEPT:
keywords = dlg.entry.get_text()
dlg.destroy()
- if keywords:
- pacs = self.database.get_by_keywords(keywords)
- else:
- return
+ pacs = self.database.get_by_keywords(keywords)
repos_model = self.gld.get_widget("repos_tree").get_model()
if self.search_iter:
@@ -654,43 +593,15 @@
def upgrade_system(self, widget, data=None):
to_upgrade = []
- blacklist ={}
- options = self.database.options
for repo in self.database.values():
for pac in repo:
if pac.isold:
- to_upgrade.append(pac)
+ to_upgrade.append(pac)
continue
continue
if to_upgrade:
- counter = 0
- for pack in to_upgrade:
- counter += 1
- if pack.name in options['IgnorePkg']:
- blacklist[pack.name] = counter -1
-
- if blacklist:
- dlg = infoMessage(type=MESSAGE_WARNING
- , buttons= BUTTONS_YES_NO
- , msg='Found package(\'s) that are in IgnorePkg list.\nClick Yes to include them in to upgrade list\nClick NO to dele them from upgrade list.')
- dlg.set_title("Warning...")
-
- print '***Packages that are in IgnorePkg list***\n ', blacklist.keys()
-
- if dlg.run() == RESPONSE_YES:
- pass
- else:
- index = blacklist.values()
- index.sort()
- while index:
- to_del = index.pop()
- del to_upgrade[to_del]
- dlg.destroy()
-
- if to_upgrade:
-
confirm = self._upgrade_confirm(to_upgrade)
if confirm:
Binary files gtkpacman/gtkPacman/gui.pyc and gtkpacman-2.0/gtkPacman/gui.pyc differ
diff -uNr gtkpacman/gtkPacman/pacman.py gtkpacman-2.0/gtkPacman/pacman.py
--- gtkpacman/gtkPacman/pacman.py 2007-11-20 15:34:00.154003528 +0100
+++ gtkpacman-2.0/gtkPacman/pacman.py 2007-01-02 00:16:31.000000000 +0100
@@ -76,7 +76,7 @@
def __init__(self):
"""Init database"""
#Get repos present on machine
- self.repos, self.options = self._get_repos()
+ self.repos = self._get_repos()
self.set_pacs()
self.repos.sort()
@@ -91,12 +91,11 @@
conf_file_lines = conf_file.splitlines()
repos = []
- options = {} #********************************************************
for line in conf_file_lines:
if line.startswith("#"):
continue
- elif line.startswith("["):
+ if line.startswith("["):
begin = line.index("[") + len("[")
end = line.index("]")
repo = line[begin:end]
@@ -104,15 +103,8 @@
continue
else:
repos.append(repo)
- #continue
- elif line.startswith("HoldPkg") or line.startswith("IgnorePkg"):
- option = line.rstrip()
- split = option.split()
- del split[1]
- options[split[0]] = split[1:]
continue
-
- return repos, options
+ return repos
def _get_installed(self):
installed = os.listdir("/var/lib/pacman/local")
@@ -201,24 +193,11 @@
def set_pac_properties(self, pac):
"""Set the properties for the given pac"""
- from os.path import exists
-
- if pac.installed: # Jump in if package is installed
- path_old = '/var/lib/pacman/local/%s-%s'%(pac.name,pac.version)
- if pac.isold and exists(path_old):
- version = pac.version # After Upgrading, package use this
- repo = 'local'
- elif pac.isold:
- version = pac.inst_ver # Is installed but is old, (newer package is available)
- repo = "local"
- elif not pac.inst_ver == '-':
- version = pac.inst_ver # Is Installed (no more no less)
- repo = "local"
- elif pac.installed:
- version = pac.version # After package is installed, It uses this
- repo = 'local'
+ if pac.installed:
+ version = pac.inst_ver
+ repo = "local"
else:
- version = pac.version # Package not installed
+ version = pac.version
repo = pac.repo
pack_dir = "-".join((pac.name, version))
@@ -259,7 +238,7 @@
except ValueError:
begin = desc.index("%SIZE%") + len("%SIZE%")
- end = desc.index("\n\n", begin)
+ end = desc.index("%", begin)
size_s = desc[begin:end].strip()
size_int = int(size_s)
measure = "byte(s)"
@@ -296,12 +275,8 @@
return installdate
def _get_reason(self, desc):
- reason_int = ''
- try:
- begin = desc.index("%REASON%") + len("%REASON%")
- reason_int = int(desc[begin:].strip())
- except ValueError:
- pass
+ begin = desc.index("%REASON%") + len("%REASON%")
+ reason_int = int(desc[begin:].strip())
if reason_int:
reason = _("Installed as a dependency for another package")
@@ -310,16 +285,11 @@
return reason
- def _get_description(self, desc):
+ def _get_description(self, desc):
"""Set description for the given pac"""
- description = ''
- try:
- begin = desc.index("%DESC%") + len("%DESC%")
- end = desc.index("\n\n", begin)
- description = unicode(desc[begin:end].strip(), errors="ignore")
- except ValueError:
- pass
-
+ begin = desc.index("%DESC%") + len("%DESC%")
+ end = desc.index("%", begin)
+ description = unicode(desc[begin:end].strip(), errors="ignore")
return description
def _get_dependencies(self, path):
@@ -330,8 +300,8 @@
try:
begin = deps.index("%DEPENDS%") + len("%DEPENDS%")
except ValueError:
- return None
- end = deps.find("\n\n", begin) #- len("\n")
+ return ""
+ end = deps.find("%", begin) - len("%")
dependencies = deps[begin:end].strip()
depends = dependencies.split("\n")
deps = ", ".join(depends)
@@ -340,12 +310,9 @@
def _get_req_by(self, path):
"""Set list of packages that needs given pac"""
depends = open("%s/depends" %path).read()
-
- if "%REQUIREDBY%" in depends:
- begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
- end = depends.find("%", begin) - len("%")
- else:
- return
+
+ begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
+ end = depends.find("%", begin) - len("%")
reqs = depends[begin:end].strip().split("\n")
req_by = ", ".join(reqs)
@@ -356,16 +323,11 @@
if not pac.installed:
return _("%s is not installed") %pac.name
- try:
- files = open("%s/files" %path).read()
- except ValueError:
- return
-
- if files:
- begin = files.find("%FILES%") + len("%FILES%")
- end = files.find("\n\n", begin) - len("%")
- filelist = files[begin:end].strip()
- pac.filelist = filelist
+ files = open("%s/files" %path).read()
+ begin = files.index("%FILES%") + len("%FILES%")
+ end = files.find("%", begin) - len("%")
+ filelist = files[begin:end].strip()
+ pac.filelist = filelist
return
def set_orphans(self):
@@ -436,7 +398,7 @@
for pac in self[repo]:
if not pac.prop_setted:
self.set_pac_properties(pac)
- if pac.description.count(desc):
+ if pac.description.count(desc):
pacs.append(pac)
continue
continue
Binary files gtkpacman/gtkPacman/pacman.pyc and gtkpacman-2.0/gtkPacman/pacman.pyc differ
Binary files gtkpacman/gtkpacmanc and gtkpacman-2.0/gtkpacmanc differIf you patched gtkpacman with old patch I recomend to first reinstall gtkpacman and patch it with this patch.
remember! don't trust anyone above 30
Offline
Hi all,
i'm the author of gtkPacman. First of all, i'd like to thanks seti for it's work on gtkPacman while i was absent. I'll add your patches to the svn as soon as possible (with the old pc i've lost every password and/or ssh public key, so i've to configure some stuff before being able to work again on the berlios.de svn repo) and announce that a v3.0 of gtkpacman is being planned. It'll based on alpm (through some python bindings i'll write with pyrex). Seti, if you're intersted in developing/maintaining gtkPacman, please contact me to stefano.esposito87@gmail.com.
P.S.: it's nice to be back with a pc from my place XD
"There's only two thing infinite: the universe and the human stupidity... and i'm not sure about universe"
Albert Einstein
gtkPacman - PyGTK package manager based on pacman
https://gtkpacman.berlios.de
Offline
Hi everyone.
I found out that above patch don't work for some reason, here is a working patch.
diff -uNr a/gtkpacman-2.0/data/gtkpacman.glade b/gtkpacman-2.0/data/gtkpacman.glade
--- a/gtkpacman-2.0/data/gtkpacman.glade 2006-12-30 09:55:26.000000000 -0800
+++ b/gtkpacman-2.0/data/gtkpacman.glade 2007-11-27 04:22:39.000000000 -0800
@@ -10,7 +10,7 @@
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="default_width">650</property>
- <property name="default_height">433</property>
+ <property name="default_height">500</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
@@ -891,34 +891,6 @@
</child>
</widget>
</child>
-
- <child>
- <widget class="GtkSeparatorMenuItem" id="separator6">
- <property name="visible">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkImageMenuItem" id="search">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Search</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="search" last_modification_time="Tue, 18 Apr 2006 11:01:36 GMT"/>
- <accelerator key="S" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
- <child internal-child="image">
- <widget class="GtkImage" id="image71">
- <property name="visible">True</property>
- <property name="stock">gtk-find</property>
- <property name="icon_size">1</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- </child>
- </widget>
- </child>
</widget>
</glade-interface>
diff -uNr a/gtkpacman-2.0/gtkPacman/dialogs.py b/gtkpacman-2.0/gtkPacman/dialogs.py
--- a/gtkpacman-2.0/gtkPacman/dialogs.py 2007-01-01 15:15:51.000000000 -0800
+++ b/gtkpacman-2.0/gtkPacman/dialogs.py 2007-11-30 06:54:30.000000000 -0800
@@ -26,8 +26,8 @@
from gtk import STOCK_CLOSE, STOCK_OK, STOCK_CANCEL, STOCK_GO_FORWARD
from gtk import STOCK_APPLY, STOCK_REMOVE, STOCK_YES, STOCK_NO, STOCK_OPEN
from gtk import DIALOG_MODAL, DIALOG_DESTROY_WITH_PARENT
-from gtk import MESSAGE_WARNING, FILE_CHOOSER_ACTION_OPEN
-from gtk import BUTTONS_CLOSE, MESSAGE_ERROR
+from gtk import MESSAGE_WARNING, FILE_CHOOSER_ACTION_OPEN, MESSAGE_INFO
+from gtk import BUTTONS_CLOSE, MESSAGE_ERROR, BUTTONS_YES_NO
from gtk import RESPONSE_ACCEPT, RESPONSE_REJECT, RESPONSE_YES, RESPONSE_CLOSE
from gtk import image_new_from_stock, ICON_SIZE_BUTTON, ICON_SIZE_DIALOG
from gtk import main_iteration, expander_new_with_mnemonic
@@ -236,14 +236,17 @@
class do_dialog(Window):
def __init__(self, queues, icon):
+ self.size = ()
Window.__init__(self, WINDOW_TOPLEVEL)
self.set_property("skip-taskbar-hint", True)
self.set_property("destroy-with-parent", True)
+ #self.set_property("resizable", False)
+
self.set_modal(True)
self.connect("delete-event", self._stop_closing)
self.set_position(WIN_POS_CENTER)
-
+
self.set_icon(pixbuf_new_from_file(icon))
self._setup_trees(queues)
self._setup_layout()
@@ -326,8 +329,11 @@
self.terminal.connect("child-exited", lambda _: self.close_button.show())
self.expander = Expander(_("Terminal"))
- self.expander.add(self.terminal)
- self.expander.show_all()
+ self.expander.connect("notify::expanded", self.expanderCb)
+
+ #self.expander.add(self.terminal)
+ #self.expander.show_all()
+ self.expander.show()
self.vbox = VBox(False, 0)
self.vbox.show()
@@ -347,7 +353,17 @@
def _stop_closing(self, widget, event):
self.stop_emission("delete-event")
- return True
+ return True
+
+ def expanderCb(self, widget, event, data=None):
+ if self.expander.get_expanded():
+ self.size = self.get_size()
+ self.expander.add(self.terminal)
+ self.terminal.show()
+ else:
+ self.expander.remove(self.terminal)
+ self.resize(self.size[0], self.size[1])
+ self.show_all()
class local_install_fchooser_dialog(FileChooserDialog):
@@ -430,14 +446,19 @@
self.set_property("skip-taskbar-hint", True)
self.set_property("modal", True)
self.set_property("destroy-with-parent", True)
+ #self.set_property("resizable", False)
self.set_position(WIN_POS_CENTER)
self.set_default_size (300, 300)
+ self.unrealize()
+
+ #self.set_resizable(True)
self.set_icon(pixbuf_new_from_file(icon))
self._setup_tree(to_upgrade)
self._setup_layout()
def _setup_layout(self):
+ self.size = ()
self.vbox = VBox(False, 0)
self.vbox.show()
@@ -445,9 +466,12 @@
self.terminal.connect("child-exited", lambda _: self.close_button.show())
self.expander = expander_new_with_mnemonic(_("_Terminal"))
+ self.expander.connect("notify::expanded", self.expanderCb)
+
self.expander.set_expanded(False)
- self.expander.add(self.terminal)
- self.expander.show_all()
+ #self.expander.add(self.terminal)
+ #self.expander.show_all()
+ self.expander.show()
self.close_button = Button(stock=STOCK_CLOSE)
self.close_button.connect("clicked", lambda _: self.destroy())
@@ -468,6 +492,16 @@
self.add(self.vbox)
return
+
+ def expanderCb(self, widget, event, data=None):
+ if self.expander.get_expanded():
+ self.size = self.get_size()
+ self.expander.add(self.terminal)
+ self.terminal.show()
+ else:
+ self.expander.remove(self.terminal)
+ self.resize(self.size[0], self.size[1])
+ self.show_all()
def _setup_tree(self, pacs):
self.model = ListStore(str, str, str)
@@ -590,3 +624,16 @@
DIALOG_MODAL | DIALOG_DESTROY_WITH_PARENT,
MESSAGE_ERROR, BUTTONS_CLOSE, msg)
self.set_icon(pixbuf_new_from_file(icon))
+
+class infoMessage(MessageDialog):
+
+ def __init__(self, type=None, buttons=None, msg=None):
+
+ MessageDialog.__init__(self
+ , None
+ , DIALOG_MODAL | DIALOG_DESTROY_WITH_PARENT
+ , type
+ , buttons
+ , message_format=msg)
+ self.set_position(WIN_POS_CENTER)
+
\ No newline at end of file
diff -uNr a/gtkpacman-2.0/gtkPacman/gui.py b/gtkpacman-2.0/gtkPacman/gui.py
--- a/gtkpacman-2.0/gtkPacman/gui.py 2007-01-01 15:16:03.000000000 -0800
+++ b/gtkpacman-2.0/gtkPacman/gui.py 2008-01-11 19:55:44.000000000 -0800
@@ -21,7 +21,8 @@
from gtk import main, main_quit, TreeStore, TreeView, ListStore, Button
from gtk import CellRendererText, CellRendererPixbuf, ScrolledWindow
from gtk import STOCK_ADD, STOCK_GO_UP, STOCK_REMOVE, STOCK_CLOSE
-from gtk import RESPONSE_YES, RESPONSE_ACCEPT
+from gtk import RESPONSE_YES, RESPONSE_ACCEPT, MESSAGE_INFO, BUTTONS_CLOSE
+from gtk import MESSAGE_WARNING, BUTTONS_YES_NO
from gtk.gdk import pixbuf_new_from_file
from gtk.glade import XML
@@ -29,7 +30,7 @@
from dialogs import confirm_dialog, search_dialog, upgrade_dialog
from dialogs import upgrade_confirm_dialog, local_install_dialog
from dialogs import local_install_fchooser_dialog, local_confirm_dialog
-from dialogs import command_dialog, error_dialog
+from dialogs import command_dialog, error_dialog, infoMessage
from models import installed_list, all_list, whole_list, search_list, file_list
@@ -90,7 +91,7 @@
self.gld.get_widget("immediate").set_sensitive(False)
self.gld.get_widget("add_install").set_sensitive(False)
self.gld.get_widget("remove_install").set_sensitive(False)
- self.gld.get_widget("add_remove").set_sensitive(False)
+ self.gld.get_widget("add_remove").set_sensitive(False)
self.gld.get_widget("remove_remove").set_sensitive(False)
self.gld.get_widget("execute").set_sensitive(False)
self.gld.get_widget("up_sys").set_sensitive(False)
@@ -100,6 +101,7 @@
self.popup_gld.get_widget("popup_remove_install").set_sensitive(False)
self.popup_gld.get_widget("popup_add_remove").set_sensitive(False)
self.popup_gld.get_widget("popup_remove_remove").set_sensitive(False)
+ pass
def _adjust_queues (self):
for name in self.queues["add"]:
@@ -174,7 +176,7 @@
if repo == "foreigners":
continue
repo_it = repos_model.append(all_it, [repo])
- repos_model.append(repo_it, [_("all")])
+ #repos_model.append(repo_it, [_("all")])
repos_model.append(repo_it, [_("installed")])
continue
@@ -183,6 +185,7 @@
repos_tree.insert_column_with_attributes(-1, "", CellRendererText(),
text=0)
repos_tree.set_model(repos_model)
+ repos_tree.expand_row(0, False)
return
def _setup_files_tree(self):
@@ -229,8 +232,7 @@
except AttributeError:
pass
continue
- return
-
+ return
def _refresh_model(self, model, submodel=None):
if submodel:
liststore = self.models[model][submodel]
@@ -246,7 +248,7 @@
row[0] = "red"
row[3] = "-"
continue
- return
+ return
def quit(self, widget, data=None):
main_quit()
@@ -269,9 +271,10 @@
-1, "", CellRendererText(), text=5
)
if not self.inst_ver_col:
- self.inst_ver_col = pacs_tree.insert_column_with_atrributes(
- -1, "", CellRendererText(), text=4
- )
+ #self.inst_ver_col = pacs_tree.insert_column_with_atrributes(
+ # -1, "", CellRendererText(), text=4
+ # )
+ pass
elif selected == _("foreigners"):
if self.repo_col:
@@ -323,10 +326,27 @@
def add_to_install_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
-
+
+ if not l_iter:
+ return
name = model.get_value(l_iter, 2)
+
if name in self.queues["add"]:
return
+
+ if name in self.database.options['IgnorePkg']:
+ dlg = infoMessage(type=MESSAGE_WARNING
+ , buttons= BUTTONS_YES_NO
+ , msg='\"%s\" is listed as IgnorePkg.\nAdd it to install queue anyway?' % name)
+ dlg.set_title("Warning...")
+
+ if dlg.run() == RESPONSE_YES:
+ pass
+ else:
+ dlg.destroy()
+ return
+ dlg.destroy()
+
if name in self.queues["remove"]:
self.queues["remove"].remove(name)
@@ -342,6 +362,9 @@
def remove_from_install_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
+
+ if not l_iter:
+ return
name = model.get_value(l_iter, 2)
if not (name in self.queues["add"]):
@@ -354,8 +377,25 @@
def add_to_remove_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
+
+ if not l_iter:
+ return
name = model.get_value(l_iter, 2)
+ if name in self.database.options['HoldPkg']:
+ dlg = infoMessage(type=MESSAGE_WARNING
+ , buttons= BUTTONS_YES_NO
+ , msg='\"%s\" is designated as HoldPkg.\nAdd it to remove queue anyway?' % name)
+ dlg.set_title("Warning...")
+
+ if dlg.run() == RESPONSE_YES:
+ pass
+ else:
+ dlg.destroy()
+ return
+ dlg.destroy()
+
+
if name in self.queues["remove"]:
return
@@ -374,8 +414,12 @@
def remove_from_remove_queue(self, widget, data=None):
tree = self.gld.get_widget("pacs_tree")
model, l_iter = tree.get_selection().get_selected()
+
+ if not l_iter:
+ return
name = model.get_value(l_iter, 2)
+
if not (name in self.queues["remove"]):
return
@@ -384,8 +428,19 @@
return
def execute(self, widget, data=None):
+ check = True
pacs_queues = { "add": [], "remove": [] }
+ if not (self.queues["add"] or self.queues["remove"]):# Jump in if no packages ware added to add / remove list
+ dlg = infoMessage(type=MESSAGE_INFO
+ , buttons= BUTTONS_CLOSE
+ , msg='Nothing to do.\nAdd package to queue list first.')
+ dlg.set_title("Info...")
+ dlg.run()
+ dlg.destroy()
+ #self._refresh_trees_and_queues()
+ return
+
for name in self.queues["add"]:
try:
pac = self.database.get_by_name(name)
@@ -399,12 +454,11 @@
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]
-
+ if pac.dependencies:
+ 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:
@@ -412,20 +466,22 @@
_("%(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
+ 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)
-
+ self.database.set_pac_properties(pac)
pacs_queues["remove"].append(pac)
- if pac.req_by:
+
+ if pac.req_by: #********************************************
+ retcode = False
req_pacs = []
for req in pac.req_by.split(", "):
if not (req in self.queues["remove"]):
@@ -440,14 +496,13 @@
else:
self.queues["remove"].remove(name)
pacs_queues["remove"].remove(pac)
+ check = False
dlg.destroy()
- continue
-
- if not (pacs_queues["add"] or pacs_queues["remove"]):
- self._refresh_trees_and_queues()
- return
-
- retcode = self._confirm(pacs_queues)
+ continue #**********************************************
+
+ if check:
+ retcode = self._confirm(pacs_queues)
+
if retcode:
stat_bar = self.gld.get_widget("statusbar")
stat_bar.pop(self.stat_id)
@@ -471,18 +526,20 @@
self._refresh_trees()
self.queues["add"] = []
self.queues["remove"] = []
- for pac in pacs_queues["add"]:
- pac.installed = True
- self.database.set_pac_properties(pac)
- continue
- for pac in pacs_queues["remove"]:
- pac.installed = False
- self.database.set_pac_properties(pac)
- continue
- del(pacs_queues)
- stat_bar = self.gld.get_widget("statusbar")
- stat_bar.pop(self.stat_id)
- stat_bar.push(self.stat_id, _("Done."))
+ if pacs_queues:
+ for pac in pacs_queues["add"]:
+ pac.installed = True
+ self.database.set_pac_properties(pac)
+ continue
+ for pac in pacs_queues["remove"]:
+ pac.installed = False
+ self.database.set_pac_properties(pac)
+ continue
+ else:
+ del(pacs_queues)
+ stat_bar = self.gld.get_widget("statusbar")
+ stat_bar.pop(self.stat_id)
+ stat_bar.push(self.stat_id, _("Done."))
return
def about(self, widget, data=None):
@@ -498,12 +555,16 @@
self.popup.popdown()
def search(self, widget, data=None):
+ keywords=""
dlg = search_dialog(self.gld.get_widget("main_win"), self.icon)
if dlg.run() == RESPONSE_ACCEPT:
keywords = dlg.entry.get_text()
dlg.destroy()
- pacs = self.database.get_by_keywords(keywords)
+ if keywords:
+ pacs = self.database.get_by_keywords(keywords)
+ else:
+ return
repos_model = self.gld.get_widget("repos_tree").get_model()
if self.search_iter:
@@ -593,15 +654,40 @@
def upgrade_system(self, widget, data=None):
to_upgrade = []
+ blacklist ={}
+ options = self.database.options
for repo in self.database.values():
for pac in repo:
if pac.isold:
- to_upgrade.append(pac)
+ to_upgrade.append(pac)
continue
continue
if to_upgrade:
+ counter = 0
+ for pack in to_upgrade:
+ counter += 1
+ if pack.name in options['IgnorePkg']:
+ blacklist[pack.name] = counter -1
+
+ if blacklist > 0:
+ dlg = infoMessage(type=MESSAGE_WARNING
+ , buttons= BUTTONS_YES_NO
+ , msg='Found package(\'s) that are listed as IgnorePkg.\nClick Yes to include them in to upgrade list\nClick NO to delete them from upgrade list.')
+ dlg.set_title("Warning...")
+
+ print '***Packages that are listed as IgnorePkg:***\n ', blacklist.keys()
+
+ if dlg.run() == RESPONSE_YES:
+ pass
+ else:
+ for index in blacklist.values():
+ del to_upgrade[index]
+ dlg.destroy()
+
+ if to_upgrade:
+
confirm = self._upgrade_confirm(to_upgrade)
if confirm:
diff -uNr a/gtkpacman-2.0/gtkPacman/pacman.py b/gtkpacman-2.0/gtkPacman/pacman.py
--- a/gtkpacman-2.0/gtkPacman/pacman.py 2007-01-01 15:16:31.000000000 -0800
+++ b/gtkpacman-2.0/gtkPacman/pacman.py 2008-01-11 18:31:07.000000000 -0800
@@ -76,7 +76,7 @@
def __init__(self):
"""Init database"""
#Get repos present on machine
- self.repos = self._get_repos()
+ self.repos, self.options = self._get_repos()
self.set_pacs()
self.repos.sort()
@@ -91,11 +91,12 @@
conf_file_lines = conf_file.splitlines()
repos = []
+ options = {'HoldPkg':'', 'IgnorePkg':''}
for line in conf_file_lines:
if line.startswith("#"):
continue
- if line.startswith("["):
+ elif line.startswith("["):
begin = line.index("[") + len("[")
end = line.index("]")
repo = line[begin:end]
@@ -103,8 +104,15 @@
continue
else:
repos.append(repo)
+ #continue
+ elif line.startswith("HoldPkg") or line.startswith("IgnorePkg"):
+ option = line.rstrip()
+ split = option.split()
+ del split[1]
+ options[split[0]] = split[1:]
continue
- return repos
+
+ return repos, options
def _get_installed(self):
installed = os.listdir("/var/lib/pacman/local")
@@ -193,11 +201,24 @@
def set_pac_properties(self, pac):
"""Set the properties for the given pac"""
- if pac.installed:
- version = pac.inst_ver
- repo = "local"
+ from os.path import exists
+
+ if pac.installed: # Jump in if package is installed
+ path_old = '/var/lib/pacman/local/%s-%s'%(pac.name,pac.version)
+ if pac.isold and exists(path_old):
+ version = pac.version # After Upgrading, package use this
+ repo = 'local'
+ elif pac.isold:
+ version = pac.inst_ver # Is installed but is old, (newer package is available)
+ repo = "local"
+ elif not pac.inst_ver == '-':
+ version = pac.inst_ver # Is Installed (no more no less)
+ repo = "local"
+ elif pac.installed:
+ version = pac.version # After package is installed, It uses this
+ repo = 'local'
else:
- version = pac.version
+ version = pac.version # Package not installed
repo = pac.repo
pack_dir = "-".join((pac.name, version))
@@ -238,7 +259,7 @@
except ValueError:
begin = desc.index("%SIZE%") + len("%SIZE%")
- end = desc.index("%", begin)
+ end = desc.index("\n\n", begin)
size_s = desc[begin:end].strip()
size_int = int(size_s)
measure = "byte(s)"
@@ -275,8 +296,12 @@
return installdate
def _get_reason(self, desc):
- begin = desc.index("%REASON%") + len("%REASON%")
- reason_int = int(desc[begin:].strip())
+ reason_int = ''
+ try:
+ begin = desc.index("%REASON%") + len("%REASON%")
+ reason_int = int(desc[begin:].strip())
+ except ValueError:
+ pass
if reason_int:
reason = _("Installed as a dependency for another package")
@@ -285,11 +310,16 @@
return reason
- def _get_description(self, desc):
+ def _get_description(self, desc):
"""Set description for the given pac"""
- begin = desc.index("%DESC%") + len("%DESC%")
- end = desc.index("%", begin)
- description = unicode(desc[begin:end].strip(), errors="ignore")
+ description = ''
+ try:
+ begin = desc.index("%DESC%") + len("%DESC%")
+ end = desc.index("\n\n", begin)
+ description = unicode(desc[begin:end].strip(), errors="ignore")
+ except ValueError:
+ pass
+
return description
def _get_dependencies(self, path):
@@ -300,8 +330,8 @@
try:
begin = deps.index("%DEPENDS%") + len("%DEPENDS%")
except ValueError:
- return ""
- end = deps.find("%", begin) - len("%")
+ return None
+ end = deps.find("\n\n", begin) #- len("\n")
dependencies = deps[begin:end].strip()
depends = dependencies.split("\n")
deps = ", ".join(depends)
@@ -310,9 +340,12 @@
def _get_req_by(self, path):
"""Set list of packages that needs given pac"""
depends = open("%s/depends" %path).read()
-
- begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
- end = depends.find("%", begin) - len("%")
+
+ if "%REQUIREDBY%" in depends:
+ begin = depends.find("%REQUIREDBY%") + len("%REQUIREDBY%")
+ end = depends.find("%", begin) - len("%")
+ else:
+ return
reqs = depends[begin:end].strip().split("\n")
req_by = ", ".join(reqs)
@@ -323,11 +356,16 @@
if not pac.installed:
return _("%s is not installed") %pac.name
- files = open("%s/files" %path).read()
- begin = files.index("%FILES%") + len("%FILES%")
- end = files.find("%", begin) - len("%")
- filelist = files[begin:end].strip()
- pac.filelist = filelist
+ try:
+ files = open("%s/files" %path).read()
+ except ValueError:
+ return
+
+ if files:
+ begin = files.find("%FILES%") + len("%FILES%")
+ end = files.find("\n\n", begin) - len("%")
+ filelist = files[begin:end].strip()
+ pac.filelist = filelist
return
def set_orphans(self):
@@ -398,7 +436,7 @@
for pac in self[repo]:
if not pac.prop_setted:
self.set_pac_properties(pac)
- if pac.description.count(desc):
+ if pac.description.count(desc):
pacs.append(pac)
continue
continueTo apply this patch, copy 'patch.diff' to same folder where gtkpacman-2.0 is and 'patch -Np1 -i patch.diff' in terminal.
Not really sure if this patch is needed here, ragnarok is back and he will apply it directly to gtkPacman.
remember! don't trust anyone above 30
Offline
I'm posting here a small patch, I'm still waiting for ragnarok to apply it to cvs.
::Showing 'Required by' should finally work.
::Fixed issue when installing package dependences, they ware installed explicitly and not as dependency for another package.
First patch is for pacman.py
--- svn/trunk/gtkPacman/pacman.py 2008-02-01 18:50:03.000000000 -0800
+++ svn-b/trunk/gtkPacman/pacman.py 2008-02-16 12:58:37.000000000 -0800
@@ -46,6 +46,7 @@
self.req_by = ""
self.dependencies = ""
self.prop_setted = False
+ self.flag = None
def set_version(self, version):
"""Set package's version"""
@@ -191,6 +192,7 @@
def set_pacs(self):
"""Grab all pacs from machine db, instatiate a package obj for each
of them and order them by cols"""
+ self["local"] = []
self.inst_pacs = self._get_installed()
for repo in self.repos:
@@ -201,7 +203,11 @@
for pac in pacs:
pac_obj = self._make_pac(pac, repo)
- self[repo].append(pac_obj)
+ if pac_obj.installed:
+ self[repo].append(pac_obj)
+ self["local"].append(pac_obj)
+ else:
+ self[repo].append(pac_obj)
continue
continue
@@ -213,44 +219,39 @@
ver = self.inst_pacs[pac]
self["foreigners"].append(package(pac, ver, ver, "foreigners"))
return
-
+
def set_pac_properties(self, pac):
"""Set the properties for the given pac"""
- if pac.installed:
- version = pac.inst_ver
- repo = "local"
- else:
- version = pac.version
- repo = pac.repo
-
- pack_dir = "-".join((pac.name, version))
- if not (self.ver[0] == 3 and self.ver[1] == 1) and repo == "local":
- path_to_db = "/var/lib/pacman"
- else:
- path_to_db = "/var/lib/pacman/sync"
- path = "%s/%s/%s" %(path_to_db, repo, pack_dir)
- self._set_summary(pac, path)
- self._set_filelist(pac, path)
+ if pac.installed:
+ raw_desc = self._get_raw_desc(pac, "desc")
+ raw_depends = self._get_raw_desc(pac, "depends")
+ raw_files = self._get_raw_desc(pac, "files")
+
+ pac.req_by = self._search_raw_desc(pac.name, None)
+ self._set_filelist(pac, raw_files)
+ else:
+ raw_desc = self._get_raw_desc(pac, "desc")
+ raw_depends = self._get_raw_desc(pac, "depends")
+
+ self._set_summary(pac, raw_desc, raw_depends)
+
pac.prop_setted = True
- return
- def _set_summary(self, pac, path):
-
- desc_file = open("%s/desc" %path).read()
+ def _set_summary(self, pac, raw_desc, raw_depends=None):
- desc = self._get_description(desc_file)
- deps = self._get_dependencies(path)
- size = self._get_size(desc_file)
+ desc = self._get_description(raw_desc)
+ deps = self._get_dependencies(raw_depends)
+ size = self._get_size(raw_desc)
if pac.installed:
- req_by = self._get_req_by(path)
- packager = self._get_packager(desc_file)
- builddate = self._get_builddate(desc_file)
- installdate = self._get_installdate(desc_file)
- reason = self._get_reason(desc_file)
+ if not pac.req_by:
+ pac.req_by = self._get_req_by(raw_depends)
+ packager = self._get_packager(raw_desc)
+ builddate = self._get_builddate(raw_desc)
+ installdate = self._get_installdate(raw_desc)
+ reason = self._get_reason(raw_desc)
- summary = _("Description: %s\nDepends on: %s\nRequired by: %s\nSize: %s\nPackager: %s\nBuilt: %s\nInstalled: %s\nReason: %s") %(desc, deps, req_by, size, packager, builddate, installdate, reason)
- pac.req_by = req_by
+ summary = _("Description: %s\nDepends on: %s\nRequired by: %s\nSize: %s\nPackager: %s\nBuilt: %s\nInstalled: %s\nReason: %s") %(desc, deps, pac.req_by, size, packager, builddate, installdate, reason)
else:
summary = _("Description: %s\nDepends on: %s\nSize (compressed): %s") %(desc, deps, size)
@@ -340,9 +341,9 @@
pass
return ''
- def _get_dependencies(self, path):
+ def _get_dependencies(self, deps):
"""Set dependencies list for the given pac"""
- deps = open("%s/depends" %path).read()
+ #deps = open("%s/depends" %path).read()
dependencies = []
try:
@@ -355,9 +356,9 @@
deps = ", ".join(depends)
return deps
- def _get_req_by(self, path):
+ def _get_req_by(self, depends):
"""Set list of packages that needs given pac"""
- depends = open("%s/depends" %path).read()
+ #depends = open("%s/depends" %path).read()
try:
begin = depends.index("%REQUIREDBY%") + len("%REQUIREDBY%")
@@ -369,13 +370,13 @@
req_by = ", ".join(reqs)
return req_by
- def _set_filelist(self, pac, path):
+ def _set_filelist(self, pac, files):
"""Set installed files list for the given pac"""
if not pac.installed:
return _("%s is not installed") %pac.name
try:
- files = open("%s/files" %path).read()
+ #files = open("%s/files" %path).read()
begin = files.index("%FILES%") + len("%FILES%")
end = files.find("%", begin) - len("%")
filelist = files[begin:end].strip()
@@ -446,13 +447,56 @@
continue
return
+ def _get_raw_desc(self, pac, to_get):
+ if pac.installed:
+ version = pac.inst_ver
+ repo = "local"
+ else:
+ version = pac.version
+ repo = pac.repo
+
+ if not (self.ver[0] == 3 and self.ver[1] == 1) and repo == "local":
+ path_to_db = "/var/lib/pacman"
+ else:
+ path_to_db = "/var/lib/pacman/sync"
+
+ pack_dir = "-".join((pac.name, version))
+ path = "%s/%s/%s" %(path_to_db, repo, pack_dir)
+
+ try:
+ raw_file = open("%s/%s" %(path, to_get)).read()
+ except IOError:
+ print "Warning: can't open %path" %path
+
+ return raw_file
+
+ def _search_raw_desc(self, pac, search):
+ if search:
+ raw_desc = self._get_raw_desc(pac, "desc")
+ desc = self._get_description(raw_desc)
+ return desc
+ else:
+ stack = []
+ req = ""
+ for package in self["local"]:
+ if not package.req_by:
+ raw_desc = self._get_raw_desc(package, "depends")
+ req_by = self._get_dependencies(raw_desc)
+ if pac in req_by and package.name not in stack:
+ stack.append(package.name)
+ if stack:
+ for name in stack:
+ req = req + ", " + name
+ req = req[2:]
+ return req
+
def get_by_desc(self, desc):
"""Return pacs which description match with desc"""
pacs = []
for repo in self.repos:
for pac in self[repo]:
- if not pac.prop_setted:
- self.set_pac_properties(pac)
+ if not pac.description:
+ pac.description = self._search_raw_desc(pac, True)
if pac.description.count(desc):
pacs.append(pac)
continueSecond patch is for terminal.py
--- svn/trunk/gtkPacman/terminal.py 2008-01-29 03:56:05.000000000 -0800
+++ svn-b/trunk/gtkPacman/terminal.py 2008-02-16 10:53:49.000000000 -0800
@@ -26,34 +26,44 @@
self.set_sensitive(False)
def do(self, queues):
- names_queues = { "add": [], "remove": []}
+ names_queues = { "add": [], "add_dep":[], "remove": []}
+ commands = []
for pac in queues["add"]:
- names_queues["add"].append(pac.name)
+ if pac.flag == 11:
+ names_queues["add_dep"].append(pac.name)
+ else:
+ names_queues["add"].append(pac.name)
continue
for pac in queues["remove"]:
names_queues["remove"].append(pac.name)
continue
inst_pacs = " ".join(names_queues["add"])
+ inst_pacs_dep = " ".join(names_queues["add_dep"])
rem_pacs = " ".join(names_queues["remove"])
pacman = "pacman --noconfirm"
-
- if inst_pacs and rem_pacs:
- command = "%s -Sdf %s;%s -Rdf %s;exit\n" %(pacman, inst_pacs, pacman, rem_pacs)
-
- elif inst_pacs:
- command = "%s -Sdf %s;exit\n" %(pacman, inst_pacs)
-
- elif rem_pacs:
- command = "%s -Rdf %s;exit\n" %(pacman, rem_pacs)
-
- else:
- command = "exit\n"
+ if inst_pacs:
+ cmd_inst_pacs = "%s -Sdf %s\n" %(pacman, inst_pacs)
+ commands.append(cmd_inst_pacs)
+
+ if inst_pacs_dep:
+ cmd_inst_dep = "%s -Sdf --asdep %s\n" %(pacman, inst_pacs_dep)
+ commands.append(cmd_inst_dep)
+
+ if rem_pacs:
+ cmd_rem_pacs = "%s -Rdf %s\n" %(pacman, rem_pacs)
+ commands.append(cmd_rem_pacs)
+
+ cmd = "exit\n"
+ commands.append(cmd)
+
self.fork_command()
- self.feed_child(command)
+ while commands:
+ execute = commands.pop(0)
+ self.feed_child(execute)
def do_local(self, fname, queues):
names_queues = { "add": [], "remove": []}Last edited by seti (2008-03-04 17:49:41)
remember! don't trust anyone above 30
Offline