/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: Aaron Bentley
  • Date: 2007-01-17 06:42:55 UTC
  • mto: This revision was merged to the branch mainline in revision 129.
  • Revision ID: aaron.bentley@utoronto.ca-20070117064255-x4gznz5e0lyjq3gk
Remove usused span selector

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
"""GTK+ frontends to Bazaar commands """
 
16
 
 
17
from bzrlib import errors
 
18
from bzrlib.commands import Command, register_command, display_command
 
19
from bzrlib.errors import NotVersionedError, BzrCommandError, NoSuchFile
 
20
from bzrlib.commands import Command, register_command
 
21
from bzrlib.option import Option
 
22
from bzrlib.branch import Branch
 
23
from bzrlib.workingtree import WorkingTree
 
24
from bzrlib.bzrdir import BzrDir
 
25
 
 
26
__version__ = '0.13.0'
 
27
 
 
28
class cmd_gbranch(Command):
 
29
    """GTK+ branching.
 
30
    
 
31
    """
 
32
 
 
33
    def run(self):
 
34
        import pygtk
 
35
        pygtk.require("2.0")
 
36
        try:
 
37
            import gtk
 
38
        except RuntimeError, e:
 
39
            if str(e) == "could not open display":
 
40
                raise NoDisplayError
 
41
 
 
42
        from bzrlib.plugins.gtk.olive.branch import BranchDialog
 
43
 
 
44
        window = BranchDialog('.')
 
45
        window.display()
 
46
 
 
47
register_command(cmd_gbranch)
 
48
 
 
49
class cmd_gdiff(Command):
 
50
    """Show differences in working tree in a GTK+ Window.
 
51
    
 
52
    Otherwise, all changes for the tree are listed.
 
53
    """
 
54
    takes_args = ['filename?']
 
55
    takes_options = ['revision']
 
56
 
 
57
    @display_command
 
58
    def run(self, revision=None, filename=None):
 
59
        wt = WorkingTree.open_containing(".")[0]
 
60
        branch = wt.branch
 
61
        if revision is not None:
 
62
            if len(revision) == 1:
 
63
                tree1 = wt
 
64
                revision_id = revision[0].in_history(branch).rev_id
 
65
                tree2 = branch.repository.revision_tree(revision_id)
 
66
            elif len(revision) == 2:
 
67
                revision_id_0 = revision[0].in_history(branch).rev_id
 
68
                tree2 = branch.repository.revision_tree(revision_id_0)
 
69
                revision_id_1 = revision[1].in_history(branch).rev_id
 
70
                tree1 = branch.repository.revision_tree(revision_id_1)
 
71
        else:
 
72
            tree1 = wt
 
73
            tree2 = tree1.basis_tree()
 
74
 
 
75
        from viz.diffwin import DiffWindow
 
76
        import gtk
 
77
        window = DiffWindow()
 
78
        window.connect("destroy", lambda w: gtk.main_quit())
 
79
        window.set_diff("Working Tree", tree1, tree2)
 
80
        if filename is not None:
 
81
            tree_filename = wt.relpath(filename)
 
82
            try:
 
83
                window.set_file(tree_filename)
 
84
            except NoSuchFile:
 
85
                if (tree1.inventory.path2id(tree_filename) is None and 
 
86
                    tree2.inventory.path2id(tree_filename) is None):
 
87
                    raise NotVersionedError(filename)
 
88
                raise BzrCommandError('No changes found for file "%s"' % 
 
89
                                      filename)
 
90
        window.show()
 
91
 
 
92
        gtk.main()
 
93
 
 
94
register_command(cmd_gdiff)
 
95
 
 
96
class cmd_visualise(Command):
 
97
    """Graphically visualise this branch.
 
98
 
 
99
    Opens a graphical window to allow you to see the history of the branch
 
100
    and relationships between revisions in a visual manner,
 
101
 
 
102
    The default starting point is latest revision on the branch, you can
 
103
    specify a starting point with -r revision.
 
104
    """
 
105
    takes_options = [
 
106
        "revision",
 
107
        Option('limit', "maximum number of revisions to display",
 
108
               int, 'count')]
 
109
    takes_args = [ "location?" ]
 
110
    aliases = [ "visualize", "vis", "viz" ]
 
111
 
 
112
    def run(self, location=".", revision=None, limit=None):
 
113
        (branch, path) = Branch.open_containing(location)
 
114
        branch.lock_read()
 
115
        branch.repository.lock_read()
 
116
        try:
 
117
            if revision is None:
 
118
                revid = branch.last_revision()
 
119
                if revid is None:
 
120
                    return
 
121
            else:
 
122
                (revno, revid) = revision[0].in_history(branch)
 
123
 
 
124
            from viz.bzrkapp import BzrkApp
 
125
                
 
126
            app = BzrkApp()
 
127
            app.show(branch, revid, limit)
 
128
        finally:
 
129
            branch.repository.unlock()
 
130
            branch.unlock()
 
131
        app.main()
 
132
 
 
133
 
 
134
register_command(cmd_visualise)
 
135
 
 
136
class cmd_gannotate(Command):
 
137
    """GTK+ annotate.
 
138
    
 
139
    Browse changes to FILENAME line by line in a GTK+ window.
 
140
    """
 
141
 
 
142
    takes_args = ["filename", "line?"]
 
143
    takes_options = [
 
144
        Option("all", help="show annotations on all lines"),
 
145
        Option("plain", help="don't highlight annotation lines"),
 
146
        Option("line", type=int, argname="lineno",
 
147
               help="jump to specified line number"),
 
148
        "revision",
 
149
    ]
 
150
    aliases = ["gblame", "gpraise"]
 
151
    
 
152
    def run(self, filename, all=False, plain=False, line='1', revision=None):
 
153
        import pygtk
 
154
        pygtk.require("2.0")
 
155
 
 
156
        try:
 
157
            import gtk
 
158
        except RuntimeError, e:
 
159
            if str(e) == "could not open display":
 
160
                raise NoDisplayError
 
161
 
 
162
        try:
 
163
            line = int(line)
 
164
        except ValueError:
 
165
            raise BzrCommandError('Line argument ("%s") is not a number.' % 
 
166
                                  line)
 
167
 
 
168
        from annotate.gannotate import GAnnotateWindow
 
169
        from annotate.config import GAnnotateConfig
 
170
 
 
171
        try:
 
172
            (tree, path) = WorkingTree.open_containing(filename)
 
173
            branch = tree.branch
 
174
        except errors.NoWorkingTree:
 
175
            (branch, path) = Branch.open_containing(filename)
 
176
            tree = branch.basis_tree()
 
177
 
 
178
        file_id = tree.path2id(path)
 
179
 
 
180
        if file_id is None:
 
181
            raise NotVersionedError(filename)
 
182
        if revision is not None:
 
183
            if len(revision) != 1:
 
184
                raise BzrCommandError("Only 1 revion may be specified.")
 
185
            revision_id = revision[0].in_history(branch).rev_id
 
186
            tree = branch.repository.revision_tree(revision_id)
 
187
        else:
 
188
            revision_id = getattr(tree, 'get_revision_id', lambda: None)()
 
189
 
 
190
        window = GAnnotateWindow(all, plain)
 
191
        window.connect("destroy", lambda w: gtk.main_quit())
 
192
        window.set_title(path + " - gannotate")
 
193
        config = GAnnotateConfig(window)
 
194
        window.show()
 
195
        branch.lock_read()
 
196
        try:
 
197
            window.annotate(tree, branch, file_id)
 
198
        finally:
 
199
            branch.unlock()
 
200
        window.jump_to_line(line)
 
201
        
 
202
        gtk.main()
 
203
 
 
204
register_command(cmd_gannotate)
 
205
 
 
206
class cmd_gcommit(Command):
 
207
    """GTK+ commit dialog
 
208
 
 
209
    Graphical user interface for committing revisions"""
 
210
    
 
211
    takes_args = []
 
212
    takes_options = []
 
213
 
 
214
    def run(self, filename=None):
 
215
        import os
 
216
        import pygtk
 
217
        pygtk.require("2.0")
 
218
 
 
219
        try:
 
220
            import gtk
 
221
        except RuntimeError, e:
 
222
            if str(e) == "could not open display":
 
223
                raise NoDisplayError
 
224
 
 
225
        from olive.commit import CommitDialog
 
226
        from bzrlib.commit import Commit
 
227
        from bzrlib.errors import (BzrCommandError,
 
228
                                   NotBranchError,
 
229
                                   NoWorkingTree,
 
230
                                   PointlessCommit,
 
231
                                   ConflictsInTree,
 
232
                                   StrictCommitFailed)
 
233
 
 
234
        wt = None
 
235
        branch = None
 
236
        try:
 
237
            (wt, path) = WorkingTree.open_containing(filename)
 
238
            branch = wt.branch
 
239
        except NotBranchError, e:
 
240
            path = e.path
 
241
        except NoWorkingTree, e:
 
242
            path = e.base
 
243
            try:
 
244
                (branch, path) = Branch.open_containing(path)
 
245
            except NotBranchError, e:
 
246
                path = e.path
 
247
 
 
248
        dialog = CommitDialog(wt, path, not branch)
 
249
        if dialog.display():
 
250
            dialog.window.connect("destroy", lambda w: gtk.main_quit())
 
251
            gtk.main()
 
252
 
 
253
register_command(cmd_gcommit)
 
254
 
 
255
class NoDisplayError(BzrCommandError):
 
256
    """gtk could not find a proper display"""
 
257
 
 
258
    def __str__(self):
 
259
        return "No DISPLAY. gannotate is disabled."