/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
670.1.1 by Vincent Ladeuil
Patch as proposed on https://bugs.edge.launchpad.net/bzr/+bug/388790
37
import os
38
import sys
39
40
if getattr(sys, "frozen", None) is not None: # we run bzr.exe
670.1.2 by Vincent Ladeuil
Clarify intent and more cleanup from review feedback.
41
42
    # FIXME: Unless a better packaging solution is found, the following
43
    # provides a workaround for https://bugs.launchpad.net/bzr/+bug/388790 Also
44
    # see https://code.edge.launchpad.net/~vila/bzr-gtk/388790-windows-setup
45
    # for more details about while it's needed.
46
670.1.1 by Vincent Ladeuil
Patch as proposed on https://bugs.edge.launchpad.net/bzr/+bug/388790
47
    # NOTE: _lib must be ahead of bzrlib or sax.saxutils (in olive) fails
48
    here = os.path.dirname(__file__)
49
    sys.path.insert(0, os.path.join(here, '_lib'))
50
    sys.path.append(os.path.join(here, '_lib/gtk-2.0'))
51
52
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
53
import bzrlib
625.1.1 by Jelmer Vernooij
Use bzrlib.api.require_any_version() rather than doing our own version checking.
54
import bzrlib.api
635.1.1 by Jelmer Vernooij
Support gnome keyring.
55
from bzrlib import (
635.2.12 by Vincent Ladeuil
Implement commit message saving without modifying bzrlib.
56
    branch,
635.1.1 by Jelmer Vernooij
Support gnome keyring.
57
    config,
58
    errors,
59
    )
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
60
from bzrlib.commands import plugin_cmds
61
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
62
680 by Vincent Ladeuil
Open 0.99.0 for development.
63
version_info = (0, 99, 0, 'dev', 1)
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
64
287 by Jelmer Vernooij
Use standard version tuple.
65
if version_info[3] == 'final':
66
    version_string = '%d.%d.%d' % version_info[:3]
67
else:
68
    version_string = '%d.%d.%d%s%d' % version_info
69
__version__ = version_string
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
70
625.1.1 by Jelmer Vernooij
Use bzrlib.api.require_any_version() rather than doing our own version checking.
71
COMPATIBLE_BZR_VERSIONS = [(1, 6, 0), (1, 7, 0), (1, 8, 0), (1, 9, 0),
628.1.2 by Vincent Ladeuil
Upgrade COMPATIBLE_BZR_VERSIONS.
72
                           (1, 10, 0), (1, 11, 0), (1, 12, 0), (1, 13, 0),
650 by Vincent Ladeuil
Trivial fix.
73
                           (1, 15, 0),
659 by Vincent Ladeuil
Fix bzr compatibility for early adopters.
74
                           (1, 17, 0),
666 by Vincent Ladeuil
Catch-up with bzr.dev.
75
                           (2, 1, 0),
688 by Martin Pool
Works with bzr 2.2
76
                           (2, 2, 0),
659 by Vincent Ladeuil
Fix bzr compatibility for early adopters.
77
                           ]
625.1.1 by Jelmer Vernooij
Use bzrlib.api.require_any_version() rather than doing our own version checking.
78
79
bzrlib.api.require_any_api(bzrlib, COMPATIBLE_BZR_VERSIONS)
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
80
146 by Jelmer Vernooij
Move more code to top-level directory.
81
if __name__ != 'bzrlib.plugins.gtk':
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
82
    from bzrlib.trace import warning
146 by Jelmer Vernooij
Move more code to top-level directory.
83
    warning("Not running as bzrlib.plugins.gtk, things may break.")
84
66.2.20 by Aaron Bentley
Nicer error when PyGTK not installed
85
def import_pygtk():
86
    try:
87
        import pygtk
88
    except ImportError:
89
        raise errors.BzrCommandError("PyGTK not installed.")
90
    pygtk.require('2.0')
91
    return pygtk
92
93
133 by Jelmer Vernooij
Actually use the ui factory.
94
def set_ui_factory():
177 by Jelmer Vernooij
Register commands all at once.
95
    import_pygtk()
142 by Jelmer Vernooij
Move some files to the top-level directory, add first test.
96
    from ui import GtkUIFactory
133 by Jelmer Vernooij
Actually use the ui factory.
97
    import bzrlib.ui
98
    bzrlib.ui.ui_factory = GtkUIFactory()
99
100
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
101
def data_basedirs():
102
    return [os.path.dirname(__file__),
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
103
             "/usr/share/bzr-gtk", 
104
             "/usr/local/share/bzr-gtk"]
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
105
106
107
def data_path(*args):
108
    for basedir in data_basedirs():
109
        path = os.path.join(basedir, *args)
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
110
        if os.path.exists(path):
111
            return path
112
    return None
113
114
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
115
def icon_path(*args):
116
    return data_path(os.path.join('icons', *args))
117
118
505.1.1 by Jelmer Vernooij
Make handle-patch not dependend on the users name being abentley and install it.
119
def open_display():
120
    pygtk = import_pygtk()
121
    try:
122
        import gtk
123
    except RuntimeError, e:
124
        if str(e) == "could not open display":
125
            raise NoDisplayError
126
    set_ui_factory()
127
    return gtk
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
128
505.1.1 by Jelmer Vernooij
Make handle-patch not dependend on the users name being abentley and install it.
129
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
130
commands = {
131
    "gannotate": ["gblame", "gpraise"],
132
    "gbranch": [],
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
133
    "gcheckout": [],
134
    "gcommit": ["gci"],
135
    "gconflicts": [],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
136
    "gdiff": [],
137
    "ginit": [],
138
    "ginfo": [],
139
    "gmerge": [],
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
140
    "gmissing": [],
141
    "gpreferences": [],
142
    "gpush": [],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
143
    "gselftest": [],
144
    "gsend": [],
145
    "gstatus": ["gst"],
146
    "gtags": [],
687 by Vincent Ladeuil
Add glog as an alias for viz.
147
    "visualise": ["visualize", "vis", "viz", 'glog'],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
148
    }
177 by Jelmer Vernooij
Register commands all at once.
149
580.1.5 by Jelmer Vernooij
Try to import rather than use getattr to avoid problems wrt the order in which plugins are loaded.
150
try:
151
    from bzrlib.plugins import loom
152
except ImportError:
153
    pass # Loom plugin doesn't appear to be present
154
else:
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
155
    commands["gloom"] = []
156
157
for cmd, aliases in commands.iteritems():
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
158
    plugin_cmds.register_lazy("cmd_%s" % cmd, aliases,
159
                              "bzrlib.plugins.gtk.commands")
249 by Aaron Bentley
Add gselftest command
160
635.2.12 by Vincent Ladeuil
Implement commit message saving without modifying bzrlib.
161
def save_commit_messages(*args):
162
    from bzrlib.plugins.gtk import commit
163
    commit.save_commit_messages(*args)
164
165
branch.Branch.hooks.install_named_hook('post_uncommit',
166
                                       save_commit_messages,
167
                                       "Saving commit messages for gcommit")
249 by Aaron Bentley
Add gselftest command
168
152 by Jelmer Vernooij
Cleanup some more code.
169
import gettext
170
gettext.install('olive-gtk')
171
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
172
# Let's create a specialized alias to protect '_' from being erased by other
173
# uses of '_' as an anonymous variable (think pdb for one).
174
_i18n = gettext.gettext
173.1.2 by Robert Collins
Minor refactoring of __init__ to have less duplication.
175
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
176
class NoDisplayError(errors.BzrCommandError):
55.1.2 by Jelmer Vernooij
Move commands to top-level __init__
177
    """gtk could not find a proper display"""
178
179
    def __str__(self):
133 by Jelmer Vernooij
Actually use the ui factory.
180
        return "No DISPLAY. Unable to run GTK+ application."
181
173.1.2 by Robert Collins
Minor refactoring of __init__ to have less duplication.
182
635.1.1 by Jelmer Vernooij
Support gnome keyring.
183
credential_store_registry = getattr(config, "credential_store_registry", None)
184
if credential_store_registry is not None:
185
    try:
186
        credential_store_registry.register_lazy(
187
            "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore",
188
            help="The GNOME Keyring.", fallback=True)
189
    except TypeError:
190
    # Fallback credentials stores were introduced in Bazaar 1.15
191
        credential_store_registry.register_lazy(
192
            "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore",
193
            help="The GNOME Keyring.")
194
195
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
196
def load_tests(basic_tests, module, loader):
197
    testmod_names = [
198
        'tests',
199
        ]
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
200
    import sys
201
    default_encoding = sys.getdefaultencoding()
202
    try:
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
203
        result = basic_tests
330.6.4 by Aaron Bentley
Allow test suite to run without pygtk
204
        try:
205
            import_pygtk()
206
        except errors.BzrCommandError:
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
207
            return basic_tests
208
        basic_tests.addTest(loader.loadTestsFromModuleNames(
209
                ["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
210
    finally:
170.1.2 by Aaron Bentley
Test suite only fixes encoding if it's changed. Fixes test_selftest bug.
211
        if sys.getdefaultencoding() != default_encoding:
212
            reload(sys)
213
            sys.setdefaultencoding(default_encoding)
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
214
    return basic_tests