/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to __init__.py

  • Committer: Jelmer Vernooij
  • Date: 2010-05-25 17:09:02 UTC
  • mto: This revision was merged to the branch mainline in revision 691.
  • Revision ID: jelmer@samba.org-20100525170902-3to8g5iw7ovw79kh
Split out olive into a separate directory.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
15
"""Graphical support for Bazaar using GTK.
 
16
 
 
17
This plugin includes:
 
18
gannotate         GTK+ annotate. 
 
19
gbranch           GTK+ branching. 
 
20
gcheckout         GTK+ checkout. 
 
21
gcommit           GTK+ commit dialog.
 
22
gconflicts        GTK+ conflicts. 
 
23
gdiff             Show differences in working tree in a GTK+ Window. 
 
24
ginit             Initialise a new branch.
 
25
ginfo             GTK+ branch info dialog
 
26
gloom             GTK+ loom browse dialog
 
27
gmerge            GTK+ merge dialog
 
28
gmissing          GTK+ missing revisions dialog. 
 
29
gpreferences      GTK+ preferences dialog. 
 
30
gpush             GTK+ push.
 
31
gsend             GTK+ send merge directive.
 
32
gstatus           GTK+ status dialog.
 
33
gtags             Manage branch tags.
 
34
visualise         Graphically visualise this branch. 
 
35
"""
 
36
 
 
37
import os
 
38
import sys
 
39
 
 
40
if getattr(sys, "frozen", None) is not None: # we run bzr.exe
 
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
 
 
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
 
 
53
import bzrlib
 
54
import bzrlib.api
 
55
from bzrlib import (
 
56
    branch,
 
57
    config,
 
58
    errors,
 
59
    )
 
60
from bzrlib.commands import plugin_cmds
 
61
 
 
62
 
 
63
version_info = (0, 99, 0, 'dev', 1)
 
64
 
 
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
 
70
 
 
71
COMPATIBLE_BZR_VERSIONS = [(1, 6, 0), (1, 7, 0), (1, 8, 0), (1, 9, 0),
 
72
                           (1, 10, 0), (1, 11, 0), (1, 12, 0), (1, 13, 0),
 
73
                           (1, 15, 0),
 
74
                           (1, 17, 0),
 
75
                           (2, 1, 0),
 
76
                           (2, 2, 0),
 
77
                           ]
 
78
 
 
79
bzrlib.api.require_any_api(bzrlib, COMPATIBLE_BZR_VERSIONS)
 
80
 
 
81
if __name__ != 'bzrlib.plugins.gtk':
 
82
    from bzrlib.trace import warning
 
83
    warning("Not running as bzrlib.plugins.gtk, things may break.")
 
84
 
 
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
 
 
94
def set_ui_factory():
 
95
    import_pygtk()
 
96
    from ui import GtkUIFactory
 
97
    import bzrlib.ui
 
98
    bzrlib.ui.ui_factory = GtkUIFactory()
 
99
 
 
100
 
 
101
def data_basedirs():
 
102
    return [os.path.dirname(__file__),
 
103
             "/usr/share/bzr-gtk", 
 
104
             "/usr/local/share/bzr-gtk"]
 
105
 
 
106
 
 
107
def data_path(*args):
 
108
    for basedir in data_basedirs():
 
109
        path = os.path.join(basedir, *args)
 
110
        if os.path.exists(path):
 
111
            return path
 
112
    return None
 
113
 
 
114
 
 
115
def icon_path(*args):
 
116
    return data_path(os.path.join('icons', *args))
 
117
 
 
118
 
 
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
 
128
 
 
129
 
 
130
commands = {
 
131
    "gannotate": ["gblame", "gpraise"],
 
132
    "gbranch": [],
 
133
    "gcheckout": [],
 
134
    "gcommit": ["gci"],
 
135
    "gconflicts": [],
 
136
    "gdiff": [],
 
137
    "ginit": [],
 
138
    "ginfo": [],
 
139
    "gmerge": [],
 
140
    "gmissing": [],
 
141
    "gpreferences": [],
 
142
    "gpush": [],
 
143
    "gselftest": [],
 
144
    "gsend": [],
 
145
    "gstatus": ["gst"],
 
146
    "gtags": [],
 
147
    "visualise": ["visualize", "vis", "viz", 'glog'],
 
148
    }
 
149
 
 
150
try:
 
151
    from bzrlib.plugins import loom
 
152
except ImportError:
 
153
    pass # Loom plugin doesn't appear to be present
 
154
else:
 
155
    commands["gloom"] = []
 
156
 
 
157
for cmd, aliases in commands.iteritems():
 
158
    plugin_cmds.register_lazy("cmd_%s" % cmd, aliases,
 
159
                              "bzrlib.plugins.gtk.commands")
 
160
 
 
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")
 
168
 
 
169
class NoDisplayError(errors.BzrCommandError):
 
170
    """gtk could not find a proper display"""
 
171
 
 
172
    def __str__(self):
 
173
        return "No DISPLAY. Unable to run GTK+ application."
 
174
 
 
175
 
 
176
credential_store_registry = getattr(config, "credential_store_registry", None)
 
177
if credential_store_registry is not None:
 
178
    try:
 
179
        credential_store_registry.register_lazy(
 
180
            "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore",
 
181
            help="The GNOME Keyring.", fallback=True)
 
182
    except TypeError:
 
183
    # Fallback credentials stores were introduced in Bazaar 1.15
 
184
        credential_store_registry.register_lazy(
 
185
            "gnome-keyring", "bzrlib.plugins.gtk.keyring", "GnomeKeyringCredentialStore",
 
186
            help="The GNOME Keyring.")
 
187
 
 
188
 
 
189
def load_tests(basic_tests, module, loader):
 
190
    testmod_names = [
 
191
        'tests',
 
192
        ]
 
193
    import sys
 
194
    default_encoding = sys.getdefaultencoding()
 
195
    try:
 
196
        result = basic_tests
 
197
        try:
 
198
            import_pygtk()
 
199
        except errors.BzrCommandError:
 
200
            return basic_tests
 
201
        basic_tests.addTest(loader.loadTestsFromModuleNames(
 
202
                ["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
 
203
    finally:
 
204
        if sys.getdefaultencoding() != default_encoding:
 
205
            reload(sys)
 
206
            sys.setdefaultencoding(default_encoding)
 
207
    return basic_tests