/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
766 by Jelmer Vernooij
Use absolute_import.
36
from __future__ import absolute_import
37
670.1.1 by Vincent Ladeuil
Patch as proposed on https://bugs.edge.launchpad.net/bzr/+bug/388790
38
import os
39
import sys
40
41
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.
42
43
    # FIXME: Unless a better packaging solution is found, the following
44
    # provides a workaround for https://bugs.launchpad.net/bzr/+bug/388790 Also
45
    # see https://code.edge.launchpad.net/~vila/bzr-gtk/388790-windows-setup
46
    # for more details about while it's needed.
47
670.1.1 by Vincent Ladeuil
Patch as proposed on https://bugs.edge.launchpad.net/bzr/+bug/388790
48
    # NOTE: _lib must be ahead of bzrlib or sax.saxutils (in olive) fails
49
    here = os.path.dirname(__file__)
50
    sys.path.insert(0, os.path.join(here, '_lib'))
51
    sys.path.append(os.path.join(here, '_lib/gtk-2.0'))
52
53
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
54
import bzrlib
625.1.1 by Jelmer Vernooij
Use bzrlib.api.require_any_version() rather than doing our own version checking.
55
import bzrlib.api
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
56
from bzrlib.commands import plugin_cmds
57
766 by Jelmer Vernooij
Use absolute_import.
58
from bzrlib.plugins.gtk.info import (
696 by Jelmer Vernooij
Start on 0.100.0.
59
    bzr_plugin_version as version_info,
60
    bzr_compatible_versions,
61
    )
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
62
287 by Jelmer Vernooij
Use standard version tuple.
63
if version_info[3] == 'final':
64
    version_string = '%d.%d.%d' % version_info[:3]
65
else:
66
    version_string = '%d.%d.%d%s%d' % version_info
67
__version__ = version_string
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
68
696 by Jelmer Vernooij
Start on 0.100.0.
69
bzrlib.api.require_any_api(bzrlib, bzr_compatible_versions)
137 by Jelmer Vernooij
Warn about incompatible versions (taken from bzrtools, thanks Aaron).
70
146 by Jelmer Vernooij
Move more code to top-level directory.
71
if __name__ != 'bzrlib.plugins.gtk':
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
72
    from bzrlib.trace import warning
146 by Jelmer Vernooij
Move more code to top-level directory.
73
    warning("Not running as bzrlib.plugins.gtk, things may break.")
74
66.2.20 by Aaron Bentley
Nicer error when PyGTK not installed
75
133 by Jelmer Vernooij
Actually use the ui factory.
76
def set_ui_factory():
767 by Jelmer Vernooij
Fix a relative import.
77
    from bzrlib.plugins.gtk.ui import GtkUIFactory
133 by Jelmer Vernooij
Actually use the ui factory.
78
    import bzrlib.ui
79
    bzrlib.ui.ui_factory = GtkUIFactory()
80
81
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
82
def data_basedirs():
83
    return [os.path.dirname(__file__),
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
84
             "/usr/share/bzr-gtk", 
85
             "/usr/local/share/bzr-gtk"]
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
86
87
88
def data_path(*args):
89
    for basedir in data_basedirs():
90
        path = os.path.join(basedir, *args)
399.1.19 by Jelmer Vernooij
Add utility function for finding icon paths.
91
        if os.path.exists(path):
92
            return path
93
    return None
94
95
531.6.1 by Jelmer Vernooij
Try harder to find license and credits files.
96
def icon_path(*args):
97
    return data_path(os.path.join('icons', *args))
98
99
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
100
commands = {
101
    "gannotate": ["gblame", "gpraise"],
102
    "gbranch": [],
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
103
    "gcheckout": [],
104
    "gcommit": ["gci"],
105
    "gconflicts": [],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
106
    "gdiff": [],
107
    "ginit": [],
108
    "gmerge": [],
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
109
    "gmissing": [],
110
    "gpreferences": [],
111
    "gpush": [],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
112
    "gsend": [],
113
    "gstatus": ["gst"],
114
    "gtags": [],
687 by Vincent Ladeuil
Add glog as an alias for viz.
115
    "visualise": ["visualize", "vis", "viz", 'glog'],
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
116
    }
177 by Jelmer Vernooij
Register commands all at once.
117
580.1.5 by Jelmer Vernooij
Try to import rather than use getattr to avoid problems wrt the order in which plugins are loaded.
118
try:
119
    from bzrlib.plugins import loom
120
except ImportError:
121
    pass # Loom plugin doesn't appear to be present
122
else:
625.2.1 by Jelmer Vernooij
Move commands to a separate module and register them lazily.
123
    commands["gloom"] = []
124
125
for cmd, aliases in commands.iteritems():
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
126
    plugin_cmds.register_lazy("cmd_%s" % cmd, aliases,
127
                              "bzrlib.plugins.gtk.commands")
249 by Aaron Bentley
Add gselftest command
128
635.2.12 by Vincent Ladeuil
Implement commit message saving without modifying bzrlib.
129
def save_commit_messages(*args):
742 by Jelmer Vernooij
Move commit message saving to separate file.
130
    from bzrlib.plugins.gtk import commitmsgs
131
    commitmsgs.save_commit_messages(*args)
635.2.12 by Vincent Ladeuil
Implement commit message saving without modifying bzrlib.
132
786 by Jelmer Vernooij
Use install_lazy_named_hook if available.
133
try:
134
    from bzrlib.hooks import install_lazy_named_hook
135
except ImportError:
136
    from bzrlib.branch import Branch
137
    Branch.hooks.install_named_hook('post_uncommit',
138
                                    save_commit_messages,
139
                                    "Saving commit messages for gcommit")
140
else:
141
    install_lazy_named_hook("bzrlib.branch", "Branch.hooks",
142
        'post_uncommit', save_commit_messages, "Saving commit messages for gcommit")
143
786.1.1 by Jelmer Vernooij
use register-lazy
144
try:
145
    from bzrlib.registry import register_lazy
146
except ImportError:
147
    from bzrlib import config
148
    option_registry = getattr(config, "option_registry", None)
149
    if option_registry is not None:
150
        config.option_registry.register_lazy('nautilus_integration',
151
                'bzrlib.plugins.gtk.config', 'opt_nautilus_integration')
152
else:
153
    register_lazy("bzrlib.config", "option_registry",
154
        'nautilus_integration', 'bzrlib.plugins.gtk.config',
155
        'opt_nautilus_integration')
249 by Aaron Bentley
Add gselftest command
156
635.1.1 by Jelmer Vernooij
Support gnome keyring.
157
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
158
def load_tests(basic_tests, module, loader):
159
    testmod_names = [
160
        'tests',
161
        ]
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
162
    import sys
163
    default_encoding = sys.getdefaultencoding()
164
    try:
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
165
        result = basic_tests
330.6.4 by Aaron Bentley
Allow test suite to run without pygtk
166
        try:
734.1.2 by Curtis Hovey
Removed import_pygtk because gi does not impicitly call Main(). Inlined checks for gtk availablility.
167
            import gi.repository.Gtk
168
        except ImportError:
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
169
            return basic_tests
170
        basic_tests.addTest(loader.loadTestsFromModuleNames(
171
                ["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
163 by Aaron Bentley
Prevent test suite from causing default-encoding changes
172
    finally:
170.1.2 by Aaron Bentley
Test suite only fixes encoding if it's changed. Fixes test_selftest bug.
173
        if sys.getdefaultencoding() != default_encoding:
174
            reload(sys)
175
            sys.setdefaultencoding(default_encoding)
632 by Vincent Ladeuil
Upgrade to the new loading tests API.
176
    return basic_tests
688.2.3 by Jelmer Vernooij
Move more olive-specific code into olive/
177