/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
49 by Jelmer Vernooij
Merge in Dan Loda's gannotate plugin and put it in annotate/
1
# This program is free software; you can redistribute it and/or modify
2
# it under the terms of the GNU General Public License as published by
3
# the Free Software Foundation; either version 2 of the License, or
4
# (at your option) any later version.
5
6
# This program is distributed in the hope that it will be useful,
7
# but WITHOUT ANY WARRANTY; without even the implied warranty of
8
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9
# GNU General Public License for more details.
10
11
# You should have received a copy of the GNU General Public License
12
# along with this program; if not, write to the Free Software
13
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
14
208.2.1 by Robert Collins
Better module docstring.
15
"""Graphical support for Bazaar using GTK.
16
17
This plugin includes:
18
gannotate         GTK+ annotate. 
19
gbranch           GTK+ branching. 
20
gcheckout         GTK+ checkout. 
323 by Jelmer Vernooij
Add gsend command.
21
gcommit           GTK+ commit dialog.
242.1.2 by Adeodato Simó
Fix gconflicts docstring.
22
gconflicts        GTK+ conflicts. 
208.2.1 by Robert Collins
Better module docstring.
23
gdiff             Show differences in working tree in a GTK+ Window. 
24
ginit             Initialise a new branch.
592.4.1 by Jasper Groenewegen
Add ginfo command to bzr, shows info dialog
25
ginfo             GTK+ branch info dialog
580.1.1 by Jelmer Vernooij
Add gloom command.
26
gloom             GTK+ loom browse dialog
571.1.1 by Jasper Groenewegen
Add gmerge command and change MergeDialog to set parent as default if available
27
gmerge            GTK+ merge dialog
208.2.1 by Robert Collins
Better module docstring.
28
gmissing          GTK+ missing revisions dialog. 
29
gpreferences      GTK+ preferences dialog. 
323 by Jelmer Vernooij
Add gsend command.
30
gpush             GTK+ push.
31
gsend             GTK+ send merge directive.
32
gstatus           GTK+ status dialog.
208.2.1 by Robert Collins
Better module docstring.
33
gtags             Manage branch tags.
34
visualise         Graphically visualise this branch. 
35
"""
73 by Jelmer Vernooij
Release 0.9, list myself as maintainer.
36
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
37
import bzrlib
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
38
from bzrlib import errors
39
from bzrlib.commands import plugin_cmds
40
41
import os.path
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
42
590 by Jelmer Vernooij
Open 0.96.0 for development.
43
version_info = (0, 96, 0, 'dev', 1)
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
44
287 by Jelmer Vernooij
Use standard version tuple.
45
if version_info[3] == 'final':
46
    version_string = '%d.%d.%d' % version_info[:3]
47
else:
48
    version_string = '%d.%d.%d%s%d' % version_info
49
__version__ = version_string
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
50
589 by Jelmer Vernooij
Depend on bzr 1.6.
51
required_bzrlib = (1, 6)
423.1.1 by Jelmer Vernooij
Allow bzr-gtk and Bazaar versions to be out of sync. No longer warn about
52
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
53
def check_bzrlib_version(desired):
54
    """Check that bzrlib is compatible.
55
56
    If version is < bzr-gtk version, assume incompatible.
57
    """
58
    bzrlib_version = bzrlib.version_info[:2]
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
59
    if bzrlib_version < desired:
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
60
        from bzrlib.trace import warning
207 by Aaron Bentley
Import BzrError before using it
61
        from bzrlib.errors import BzrError
271 by Jelmer Vernooij
Add common widget for selecting branches.
62
        warning('Installed Bazaar version %s is too old to be used with bzr-gtk'
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
63
                ' %s.' % (bzrlib.__version__, __version__))
287 by Jelmer Vernooij
Use standard version tuple.
64
        raise BzrError('Version mismatch: %r, %r' % (version_info, bzrlib.version_info) )
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
65
66
287 by Jelmer Vernooij
Use standard version tuple.
67
if version_info[2] == "final":
423.1.1 by Jelmer Vernooij
Allow bzr-gtk and Bazaar versions to be out of sync. No longer warn about
68
    check_bzrlib_version(required_bzrlib)
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
69
146 by Jelmer Vernooij
Move more code to top-level directory.
70
if __name__ != 'bzrlib.plugins.gtk':
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
71
    from bzrlib.trace import warning
146 by Jelmer Vernooij
Move more code to top-level directory.
72
    warning("Not running as bzrlib.plugins.gtk, things may break.")
73
66.2.20 by Aaron Bentley
Nicer error when PyGTK not installed
74
def import_pygtk():
75
    try:
76
        import pygtk
77
    except ImportError:
78
        raise errors.BzrCommandError("PyGTK not installed.")
79
    pygtk.require('2.0')
80
    return pygtk
81
82
133 by Jelmer Vernooij
Actually use the ui factory.
83
def set_ui_factory():
177 by Jelmer Vernooij
Register commands all at once.
84
    import_pygtk()
142 by Jelmer Vernooij
Move some files to the top-level directory, add first test.
85
    from ui import GtkUIFactory
133 by Jelmer Vernooij
Actually use the ui factory.
86
    import bzrlib.ui
87
    bzrlib.ui.ui_factory = GtkUIFactory()
88
89
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
90
def data_basedirs():
91
    return [os.path.dirname(__file__),
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
92
             "/usr/share/bzr-gtk", 
93
             "/usr/local/share/bzr-gtk"]
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
94
95
96
def data_path(*args):
97
    for basedir in data_basedirs():
98
        path = os.path.join(basedir, *args)
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
99
        if os.path.exists(path):
100
            return path
101
    return None
102
103
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
104
def icon_path(*args):
105
    return data_path(os.path.join('icons', *args))
106
107
505.1.1 by Jelmer Vernooij
Make handle-patch not dependend on the users name being abentley and install it.
108
def open_display():
109
    pygtk = import_pygtk()
110
    try:
111
        import gtk
112
    except RuntimeError, e:
113
        if str(e) == "could not open display":
114
            raise NoDisplayError
115
    set_ui_factory()
116
    return gtk
117
 
118
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
119
commands = {
120
    "gannotate": ["gblame", "gpraise"],
121
    "gbranch": [],
122
    "gcheckout": [], 
123
    "gcommit": ["gci"], 
124
    "gconflicts": [], 
125
    "gdiff": [],
126
    "ginit": [],
127
    "ginfo": [],
128
    "gmerge": [],
129
    "gmissing": [], 
130
    "gpreferences": [], 
131
    "gpush": [], 
132
    "gselftest": [],
133
    "gsend": [],
134
    "gstatus": ["gst"],
135
    "gtags": [],
136
    "visualise": ["visualize", "vis", "viz"],
137
    }
177 by Jelmer Vernooij
Register commands all at once.
138
580.1.5 by Jelmer Vernooij
Try to import rather than use getattr to avoid problems wrt the order in which plugins are loaded.
139
try:
140
    from bzrlib.plugins import loom
141
except ImportError:
142
    pass # Loom plugin doesn't appear to be present
143
else:
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
144
    commands["gloom"] = []
145
146
for cmd, aliases in commands.iteritems():
147
    plugin_cmds.register_lazy("cmd_%s" % cmd, aliases, "bzrlib.plugins.gtk.commands")
249 by Aaron Bentley
Add gselftest command
148
149
152 by Jelmer Vernooij
Cleanup some more code.
150
import gettext
151
gettext.install('olive-gtk')
152
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
153
# Let's create a specialized alias to protect '_' from being erased by other
154
# uses of '_' as an anonymous variable (think pdb for one).
155
_i18n = gettext.gettext
173.1.2 by Robert Collins
Minor refactoring of __init__ to have less duplication.
156
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
157
class NoDisplayError(errors.BzrCommandError):
55.1.2 by Jelmer Vernooij
Move commands to top-level __init__
158
    """gtk could not find a proper display"""
159
160
    def __str__(self):
133 by Jelmer Vernooij
Actually use the ui factory.
161
        return "No DISPLAY. Unable to run GTK+ application."
162
173.1.2 by Robert Collins
Minor refactoring of __init__ to have less duplication.
163
140 by Jelmer Vernooij
add framework for tests.
164
def test_suite():
165
    from unittest import TestSuite
166
    import tests
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
167
    import sys
168
    default_encoding = sys.getdefaultencoding()
169
    try:
170
        result = TestSuite()
330.6.4 by Aaron Bentley
Allow test suite to run without pygtk
171
        try:
172
            import_pygtk()
173
        except errors.BzrCommandError:
174
            return result
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
175
        result.addTest(tests.test_suite())
176
    finally:
170.1.2 by Aaron Bentley
Test suite only fixes encoding if it's changed. Fixes test_selftest bug.
177
        if sys.getdefaultencoding() != default_encoding:
178
            reload(sys)
179
            sys.setdefaultencoding(default_encoding)
140 by Jelmer Vernooij
add framework for tests.
180
    return result