You are not logged in.

#1 2007-06-23 16:23:55

KomodoDave
Member
From: Oxford, UK
Registered: 2007-04-22
Posts: 162
Website

gtkpacman-svn - search fails to function

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 found

Any idea what's wrong?

- Dave

Offline

#2 2007-06-23 16:59:51

shining
Pacman Developer
Registered: 2006-05-10
Posts: 2,043

Re: gtkpacman-svn - search fails to function

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

#3 2007-06-23 17:24:20

KomodoDave
Member
From: Oxford, UK
Registered: 2007-04-22
Posts: 162
Website

Re: gtkpacman-svn - search fails to function

shining wrote:

It was already said there :
http://aur.archlinux.org/packages.php?d … s=0&SeB=nd

You could try contacting the author (ragnarok) directly.

Pants, well noticed smile I'll try contacting him.

- Dave

Offline

#4 2007-07-22 15:30:30

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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 tongue

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

#5 2007-07-22 18:07:14

shining
Pacman Developer
Registered: 2006-05-10
Posts: 2,043

Re: gtkpacman-svn - search fails to function

seti wrote:

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.diff

Last edited by shining (2007-07-22 18:08:01)


pacman roulette : pacman -S $(pacman -Slq | LANG=C sort -R | head -n $((RANDOM % 10)))

Offline

#6 2007-07-22 21:38:34

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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

#7 2007-07-23 00:21:42

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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 hmm

PEACE OUT


remember! don't trust anyone above 30

Offline

#8 2007-07-23 08:11:37

shining
Pacman Developer
Registered: 2006-05-10
Posts: 2,043

Re: gtkpacman-svn - search fails to function

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

#9 2007-07-23 16:54:59

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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

#10 2007-07-23 17:30:06

shining
Pacman Developer
Registered: 2006-05-10
Posts: 2,043

Re: gtkpacman-svn - search fails to function

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 smile


pacman roulette : pacman -S $(pacman -Slq | LANG=C sort -R | head -n $((RANDOM % 10)))

Offline

#11 2007-07-23 17:42:54

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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 wink

Last edited by seti (2007-07-23 17:47:17)


remember! don't trust anyone above 30

Offline

#12 2007-07-23 18:23:26

atlas95
Member
Registered: 2007-02-11
Posts: 98

Re: gtkpacman-svn - search fails to function

Could you edit the aur pkgbuild with the patchs? Thanks smile

Offline

#13 2007-07-24 11:03:30

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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

#14 2007-07-24 16:17:11

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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

#15 2007-10-18 01:10:06

killajoe
Member
From: Berlin Planet Earth
Registered: 2007-07-04
Posts: 168
Website

Re: gtkpacman-svn - search fails to function

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

#16 2007-11-01 13:21:45

killajoe
Member
From: Berlin Planet Earth
Registered: 2007-07-04
Posts: 168
Website

Re: gtkpacman-svn - search fails to function

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

#17 2007-12-01 12:46:30

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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 differ

If 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

#18 2008-01-11 10:39:11

ragnarok
Member
From: Naples - Italy
Registered: 2005-08-16
Posts: 42
Website

Re: gtkpacman-svn - search fails to function

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

#19 2008-01-11 19:14:41

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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
             continue

To 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

#20 2008-03-04 17:48:59

seti
Member
Registered: 2007-07-22
Posts: 13

Re: gtkpacman-svn - search fails to function

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)
                 continue

Second 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

Board footer

Powered by FluxBB