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