/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:
707 by Jelmer Vernooij
Move display opening, etc to commands.py.
18
gannotate         GTK+ annotate.
19
gbranch           GTK+ branching.
20
gcheckout         GTK+ checkout.
323 by Jelmer Vernooij
Add gsend command.
21
gcommit           GTK+ commit dialog.
707 by Jelmer Vernooij
Move display opening, etc to commands.py.
22
gconflicts        GTK+ conflicts.
23
gdiff             Show differences in working tree in a GTK+ Window.
208.2.1 by Robert Collins
Better module docstring.
24
ginit             Initialise a new branch.
580.1.1 by Jelmer Vernooij
Add gloom command.
25
gloom             GTK+ loom browse dialog
571.1.1 by Jasper Groenewegen
Add gmerge command and change MergeDialog to set parent as default if available
26
gmerge            GTK+ merge dialog
707 by Jelmer Vernooij
Move display opening, etc to commands.py.
27
gmissing          GTK+ missing revisions dialog.
28
gpreferences      GTK+ preferences dialog.
323 by Jelmer Vernooij
Add gsend command.
29
gpush             GTK+ push.
30
gsend             GTK+ send merge directive.
31
gstatus           GTK+ status dialog.
208.2.1 by Robert Collins
Better module docstring.
32
gtags             Manage branch tags.
707 by Jelmer Vernooij
Move display opening, etc to commands.py.
33
visualise         Graphically visualise this branch.
208.2.1 by Robert Collins
Better module docstring.
34
"""
73 by Jelmer Vernooij
Release 0.9, list myself as maintainer.
35
670.1.1 by Vincent Ladeuil
Patch as proposed on https://bugs.edge.launchpad.net/bzr/+bug/388790
36
import os
37
import sys
38
39
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.
40
41
    # FIXME: Unless a better packaging solution is found, the following
42
    # provides a workaround for https://bugs.launchpad.net/bzr/+bug/388790 Also
43
    # see https://code.edge.launchpad.net/~vila/bzr-gtk/388790-windows-setup
44
    # for more details about while it's needed.
45
670.1.1 by Vincent Ladeuil
Patch as proposed on https://bugs.edge.launchpad.net/bzr/+bug/388790
46
    # NOTE: _lib must be ahead of bzrlib or sax.saxutils (in olive) fails
47
    here = os.path.dirname(__file__)
48
    sys.path.insert(0, os.path.join(here, '_lib'))
49
    sys.path.append(os.path.join(here, '_lib/gtk-2.0'))
50
51
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
52
import bzrlib
625.1.1 by Jelmer Vernooij
Use bzrlib.api.require_any_version() rather than doing our own version checking.
53
import bzrlib.api
635.1.1 by Jelmer Vernooij
Support gnome keyring.
54
from bzrlib import (
635.2.12 by Vincent Ladeuil
Implement commit message saving without modifying bzrlib.
55
    branch,
635.1.1 by Jelmer Vernooij
Support gnome keyring.
56
    config,
57
    errors,
58
    )
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
59
from bzrlib.commands import plugin_cmds
60
696 by Jelmer Vernooij
Start on 0.100.0.
61
from info import (
62
    bzr_plugin_version as version_info,
63
    bzr_compatible_versions,
64
    )
696.1.5 by David Planella
Added proper i18n support with gettext
65
from gettext import (
66
    gettext,
696.1.6 by David Planella
Added missing gettext modules to import
67
    textdomain,
68
    bindtextdomain,
69
    bind_textdomain_codeset,
696.1.5 by David Planella
Added proper i18n support with gettext
70
    )
71
72
# FIXME: We should find out LOCALEDIR at compile or run time. The current
73
# hardcoded path will work for most distributions, but not for e.g. Solaris and
74
# Windows
75
GETTEXT_PACKAGE = 'bzr-gtk'
76
LOCALEDIR = '/usr/share/locale'
77
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR)
78
bind_textdomain_codeset(GETTEXT_PACKAGE, 'UTF-8')
79
textdomain(GETTEXT_PACKAGE)
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
80
287 by Jelmer Vernooij
Use standard version tuple.
81
if version_info[3] == 'final':
82
    version_string = '%d.%d.%d' % version_info[:3]
83
else:
84
    version_string = '%d.%d.%d%s%d' % version_info
85
__version__ = version_string
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
86
696 by Jelmer Vernooij
Start on 0.100.0.
87
bzrlib.api.require_any_api(bzrlib, bzr_compatible_versions)
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
88
146 by Jelmer Vernooij
Move more code to top-level directory.
89
if __name__ != 'bzrlib.plugins.gtk':
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
90
    from bzrlib.trace import warning
146 by Jelmer Vernooij
Move more code to top-level directory.
91
    warning("Not running as bzrlib.plugins.gtk, things may break.")
92
66.2.20 by Aaron Bentley
Nicer error when PyGTK not installed
93
def import_pygtk():
94
    try:
95
        import pygtk
96
    except ImportError:
97
        raise errors.BzrCommandError("PyGTK not installed.")
98
    pygtk.require('2.0')
99
    return pygtk
100
101
133 by Jelmer Vernooij
Actually use the ui factory.
102
def set_ui_factory():
177 by Jelmer Vernooij
Register commands all at once.
103
    import_pygtk()
142 by Jelmer Vernooij
Move some files to the top-level directory, add first test.
104
    from ui import GtkUIFactory
133 by Jelmer Vernooij
Actually use the ui factory.
105
    import bzrlib.ui
106
    bzrlib.ui.ui_factory = GtkUIFactory()
107
108
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
109
def data_basedirs():
110
    return [os.path.dirname(__file__),
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
111
             "/usr/share/bzr-gtk", 
112
             "/usr/local/share/bzr-gtk"]
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
113
114
115
def data_path(*args):
116
    for basedir in data_basedirs():
117
        path = os.path.join(basedir, *args)
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
118
        if os.path.exists(path):
119
            return path
120
    return None
121
122
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
123
def icon_path(*args):
124
    return data_path(os.path.join('icons', *args))
125
126
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
127
commands = {
128
    "gannotate": ["gblame", "gpraise"],
129
    "gbranch": [],
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
130
    "gcheckout": [],
131
    "gcommit": ["gci"],
132
    "gconflicts": [],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
133
    "gdiff": [],
134
    "ginit": [],
135
    "gmerge": [],
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
136
    "gmissing": [],
137
    "gpreferences": [],
138
    "gpush": [],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
139
    "gsend": [],
140
    "gstatus": ["gst"],
141
    "gtags": [],
687 by Vincent Ladeuil
Add glog as an alias for viz.
142
    "visualise": ["visualize", "vis", "viz", 'glog'],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
143
    }
177 by Jelmer Vernooij
Register commands all at once.
144
580.1.5 by Jelmer Vernooij
Try to import rather than use getattr to avoid problems wrt the order in which plugins are loaded.
145
try:
146
    from bzrlib.plugins import loom
147
except ImportError:
148
    pass # Loom plugin doesn't appear to be present
149
else:
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
150
    commands["gloom"] = []
151
152
for cmd, aliases in commands.iteritems():
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
153
    plugin_cmds.register_lazy("cmd_%s" % cmd, aliases,
154
                              "bzrlib.plugins.gtk.commands")
249 by Aaron Bentley
Add gselftest command
155
635.2.12 by Vincent Ladeuil
Implement commit message saving without modifying bzrlib.
156
def save_commit_messages(*args):
157
    from bzrlib.plugins.gtk import commit
158
    commit.save_commit_messages(*args)
159
160
branch.Branch.hooks.install_named_hook('post_uncommit',
161
                                       save_commit_messages,
162
                                       "Saving commit messages for gcommit")
249 by Aaron Bentley
Add gselftest command
163
635.1.1 by Jelmer Vernooij
Support gnome keyring.
164
credential_store_registry = getattr(config, "credential_store_registry", None)
165
if credential_store_registry is not None:
166
    try:
167
        credential_store_registry.register_lazy(
168
            "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore",
169
            help="The GNOME Keyring.", fallback=True)
170
    except TypeError:
171
    # Fallback credentials stores were introduced in Bazaar 1.15
172
        credential_store_registry.register_lazy(
173
            "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore",
174
            help="The GNOME Keyring.")
175
176
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
177
def load_tests(basic_tests, module, loader):
178
    testmod_names = [
179
        'tests',
180
        ]
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
181
    import sys
182
    default_encoding = sys.getdefaultencoding()
183
    try:
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
184
        result = basic_tests
330.6.4 by Aaron Bentley
Allow test suite to run without pygtk
185
        try:
186
            import_pygtk()
187
        except errors.BzrCommandError:
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
188
            return basic_tests
189
        basic_tests.addTest(loader.loadTestsFromModuleNames(
190
                ["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
191
    finally:
170.1.2 by Aaron Bentley
Test suite only fixes encoding if it's changed. Fixes test_selftest bug.
192
        if sys.getdefaultencoding() != default_encoding:
193
            reload(sys)
194
            sys.setdefaultencoding(default_encoding)
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
195
    return basic_tests
688.2.3 by Jelmer Vernooij
Move more olive-specific code into olive/
196
197
198
def _i18n(text):
696.1.5 by David Planella
Added proper i18n support with gettext
199
    return gettext(text)