summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2010-04-09 23:43:44 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2010-04-09 23:43:44 +0200
commitd8c4bacde00e2be0e5d5aaf7f85f139aae6a95d6 (patch)
tree12f088e6c07b690cccbcc073b744dc5760713918
parent3cc84485184c1662fabb53f35df43a539021ff93 (diff)
parent359309950a1283dbbf9df6ce1085838087cfc262 (diff)
downloadportato-no_config.tar.gz
portato-no_config.tar.bz2
portato-no_config.zip
Merge branch 'master' into no_config to pickup the recent changes andno_config
fixes. Conflicts: portato/db/__init__.py portato/session.py
l---------TRANSLATORS1
-rw-r--r--doc/NEWS3
-rw-r--r--i18n/de.po145
-rw-r--r--i18n/messages.pot127
-rw-r--r--portato/db/__init__.py94
-rw-r--r--portato/db/database.py2
-rw-r--r--portato/db/exceptions.py24
-rw-r--r--portato/db/sql.py4
-rw-r--r--portato/gui/dialogs.py18
-rw-r--r--portato/gui/exception_handling.py4
-rw-r--r--portato/gui/templates/AboutWindow.ui7
-rw-r--r--portato/gui/templates/MailInfoWindow.ui38
-rw-r--r--portato/gui/windows/about.py8
-rw-r--r--portato/gui/windows/basic.py3
-rw-r--r--portato/gui/windows/mailinfo.py137
-rw-r--r--portato/gui/windows/main.py19
-rw-r--r--portato/session.py12
-rw-r--r--setup.py3
18 files changed, 420 insertions, 229 deletions
diff --git a/TRANSLATORS b/TRANSLATORS
new file mode 120000
index 0000000..d2e7d0b
--- /dev/null
+++ b/TRANSLATORS
@@ -0,0 +1 @@
+doc/TRANSLATORS \ No newline at end of file
diff --git a/doc/NEWS b/doc/NEWS
index a5d3186..a07108d 100644
--- a/doc/NEWS
+++ b/doc/NEWS
@@ -3,6 +3,9 @@ next:
- allow eix as backend DB
- use an internal messagequeue module instead of external shm
- show the list of world packages
+- allow to search descriptions
+- add an icon to signal the 'best' version for a package
+- added Italian translation (thx to Ponsi)
0.13.1:
- fix segfault in GLib
diff --git a/i18n/de.po b/i18n/de.po
index b7add36..9935870 100644
--- a/i18n/de.po
+++ b/i18n/de.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Portato\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-05 21:26+0100\n"
-"PO-Revision-Date: 2010-03-05 21:27+0100\n"
+"POT-Creation-Date: 2010-03-14 21:03+0100\n"
+"PO-Revision-Date: 2010-03-26 22:31+0100\n"
"Last-Translator: René 'Necoro' Neumann <necoro@necoro.net>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -243,7 +243,7 @@ msgstr "<b>Autor:</b>"
#: portato/gui/templates/PluginWindow.ui:141
#: portato/gui/windows/pkglist.py:59
-#: portato/gui/windows/main.py:830
+#: portato/gui/windows/main.py:843
#: portato/gui/windows/plugin.py:27
msgid "Enabled"
msgstr "Aktiviert"
@@ -297,15 +297,11 @@ msgstr ""
"Kommentare /\n"
"Vorgehensweise um den Bug zu erzeugen?"
-#: portato/gui/templates/MailInfoWindow.ui:138
-msgid "Attach _Logfile"
-msgstr "Hänge _Logdatei an"
+#: portato/gui/templates/MailInfoWindow.ui:160
+msgid "These files will be sent:"
+msgstr "Die folgenden Dateien werden geschickt:"
-#: portato/gui/templates/MailInfoWindow.ui:142
-msgid "Attaches the logfile to the mail. This log only contains debug information."
-msgstr "Hängt die Logdatei an die Mail an. In der Datei sind nur Debug-Informationen enthalten."
-
-#: portato/gui/templates/MailInfoWindow.ui:206
+#: portato/gui/templates/MailInfoWindow.ui:220
msgid "_Send"
msgstr "_Send"
@@ -350,7 +346,7 @@ msgid "<b>Homepage:</b>"
msgstr "<b>Homepage:</b>"
#: portato/gui/templates/MainWindow.ui:462
-#: portato/gui/windows/main.py:831
+#: portato/gui/windows/main.py:844
msgid "Installed"
msgstr "Installiert"
@@ -406,13 +402,13 @@ msgid "Remove the selected package from the queue"
msgstr "Löscht das gewählte Paket aus der Queue"
#: portato/gui/templates/MainWindow.ui:782
-#: portato/gui/windows/main.py:611
+#: portato/gui/windows/main.py:620
msgid "Queue"
msgstr "Queue"
#: portato/gui/templates/MainWindow.ui:806
-#: portato/gui/windows/main.py:1240
-#: portato/gui/windows/main.py:1242
+#: portato/gui/windows/main.py:1253
+#: portato/gui/windows/main.py:1255
msgid "Console"
msgstr "Konsole"
@@ -422,7 +418,7 @@ msgstr "Log"
#: portato/gui/dialogs.py:17
msgid "Mail could not be sent"
-msgstr "Mail konnte nicht gesendet werden: %s"
+msgstr "Mail konnte nicht gesendet werden"
#: portato/gui/dialogs.py:18
#, python-format
@@ -430,49 +426,63 @@ msgid "The error was: %s"
msgstr "Der Fehler war: %s"
#: portato/gui/dialogs.py:24
+msgid "No email address given"
+msgstr "Keine Email-Adresse gegeben"
+
+#: portato/gui/dialogs.py:25
+msgid ""
+"You haven't specified an email address. Without it, it will not be possible for the developers to contact you for questions and thus it might be harder to fix the bug.\n"
+"\n"
+"Do you want to proceed nevertheless?"
+msgstr ""
+"Du hast keine Email-Adresse angegeben. Daher ist es nicht möglich, dass die Entwickler dich kontaktieren können und es kann daher sein, dass der Bug schwerer zu beseitigen ist.\n"
+"\n"
+"Trotzdem fortfahren?"
+
+#: portato/gui/dialogs.py:31
msgid "Do you really want to quit?"
msgstr "Wirklich beenden?"
-#: portato/gui/dialogs.py:25
+#: portato/gui/dialogs.py:32
msgid "There are some packages in the emerge queue and/or an emerge process is running."
msgstr "Es sind noch Pakete in der Emerge-Queue und/oder emerge läuft noch."
-#: portato/gui/dialogs.py:43
+#: portato/gui/dialogs.py:50
#, python-format
msgid "%(blocked)s is blocked by %(blocks)s."
msgstr "%(blocks)s blockiert %(blocked)s."
-#: portato/gui/dialogs.py:44
+#: portato/gui/dialogs.py:51
msgid "Please unmerge the blocking package."
msgstr "Bitte deinstalliere das blockierende Paket."
-#: portato/gui/dialogs.py:50
+#: portato/gui/dialogs.py:57
msgid "You are not root."
msgstr "Du bist nicht root."
-#: portato/gui/dialogs.py:56
+#: portato/gui/dialogs.py:63
#, python-format
msgid "%s seems to be masked."
msgstr "%s scheint maskiert zu sein."
-#: portato/gui/dialogs.py:57
+#: portato/gui/dialogs.py:64
msgid "Do you want to unmask it and its dependencies?"
msgstr "Soll das Paket und seine Abhängigkeiten demaskiert werden?"
-#: portato/gui/dialogs.py:63
+#: portato/gui/dialogs.py:70
msgid "Package not found!"
msgstr "Paket nicht gefunden!"
-#: portato/gui/dialogs.py:69
+#: portato/gui/dialogs.py:76
msgid "Do not show this dialog again."
msgstr "Diesen Dialog nicht wieder anzeigen."
-#: portato/gui/dialogs.py:70
+#: portato/gui/dialogs.py:77
#, python-format
msgid "Changed %s"
msgstr "%s wurde geändert"
-#: portato/gui/dialogs.py:71
+#: portato/gui/dialogs.py:78
msgid ""
"Portato will write these changes into the appropriate files.\n"
"Please backup them if you think it is necessary."
@@ -480,11 +490,11 @@ msgstr ""
"Portato wird diese Änderungen speichern.\n"
"Bitte sichere die entsprechenden Dateien, wenn du es als notwendig erachtest."
-#: portato/gui/dialogs.py:80
+#: portato/gui/dialogs.py:87
msgid "You cannot remove dependencies. :)"
msgstr "Du kannst keine Abhängigkeiten löschen ;)."
-#: portato/gui/dialogs.py:86
+#: portato/gui/dialogs.py:93
msgid ""
"This is the updates queue. You cannot remove single elements.\n"
"Do you want to clear the whole queue instead?"
@@ -492,15 +502,15 @@ msgstr ""
"Das ist die Update-Queue. Aus dieser können keine einzelnen Pakete entfernt werden.\n"
"Soll stattdessen die komplette Queue entfernt werden?"
-#: portato/gui/dialogs.py:92
+#: portato/gui/dialogs.py:99
msgid "Do you really want to clear the whole queue?"
msgstr "Wirklich die gesamte Queue löschen?"
-#: portato/gui/dialogs.py:111
+#: portato/gui/dialogs.py:118
msgid "A prerequisite for starting Portato was not matched."
msgstr "Eine Vorbedingung um Portato zu starten ist nicht erfüllt."
-#: portato/gui/dialogs.py:115
+#: portato/gui/dialogs.py:122
msgid ""
"<b>Note</b>: On fresh Sabayon installs or its LiveDVD/-CD, there is no portage tree existing per default.\n"
"Please run <i>emerge --sync &amp;&amp; layman -S</i>."
@@ -508,8 +518,8 @@ msgstr ""
"<b>Hinweis</b>: Auf frisch installierten Sabayon-Systemen bzw. der Sabayon LiveDVD/-CD existiert standardmäßig kein Portage-Tree.\n"
"Bitte führe <i>emerge --sync &amp;&amp; layman -S</i> aus."
-#: portato/gui/dialogs.py:123
-#: portato/gui/windows/main.py:1289
+#: portato/gui/dialogs.py:130
+#: portato/gui/windows/main.py:1302
#, python-format
msgid "No versions of package '%s' found!"
msgstr "Keine Version vom Paket '%s' gefunden!"
@@ -592,14 +602,15 @@ msgstr "Pakete mit Updates"
msgid "World Packages"
msgstr "Pakete in \"World\""
-#: portato/gui/windows/mailinfo.py:83
+#: portato/gui/windows/mailinfo.py:145
#, python-format
msgid "An error occurred while sending. I think we were greylisted. The error: %s"
msgstr "Während des Sendes trat ein Fehler auf. Wahrscheinlich wurden wir ge-greylistet. Der Fehler: %s"
-#: portato/gui/windows/mailinfo.py:84
-msgid "Retrying after waiting 60 seconds."
-msgstr "Wiederhole den Versuch nach einer 60s Pause."
+#: portato/gui/windows/mailinfo.py:146
+#, python-format
+msgid "Retrying after waiting %d seconds."
+msgstr "Wiederhole den Versuch nach einer %ds Pause."
#: portato/gui/windows/splash.py:35
#, python-format
@@ -627,7 +638,7 @@ msgid "Package Set"
msgstr "Paket-Set"
#: portato/gui/windows/preference.py:259
-#: portato/gui/windows/main.py:833
+#: portato/gui/windows/main.py:846
#: portato/db/database.py:49
#: portato/db/database.py:50
msgid "Description"
@@ -655,90 +666,90 @@ msgstr "Paket konnte nicht gefunden werden: %s"
msgid "Masked by user"
msgstr "Vom Benutzer maskiert"
-#: portato/gui/windows/main.py:455
+#: portato/gui/windows/main.py:464
msgid "Loading Config"
msgstr "Lade Konfiguration"
-#: portato/gui/windows/main.py:467
+#: portato/gui/windows/main.py:476
msgid "Creating Database"
msgstr "Erstelle Datenbank"
-#: portato/gui/windows/main.py:471
+#: portato/gui/windows/main.py:480
msgid "Loading Plugins"
msgstr "Lade Plugins"
-#: portato/gui/windows/main.py:479
+#: portato/gui/windows/main.py:488
msgid "Building frontend"
msgstr "Erstelle Oberfläche"
-#: portato/gui/windows/main.py:545
+#: portato/gui/windows/main.py:554
msgid "Restoring Session"
msgstr "Lade Session"
-#: portato/gui/windows/main.py:555
+#: portato/gui/windows/main.py:564
msgid "Loading Plugin Widgets"
msgstr "Lade GUI-Elemente der Plugins"
-#: portato/gui/windows/main.py:558
+#: portato/gui/windows/main.py:567
msgid "Finishing startup"
msgstr "Erledige letzte Handgriffe :)"
-#: portato/gui/windows/main.py:614
+#: portato/gui/windows/main.py:623
msgid "Options"
msgstr "Optionen"
-#: portato/gui/windows/main.py:630
+#: portato/gui/windows/main.py:639
msgid "Categories"
msgstr "Kategorien"
-#: portato/gui/windows/main.py:689
+#: portato/gui/windows/main.py:698
msgid "Packages"
msgstr "Pakete"
-#: portato/gui/windows/main.py:724
+#: portato/gui/windows/main.py:733
#, python-format
msgid "Package '%s/%s' is disabled."
msgstr "Paket '%s/%s' wurde deaktiviert."
-#: portato/gui/windows/main.py:741
+#: portato/gui/windows/main.py:750
msgid "Versions"
msgstr "Versionen"
-#: portato/gui/windows/main.py:744
+#: portato/gui/windows/main.py:753
msgid "Slot"
msgstr "Slot"
-#: portato/gui/windows/main.py:832
+#: portato/gui/windows/main.py:845
msgid "Flag"
msgstr "Flag"
-#: portato/gui/windows/main.py:856
+#: portato/gui/windows/main.py:869
msgid "This is an expanded use flag and cannot be selected"
msgstr "Dies ist ein \"Expanded Use Flag\" und kann daher nicht ausgewählt werden."
-#: portato/gui/windows/main.py:914
+#: portato/gui/windows/main.py:927
#, python-format
msgid "Translating session from version %d to %d."
msgstr "Upgrade Session von Version %d auf Version %d."
-#: portato/gui/windows/main.py:917
+#: portato/gui/windows/main.py:930
#, python-format
msgid "Cannot translate session from version %d to %d."
msgstr "Kann Session nicht von Version %d nach %d upgraden."
-#: portato/gui/windows/main.py:1425
+#: portato/gui/windows/main.py:1438
msgid "use flags"
msgstr "Use Flags"
-#: portato/gui/windows/main.py:1437
+#: portato/gui/windows/main.py:1450
msgid "masking keywords"
msgstr "Masking Keywords"
-#: portato/gui/windows/main.py:1838
+#: portato/gui/windows/main.py:1851
msgid "The portage tree is not existing."
msgstr "Der Portage-Tree existiert nicht."
-#: portato/gui/windows/main.py:1842
+#: portato/gui/windows/main.py:1855
msgid "The portage tree seems to be empty."
msgstr "Der Portage-Tree scheint leer zu sein."
@@ -942,22 +953,22 @@ msgstr "Leere Datenbank..."
msgid "Populating database..."
msgstr "Fülle Datenbank..."
-#: portato/session.py:67
+#: portato/session.py:69
#, python-format
msgid "Loading '%s' session from %s."
msgstr "Lade '%s'-Session von %s."
-#: portato/session.py:69
+#: portato/session.py:71
#, python-format
msgid "Loading session from %s."
msgstr "Lade Session von %s."
-#: portato/session.py:141
+#: portato/session.py:139
#, python-format
msgid "Saving '%s' session to %s."
msgstr "Schreibe '%s'-Session nach %s."
-#: portato/session.py:143
+#: portato/session.py:141
#, python-format
msgid "Saving session to %s."
msgstr "Schreibe Session nach %s."
@@ -1115,6 +1126,14 @@ msgstr "Emerge fehlgeschlagen!"
msgid "Error Code: %d"
msgstr "Fehler-Code: %d"
+#~ msgid "Attach _Logfile"
+#~ msgstr "Hänge _Logdatei an"
+#~ msgid ""
+#~ "Attaches the logfile to the mail. This log only contains debug "
+#~ "information."
+#~ msgstr ""
+#~ "Hängt die Logdatei an die Mail an. In der Datei sind nur Debug-"
+#~ "Informationen enthalten."
#~ msgid "Plu_gins"
#~ msgstr "Plu_gins"
#~ msgid "_File"
diff --git a/i18n/messages.pot b/i18n/messages.pot
index 26f1dd1..5c007f9 100644
--- a/i18n/messages.pot
+++ b/i18n/messages.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-05 21:26+0100\n"
+"POT-Creation-Date: 2010-03-14 21:03+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -239,7 +239,7 @@ msgid "<b>Author:</b>"
msgstr ""
#: portato/gui/templates/PluginWindow.ui:141 portato/gui/windows/pkglist.py:59
-#: portato/gui/windows/main.py:830 portato/gui/windows/plugin.py:27
+#: portato/gui/windows/main.py:843 portato/gui/windows/plugin.py:27
msgid "Enabled"
msgstr ""
@@ -284,16 +284,11 @@ msgid ""
"what did you do to hit the bug?"
msgstr ""
-#: portato/gui/templates/MailInfoWindow.ui:138
-msgid "Attach _Logfile"
+#: portato/gui/templates/MailInfoWindow.ui:160
+msgid "These files will be sent:"
msgstr ""
-#: portato/gui/templates/MailInfoWindow.ui:142
-msgid ""
-"Attaches the logfile to the mail. This log only contains debug information."
-msgstr ""
-
-#: portato/gui/templates/MailInfoWindow.ui:206
+#: portato/gui/templates/MailInfoWindow.ui:220
msgid "_Send"
msgstr ""
@@ -337,7 +332,7 @@ msgstr ""
msgid "<b>Homepage:</b>"
msgstr ""
-#: portato/gui/templates/MainWindow.ui:462 portato/gui/windows/main.py:831
+#: portato/gui/templates/MainWindow.ui:462 portato/gui/windows/main.py:844
msgid "Installed"
msgstr ""
@@ -387,12 +382,12 @@ msgstr ""
msgid "Remove the selected package from the queue"
msgstr ""
-#: portato/gui/templates/MainWindow.ui:782 portato/gui/windows/main.py:611
+#: portato/gui/templates/MainWindow.ui:782 portato/gui/windows/main.py:620
msgid "Queue"
msgstr ""
-#: portato/gui/templates/MainWindow.ui:806 portato/gui/windows/main.py:1240
-#: portato/gui/windows/main.py:1242
+#: portato/gui/templates/MainWindow.ui:806 portato/gui/windows/main.py:1253
+#: portato/gui/windows/main.py:1255
msgid "Console"
msgstr ""
@@ -410,82 +405,95 @@ msgid "The error was: %s"
msgstr ""
#: portato/gui/dialogs.py:24
-msgid "Do you really want to quit?"
+msgid "No email address given"
msgstr ""
#: portato/gui/dialogs.py:25
msgid ""
+"You haven't specified an email address. Without it, it will not be possible "
+"for the developers to contact you for questions and thus it might be harder "
+"to fix the bug.\n"
+"\n"
+"Do you want to proceed nevertheless?"
+msgstr ""
+
+#: portato/gui/dialogs.py:31
+msgid "Do you really want to quit?"
+msgstr ""
+
+#: portato/gui/dialogs.py:32
+msgid ""
"There are some packages in the emerge queue and/or an emerge process is "
"running."
msgstr ""
-#: portato/gui/dialogs.py:43
+#: portato/gui/dialogs.py:50
#, python-format
msgid "%(blocked)s is blocked by %(blocks)s."
msgstr ""
-#: portato/gui/dialogs.py:44
+#: portato/gui/dialogs.py:51
msgid "Please unmerge the blocking package."
msgstr ""
-#: portato/gui/dialogs.py:50
+#: portato/gui/dialogs.py:57
msgid "You are not root."
msgstr ""
-#: portato/gui/dialogs.py:56
+#: portato/gui/dialogs.py:63
#, python-format
msgid "%s seems to be masked."
msgstr ""
-#: portato/gui/dialogs.py:57
+#: portato/gui/dialogs.py:64
msgid "Do you want to unmask it and its dependencies?"
msgstr ""
-#: portato/gui/dialogs.py:63
+#: portato/gui/dialogs.py:70
msgid "Package not found!"
msgstr ""
-#: portato/gui/dialogs.py:69
+#: portato/gui/dialogs.py:76
msgid "Do not show this dialog again."
msgstr ""
-#: portato/gui/dialogs.py:70
+#: portato/gui/dialogs.py:77
#, python-format
msgid "Changed %s"
msgstr ""
-#: portato/gui/dialogs.py:71
+#: portato/gui/dialogs.py:78
msgid ""
"Portato will write these changes into the appropriate files.\n"
"Please backup them if you think it is necessary."
msgstr ""
-#: portato/gui/dialogs.py:80
+#: portato/gui/dialogs.py:87
msgid "You cannot remove dependencies. :)"
msgstr ""
-#: portato/gui/dialogs.py:86
+#: portato/gui/dialogs.py:93
msgid ""
"This is the updates queue. You cannot remove single elements.\n"
"Do you want to clear the whole queue instead?"
msgstr ""
-#: portato/gui/dialogs.py:92
+#: portato/gui/dialogs.py:99
msgid "Do you really want to clear the whole queue?"
msgstr ""
-#: portato/gui/dialogs.py:111
+#: portato/gui/dialogs.py:118
msgid "A prerequisite for starting Portato was not matched."
msgstr ""
-#: portato/gui/dialogs.py:115
+#: portato/gui/dialogs.py:122
msgid ""
"<b>Note</b>: On fresh Sabayon installs or its LiveDVD/-CD, there is no "
"portage tree existing per default.\n"
"Please run <i>emerge --sync &amp;&amp; layman -S</i>."
msgstr ""
-#: portato/gui/dialogs.py:123 portato/gui/windows/main.py:1289
+#: portato/gui/dialogs.py:130 portato/gui/windows/main.py:1302
#, python-format
msgid "No versions of package '%s' found!"
msgstr ""
@@ -573,14 +581,15 @@ msgstr ""
msgid "World Packages"
msgstr ""
-#: portato/gui/windows/mailinfo.py:83
+#: portato/gui/windows/mailinfo.py:145
#, python-format
msgid ""
"An error occurred while sending. I think we were greylisted. The error: %s"
msgstr ""
-#: portato/gui/windows/mailinfo.py:84
-msgid "Retrying after waiting 60 seconds."
+#: portato/gui/windows/mailinfo.py:146
+#, python-format
+msgid "Retrying after waiting %d seconds."
msgstr ""
#: portato/gui/windows/splash.py:35
@@ -608,7 +617,7 @@ msgstr ""
msgid "Package Set"
msgstr ""
-#: portato/gui/windows/preference.py:259 portato/gui/windows/main.py:833
+#: portato/gui/windows/preference.py:259 portato/gui/windows/main.py:846
#: portato/db/database.py:49 portato/db/database.py:50
msgid "Description"
msgstr ""
@@ -634,90 +643,90 @@ msgstr ""
msgid "Masked by user"
msgstr ""
-#: portato/gui/windows/main.py:455
+#: portato/gui/windows/main.py:464
msgid "Loading Config"
msgstr ""
-#: portato/gui/windows/main.py:467
+#: portato/gui/windows/main.py:476
msgid "Creating Database"
msgstr ""
-#: portato/gui/windows/main.py:471
+#: portato/gui/windows/main.py:480
msgid "Loading Plugins"
msgstr ""
-#: portato/gui/windows/main.py:479
+#: portato/gui/windows/main.py:488
msgid "Building frontend"
msgstr ""
-#: portato/gui/windows/main.py:545
+#: portato/gui/windows/main.py:554
msgid "Restoring Session"
msgstr ""
-#: portato/gui/windows/main.py:555
+#: portato/gui/windows/main.py:564
msgid "Loading Plugin Widgets"
msgstr ""
-#: portato/gui/windows/main.py:558
+#: portato/gui/windows/main.py:567
msgid "Finishing startup"
msgstr ""
-#: portato/gui/windows/main.py:614
+#: portato/gui/windows/main.py:623
msgid "Options"
msgstr ""
-#: portato/gui/windows/main.py:630
+#: portato/gui/windows/main.py:639
msgid "Categories"
msgstr ""
-#: portato/gui/windows/main.py:689
+#: portato/gui/windows/main.py:698
msgid "Packages"
msgstr ""
-#: portato/gui/windows/main.py:724
+#: portato/gui/windows/main.py:733
#, python-format
msgid "Package '%s/%s' is disabled."
msgstr ""
-#: portato/gui/windows/main.py:741
+#: portato/gui/windows/main.py:750
msgid "Versions"
msgstr ""
-#: portato/gui/windows/main.py:744
+#: portato/gui/windows/main.py:753
msgid "Slot"
msgstr ""
-#: portato/gui/windows/main.py:832
+#: portato/gui/windows/main.py:845
msgid "Flag"
msgstr ""
-#: portato/gui/windows/main.py:856
+#: portato/gui/windows/main.py:869
msgid "This is an expanded use flag and cannot be selected"
msgstr ""
-#: portato/gui/windows/main.py:914
+#: portato/gui/windows/main.py:927
#, python-format
msgid "Translating session from version %d to %d."
msgstr ""
-#: portato/gui/windows/main.py:917
+#: portato/gui/windows/main.py:930
#, python-format
msgid "Cannot translate session from version %d to %d."
msgstr ""
-#: portato/gui/windows/main.py:1425
+#: portato/gui/windows/main.py:1438
msgid "use flags"
msgstr ""
-#: portato/gui/windows/main.py:1437
+#: portato/gui/windows/main.py:1450
msgid "masking keywords"
msgstr ""
-#: portato/gui/windows/main.py:1838
+#: portato/gui/windows/main.py:1851
msgid "The portage tree is not existing."
msgstr ""
-#: portato/gui/windows/main.py:1842
+#: portato/gui/windows/main.py:1855
msgid "The portage tree seems to be empty."
msgstr ""
@@ -920,22 +929,22 @@ msgstr ""
msgid "Populating database..."
msgstr ""
-#: portato/session.py:67
+#: portato/session.py:69
#, python-format
msgid "Loading '%s' session from %s."
msgstr ""
-#: portato/session.py:69
+#: portato/session.py:71
#, python-format
msgid "Loading session from %s."
msgstr ""
-#: portato/session.py:141
+#: portato/session.py:139
#, python-format
msgid "Saving '%s' session to %s."
msgstr ""
-#: portato/session.py:143
+#: portato/session.py:141
#, python-format
msgid "Saving session to %s."
msgstr ""
diff --git a/portato/db/__init__.py b/portato/db/__init__.py
index a4b4bde..41bd017 100644
--- a/portato/db/__init__.py
+++ b/portato/db/__init__.py
@@ -12,66 +12,66 @@
from __future__ import absolute_import
+from . import database as db
+from .exceptions import UnknownDatabaseTypeError, DatabaseInstantiationError
from ..session import Session, SectionDict
from ..helper import debug, warning, error
-class UnknownDatabaseTypeError (Exception):
- pass
-
-_SESSION = None
-_TYPE = None
-_DEFAULT = "dict"
-_DATABASE = None
-
types = {
"sql": (_("SQLite"), _("Uses an SQLite-database to store package information.\nMay take longer to generate at the first time, but has advantages if portato is re-started with an unchanged portage tree. Additionally it allows to use fast SQL expressions for fetching the data.")),
"dict": (_("Hashmap"), _("Uses an in-memory hashmap to store package information.\nHas been used since at least version 0.3.3, but all information has to be regenerated on each startup.")),
"eixsql" : (_("eix + SQLite"), _("Similar to SQLite, but now uses the eix database to get the package information.\nThis should be much faster on startup, but requires that your eix database is always up-to-date.\nAdditionally, this is the only database allowing searching in descriptions."))
}
-def Database(type = None):
- global _SESSION, _TYPE, _DATABASE
+class Database(db.Database):
+ DEFAULT = "dict"
- if type is None:
- if _DATABASE is None:
- warning("No database type specified! Falling back to default.")
- return Database(_DEFAULT)
- else:
- return _DATABASE
+ def __new__ (cls, type = None):
+ if not '_the_instance' in cls.__dict__:
+ dbcls = cls._generate(type)
+ cls._the_instance = dbcls(cls._get_session())
+ elif type is not None:
+ raise DatabaseInstantiationError("Database instantiation called with 'type' argument multiple times.")
+ return cls._the_instance
- if _SESSION is None:
- _SESSION = Session("db.session", name = "DB", oldfiles = ["db.cfg"])
- _SESSION.load()
+ @classmethod
+ def _generate(cls, type):
- _TYPE = type
+ if type is None:
+ warning("No database type specified! Falling back to default.")
+ type = cls.DEFAULT
+
+ cls.DB_TYPE = type
- if type == "sql":
- debug("Using SQLDatabase")
- try:
- from .sql import SQLDatabase
- except ImportError:
- warning(_("Cannot load %s."), "SQLDatabase")
- _DATABASE = Database("dict")
- else:
- _DATABASE = SQLDatabase(SectionDict(_SESSION, type))
+ if type == "sql":
+ debug("Using SQLDatabase")
+ try:
+ from .sql import SQLDatabase
+ except ImportError:
+ warning(_("Cannot load %s."), "SQLDatabase")
+ return cls._generate("dict")
+ else:
+ return SQLDatabase
- elif type == "dict":
- debug("Using HashDatabase")
- from .hash import HashDatabase
- _DATABASE = HashDatabase(SectionDict(_SESSION, type))
-
- elif type == "eixsql":
- debug("Using EixSQLDatabase")
- try:
- from .eix_sql import EixSQLDatabase
- except ImportError:
- warning(_("Cannot load %s."), "EixSQLDatabase.")
- _DATABASE = Database("sql")
- else:
- _DATABASE = EixSQLDatabase(SectionDict(_SESSION, type))
+ elif type == "dict":
+ debug("Using HashDatabase")
+ from .hash import HashDatabase
+ return HashDatabase
+
+ elif type == "eixsql":
+ debug("Using EixSQLDatabase")
+ try:
+ from .eix_sql import EixSQLDatabase
+ except ImportError:
+ warning(_("Cannot load %s."), "EixSQLDatabase.")
+ return cls._generate("sql")
+ else:
+ return EixSQLDatabase
- else:
- error(_("Unknown database type: %s"), type)
- raise UnknownDatabaseTypeError, type
+ else:
+ error(_("Unknown database type: %s"), type)
+ raise UnknownDatabaseTypeError, type
- return _DATABASE
+ @classmethod
+ def _get_session(cls):
+ return SectionDict(Session("db.session", name = "DB", oldfiles = ["db.cfg"]), cls.DB_TYPE)
diff --git a/portato/db/database.py b/portato/db/database.py
index 6e92d79..c679d06 100644
--- a/portato/db/database.py
+++ b/portato/db/database.py
@@ -16,6 +16,8 @@ from threading import RLock
from functools import wraps
from ..helper import warning
+from .exceptions import UnsupportedSearchTypeError
+
class UnsupportedSearchTypeError(Exception):
pass
diff --git a/portato/db/exceptions.py b/portato/db/exceptions.py
new file mode 100644
index 0000000..8a6e424
--- /dev/null
+++ b/portato/db/exceptions.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+#
+# File: portato/db/exceptions.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2006-2010 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+class DatabaseError (Exception):
+ pass
+
+class UnknownDatabaseTypeError (DatabaseError):
+ pass
+
+class DatabaseInstantiationError (DatabaseError):
+ pass
+
+class UnsupportedSearchTypeError(DatabaseError):
+ pass
+
diff --git a/portato/db/sql.py b/portato/db/sql.py
index a9c27ab..f5dc257 100644
--- a/portato/db/sql.py
+++ b/portato/db/sql.py
@@ -47,6 +47,7 @@ class SQLDatabase (Database):
updateFormat = False
if "format" not in session or session["format"] != self.FORMAT:
+ debug("Need to update database format from '%s' to '%s'", session["format"], self.FORMAT)
session["format"] = self.FORMAT
updateFormat = True
@@ -61,6 +62,7 @@ class SQLDatabase (Database):
pkg_conn = sql.connect(pkgdb)
pkg_conn.row_factory = sql.Row
if pkgdb_existed and updateFormat:
+ debug("Dropping old table")
pkg_conn.execute("DROP TABLE packages")
pkg_conn.execute("""
@@ -118,7 +120,7 @@ class SQLDatabase (Database):
os.remove(dbpath)
db_existed = False
- self.session["pickle"] = True # no need for a certain value
+ self.session["pickle"] = "1" # no need for a certain value
if db_existed:
debug("portdirs.db already existant")
diff --git a/portato/gui/dialogs.py b/portato/gui/dialogs.py
index 6044a5b..2cc2d6b 100644
--- a/portato/gui/dialogs.py
+++ b/portato/gui/dialogs.py
@@ -20,6 +20,13 @@ def mail_failure_dialog(e):
dialog.destroy()
return ret
+def no_email_dialog(p):
+ dialog = gtk.MessageDialog(p, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK_CANCEL, _("No email address given"))
+ dialog.format_secondary_text(_("You haven't specified an email address. Without it, it will not be possible for the developers to contact you for questions and thus it might be harder to fix the bug.\n\nDo you want to proceed nevertheless?"))
+ ret = dialog.run()
+ dialog.destroy()
+ return ret
+
def queue_not_empty_dialog():
dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_NONE, _("Do you really want to quit?"))
dialog.format_secondary_text(_("There are some packages in the emerge queue and/or an emerge process is running."))
@@ -76,6 +83,17 @@ def changed_flags_dialog (what = "flags"):
return ret, check.get_active()
+def update_world_warning_dialog ():
+ check = gtk.CheckButton(_("Do not show this dialog again."))
+ hintMB = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, _("'Update World' may be giving errors"))
+ hintMB.format_secondary_text(_("Due to the fast changing portage, 'update world' might not work correctly or even throw errors.\nThis will be fixed (hopefully) in the next release."))
+ hintMB.vbox.add(check)
+ hintMB.vbox.show_all()
+ ret = hintMB.run()
+ hintMB.destroy()
+
+ return ret, check.get_active()
+
def remove_deps_dialog ():
infoMB = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, _("You cannot remove dependencies. :)"))
ret = infoMB.run()
diff --git a/portato/gui/exception_handling.py b/portato/gui/exception_handling.py
index dbafa7e..d9b133c 100644
--- a/