[Pkg-bazaar-commits] ./bzr-gtk/unstable r458: Merge from trunk
Martin Albisetti
argentina at gmail.com
Fri Apr 10 07:50:29 UTC 2009
------------------------------------------------------------
revno: 458
committer: Martin Albisetti <argentina at gmail.com>
branch nick: gtk.nautilus
timestamp: Thu 2008-04-03 20:02:32 -0300
message:
Merge from trunk
added:
icons/sign-bad.png
icons/sign-ok.png
icons/sign-unknown.png
icons/sign.png
icons/tag-16.png
preferences/
preferences/identity.py
preferences/plugins.py
seahorse.py
renamed:
bzr-icon-64.png => icons/bzr-icon-64.png
preferences.py => preferences/__init__.py
modified:
AUTHORS
NEWS
__init__.py
about.py
revisionview.py
setup.py
viz/branchwin.py
preferences/__init__.py
------------------------------------------------------------
revno: 399.1.1
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Wed 2007-11-21 19:46:31 +0100
message:
Made the revisionview show whether a revision has been signed.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.2
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Wed 2007-11-21 20:08:07 +0100
message:
Added icon to the signature page.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.3
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Wed 2007-11-21 21:02:11 +0100
message:
Added GPG module.
added:
gpg.py
------------------------------------------------------------
revno: 399.1.4
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Wed 2007-11-21 21:04:21 +0100
message:
Fixed bug in GPG module.
modified:
gpg.py
------------------------------------------------------------
revno: 399.1.5
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Wed 2007-11-21 21:04:43 +0100
message:
Added signature verification.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.6
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Wed 2007-11-21 21:10:39 +0100
message:
Made signature page label singular.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.7
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Wed 2007-11-21 21:42:22 +0100
message:
Made signature page display the key id of the signature.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.8
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Sun 2007-12-02 17:12:09 +0100
message:
Merged with mainline.
removed:
viz/about.py
modified:
NEWS
__init__.py
olive.glade
revisionmenu.py
viz/branchwin.py
viz/treeview.py
------------------------------------------------------------
revno: 399.1.9
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Tue 2008-01-22 21:46:10 +0100
message:
Merged with trunk.
added:
branchview/
branchview/__init__.py
bzr-gtk.cfg
renamed:
viz/graphcell.py => branchview/graphcell.py
viz/linegraph.py => branchview/linegraph.py
viz/treemodel.py => branchview/treemodel.py
viz/treeview.py => branchview/treeview.py
modified:
NEWS
__init__.py
missing.py
nautilus-bzr.py
revisionview.py
setup.py
viz/__init__.py
viz/branchwin.py
branchview/linegraph.py
branchview/treemodel.py
branchview/treeview.py
------------------------------------------------------------
revno: 399.1.10
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Tue 2008-01-22 21:54:20 +0100
message:
Improved implementation of the Signature page.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.11
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Tue 2008-01-22 21:56:07 +0100
message:
Split long line.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.12
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Sat 2008-03-15 21:42:00 +0100
message:
Added signature icons.
added:
icons/sign-bad.png
icons/sign-ok.png
icons/sign-unknown.png
icons/sign.png
------------------------------------------------------------
revno: 399.1.13
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Sat 2008-03-15 21:54:34 +0100
message:
Merged with mainline.
added:
handle-patch
icons/emblem-bzr-added.svg
icons/emblem-bzr-conflict.svg
icons/emblem-bzr-controlled.svg
icons/emblem-bzr-modified.svg
icons/emblem-bzr-removed.svg
po/ca.po
po/cs.po
po/de.po
po/en_GB.po
po/es.po
po/fr.po
po/hu.po
po/id.po
po/it.po
po/ku.po
po/pl.po
po/pt_BR.po
po/ru.po
po/sr.po
po/sv.po
modified:
NEWS
README
__init__.py
about.py
annotate/gannotate.py
branchbox.py
branchview/graphcell.py
branchview/linegraph.py
branchview/treemodel.py
branchview/treeview.py
commit.py
conflicts.py
diff.py
mergedirective.py
nautilus-bzr.py
olive-gtk
olive/__init__.py
olive/guifiles.py
revbrowser.py
revisionmenu.py
revisionview.py
setup.py
tests/test_diff.py
viz/branchwin.py
------------------------------------------------------------
revno: 399.1.14
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Sat 2008-03-15 22:10:05 +0100
message:
Made sure the signature icons get installed.
modified:
setup.py
------------------------------------------------------------
revno: 399.1.15
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: signatures
timestamp: Sun 2008-03-30 17:34:26 +0200
message:
Move signature tab to a separate class.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.16
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: signatures
timestamp: Sun 2008-03-30 17:40:16 +0200
message:
Move logic showing images to the SignatureTab widget.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.17
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: signatures
timestamp: Sun 2008-03-30 17:47:08 +0200
message:
Merge Daniels' branch.
------------------------------------------------------------
revno: 399.2.1
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Sun 2008-03-30 17:34:39 +0200
message:
Made signature tab optional.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.1.18
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: signatures
timestamp: Sun 2008-03-30 17:51:15 +0200
message:
Merge trunk.
removed:
tortoise-bzr.py
added:
icons/commit.svg
icons/commit16.svg
icons/diff16.svg
modified:
NEWS
__init__.py
branchview/linegraph.py
icons/commit.png
icons/commit16.png
icons/diff.png
icons/diff16.png
icons/log.png
icons/log16.png
icons/pull.png
icons/pull16.png
icons/push.png
icons/push16.png
icons/refresh.png
ui.py
viz/branchwin.py
------------------------------------------------------------
revno: 399.1.19
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: signatures
timestamp: Sun 2008-03-30 17:58:52 +0200
message:
Add utility function for finding icon paths.
renamed:
bzr-icon-64.png => icons/bzr-icon-64.png
modified:
__init__.py
about.py
revisionview.py
setup.py
------------------------------------------------------------
revno: 399.1.20
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: signatures
timestamp: Sun 2008-03-30 17:59:51 +0200
message:
Update NEWS.
modified:
NEWS
------------------------------------------------------------
revno: 399.1.21
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: signatures
timestamp: Mon 2008-03-31 23:59:11 +0200
message:
Hide signature tab if gpg binary wasn't found.
modified:
revisionview.py
------------------------------------------------------------
revno: 450.1.11
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Tue 2008-04-01 11:59:41 +0200
message:
Merge signatures tab.
added:
gpg.py
icons/sign-bad.png
icons/sign-ok.png
icons/sign-unknown.png
icons/sign.png
renamed:
bzr-icon-64.png => icons/bzr-icon-64.png
modified:
NEWS
__init__.py
about.py
revisionview.py
setup.py
------------------------------------------------------------
revno: 450.1.12
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Tue 2008-04-01 12:18:53 +0200
message:
Merge James' D-Bus changes.
modified:
NEWS
__init__.py
------------------------------------------------------------
revno: 450.2.1
committer: James Henstridge <james at jamesh.id.au>
branch nick: bzr-gtk.commit-notify
timestamp: Tue 2008-03-25 18:37:23 +0900
message:
Make commit-notify listen for Revision signals from any source rather
than just the Broadcast daemon. This makes the daemon work with my
updates to bzr-dbus.
modified:
__init__.py
------------------------------------------------------------
revno: 450.1.13
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Tue 2008-04-01 12:20:12 +0200
message:
Merge splitup of preferences dialog.
added:
preferences/
preferences/identity.py
preferences/plugins.py
renamed:
preferences.py => preferences/__init__.py
modified:
NEWS
preferences/__init__.py
------------------------------------------------------------
revno: 450.3.1
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: preferences
timestamp: Fri 2008-03-28 20:26:53 +0100
message:
Add module for preferences code.
added:
preferences/
renamed:
preferences.py => preferences/__init__.py
------------------------------------------------------------
revno: 450.3.2
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: preferences
timestamp: Fri 2008-03-28 20:30:27 +0100
message:
Split plugins page out into a separate file.
added:
preferences/plugins.py
modified:
preferences/__init__.py
------------------------------------------------------------
revno: 450.3.3
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: preferences
timestamp: Fri 2008-03-28 20:39:35 +0100
message:
Split identity settings out of main preferences window.
added:
preferences/identity.py
modified:
preferences/__init__.py
------------------------------------------------------------
revno: 450.1.14
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Wed 2008-04-02 15:36:55 +0200
message:
Fix regressions in plugins tab.
modified:
preferences/plugins.py
------------------------------------------------------------
revno: 450.1.15
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: trunk
timestamp: Wed 2008-04-02 22:30:42 +0200
message:
Merged tag icon branch.
added:
icons/tag-16.png
modified:
AUTHORS
viz/branchwin.py
------------------------------------------------------------
revno: 450.4.1
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: tag-icons
timestamp: Wed 2008-04-02 02:31:14 +0200
message:
Added tag icon to branch history window.
added:
icons/tag-16.png
modified:
viz/branchwin.py
------------------------------------------------------------
revno: 450.4.2
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: tag-icons
timestamp: Wed 2008-04-02 17:54:41 +0200
message:
Added attribution for tag icon.
modified:
AUTHORS
------------------------------------------------------------
revno: 450.1.16
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: trunk
timestamp: Thu 2008-04-03 01:40:12 +0200
message:
Merged Seahorse integration.
removed:
gpg.py
added:
seahorse.py
modified:
NEWS
revisionview.py
------------------------------------------------------------
revno: 399.3.1
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Sun 2008-03-30 18:47:06 +0200
message:
Made the key id label disappear when the revision is not signed.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.2
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: signatures
timestamp: Sun 2008-03-30 18:56:57 +0200
message:
Moved key id label to the right.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.3
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 01:55:37 +0200
message:
Made the signature code use the Seahorse D-Bus service.
removed:
gpg.py
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.4
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 02:05:24 +0200
message:
Moved crypt code to crypt.py.
added:
crypt.py
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.5
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 11:08:45 +0200
message:
Added support for key fingerprints.
modified:
crypt.py
revisionview.py
------------------------------------------------------------
revno: 399.3.6
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 11:37:45 +0200
message:
Added support for key trust.
modified:
crypt.py
revisionview.py
------------------------------------------------------------
revno: 399.3.7
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 12:19:55 +0200
message:
Made Seahorse discover unknown keys, and added trust level to the UI.
modified:
crypt.py
revisionview.py
------------------------------------------------------------
revno: 399.3.8
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 12:52:58 +0200
message:
Moved crypt code into a Key class.
modified:
crypt.py
revisionview.py
------------------------------------------------------------
revno: 399.3.9
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 20:28:51 +0200
message:
Added headings.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.10
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 20:58:12 +0200
message:
Added getter for display name field.
modified:
crypt.py
------------------------------------------------------------
revno: 399.3.11
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 21:20:08 +0200
message:
Fixed error with unavailable keys.
modified:
crypt.py
revisionview.py
------------------------------------------------------------
revno: 399.3.12
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 21:22:02 +0200
message:
Fixed typo.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.13
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 21:25:13 +0200
message:
Changed wording of authenticity heading.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.14
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 21:58:31 +0200
message:
Improved wording of signature authenticity descriptions.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.15
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 22:03:45 +0200
message:
Made the fingerprint label read N/A when no fingerprint is available.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.16
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 22:04:53 +0200
message:
Reverted to old authenticity description.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.17
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 22:13:52 +0200
message:
Moved signature handling into signature widget.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.18
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 22:29:35 +0200
message:
Made empty fingerprint text grey.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.19
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 22:45:39 +0200
message:
Increased row spacing in signature tab.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.20
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 22:50:49 +0200
message:
Top-aligned the signature tab heading.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.21
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Tue 2008-04-01 22:57:09 +0200
message:
Played a bit with the spacings.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.22
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 01:23:51 +0200
message:
Merged with trunk.
added:
preferences/
preferences/identity.py
preferences/plugins.py
renamed:
preferences.py => preferences/__init__.py
modified:
NEWS
__init__.py
about.py
branch.py
olive.glade
olive/__init__.py
revisionview.py
preferences/__init__.py
------------------------------------------------------------
revno: 399.3.23
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 10:28:59 +0200
message:
Added comparison with revision committer.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.24
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 10:56:40 +0200
message:
Added key location getter.
modified:
crypt.py
------------------------------------------------------------
revno: 399.3.25
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 17:16:04 +0200
message:
Added discovery of unknown keys.
modified:
crypt.py
------------------------------------------------------------
revno: 399.3.26
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 17:32:02 +0200
message:
Updated NEWS.
modified:
NEWS
------------------------------------------------------------
revno: 399.3.27
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 22:59:49 +0200
message:
Only show Signature tab if DBus and Seahorse are installed.
modified:
crypt.py
revisionview.py
------------------------------------------------------------
revno: 399.3.28
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 23:02:12 +0200
message:
Added license and copyright information to crypt module.
modified:
crypt.py
------------------------------------------------------------
revno: 399.3.29
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Wed 2008-04-02 23:50:08 +0200
message:
Renamed the crypt module to seahorse.
renamed:
crypt.py => seahorse.py
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.30
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Thu 2008-04-03 01:34:55 +0200
message:
Fixed some naming issues.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.31
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Thu 2008-04-03 01:36:33 +0200
message:
Removed redundant import of DBus.
modified:
revisionview.py
------------------------------------------------------------
revno: 399.3.32
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-integration
timestamp: Thu 2008-04-03 01:39:44 +0200
message:
Fixed encoding error.
modified:
seahorse.py
------------------------------------------------------------
revno: 450.1.17
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: trunk
timestamp: Thu 2008-04-03 16:02:20 +0200
message:
Merged Seahorse integration fix.
modified:
seahorse.py
------------------------------------------------------------
revno: 450.5.1
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-issue
timestamp: Thu 2008-04-03 13:29:04 +0200
message:
Fixed check for Seahorse.
modified:
seahorse.py
------------------------------------------------------------
revno: 450.1.18
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: trunk
timestamp: Thu 2008-04-03 23:23:02 +0200
message:
Merged Seahorse integration changes.
modified:
revisionview.py
seahorse.py
------------------------------------------------------------
revno: 450.5.2
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-issue
timestamp: Thu 2008-04-03 16:07:56 +0200
message:
Fixed issue with empty keys.
modified:
seahorse.py
------------------------------------------------------------
revno: 450.5.3
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-issue
timestamp: Thu 2008-04-03 22:20:39 +0200
message:
Made the signature checking code not try to discover the signature key.
modified:
revisionview.py
seahorse.py
------------------------------------------------------------
revno: 450.5.4
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: seahorse-issue
timestamp: Thu 2008-04-03 22:30:15 +0200
message:
Made the crypt code only use one DBus call to get key fields.
modified:
seahorse.py
-------------- next part --------------
=== modified file 'AUTHORS'
--- a/AUTHORS 2006-10-14 19:14:14 +0000
+++ b/AUTHORS 2008-04-02 15:54:41 +0000
@@ -13,5 +13,7 @@
Olive was written by Szilveszter Farkas <Szilveszter.Farkas at gmail.com>.
+The tag icon was created by Jakub Steiner.
+
Numerous other people have contributed useful patches. See the Bazaar history
of this branch for a full list of authors.
=== modified file 'NEWS'
--- a/NEWS 2008-03-29 02:44:43 +0000
+++ b/NEWS 2008-04-02 15:32:02 +0000
@@ -4,6 +4,10 @@
* Removed tortoise-bzr, which now has its own project (http://launchpad.net/tortoisebzr)
+ * Use new D-Bus revision signal. (James Henstridge, #206443)
+
+ * Switched to using Seahorse to verify signatures. (Daniel Schierbeck)
+
UI
* Made the tags associated with a revision render next to the revision
@@ -40,12 +44,16 @@
* Support child_submit_to setting in gsend. (Jelmer Vernooij)
+ * Add tab if revision view showing the signature status. (Daniel Schierbeck, Jelmer Vernooij)
+
INTERNALS
* Refactored the revisionview. (Daniel Schierbeck)
* It is now possible to use the diff view as a widget. (Jelmer Vernooij)
+ * Preferences dialog has been split up. (Jelmer Vernooij)
+
0.93.0 2007-12-10
UI
=== modified file '__init__.py'
--- a/__init__.py 2008-03-30 16:19:28 +0000
+++ b/__init__.py 2008-04-01 10:18:53 +0000
@@ -110,7 +110,14 @@
def icon_path(*args):
- return os.path.join(data_path(), *args)
+ basedirs = [os.path.join(data_path()),
+ "/usr/share/bzr-gtk",
+ "/usr/local/share/bzr-gtk"]
+ for basedir in basedirs:
+ path = os.path.join(basedir, 'icons', *args)
+ if os.path.exists(path):
+ return path
+ return None
class GTKCommand(Command):
@@ -533,12 +540,8 @@
from bzrlib.transport import get_transport
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
import dbus.glib
- from bzrlib.plugins.dbus import activity
+ BROADCAST_INTERFACE = "org.bazaarvcs.plugins.dbus.Broadcast"
bus = dbus.SessionBus()
- # get the object so we can subscribe to callbacks from it.
- broadcast_service = bus.get_object(
- activity.Broadcast.DBUS_NAME,
- activity.Broadcast.DBUS_PATH)
def catch_branch(revision_id, urls):
# TODO: show all the urls, or perhaps choose the 'best'.
@@ -575,8 +578,9 @@
except Exception, e:
print e
raise
- broadcast_service.connect_to_signal("Revision", catch_branch,
- dbus_interface=activity.Broadcast.DBUS_INTERFACE)
+ bus.add_signal_receiver(catch_branch,
+ dbus_interface=BROADCAST_INTERFACE,
+ signal_name="Revision")
pynotify.init("bzr commit-notify")
gtk.main()
=== modified file 'about.py'
--- a/about.py 2008-03-30 16:19:28 +0000
+++ b/about.py 2008-04-01 09:59:41 +0000
@@ -23,7 +23,7 @@
import bzrlib
import gtk
import os
-from bzrlib.plugins.gtk import data_path
+from bzrlib.plugins.gtk import icon_path
class AboutDialog(gtk.AboutDialog):
def __init__(self):
@@ -32,6 +32,6 @@
self.set_version(bzrlib.plugins.gtk.version_string)
self.set_website("http://bazaar-vcs.org/BzrGtk")
self.set_license("GNU GPL v2 or later")
- self.set_icon(gtk.gdk.pixbuf_new_from_file(os.path.join(data_path(), "bzr-icon-64.png")))
+ self.set_icon(gtk.gdk.pixbuf_new_from_file(icon_path("bzr-icon-64.png")))
self.connect ("response", lambda d, r: d.destroy())
=== renamed file 'bzr-icon-64.png' => 'icons/bzr-icon-64.png'
=== added file 'icons/sign-bad.png'
Binary files a/icons/sign-bad.png 1970-01-01 00:00:00 +0000 and b/icons/sign-bad.png 2008-03-15 20:42:00 +0000 differ
=== added file 'icons/sign-ok.png'
Binary files a/icons/sign-ok.png 1970-01-01 00:00:00 +0000 and b/icons/sign-ok.png 2008-03-15 20:42:00 +0000 differ
=== added file 'icons/sign-unknown.png'
Binary files a/icons/sign-unknown.png 1970-01-01 00:00:00 +0000 and b/icons/sign-unknown.png 2008-03-15 20:42:00 +0000 differ
=== added file 'icons/sign.png'
Binary files a/icons/sign.png 1970-01-01 00:00:00 +0000 and b/icons/sign.png 2008-03-15 20:42:00 +0000 differ
=== added file 'icons/tag-16.png'
Binary files a/icons/tag-16.png 1970-01-01 00:00:00 +0000 and b/icons/tag-16.png 2008-04-02 00:31:14 +0000 differ
=== added directory 'preferences'
=== renamed file 'preferences.py' => 'preferences/__init__.py'
--- a/preferences.py 2007-10-02 17:23:52 +0000
+++ b/preferences/__init__.py 2008-03-28 19:39:35 +0000
@@ -23,6 +23,8 @@
import gtk
from bzrlib.config import GlobalConfig
+from identity import IdentityPage
+from plugins import PluginsPage
class PreferencesWindow(gtk.Dialog):
"""Displays global preferences windows."""
@@ -39,173 +41,21 @@
if self.config is None:
self.config = GlobalConfig()
self._create()
-
- def _create_mainpage(self):
- table = gtk.Table(rows=4, columns=2)
- table.set_row_spacings(6)
- table.set_col_spacings(6)
-
- align = gtk.Alignment(1.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>User Id:</b>")
- align.add(label)
- table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
-
- self.username = gtk.Entry()
- self.username.set_text(self.config.username())
- table.attach(self.username, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
-
- align = gtk.Alignment(1.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>GPG signing command:</b>")
- align.add(label)
- table.attach(align, 0, 1, 1, 2, gtk.FILL, gtk.FILL)
-
- self.email = gtk.Entry()
- self.email.set_text(self.config.gpg_signing_command())
- table.attach(self.email, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
-
- align = gtk.Alignment(1.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Check GPG Signatures:</b>")
- align.add(label)
- table.attach(align, 0, 1, 2, 3, gtk.FILL, gtk.FILL)
-
- sigvals = gtk.VBox()
- self.check_sigs_if_possible = gtk.RadioButton(None,
- "_Check if possible")
- sigvals.pack_start(self.check_sigs_if_possible)
- self.check_sigs_always = gtk.RadioButton(self.check_sigs_if_possible,
- "Check _always")
- sigvals.pack_start(self.check_sigs_always)
- self.check_sigs_never = gtk.RadioButton(self.check_sigs_if_possible,
- "Check _never")
- sigvals.pack_start(self.check_sigs_never)
- # FIXME: Set default
- table.attach(sigvals, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL)
-
- align = gtk.Alignment(1.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Create GPG Signatures:</b>")
- align.add(label)
- table.attach(align, 0, 1, 3, 4, gtk.FILL, gtk.FILL)
-
- create_sigs = gtk.VBox()
- self.create_sigs_when_required = gtk.RadioButton(None,
- "Sign When _Required")
- create_sigs.pack_start(self.create_sigs_when_required)
- self.create_sigs_always = gtk.RadioButton(
- self.create_sigs_when_required, "Sign _Always")
- create_sigs.pack_start(self.create_sigs_always)
- self.create_sigs_never = gtk.RadioButton(
- self.create_sigs_when_required, "Sign _Never")
- create_sigs.pack_start(self.create_sigs_never)
- # FIXME: Set default
- table.attach(create_sigs, 1, 2, 3, 4, gtk.EXPAND | gtk.FILL, gtk.FILL)
-
- return table
-
- def _create_pluginpage(self):
- paned = gtk.VPaned()
- scrolledwindow = gtk.ScrolledWindow()
- scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- model = gtk.ListStore(str, str)
- treeview = gtk.TreeView()
- scrolledwindow.add(treeview)
- paned.pack1(scrolledwindow, resize=True, shrink=False)
-
- table = gtk.Table(columns=2)
- table.set_row_spacings(6)
- table.set_col_spacings(6)
-
- def row_selected(tv, path, tvc):
- p = bzrlib.plugin.plugins()[model[path][0]]
- from inspect import getdoc
-
- for w in table.get_children():
- table.remove(w)
-
- if getattr(p, '__author__', None) is not None:
- align = gtk.Alignment(1.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Author:</b>")
- align.add(label)
- table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
- align.show()
- label.show()
-
- align = gtk.Alignment(0.0, 0.5)
- author = gtk.Label()
- author.set_text(p.__author__)
- author.set_selectable(True)
- align.add(author)
- table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
-
- if getattr(p, '__version__', None) is not None:
- align = gtk.Alignment(1.0, 0.5)
- label = gtk.Label()
- label.set_markup("<b>Version:</b>")
- align.add(label)
- table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
- align.show()
- label.show()
-
- align = gtk.Alignment(0.0, 0.5)
- author = gtk.Label()
- author.set_text(p.__version__)
- author.set_selectable(True)
- align.add(author)
- table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
-
- if getdoc(p) is not None:
- align = gtk.Alignment(0.0, 0.5)
- description = gtk.Label()
- description.set_text(getdoc(p))
- description.set_selectable(True)
- align.add(description)
- table.attach(align, 0, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
-
- table.show_all()
-
- treeview.set_headers_visible(False)
- treeview.set_model(model)
- treeview.connect("row-activated", row_selected)
-
- cell = gtk.CellRendererText()
- column = gtk.TreeViewColumn()
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 0)
- treeview.append_column(column)
-
- cell = gtk.CellRendererText()
- column = gtk.TreeViewColumn()
- column.pack_start(cell, expand=True)
- column.add_attribute(cell, "text", 1)
- treeview.append_column(column)
-
- import bzrlib.plugin
- plugins = bzrlib.plugin.plugins()
- plugin_names = plugins.keys()
- plugin_names.sort()
- for name in plugin_names:
- model.append([name, getattr(plugins[name], '__file__', None)])
-
- scrolledwindow = gtk.ScrolledWindow()
- scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- scrolledwindow.add_with_viewport(table)
- paned.pack2(scrolledwindow, resize=False, shrink=True)
- paned.show()
-
- return paned
+ self._create_pages()
+
def _create(self):
self.set_default_size(600, 600)
notebook = gtk.Notebook()
- notebook.insert_page(self._create_mainpage(), gtk.Label("Main"))
- notebook.insert_page(self._create_pluginpage(), gtk.Label("Plugins"))
+ for (label, page) in self._create_pages():
+ notebook.insert_page(page, gtk.Label(label))
self.vbox.pack_start(notebook, True, True)
self.vbox.show_all()
+ def _create_pages(self):
+ return [("Identity", IdentityPage(self.config)),
+ ("Plugins", PluginsPage())]
+
def display(self):
self.window.show_all()
=== added file 'preferences/identity.py'
--- a/preferences/identity.py 1970-01-01 00:00:00 +0000
+++ b/preferences/identity.py 2008-03-28 19:39:35 +0000
@@ -0,0 +1,88 @@
+# Copyright (C) 2007-2008 Jelmer Vernooij <jelmer at samba.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+try:
+ import pygtk
+ pygtk.require("2.0")
+except:
+ pass
+
+import gtk
+
+class IdentityPage(gtk.Table):
+ def __init__(self, config):
+ self.config = config
+ gtk.Table.__init__(self, rows=4, columns=2)
+ self.set_row_spacings(6)
+ self.set_col_spacings(6)
+
+ align = gtk.Alignment(1.0, 0.5)
+ label = gtk.Label()
+ label.set_markup("<b>User Id:</b>")
+ align.add(label)
+ self.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
+
+ self.username = gtk.Entry()
+ self.username.set_text(self.config.username())
+ self.attach(self.username, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(1.0, 0.5)
+ label = gtk.Label()
+ label.set_markup("<b>GPG signing command:</b>")
+ align.add(label)
+ self.attach(align, 0, 1, 1, 2, gtk.FILL, gtk.FILL)
+
+ self.email = gtk.Entry()
+ self.email.set_text(self.config.gpg_signing_command())
+ self.attach(self.email, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(1.0, 0.5)
+ label = gtk.Label()
+ label.set_markup("<b>Check GPG Signatures:</b>")
+ align.add(label)
+ self.attach(align, 0, 1, 2, 3, gtk.FILL, gtk.FILL)
+
+ sigvals = gtk.VBox()
+ self.check_sigs_if_possible = gtk.RadioButton(None,
+ "_Check if possible")
+ sigvals.pack_start(self.check_sigs_if_possible)
+ self.check_sigs_always = gtk.RadioButton(self.check_sigs_if_possible,
+ "Check _always")
+ sigvals.pack_start(self.check_sigs_always)
+ self.check_sigs_never = gtk.RadioButton(self.check_sigs_if_possible,
+ "Check _never")
+ sigvals.pack_start(self.check_sigs_never)
+ # FIXME: Set default
+ self.attach(sigvals, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(1.0, 0.5)
+ label = gtk.Label()
+ label.set_markup("<b>Create GPG Signatures:</b>")
+ align.add(label)
+ self.attach(align, 0, 1, 3, 4, gtk.FILL, gtk.FILL)
+
+ create_sigs = gtk.VBox()
+ self.create_sigs_when_required = gtk.RadioButton(None,
+ "Sign When _Required")
+ create_sigs.pack_start(self.create_sigs_when_required)
+ self.create_sigs_always = gtk.RadioButton(
+ self.create_sigs_when_required, "Sign _Always")
+ create_sigs.pack_start(self.create_sigs_always)
+ self.create_sigs_never = gtk.RadioButton(
+ self.create_sigs_when_required, "Sign _Never")
+ create_sigs.pack_start(self.create_sigs_never)
+ # FIXME: Set default
+ self.attach(create_sigs, 1, 2, 3, 4, gtk.EXPAND | gtk.FILL, gtk.FILL)
=== added file 'preferences/plugins.py'
--- a/preferences/plugins.py 1970-01-01 00:00:00 +0000
+++ b/preferences/plugins.py 2008-04-02 13:36:55 +0000
@@ -0,0 +1,118 @@
+# Copyright (C) 2008 Jelmer Vernooij <jelmer at samba.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+try:
+ import pygtk
+ pygtk.require("2.0")
+except:
+ pass
+
+import gtk
+
+class PluginsPage(gtk.VPaned):
+ def __init__(self):
+ gtk.VPaned.__init__(self)
+ scrolledwindow = gtk.ScrolledWindow()
+ scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self.model = gtk.ListStore(str, str)
+ treeview = gtk.TreeView()
+ scrolledwindow.add(treeview)
+ self.pack1(scrolledwindow, resize=True, shrink=False)
+
+ self.table = gtk.Table(columns=2)
+ self.table.set_row_spacings(6)
+ self.table.set_col_spacings(6)
+
+ treeview.set_headers_visible(False)
+ treeview.set_model(self.model)
+ treeview.connect("row-activated", self.row_selected)
+
+ cell = gtk.CellRendererText()
+ column = gtk.TreeViewColumn()
+ column.pack_start(cell, expand=True)
+ column.add_attribute(cell, "text", 0)
+ treeview.append_column(column)
+
+ cell = gtk.CellRendererText()
+ column = gtk.TreeViewColumn()
+ column.pack_start(cell, expand=True)
+ column.add_attribute(cell, "text", 1)
+ treeview.append_column(column)
+
+ import bzrlib.plugin
+ plugins = bzrlib.plugin.plugins()
+ plugin_names = plugins.keys()
+ plugin_names.sort()
+ for name in plugin_names:
+ self.model.append([name, getattr(plugins[name], '__file__', None)])
+
+ scrolledwindow = gtk.ScrolledWindow()
+ scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ scrolledwindow.add_with_viewport(self.table)
+ self.pack2(scrolledwindow, resize=False, shrink=True)
+ self.show()
+
+ def row_selected(self, tv, path, tvc):
+ import bzrlib
+ p = bzrlib.plugin.plugins()[self.model[path][0]]
+ from inspect import getdoc
+
+ for w in self.table.get_children():
+ self.table.remove(w)
+
+ if getattr(p, '__author__', None) is not None:
+ align = gtk.Alignment(1.0, 0.5)
+ label = gtk.Label()
+ label.set_markup("<b>Author:</b>")
+ align.add(label)
+ self.table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
+ align.show()
+ label.show()
+
+ align = gtk.Alignment(0.0, 0.5)
+ author = gtk.Label()
+ author.set_text(p.__author__)
+ author.set_selectable(True)
+ align.add(author)
+ self.table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ if getattr(p, '__version__', None) is not None:
+ align = gtk.Alignment(1.0, 0.5)
+ label = gtk.Label()
+ label.set_markup("<b>Version:</b>")
+ align.add(label)
+ self.table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
+ align.show()
+ label.show()
+
+ align = gtk.Alignment(0.0, 0.5)
+ author = gtk.Label()
+ author.set_text(p.__version__)
+ author.set_selectable(True)
+ align.add(author)
+ self.table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ if getdoc(p) is not None:
+ align = gtk.Alignment(0.0, 0.5)
+ description = gtk.Label()
+ description.set_text(getdoc(p))
+ description.set_selectable(True)
+ align.add(description)
+ self.table.attach(align, 0, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ self.table.show_all()
+
+
=== modified file 'revisionview.py'
--- a/revisionview.py 2008-03-09 19:07:11 +0000
+++ b/revisionview.py 2008-04-03 20:20:39 +0000
@@ -22,15 +22,24 @@
import gobject
import subprocess
+from bzrlib.plugins.gtk import icon_path
from bzrlib.osutils import format_date
from bzrlib.util.bencode import bdecode
+try:
+ from bzrlib.plugins.gtk import seahorse
+except ImportError:
+ has_seahorse = False
+else:
+ has_seahorse = True
+
def _open_link(widget, uri):
subprocess.Popen(['sensible-browser', uri], close_fds=True)
gtk.link_button_set_uri_hook(_open_link)
class BugsTab(gtk.Table):
+
def __init__(self):
super(BugsTab, self).__init__(rows=5, columns=2)
self.set_row_spacings(6)
@@ -54,6 +63,144 @@
self.show_all()
+class SignatureTab(gtk.VBox):
+
+ def __init__(self, repository):
+ self.key = None
+ self.revision = None
+ self.repository = repository
+
+ super(SignatureTab, self).__init__(False, 6)
+ signature_box = gtk.Table(rows=3, columns=3)
+ signature_box.set_col_spacing(0, 16)
+ signature_box.set_col_spacing(1, 12)
+ signature_box.set_row_spacings(6)
+
+ self.signature_image = gtk.Image()
+ signature_box.attach(self.signature_image, 0, 1, 0, 1, gtk.FILL)
+
+ align = gtk.Alignment(0.0, 0.1)
+ self.signature_label = gtk.Label()
+ align.add(self.signature_label)
+ signature_box.attach(align, 1, 3, 0, 1, gtk.FILL)
+
+ align = gtk.Alignment(0.0, 0.5)
+ self.signature_key_id_label = gtk.Label()
+ self.signature_key_id_label.set_markup("<b>Key Id:</b>")
+ align.add(self.signature_key_id_label)
+ signature_box.attach(align, 1, 2, 1, 2, gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(0.0, 0.5)
+ self.signature_key_id = gtk.Label()
+ self.signature_key_id.set_selectable(True)
+ align.add(self.signature_key_id)
+ signature_box.attach(align, 2, 3, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(0.0, 0.5)
+ self.signature_fingerprint_label = gtk.Label()
+ self.signature_fingerprint_label.set_markup("<b>Fingerprint:</b>")
+ align.add(self.signature_fingerprint_label)
+ signature_box.attach(align, 1, 2, 2, 3, gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(0.0, 0.5)
+ self.signature_fingerprint = gtk.Label()
+ self.signature_fingerprint.set_selectable(True)
+ align.add(self.signature_fingerprint)
+ signature_box.attach(align, 2, 3, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(0.0, 0.5)
+ self.signature_trust_label = gtk.Label()
+ self.signature_trust_label.set_markup("<b>Trust:</b>")
+ align.add(self.signature_trust_label)
+ signature_box.attach(align, 1, 2, 3, 4, gtk.FILL, gtk.FILL)
+
+ align = gtk.Alignment(0.0, 0.5)
+ self.signature_trust = gtk.Label()
+ self.signature_trust.set_selectable(True)
+ align.add(self.signature_trust)
+ signature_box.attach(align, 2, 3, 3, 4, gtk.EXPAND | gtk.FILL, gtk.FILL)
+
+ self.set_border_width(6)
+ self.pack_start(signature_box, expand=False)
+ self.show_all()
+
+ def set_revision(self, revision):
+ self.revision = revision
+ revid = revision.revision_id
+
+ if self.repository.has_signature_for_revision_id(revid):
+ crypttext = self.repository.get_signature_text(revid)
+ self.show_signature(crypttext)
+ else:
+ self.show_no_signature()
+
+ def show_no_signature(self):
+ self.signature_key_id_label.hide()
+ self.signature_key_id.set_text("")
+
+ self.signature_fingerprint_label.hide()
+ self.signature_fingerprint.set_text("")
+
+ self.signature_trust_label.hide()
+ self.signature_trust.set_text("")
+
+ self.signature_image.set_from_file(icon_path("sign-unknown.png"))
+ self.signature_label.set_markup("<b>Authenticity unknown</b>\n" +
+ "This revision has not been signed.")
+
+ def show_signature(self, crypttext):
+ key = seahorse.verify(crypttext)
+
+ if key and key.is_available():
+ if key.is_trusted():
+ if key.get_display_name() == self.revision.committer:
+ self.signature_image.set_from_file(icon_path("sign-ok.png"))
+ self.signature_label.set_markup("<b>Authenticity confirmed</b>\n" +
+ "This revision has been signed with " +
+ "a trusted key.")
+ else:
+ self.signature_image.set_from_file(icon_path("sign-bad.png"))
+ self.signature_label.set_markup("<b>Authenticity cannot be confirmed</b>\n" +
+ "Revision committer is not the same as signer.")
+ else:
+ self.signature_image.set_from_file(icon_path("sign-bad.png"))
+ self.signature_label.set_markup("<b>Authenticity cannot be confirmed</b>\n" +
+ "This revision has been signed, but the " +
+ "key is not trusted.")
+ else:
+ self.show_no_signature()
+ self.signature_image.set_from_file(icon_path("sign-bad.png"))
+ self.signature_label.set_markup("<b>Authenticity cannot be confirmed</b>\n" +
+ "Signature key not available.")
+ return
+
+ trust = key.get_trust()
+
+ if trust <= seahorse.TRUST_NEVER:
+ trust_text = 'never trusted'
+ elif trust == seahorse.TRUST_UNKNOWN:
+ trust_text = 'not trusted'
+ elif trust == seahorse.TRUST_MARGINAL:
+ trust_text = 'marginally trusted'
+ elif trust == seahorse.TRUST_FULL:
+ trust_text = 'fully trusted'
+ elif trust == seahorse.TRUST_ULTIMATE:
+ trust_text = 'ultimately trusted'
+
+ self.signature_key_id_label.show()
+ self.signature_key_id.set_text(key.get_id())
+
+ fingerprint = key.get_fingerprint()
+ if fingerprint == "":
+ fingerprint = '<span foreground="dim grey">N/A</span>'
+
+ self.signature_fingerprint_label.show()
+ self.signature_fingerprint.set_markup(fingerprint)
+
+ self.signature_trust_label.show()
+ self.signature_trust.set_text('This key is ' + trust_text)
+
+
class RevisionView(gtk.Notebook):
""" Custom widget for commit log details.
@@ -95,8 +242,13 @@
def __init__(self, branch=None):
gtk.Notebook.__init__(self)
+ self._revision = None
+ self._branch = branch
+
self._create_general()
self._create_relations()
+ if has_seahorse:
+ self._create_signature()
self._create_file_info_view()
self._create_bugs()
@@ -222,6 +374,9 @@
self._add_tags()
+ def _update_signature(self, widget, param):
+ self.signature_table.set_revision(self._revision)
+
def set_children(self, children):
self._add_parents_or_children(children,
self.children_widgets,
@@ -235,7 +390,8 @@
"""Callback for when the go button for a parent is clicked."""
def _add_tags(self, *args):
- if self._revision is None: return
+ if self._revision is None:
+ return
if self._tagdict.has_key(self._revision.revision_id):
tags = self._tagdict[self._revision.revision_id]
@@ -306,6 +462,11 @@
self.append_page(vbox, tab_label=gtk.Label("Relations"))
vbox.show()
+ def _create_signature(self):
+ self.signature_table = SignatureTab(self._branch.repository)
+ self.append_page(self.signature_table, tab_label=gtk.Label('Signature'))
+ self.connect_after('notify::revision', self._update_signature)
+
def _create_headers(self):
self.table = gtk.Table(rows=5, columns=2)
self.table.set_row_spacings(6)
@@ -413,7 +574,6 @@
self.connect('notify::revision', self._add_tags)
return self.table
-
def _create_parents(self):
hbox = gtk.HBox(True, 3)
@@ -461,6 +621,7 @@
tv = gtk.TextView(msg_buffer)
tv.set_editable(False)
tv.set_wrap_mode(gtk.WRAP_WORD)
+
tv.modify_font(pango.FontDescription("Monospace"))
tv.show()
window.add(tv)
=== added file 'seahorse.py'
--- a/seahorse.py 1970-01-01 00:00:00 +0000
+++ b/seahorse.py 2008-04-03 20:30:15 +0000
@@ -0,0 +1,114 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+__copyright__ = 'Copyright (C) 2008 Daniel Schierbeck'
+__author__ = 'Daniel Schierbeck <daniel.schierbeck at gmail.com>'
+
+import dbus
+
+BUS_NAME = 'org.gnome.seahorse'
+
+CRYPTO_INTERFACE = 'org.gnome.seahorse.CryptoService'
+CRYPTO_PATH = '/org/gnome/seahorse/crypto'
+
+OPENPGP_INTERFACE = 'org.gnome.seahorse.Keys'
+OPENPGP_PATH = '/org/gnome/seahorse/keys/openpgp'
+
+KEY_TYPE_OPENPGP = 'openpgp'
+KEY_TYPE_SSH = 'ssh'
+
+try:
+ dbus.validate_bus_name(BUS_NAME)
+except ValueError:
+ raise ImportError
+
+bus = dbus.SessionBus()
+
+crypto = dbus.Interface(bus.get_object(BUS_NAME, CRYPTO_PATH),
+ CRYPTO_INTERFACE)
+openpgp = dbus.Interface(bus.get_object(BUS_NAME, OPENPGP_PATH),
+ OPENPGP_INTERFACE)
+
+FLAG_VALID = 0x0001
+FLAG_CAN_ENCRYPT = 0x0002
+FLAG_CAN_SIGN = 0x0004
+FLAG_EXPIRED = 0x0100
+FLAG_REVOKED = 0x0200
+FLAG_DISABLED = 0x0400
+FLAG_TRUSTED = 0x1000
+
+TRUST_NEVER = -1
+TRUST_UNKNOWN = 0
+TRUST_MARGINAL = 1
+TRUST_FULL = 5
+TRUST_ULTIMATE = 10
+
+LOCATION_MISSING = 10
+LOCATION_SEARCHING = 20
+LOCATION_REMOTE = 50
+LOCATION_LOCAL = 100
+
+keyset = dict()
+
+def verify(crypttext):
+ (cleartext, key) = crypto.VerifyText(KEY_TYPE_OPENPGP, 1, crypttext)
+
+ if key != "":
+ if key not in keyset:
+ keyset[key] = Key(key)
+
+ return keyset[key]
+
+class Key:
+
+ def __init__(self, key):
+ self.key = key
+
+ (keys, unmatched) = openpgp.MatchKeys([self.get_id()], 0x00000010)
+ self.available = (key in keys)
+
+ if self.available:
+ fields = openpgp.GetKeyFields(key, ['fingerprint', 'trust', 'flags', 'display-name', 'location'])
+ else:
+ fields = dict()
+
+ self.fingerprint = fields.get('fingerprint', 'N/A')
+ self.trust = fields.get('trust', TRUST_UNKNOWN)
+ self.flags = fields.get('flags', 0)
+ self.display_name = fields.get('display-name', '')
+ self.location = fields.get('location', LOCATION_MISSING)
+
+ def get_flags(self):
+ return self.flags
+
+ def get_display_name(self):
+ return self.display_name
+
+ def get_id(self):
+ return self.key.split(':')[1][8:]
+
+ def get_fingerprint(self):
+ return self.fingerprint
+
+ def get_trust(self):
+ return self.trust
+
+ def get_location(self):
+ return self.location
+
+ def is_available(self):
+ return self.available
+
+ def is_trusted(self):
+ return self.flags & FLAG_TRUSTED != 0
=== modified file 'setup.py'
--- a/setup.py 2008-03-05 11:57:21 +0000
+++ b/setup.py 2008-03-30 15:58:52 +0000
@@ -129,10 +129,15 @@
'icons/push16.png',
'icons/refresh.png',
'icons/oliveicon2.png']),
+ ('share/bzr-gtk/icons', ['icons/sign-bad.png',
+ 'icons/sign-ok.png',
+ 'icons/sign.png',
+ 'icons/sign-unknown.png',
+ 'icons/bzr-icon-64.png']),
('share/applications', ['olive-gtk.desktop',
'bazaar-properties.desktop',
'bzr-notify.desktop']),
- ('share/pixmaps', ['icons/olive-gtk.png']),
+ ('share/pixmaps', ['icons/olive-gtk.png', 'icons/bzr-icon-64.png']),
('share/icons/hicolor/scalable/emblems',
['icons/emblem-bzr-added.svg',
'icons/emblem-bzr-conflict.svg',
=== modified file 'viz/branchwin.py'
--- a/viz/branchwin.py 2008-03-28 19:12:27 +0000
+++ b/viz/branchwin.py 2008-04-02 00:31:14 +0000
@@ -14,6 +14,7 @@
import pango
from bzrlib.plugins.gtk.window import Window
+from bzrlib.plugins.gtk import icon_path
from bzrlib.plugins.gtk.tags import AddTagDialog
from bzrlib.plugins.gtk.preferences import PreferencesWindow
from bzrlib.plugins.gtk.branchview import TreeView, treemodel
@@ -177,7 +178,10 @@
go_menu_next = self.next_rev_action.create_menu_item()
go_menu_prev = self.prev_rev_action.create_menu_item()
- self.go_menu_tags = gtk.MenuItem("_Tags")
+ tag_image = gtk.Image()
+ tag_image.set_from_file(icon_path("tag-16.png"))
+ self.go_menu_tags = gtk.ImageMenuItem("_Tags")
+ self.go_menu_tags.set_image(tag_image)
self._update_tags()
go_menu.add(go_menu_next)
@@ -435,7 +439,10 @@
tags.sort()
tags.reverse()
for tag, revid in tags:
- tag_item = gtk.MenuItem(tag, use_underline=False)
+ tag_image = gtk.Image()
+ tag_image.set_from_file(icon_path('tag-16.png'))
+ tag_item = gtk.ImageMenuItem(tag.replace('_', '__'))
+ tag_item.set_image(tag_image)
tag_item.connect('activate', self._tag_selected_cb, revid)
menu.add(tag_item)
self.go_menu_tags.set_submenu(menu)
More information about the Pkg-bazaar-commits
mailing list