hggtk/changeset.py
author Steve Borho <steve@borho.org>
Mon, 11 Feb 2008 14:09:13 -0600
changeset 1022 fbd4883d07c1
parent 1020 520486340ac5
child 1024 47adc84be374
permissions -rw-r--r--
hggtk/changeset: use util.localpath() to create safe path names
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
196
e7081a06625c hggtk: add dialog to browse revision history
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     1
#
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
     2
# changeset.py - Changeset dialog for TortoiseHg
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
     3
#
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
     4
# Copyright 2008 Steve Borho <steve@borho.org>
196
e7081a06625c hggtk: add dialog to browse revision history
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     5
#
e7081a06625c hggtk: add dialog to browse revision history
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
     6
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
     7
import os
580
e95e10b1f258 hggtk/history: add 'merge with' to context menu
Steve Borho <steve@borho.org>
parents: 576
diff changeset
     8
import subprocess
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
     9
import sys
611
3e58b74a16a9 hggtk/history: change date display format on treeview
TK Soh <teekaysoh@yahoo.com>
parents: 605
diff changeset
    10
import time
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    11
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    12
import pygtk
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    13
pygtk.require('2.0')
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    14
import gtk
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    15
import gobject
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    16
import pango
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
    17
import StringIO
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    18
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    19
from mercurial.i18n import _
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    20
from mercurial.node import *
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
    21
from mercurial import cmdutil, util, ui, hg, commands
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
    22
from mercurial import context, patch, revlog
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    23
from gdialog import *
580
e95e10b1f258 hggtk/history: add 'merge with' to context menu
Steve Borho <steve@borho.org>
parents: 576
diff changeset
    24
from hgcmd import CmdDialog
633
c1f4652dccc5 hggtk/vis: half-integration into history dialog
Steve Borho <steve@borho.org>
parents: 614
diff changeset
    25
611
3e58b74a16a9 hggtk/history: change date display format on treeview
TK Soh <teekaysoh@yahoo.com>
parents: 605
diff changeset
    26
798
0bf50e93e713 hggtk: rename GChange to ChangeSet
Steve Borho <steve@borho.org>
parents: 793
diff changeset
    27
class ChangeSet(GDialog):
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    28
    """GTK+ based dialog for displaying repository logs
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    29
    """
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    30
    def get_title(self):
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    31
        title = os.path.basename(self.repo.root) + ' changeset '
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    32
        title += self.opts['rev'][0]
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
    33
        return title
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    34
466
87eb6341931f merge with TK
Steve Borho <steve@borho.org>
parents: 440
diff changeset
    35
    def get_icon(self):
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    36
        return 'menushowchanged.ico'
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    37
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    38
    def get_tbbuttons(self):
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    39
        self.parent_toggle = gtk.ToggleToolButton(gtk.STOCK_UNDO)
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    40
        self.parent_toggle.set_use_underline(True)
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    41
        self.parent_toggle.set_label('_other parent')
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    42
        self.parent_toggle.set_tooltip(self.tooltips, 'diff other parent')
791
15c081945e56 hggtk/history: cleaner integration of changeset viewer
Steve Borho <steve@borho.org>
parents: 779
diff changeset
    43
        self.parent_toggle.set_sensitive(False)
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    44
        self.parent_toggle.set_active(False)
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    45
        self.parent_toggle.connect('toggled', self._parent_toggled)
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    46
        return [self.parent_toggle]
716
7d55eb5119d5 hggtk/history: make filter dialog modeless
TK Soh <teekaysoh@yahoo.com>
parents: 711
diff changeset
    47
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    48
    def _parent_toggled(self, button):
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
    49
        self.load_details(self.currev)
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    50
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    51
    def prepare_display(self):
711
bde72382bd55 hggtk/history: add diff between arbitrary revisions
Steve Borho <steve@borho.org>
parents: 710
diff changeset
    52
        self.currow = None
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    53
        self.graphview = None
779
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
    54
        self.glog_parent = None
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    55
        node0, node1 = cmdutil.revpair(self.repo, self.opts.get('rev'))
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    56
        self.load_details(self.repo.changelog.rev(node0))
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    57
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    58
    def save_settings(self):
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    59
        settings = GDialog.save_settings(self)
798
0bf50e93e713 hggtk: rename GChange to ChangeSet
Steve Borho <steve@borho.org>
parents: 793
diff changeset
    60
        settings['changeset'] = self._hpaned.get_position()
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    61
        return settings
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    62
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    63
    def load_settings(self, settings):
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    64
        GDialog.load_settings(self, settings)
798
0bf50e93e713 hggtk: rename GChange to ChangeSet
Steve Borho <steve@borho.org>
parents: 793
diff changeset
    65
        if settings and 'changeset' in settings:
0bf50e93e713 hggtk: rename GChange to ChangeSet
Steve Borho <steve@borho.org>
parents: 793
diff changeset
    66
            self._setting_hpos = settings['changeset']
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    67
        else:
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
    68
            self._setting_hpos = -1
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    69
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
    70
    def load_details(self, rev):
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
    71
        '''Load selected changeset details into buffer and filelist'''
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    72
        self.currev = rev
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
    73
        self._buffer.set_text('')
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
    74
        self._filelist.clear()
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    75
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    76
        parents = [x for x in self.repo.changelog.parentrevs(rev) \
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    77
                if x != nullrev]
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    78
        self.parents = parents
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
    79
        title = self.get_title()
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    80
        if len(parents) == 2:
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    81
            self.parent_toggle.set_sensitive(True)
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
    82
            if self.parent_toggle.get_active():
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
    83
                title += ':' + str(self.parents[1])
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
    84
            else:
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
    85
                title += ':' + str(self.parents[0])
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    86
        else:
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    87
            self.parent_toggle.set_sensitive(False)
792
3f959d50248f hggtk/changeset: prevent duplicate file diffs
Steve Borho <steve@borho.org>
parents: 791
diff changeset
    88
            if self.parent_toggle.get_active():
3f959d50248f hggtk/changeset: prevent duplicate file diffs
Steve Borho <steve@borho.org>
parents: 791
diff changeset
    89
                # Parent button must be pushed out, but this
3f959d50248f hggtk/changeset: prevent duplicate file diffs
Steve Borho <steve@borho.org>
parents: 791
diff changeset
    90
                # will cause load_details to be called again
3f959d50248f hggtk/changeset: prevent duplicate file diffs
Steve Borho <steve@borho.org>
parents: 791
diff changeset
    91
                # so we exit out to prevent recursion.
3f959d50248f hggtk/changeset: prevent duplicate file diffs
Steve Borho <steve@borho.org>
parents: 791
diff changeset
    92
                self.parent_toggle.set_active(False)
3f959d50248f hggtk/changeset: prevent duplicate file diffs
Steve Borho <steve@borho.org>
parents: 791
diff changeset
    93
                return
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
    94
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
    95
        ctx = self.repo.changectx(rev)
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
    96
        if not ctx:
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
    97
            self._last_rev = None
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
    98
            return False
793
2544994c083b hggtk/changeset: minor cleanups
Steve Borho <steve@borho.org>
parents: 792
diff changeset
    99
        self.set_title(title)
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   100
        self.textview.freeze_child_notify()
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   101
        try:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   102
            self._fill_buffer(self._buffer, rev, ctx, self._filelist)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   103
        finally:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   104
            self.textview.thaw_child_notify()
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   105
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   106
    def _fill_buffer(self, buf, rev, ctx, filelist):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   107
        def title_line(title, text, tag):
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   108
            pad = ' ' * (12 - len(title))
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   109
            buf.insert_with_tags_by_name(eob, title + pad + text, tag)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   110
            buf.insert(eob, "\n")
748
0c288f0e8ca1 hggtk/history: borrow color scheme from gstatus
Steve Borho <steve@borho.org>
parents: 747
diff changeset
   111
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   112
        # TODO: Add toggle for gmtime/localtime
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   113
        eob = buf.get_end_iter()
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   114
        date = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(ctx.date()[0]))
935
69e807f2ac39 hggtk/changeset: set PRIMARY clipboard to currently selected node
Steve Borho <steve@borho.org>
parents: 934
diff changeset
   115
        self.clipboard.set_text(short(ctx.node()))
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   116
        change = str(rev) + ':' + short(ctx.node())
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   117
        tags = ' '.join(ctx.tags())
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   118
        parents = self.parents
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   119
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   120
        title_line('changeset:', change, 'changeset')
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
   121
        if ctx.branch() != 'default':
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   122
            title_line('branch:', ctx.branch(), 'greybg')
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   123
        title_line('user/date:', ctx.user() + '\t' + date, 'changeset')
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   124
        for p in parents:
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   125
            pctx = self.repo.changectx(p)
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   126
            summary = pctx.description().splitlines()[0]
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   127
            change = str(p) + ':' + short(self.repo.changelog.node(p))
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   128
            title = 'parent:'
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   129
            title += ' ' * (12 - len(title))
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   130
            buf.insert_with_tags_by_name(eob, title, 'parent')
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   131
            buf.insert_with_tags_by_name(eob, change, 'link')
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   132
            buf.insert_with_tags_by_name(eob, ' ' + summary, 'parent')
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   133
            buf.insert(eob, "\n")
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   134
        for n in self.repo.changelog.children(ctx.node()):
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   135
            cctx = self.repo.changectx(n)
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   136
            summary = cctx.description().splitlines()[0]
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   137
            childrev = self.repo.changelog.rev(n)
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   138
            change = str(childrev) + ':' + short(n)
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   139
            title = 'child:'
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   140
            title += ' ' * (12 - len(title))
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   141
            buf.insert_with_tags_by_name(eob, title, 'parent')
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   142
            buf.insert_with_tags_by_name(eob, change, 'link')
934
79b7126661a9 hggtk/changeset: optimize changeset header
Steve Borho <steve@borho.org>
parents: 899
diff changeset
   143
            buf.insert_with_tags_by_name(eob, ' ' + summary, 'parent')
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   144
            buf.insert(eob, "\n")
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   145
        for n in self.repo.changelog.children(ctx.node()):
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   146
            childrev = self.repo.changelog.rev(n)
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   147
        if tags: title_line('tags:', tags, 'tag')
760
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   148
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   149
        log = util.fromlocal(ctx.description())
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   150
        buf.insert(eob, '\n' + log + '\n\n')
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   151
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   152
        if self.parent_toggle.get_active():
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   153
            parent = self.repo.changelog.node(parents[1])
897
7e4373fc0778 hggtk/changeset: fix display of revision 0
Steve Borho <steve@borho.org>
parents: 847
diff changeset
   154
        elif parents:
7e4373fc0778 hggtk/changeset: fix display of revision 0
Steve Borho <steve@borho.org>
parents: 847
diff changeset
   155
            parent = self.repo.changelog.node(parents[0])
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   156
        else:
897
7e4373fc0778 hggtk/changeset: fix display of revision 0
Steve Borho <steve@borho.org>
parents: 847
diff changeset
   157
            parent = nullid
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   158
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   159
        buf.create_mark('begmark', buf.get_start_iter())
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   160
        filelist.append(('*', '[Description]', 'begmark', False, ()))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   161
        pctx = self.repo.changectx(parent)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   162
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   163
        nodes = parent, ctx.node()
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   164
        iterator = self.diff_generator(*nodes)
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   165
        gobject.idle_add(self.get_diffs, iterator, nodes, pctx, buf, filelist)
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   166
        self.curnodes = nodes
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   167
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   168
    def get_diffs(self, iterator, nodes, pctx, buf, filelist):
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   169
        if self.curnodes != nodes:
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   170
            return False
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   171
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   172
        try:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   173
            status, file, txt = iterator.next()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   174
        except StopIteration:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   175
            return False
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   176
820
737c58ecc790 hggtk/changeset: partial fix for UTF-8 encoding errors
Steve Borho <steve@borho.org>
parents: 806
diff changeset
   177
        lines = unicode(txt, 'latin-1', 'replace').splitlines()
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   178
        eob = buf.get_end_iter()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   179
        offset = eob.get_offset()
1020
520486340ac5 hggtk/changeset: handle filenames with spaces
Steve Borho <steve@borho.org>
parents: 1001
diff changeset
   180
        fileoffs, tags, lines, statmax = self.prepare_diff(lines, offset, file)
820
737c58ecc790 hggtk/changeset: partial fix for UTF-8 encoding errors
Steve Borho <steve@borho.org>
parents: 806
diff changeset
   181
        for l in lines:
737c58ecc790 hggtk/changeset: partial fix for UTF-8 encoding errors
Steve Borho <steve@borho.org>
parents: 806
diff changeset
   182
            buf.insert(eob, l)
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   183
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   184
        # inserts the tags
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   185
        for name, p0, p1 in tags:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   186
            i0 = buf.get_iter_at_offset(p0)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   187
            i1 = buf.get_iter_at_offset(p1)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   188
            txt = buf.get_text(i0, i1)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   189
            buf.apply_tag_by_name(name, i0, i1)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   190
            
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   191
        # inserts the marks
1020
520486340ac5 hggtk/changeset: handle filenames with spaces
Steve Borho <steve@borho.org>
parents: 1001
diff changeset
   192
        for mark, offset, stats in fileoffs:
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   193
            pos = buf.get_iter_at_offset(offset)
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   194
            mark = 'mark_%d' % offset
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   195
            buf.create_mark(mark, pos)
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   196
            filelist.append((status, file, mark, True, stats))
1001
0e7781407c14 hggtk/changeset: set mono tag on changeset text iteratively
Steve Borho <steve@borho.org>
parents: 994
diff changeset
   197
        sob, eob = buf.get_bounds()
0e7781407c14 hggtk/changeset: set mono tag on changeset text iteratively
Steve Borho <steve@borho.org>
parents: 994
diff changeset
   198
        buf.apply_tag_by_name("mono", pos, eob)
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   199
        return True
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   200
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   201
    # Hacked up version of mercurial.patch.diff()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   202
    # Use git mode by default (to show copies, renames, permissions) but
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   203
    # never show binary diffs.  It operates as a generator, so it can be
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   204
    # called iteratively to get file diffs from a changeset
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   205
    def diff_generator(self, node1, node2):
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   206
        repo = self.repo
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   207
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   208
        ccache = {}
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   209
        def getctx(r):
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   210
            if r not in ccache:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   211
                ccache[r] = context.changectx(repo, r)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   212
            return ccache[r]
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   213
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   214
        flcache = {}
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   215
        def getfilectx(f, ctx):
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   216
            flctx = ctx.filectx(f, filelog=flcache.get(f))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   217
            if f not in flcache:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   218
                flcache[f] = flctx._filelog
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   219
            return flctx
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   220
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   221
        ctx1 = context.changectx(repo, node1) # parent
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   222
        ctx2 = context.changectx(repo, node2) # current
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   223
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   224
        if node1 == repo.changelog.parents(node2)[0]:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   225
            filelist = ctx2.files()
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   226
        else:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   227
            changes = repo.status(node1, node2, None)[:5]
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   228
            modified, added, removed, deleted, unknown = changes
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   229
            filelist = modified + added + removed
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   230
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   231
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   232
        # force manifest reading
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   233
        man1 = ctx1.manifest()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   234
        date1 = util.datestr(ctx1.date())
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   235
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   236
        execf2 = ctx2.manifest().execf
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   237
        linkf2 = ctx2.manifest().linkf
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   238
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   239
        # returns False if there was no rename between ctx1 and ctx2
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   240
        # returns None if the file was created between ctx1 and ctx2
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   241
        # returns the (file, node) present in ctx1 that was renamed to f in ctx2
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   242
        # This will only really work if c1 is the Nth 1st parent of c2.
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   243
        def renamed(c1, c2, man, f):
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   244
            startrev = c1.rev()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   245
            c = c2
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   246
            crev = c.rev()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   247
            if crev is None:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   248
                crev = repo.changelog.count()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   249
            orig = f
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   250
            files = (f,)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   251
            while crev > startrev:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   252
                if f in files:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   253
                    try:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   254
                        src = getfilectx(f, c).renamed()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   255
                    except revlog.LookupError:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   256
                        return None
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   257
                    if src:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   258
                        f = src[0]
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   259
                crev = c.parents()[0].rev()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   260
                # try to reuse
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   261
                c = getctx(crev)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   262
                files = c.files()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   263
            if f not in man:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   264
                return None
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   265
            if f == orig:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   266
                return False
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   267
            return f
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   268
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   269
        status = {}
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   270
        def filestatus(f):
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   271
            if f in status:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   272
                return status[f]
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   273
            try:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   274
                # Determine file status by presence in manifests
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   275
                s = 'R'
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   276
                ctx2.filectx(f)
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   277
                s = 'A'
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   278
                ctx1.filectx(f)
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   279
                s = 'M'
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   280
            except revlog.LookupError:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   281
                pass
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   282
            status[f] = s
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   283
            return s
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   284
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   285
        copied = {}
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   286
        for f in filelist:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   287
            src = renamed(ctx1, ctx2, man1, f)
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   288
            if src:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   289
                copied[f] = src
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   290
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   291
        srcs = [x[1] for x in copied.iteritems() if filestatus(x[0]) == 'A']
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   292
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   293
        gone = {}
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   294
        for f in filelist:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   295
            s = filestatus(f)
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   296
            to = None
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   297
            tn = None
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   298
            dodiff = True
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   299
            header = []
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   300
            if f in man1:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   301
                to = getfilectx(f, ctx1).data()
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   302
            if s != 'R':
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   303
                tn = getfilectx(f, ctx2).data()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   304
            a, b = f, f
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   305
            def gitmode(x, l):
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   306
                return l and '120000' or (x and '100755' or '100644')
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   307
            def addmodehdr(header, omode, nmode):
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   308
                if omode != nmode:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   309
                    header.append('old mode %s\n' % omode)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   310
                    header.append('new mode %s\n' % nmode)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   311
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   312
            if s == 'A':
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   313
                mode = gitmode(execf2(f), linkf2(f))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   314
                if f in copied:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   315
                    a = copied[f]
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   316
                    omode = gitmode(man1.execf(a), man1.linkf(a))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   317
                    addmodehdr(header, omode, mode)
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   318
                    if filestatus(a) == 'R' and a not in gone:
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   319
                        op = 'rename'
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   320
                        gone[a] = 1
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   321
                    else:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   322
                        op = 'copy'
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   323
                    header.append('%s from %s\n' % (op, a))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   324
                    header.append('%s to %s\n' % (op, f))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   325
                    to = getfilectx(a, ctx1).data()
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   326
                else:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   327
                    header.append('new file mode %s\n' % mode)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   328
                if util.binary(tn):
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   329
                    dodiff = 'binary'
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   330
            elif s == 'R':
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   331
                if f in srcs:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   332
                    dodiff = False
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   333
                else:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   334
                    mode = gitmode(man1.execf(f), man1.linkf(f))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   335
                    header.append('deleted file mode %s\n' % mode)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   336
            else:
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   337
                omode = gitmode(man1.execf(f), man1.linkf(f))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   338
                nmode = gitmode(execf2(f), linkf2(f))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   339
                addmodehdr(header, omode, nmode)
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   340
                if util.binary(to) or util.binary(tn):
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   341
                    dodiff = 'binary'
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   342
            header.insert(0, 'diff --git a/%s b/%s\n' % (a, b))
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   343
            if dodiff == 'binary':
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   344
                text = 'binary file has changed.\n'
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   345
            elif dodiff:
992
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   346
                text = patch.mdiff.unidiff(to, date1,
96ccf03e3cfc hggtk/changeset: move patch generation to idle thread
Steve Borho <steve@borho.org>
parents: 991
diff changeset
   347
                                    tn, util.datestr(ctx2.date()),
994
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   348
                                    a, b, None, opts=patch.mdiff.defaultopts)
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   349
            else:
7bddfece0ddd hggtk/changeset: avoid repo.status() call when comparing first parent
Steve Borho <steve@borho.org>
parents: 993
diff changeset
   350
                text = ''
993
f0463f55ac10 hggtk/changeset: skip changeset files with no changes
Steve Borho <steve@borho.org>
parents: 992
diff changeset
   351
            if header or text: yield (s, f, ''.join(header) + text)
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
   352
1020
520486340ac5 hggtk/changeset: handle filenames with spaces
Steve Borho <steve@borho.org>
parents: 1001
diff changeset
   353
    def prepare_diff(self, difflines, offset, fname):
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   354
        '''Borrowed from hgview; parses changeset diffs'''
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   355
        DIFFHDR = "=== %s ===\n"
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   356
        idx = 0
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   357
        outlines = []
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   358
        tags = []
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   359
        filespos = []
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   360
        def addtag( name, offset, length ):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   361
            if tags and tags[-1][0] == name and tags[-1][2]==offset:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   362
                tags[-1][2] += length
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   363
            else:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   364
                tags.append( [name, offset, offset+length] )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   365
        stats = [0,0]
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   366
        statmax = 0
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   367
        for i,l in enumerate(difflines):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   368
            if l.startswith("diff"):
1020
520486340ac5 hggtk/changeset: handle filenames with spaces
Steve Borho <steve@borho.org>
parents: 1001
diff changeset
   369
                txt = DIFFHDR % fname
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   370
                addtag( "greybg", offset, len(txt) )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   371
                outlines.append(txt)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   372
                markname = "file%d" % idx
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   373
                idx += 1
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   374
                statmax = max( statmax, stats[0]+stats[1] )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   375
                stats = [0,0]
1020
520486340ac5 hggtk/changeset: handle filenames with spaces
Steve Borho <steve@borho.org>
parents: 1001
diff changeset
   376
                filespos.append(( markname, offset, stats ))
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   377
                offset += len(txt)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   378
                continue
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   379
            elif l.startswith("+++"):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   380
                continue
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   381
            elif l.startswith("---"):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   382
                continue
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   383
            elif l.startswith("+"):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   384
                tag = "green"
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   385
                stats[0] += 1
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   386
            elif l.startswith("-"):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   387
                stats[1] += 1
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   388
                tag = "red"
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   389
            elif l.startswith("@@"):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   390
                tag = "blue"
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   391
            else:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   392
                tag = "black"
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   393
            l = l+"\n"
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   394
            length = len(l)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   395
            addtag( tag, offset, length )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   396
            outlines.append( l )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   397
            offset += length
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   398
        statmax = max( statmax, stats[0]+stats[1] )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   399
        return filespos, tags, outlines, statmax
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
   400
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   401
    def link_event(self, tag, widget, event, iter):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   402
        if event.type != gtk.gdk.BUTTON_RELEASE:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   403
            return
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   404
        text = self.get_link_text(tag, widget, iter)
604
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   405
        if not text:
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   406
            return
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   407
        linkrev = long(text.split(':')[0])
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   408
        if self.graphview:
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   409
            self.graphview.set_revision_id(linkrev)
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   410
            self.graphview.scroll_to_revision(linkrev)
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   411
        else:
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   412
            self.load_details(linkrev)
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   413
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   414
    def get_link_text(self, tag, widget, iter):
604
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   415
        """handle clicking on a link in a textview"""
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   416
        text_buffer = widget.get_buffer()
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   417
        beg = iter.copy()
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   418
        while not beg.begins_tag(tag):
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   419
            beg.backward_char()
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   420
        end = iter.copy()
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   421
        while not end.ends_tag(tag):
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   422
            end.forward_char()
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   423
        text = text_buffer.get_text(beg, end)
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   424
        return text
66f0d8592edb hggtk/history: show parent revisions as links in detail window
TK Soh <teekaysoh@yahoo.com>
parents: 603
diff changeset
   425
        
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   426
    def file_context_menu(self):
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   427
        def create_menu(label, callback):
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   428
            menuitem = gtk.MenuItem(label, True)
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   429
            menuitem.connect('activate', callback)
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   430
            menuitem.set_border_width(1)
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   431
            return menuitem
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   432
            
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   433
        _menu = gtk.Menu()
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   434
        _menu.append(create_menu('_view at revision', self._view_file_rev))
966
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   435
        self._save_menu = create_menu('_save at revision', self._save_file_rev)
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   436
        _menu.append(self._save_menu)
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   437
        _menu.append(create_menu('_file history', self._file_history))
899
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   438
        self._ann_menu = create_menu('_annotate file', self._ann_file)
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   439
        _menu.append(self._ann_menu)
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   440
        _menu.append(create_menu('_revert file contents', self._revert_file))
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   441
        self._file_diff_to_mark_menu = create_menu('_diff file to mark',
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   442
                self._diff_file_to_mark)
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   443
        self._file_diff_from_mark_menu = create_menu('diff file _from mark',
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   444
                self._diff_file_from_mark)
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   445
        _menu.append(self._file_diff_to_mark_menu)
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   446
        _menu.append(self._file_diff_from_mark_menu)
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   447
        _menu.show_all()
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   448
        return _menu
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   449
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   450
    def get_body(self):
935
69e807f2ac39 hggtk/changeset: set PRIMARY clipboard to currently selected node
Steve Borho <steve@borho.org>
parents: 934
diff changeset
   451
        sel = (os.name == 'nt') and 'CLIPBOARD' or 'PRIMARY'
69e807f2ac39 hggtk/changeset: set PRIMARY clipboard to currently selected node
Steve Borho <steve@borho.org>
parents: 934
diff changeset
   452
        self.clipboard = gtk.Clipboard(selection=sel)
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   453
        self._filemenu = self.file_context_menu()
690
011c611a1244 hggtk/history: major refactor, unify treeview
Steve Borho <steve@borho.org>
parents: 688
diff changeset
   454
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   455
        details_frame = gtk.Frame()
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   456
        details_frame.set_shadow_type(gtk.SHADOW_ETCHED_IN)
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   457
        scroller = gtk.ScrolledWindow()
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   458
        scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   459
        details_frame.add(scroller)
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   460
        
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   461
        details_text = gtk.TextView()
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   462
        details_text.set_wrap_mode(gtk.WRAP_NONE)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   463
        details_text.set_editable(False)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   464
        details_text.modify_font(pango.FontDescription(self.fontcomment))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   465
        scroller.add(details_text)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   466
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   467
        self._buffer = gtk.TextBuffer()
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   468
        self.setup_tags()
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   469
        details_text.set_buffer(self._buffer)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   470
        self.textview = details_text
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   471
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   472
        filelist_tree = gtk.TreeView()
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   473
        filesel = filelist_tree.get_selection()
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
   474
        filesel.connect("changed", self._filelist_rowchanged)
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   475
        filelist_tree.connect('button-release-event',
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   476
                self._file_button_release)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   477
        filelist_tree.connect('popup-menu', self._file_popup_menu)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   478
        filelist_tree.connect('row-activated', self._file_row_act)
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   479
990
bb03d0657a4c hggtk/changeset: show MAR status in separate column
Steve Borho <steve@borho.org>
parents: 988
diff changeset
   480
        self._filelist = gtk.ListStore(
bb03d0657a4c hggtk/changeset: show MAR status in separate column
Steve Borho <steve@borho.org>
parents: 988
diff changeset
   481
                gobject.TYPE_STRING,   # MAR status
bb03d0657a4c hggtk/changeset: show MAR status in separate column
Steve Borho <steve@borho.org>
parents: 988
diff changeset
   482
                gobject.TYPE_STRING,   # filename
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   483
                gobject.TYPE_PYOBJECT, # mark
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   484
                gobject.TYPE_PYOBJECT, # give cmenu
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   485
                gobject.TYPE_PYOBJECT  # diffstats
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   486
                )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   487
        filelist_tree.set_model(self._filelist)
990
bb03d0657a4c hggtk/changeset: show MAR status in separate column
Steve Borho <steve@borho.org>
parents: 988
diff changeset
   488
        column = gtk.TreeViewColumn('Stat', gtk.CellRendererText(), text=0)
bb03d0657a4c hggtk/changeset: show MAR status in separate column
Steve Borho <steve@borho.org>
parents: 988
diff changeset
   489
        filelist_tree.append_column(column)
bb03d0657a4c hggtk/changeset: show MAR status in separate column
Steve Borho <steve@borho.org>
parents: 988
diff changeset
   490
        column = gtk.TreeViewColumn('Files', gtk.CellRendererText(), text=1)
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   491
        filelist_tree.append_column(column)
802
2491482d48ee hggtk/changeset: add etched frame around file list
Steve Borho <steve@borho.org>
parents: 799
diff changeset
   492
2491482d48ee hggtk/changeset: add etched frame around file list
Steve Borho <steve@borho.org>
parents: 799
diff changeset
   493
        list_frame = gtk.Frame()
2491482d48ee hggtk/changeset: add etched frame around file list
Steve Borho <steve@borho.org>
parents: 799
diff changeset
   494
        list_frame.set_shadow_type(gtk.SHADOW_ETCHED_IN)
2491482d48ee hggtk/changeset: add etched frame around file list
Steve Borho <steve@borho.org>
parents: 799
diff changeset
   495
        scroller = gtk.ScrolledWindow()
2491482d48ee hggtk/changeset: add etched frame around file list
Steve Borho <steve@borho.org>
parents: 799
diff changeset
   496
        scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
2491482d48ee hggtk/changeset: add etched frame around file list
Steve Borho <steve@borho.org>
parents: 799
diff changeset
   497
        scroller.add(filelist_tree)
2491482d48ee hggtk/changeset: add etched frame around file list
Steve Borho <steve@borho.org>
parents: 799
diff changeset
   498
        list_frame.add(scroller)
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
   499
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
   500
        self._hpaned = gtk.HPaned()
988
561be038f12f hggtk/changeset: move file list to left side
Steve Borho <steve@borho.org>
parents: 985
diff changeset
   501
        self._hpaned.pack1(list_frame, True, True)
561be038f12f hggtk/changeset: move file list to left side
Steve Borho <steve@borho.org>
parents: 985
diff changeset
   502
        self._hpaned.pack2(details_frame, True, True)
747
2d31a774e473 hgtk/history: add deltas to detail window
Steve Borho <steve@borho.org>
parents: 745
diff changeset
   503
        self._hpaned.set_position(self._setting_hpos)
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   504
        return self._hpaned
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   505
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   506
    def setup_tags(self):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   507
        """Creates the tags to be used inside the TextView"""
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   508
        def make_texttag( name, **kwargs ):
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   509
            """Helper function generating a TextTag"""
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   510
            tag = gtk.TextTag(name)
806
f0278682fadf hggtk: use iteritems() when possible
Steve Borho <steve@borho.org>
parents: 802
diff changeset
   511
            for key, value in kwargs.iteritems():
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   512
                key = key.replace("_","-")
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   513
                try:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   514
                    tag.set_property( key, value )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   515
                except TypeError:
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   516
                    print "Warning the property %s is unsupported in" % key
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   517
                    print "this version of pygtk"
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   518
            return tag
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   519
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   520
        tag_table = self._buffer.get_tag_table()
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   521
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   522
        tag_table.add( make_texttag('changeset', foreground='#000090',
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   523
                paragraph_background='#F0F0F0'))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   524
        tag_table.add(make_texttag('date', foreground='#000090',
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   525
                paragraph_background='#F0F0F0'))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   526
        tag_table.add(make_texttag('tag', foreground='#000090',
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   527
                paragraph_background='#F0F0F0'))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   528
        tag_table.add(make_texttag('files', foreground='#5C5C5C',
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   529
                paragraph_background='#F0F0F0'))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   530
        tag_table.add(make_texttag('parent', foreground='#000090',
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   531
                paragraph_background='#F0F0F0'))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   532
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   533
        tag_table.add( make_texttag( "mono", family="Monospace" ))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   534
        tag_table.add( make_texttag( "blue", foreground='blue' ))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   535
        tag_table.add( make_texttag( "red", foreground='red' ))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   536
        tag_table.add( make_texttag( "green", foreground='darkgreen' ))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   537
        tag_table.add( make_texttag( "black", foreground='black' ))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   538
        tag_table.add( make_texttag( "greybg",
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   539
                                     paragraph_background='grey',
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   540
                                     weight=pango.WEIGHT_BOLD ))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   541
        tag_table.add( make_texttag( "yellowbg", background='yellow' ))
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   542
        link_tag = make_texttag( "link", foreground="blue",
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   543
                                 underline=pango.UNDERLINE_SINGLE )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   544
        link_tag.connect("event", self.link_event )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   545
        tag_table.add( link_tag )
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   546
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   547
    def _filelist_rowchanged(self, sel):
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   548
        model, iter = sel.get_selected()
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   549
        if not iter:
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   550
            return
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   551
        # scroll to file in details window
991
e04bc9342dae hggtk/changeset: fix jump-to-mark after last change
Steve Borho <steve@borho.org>
parents: 990
diff changeset
   552
        mark = self._buffer.get_mark(model[iter][2])
761
5551cc284a35 hggtk/history: performance improvements
Steve Borho <steve@borho.org>
parents: 760
diff changeset
   553
        self.textview.scroll_to_mark(mark, 0.0, True, 0.0, 0.0)
991
e04bc9342dae hggtk/changeset: fix jump-to-mark after last change
Steve Borho <steve@borho.org>
parents: 990
diff changeset
   554
        if model[iter][3]:
990
bb03d0657a4c hggtk/changeset: show MAR status in separate column
Steve Borho <steve@borho.org>
parents: 988
diff changeset
   555
            self.curfile = model[iter][1]
760
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   556
        else:
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   557
            self.curfile = None
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   558
762
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   559
    def _file_button_release(self, widget, event):
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   560
        if event.button == 3 and not (event.state & (gtk.gdk.SHIFT_MASK |
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   561
            gtk.gdk.CONTROL_MASK)):
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   562
            self._file_popup_menu(widget, event.button, event.time)
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   563
        return False
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   564
762
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   565
    def _file_popup_menu(self, treeview, button=0, time=0):
760
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   566
        if self.curfile is None:
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   567
            return
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   568
        if self.graphview:
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   569
            is_mark = self.graphview.get_mark_rev() is not None
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   570
        else:
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   571
            is_mark = False
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   572
        self._file_diff_to_mark_menu.set_sensitive(is_mark)
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   573
        self._file_diff_from_mark_menu.set_sensitive(is_mark)
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   574
        self._filemenu.popup(None, None, None, button, time)
899
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   575
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   576
        # If the filelog entry this changeset references does not link
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   577
        # back to this changeset, it means this changeset did not
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   578
        # actually change the contents of this file, and thus the file
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   579
        # cannot be annotated at this revision (since this changeset
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   580
        # does not appear in the filelog)
0d0b6b26345e hggtk/changeset: disable annotate cmenu when necessary
Steve Borho <steve@borho.org>
parents: 897
diff changeset
   581
        ctx = self.repo.changectx(self.currev)
966
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   582
        try:
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   583
            fctx = ctx.filectx(self.curfile)
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   584
            has_filelog = fctx.filelog().linkrev(fctx.filenode()) == ctx.rev()
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   585
        except revlog.LookupError:
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   586
            has_filelog = False
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   587
        self._ann_menu.set_sensitive(has_filelog)
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   588
        self._save_menu.set_sensitive(has_filelog)
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   589
        return True
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   590
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   591
    def _file_row_act(self, tree, path, column) :
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   592
        """Default action is the first entry in the context menu
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   593
        """
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   594
        self._filemenu.get_children()[0].activate()
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   595
        return True
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   596
966
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   597
    def _save_file_rev(self, menuitem):
1022
fbd4883d07c1 hggtk/changeset: use util.localpath() to create safe path names
Steve Borho <steve@borho.org>
parents: 1020
diff changeset
   598
        file = util.localpath(self.curfile)
fbd4883d07c1 hggtk/changeset: use util.localpath() to create safe path names
Steve Borho <steve@borho.org>
parents: 1020
diff changeset
   599
        file, ext = os.path.splitext(os.path.basename(file))
966
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   600
        filename = "%s@%d%s" % (file, self.currev, ext)
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   601
        fd = NativeSaveFileDialogWrapper(Title = "Save file to",
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   602
                                         InitialDir=self.cwd,
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   603
                                         FileName=filename)
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   604
        result = fd.run()
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   605
        if result:
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   606
            import Queue
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   607
            import hglib
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   608
            q = Queue.Queue()
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   609
            cpath = util.canonpath(self.repo.root, self.cwd, self.curfile)
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   610
            hglib.hgcmd_toq(self.repo.root, q, 'cat', '--rev',
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   611
                str(self.currev), '--output', result, cpath)
51c8bfc32a95 hggtk/changeset: add 'save at revision' option
Steve Borho <steve@borho.org>
parents: 935
diff changeset
   612
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   613
    def _view_file_rev(self, menuitem):
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   614
        '''User selected view file revision from the file list context menu'''
967
9a1704668ab8 hggtk/changeset: catch activation events on '[Description]' row
Steve Borho <steve@borho.org>
parents: 966
diff changeset
   615
        if not self.curfile:
9a1704668ab8 hggtk/changeset: catch activation events on '[Description]' row
Steve Borho <steve@borho.org>
parents: 966
diff changeset
   616
            # ignore view events for the [Description] row
9a1704668ab8 hggtk/changeset: catch activation events on '[Description]' row
Steve Borho <steve@borho.org>
parents: 966
diff changeset
   617
            return
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   618
        rev = self.currev
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   619
        parents = self.parents
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   620
        if len(parents) == 0:
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   621
            parent = rev-1
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   622
        else:
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   623
            parent = parents[0]
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   624
        pair = '%u:%u' % (parent, rev)
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   625
        self._node1, self._node2 = cmdutil.revpair(self.repo, [pair])
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   626
        self._view_file('M', self.curfile, force_left=False)
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   627
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   628
    def _diff_file_to_mark(self, menuitem):
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   629
        '''User selected diff to mark from the file list context menu'''
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   630
        from status import GStatus
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   631
        from gtools import cmdtable
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   632
        rev0 = self.graphview.get_mark_rev()
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   633
        rev1 = self.currev
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   634
        statopts = self.merge_opts(cmdtable['gstatus|gst'][1],
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   635
                ('include', 'exclude', 'git'))
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   636
        statopts['rev'] = ['%u:%u' % (rev1, rev0)]
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   637
        statopts['modified'] = True
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   638
        statopts['added'] = True
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   639
        statopts['removed'] = True
760
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   640
        dialog = GStatus(self.ui, self.repo, self.cwd, [self.curfile],
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   641
                statopts, False)
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   642
        dialog.display()
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   643
        return True
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   644
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   645
    def _diff_file_from_mark(self, menuitem):
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   646
        '''User selected diff from mark from the file list context menu'''
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   647
        from status import GStatus
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   648
        from gtools import cmdtable
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   649
        rev0 = self.graphview.get_mark_rev()
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   650
        rev1 = self.currev
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   651
        statopts = self.merge_opts(cmdtable['gstatus|gst'][1],
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   652
                ('include', 'exclude', 'git'))
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   653
        statopts['rev'] = ['%u:%u' % (rev0, rev1)]
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   654
        statopts['modified'] = True
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   655
        statopts['added'] = True
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   656
        statopts['removed'] = True
760
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   657
        dialog = GStatus(self.ui, self.repo, self.cwd, [self.curfile],
d05fc39548fe hggtk/history: add 'Contents' to file list
Steve Borho <steve@borho.org>
parents: 758
diff changeset
   658
                statopts, False)
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   659
        dialog.display()
762
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   660
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   661
    def _ann_file(self, menuitem):
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   662
        '''User selected diff from mark from the file list context menu'''
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   663
        from datamine import DataMineDialog
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   664
        rev = self.currev
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   665
        dialog = DataMineDialog(self.ui, self.repo, self.cwd, [], {}, False)
762
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   666
        dialog.display()
7613d8ecab69 hggtk/datamine: initial data mining tool
Steve Borho <steve@borho.org>
parents: 761
diff changeset
   667
        dialog.add_annotate_page(self.curfile, str(rev))
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   668
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   669
    def _file_history(self, menuitem):
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   670
        '''User selected file history from file list context menu'''
779
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   671
        if self.glog_parent:
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   672
            # If this changeset browser is embedded in glog, send
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   673
            # send this event to the main app
847
8529972ac654 hggtk/vis: show entire file log history
Steve Borho <steve@borho.org>
parents: 841
diff changeset
   674
            opts = {'filehist' : self.curfile}
779
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   675
            self.glog_parent.custombutton.set_active(True)
841
04852a1aac1b hggtk: hookup filelog grapher to current dialogs
Steve Borho <steve@borho.org>
parents: 820
diff changeset
   676
            self.glog_parent.graphview.refresh(True, None, opts)
779
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   677
        else:
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   678
            # Else launch our own GLog instance
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   679
            from history import GLog
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   680
            dialog = GLog(self.ui, self.repo, self.cwd, [self.repo.root],
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   681
                    {}, False)
847
8529972ac654 hggtk/vis: show entire file log history
Steve Borho <steve@borho.org>
parents: 841
diff changeset
   682
            dialog.open_with_file(self.curfile)
779
e832047c90a3 hggtk/history: grand integration of history, changeset, datamine
Steve Borho <steve@borho.org>
parents: 778
diff changeset
   683
            dialog.display()
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   684
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   685
    def _revert_file(self, menuitem):
757
d96c8f70d6fc hggtk/history: add file diff to/from marked revision
Steve Borho <steve@borho.org>
parents: 756
diff changeset
   686
        '''User selected file revert from the file list context menu'''
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   687
        rev = self.currev
756
962b683d9740 hggtk/history: require confirmation before file revert
Steve Borho <steve@borho.org>
parents: 755
diff changeset
   688
        dialog = Confirm('revert file to old revision', [], self,
962b683d9740 hggtk/history: require confirmation before file revert
Steve Borho <steve@borho.org>
parents: 755
diff changeset
   689
                'Revert %s to contents at revision %d?' % (self.curfile, rev))
962b683d9740 hggtk/history: require confirmation before file revert
Steve Borho <steve@borho.org>
parents: 755
diff changeset
   690
        if dialog.run() == gtk.RESPONSE_NO:
962b683d9740 hggtk/history: require confirmation before file revert
Steve Borho <steve@borho.org>
parents: 755
diff changeset
   691
            return
755
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   692
        cmdline = ['hg', 'revert', '--verbose', '--rev', str(rev), self.curfile]
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   693
        self.restore_cwd()
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   694
        dlg = CmdDialog(cmdline)
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   695
        dlg.run()
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   696
        dlg.hide()
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   697
        shell_notify([self.curfile])
53c756739ed9 hggtk/history: add context menu to file list
Steve Borho <steve@borho.org>
parents: 751
diff changeset
   698
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   699
def run(root='', cwd='', files=[], **opts):
389
b01d903c3601 hggtk/history: use glog command as changelog browser
Steve Borho <steve@borho.org>
parents: 288
diff changeset
   700
    u = ui.ui()
b01d903c3601 hggtk/history: use glog command as changelog browser
Steve Borho <steve@borho.org>
parents: 288
diff changeset
   701
    u.updateopts(debug=False, traceback=False)
b01d903c3601 hggtk/history: use glog command as changelog browser
Steve Borho <steve@borho.org>
parents: 288
diff changeset
   702
    repo = hg.repository(u, path=root)
207
13c6675d5e70 hggtk: add support to select revision from history dialog
TK Soh <teekaysoh@yahoo.com>
parents: 199
diff changeset
   703
798
0bf50e93e713 hggtk: rename GChange to ChangeSet
Steve Borho <steve@borho.org>
parents: 793
diff changeset
   704
    dialog = ChangeSet(u, repo, cwd, files, opts, True)
776
0e1a45676b81 hggtk/change: new changeset browser
Steve Borho <steve@borho.org>
parents: 770
diff changeset
   705
    dialog.display()
658
ac87992eb102 hggtk/history: re-enable file/dir log filtering
Steve Borho <steve@borho.org>
parents: 657
diff changeset
   706
423
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   707
    gtk.gdk.threads_init()
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   708
    gtk.gdk.threads_enter()
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   709
    gtk.main()
6bc79fa0ce34 hggtk: move gtools dialogs into their respective modules
TK Soh <teekaysoh@yahoo.com>
parents: 401
diff changeset
   710
    gtk.gdk.threads_leave()
207
13c6675d5e70 hggtk: add support to select revision from history dialog
TK Soh <teekaysoh@yahoo.com>
parents: 199
diff changeset
   711
196
e7081a06625c hggtk: add dialog to browse revision history
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   712
if __name__ == "__main__":
e7081a06625c hggtk: add dialog to browse revision history
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
   713
    import sys
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 389
diff changeset
   714
    opts = {}
710
c0cde6f2994f hggtk/history: log filter dialog is basically complete
Steve Borho <steve@borho.org>
parents: 706
diff changeset
   715
    opts['root'] = len(sys.argv) > 1 and sys.argv[1] or os.getcwd()
777
b1c1d02e5cf1 hggtk/change: hookup parents toggle, add child links
Steve Borho <steve@borho.org>
parents: 776
diff changeset
   716
    opts['rev'] = ['750']
401
9ab309fbc25c hggtk: gtk threads and hgproc cleanup
Steve Borho <steve@borho.org>
parents: 389
diff changeset
   717
    run(**opts)