nautilus-thg.py
author TK Soh <teekaysoh@yahoo.com>
Sun, 13 Jan 2008 06:17:30 +0000
changeset 629 71fa0ab981e8
parent 581 2b1111a1161c
permissions -rw-r--r--
hggtk/history: only refresh log window if new rev is checked out
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     1
# Trivial Mercurial plugin for Nautilus
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     2
#
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     3
# Copyright (C) 2007 Steve Borho
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     4
#
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     5
# Stolen mercilessly from nautilus-bzr, thanks guys
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     6
# Copyright (C) 2006 Jeff Bailey
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     7
# Copyright (C) 2006 Wouter van Heyst
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     8
# Copyright (C) 2006 Jelmer Vernooij
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
     9
#
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    10
# Published under the GNU GPL
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    11
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    12
import gconf
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
    13
import gtk
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
    14
import gobject
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    15
from mercurial import hg, ui, util, repo
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
    16
from mercurial.node import short
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    17
import nautilus
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    18
import os
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    19
import subprocess
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    20
import sys
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    21
import tempfile
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    22
import urllib
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    23
418
c8f384922a5b nautilus: linux path cleanups
Steve Borho <steve@borho.org>
parents: 400
diff changeset
    24
TORTOISEHG_PATH = '~/tools/tortoisehg-dev'
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    25
TERMINAL_KEY = '/desktop/gnome/applications/terminal/exec'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    26
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    27
class HgExtension(nautilus.MenuProvider,
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    28
                  nautilus.ColumnProvider,
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
    29
                  nautilus.InfoProvider,
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
    30
                  nautilus.PropertyPageProvider):
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    31
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    32
    def __init__(self):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    33
        self.cacherepo = None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    34
        self.cacheroot = None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    35
        self.client = gconf.client_get_default()
418
c8f384922a5b nautilus: linux path cleanups
Steve Borho <steve@borho.org>
parents: 400
diff changeset
    36
        thgpath = os.environ.get('TORTOISEHG_PATH',
c8f384922a5b nautilus: linux path cleanups
Steve Borho <steve@borho.org>
parents: 400
diff changeset
    37
                os.path.expanduser(TORTOISEHG_PATH))
c8f384922a5b nautilus: linux path cleanups
Steve Borho <steve@borho.org>
parents: 400
diff changeset
    38
        os.environ['TORTOISEHG_PATH'] = thgpath
454
f0685734439f hggtk: icon path detection framework
Steve Borho <steve@borho.org>
parents: 450
diff changeset
    39
        os.environ['THG_ICON_PATH'] = os.path.join(thgpath, 'icons')
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    40
        self.hgproc = os.path.join(thgpath, 'hgproc.py')
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    41
        self.ipath = os.path.join(thgpath, 'icons', 'tortoise')
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    42
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    43
    def icon(self, iname):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    44
        return os.path.join(self.ipath, iname)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    45
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    46
    def get_path_for_vfs_file(self, vfs_file):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    47
        if vfs_file.get_uri_scheme() != 'file':
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    48
            return None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    49
        return urllib.unquote(vfs_file.get_uri()[7:])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    50
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
    51
    def clear_cached_repo(self):
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
    52
        self.cacheroot = None
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
    53
        self.cacherepo = None
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
    54
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    55
    def get_repo_for_path(self, path):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    56
        '''
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    57
        Find mercurial repository for vfs_file
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    58
        Returns hg.repo
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    59
        '''
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    60
        p = os.path.isdir(path) and path or os.path.dirname(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    61
        while not os.path.isdir(os.path.join(p, ".hg")):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    62
            oldp = p
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    63
            p = os.path.dirname(p)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    64
            if p == oldp:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    65
                return None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    66
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    67
        if p == self.cacheroot:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    68
            return self.cacherepo
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    69
        # Keep one repo cached
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    70
        try:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    71
            self.cacheroot = p
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    72
            self.cacherepo = hg.repository(ui.ui(), path=p)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    73
            return self.cacherepo
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    74
        except repo.RepoError:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    75
            self.cacheroot = None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    76
            self.cacherepo = None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    77
            return None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    78
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    79
    def _open_terminal_cb(self, window, vfs_file):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    80
        path = self.get_path_for_vfs_file(vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    81
        if path is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    82
            return
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    83
        os.chdir(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    84
        terminal = self.client.get_string(TERMINAL_KEY)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    85
        os.system('%s &' % terminal)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    86
491
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
    87
    def _about_cb(self, window, vfs_file):
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
    88
        self._run_dialog('about', [vfs_file])
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
    89
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    90
    def _add_cb(self, window, vfs_files):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    91
        self._run_dialog('add', vfs_files)
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
    92
        self.clear_cached_repo()
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    93
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    94
    def _clone_cb(self, window, vfs_file):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    95
        self._run_dialog('clone', [vfs_file])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    96
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
    97
    def _commit_cb(self, window, vfs_files):
579
5b4583400fb1 cmenu: move tortoisehg.commit logic to commit.py
Steve Borho <steve@borho.org>
parents: 578
diff changeset
    98
        self._run_dialog('commit', vfs_files)
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
    99
        self.clear_cached_repo()
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   100
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   101
    def _diff_cb(self, window, vfs_files):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   102
        path = self.get_path_for_vfs_file(vfs_files[0])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   103
        if path is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   104
            return
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   105
        repo = self.get_repo_for_path(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   106
        if repo is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   107
            return
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   108
        diffcmd = repo.ui.config('tortoisehg', 'vdiff', None)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   109
        if diffcmd is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   110
            self._run_dialog('diff', vfs_files)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   111
        else:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   112
            cmdline = ['hg', diffcmd]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   113
            cwd = os.path.isdir(path) and path or os.path.dirname(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   114
            paths = [self.get_path_for_vfs_file(f) for f in vfs_files]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   115
            subprocess.Popen(cmdline + paths, shell=False, cwd=cwd)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   116
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   117
    def _history_cb(self, window, vfs_files):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   118
        self._run_dialog('history', vfs_files)
578
969390bf746a nautilus: clear repo cache after launching glog
Steve Borho <steve@borho.org>
parents: 572
diff changeset
   119
        self.clear_cached_repo()
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   120
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   121
    def _init_cb(self, window, vfs_file):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   122
        self._run_dialog('init', [vfs_file])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   123
544
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   124
    def _recovery_cb(self, window, vfs_file):
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   125
        self._run_dialog('recovery', [vfs_file])
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   126
        self.clear_cached_repo()
544
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   127
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   128
    def _revert_cb(self, window, vfs_files):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   129
        self._run_dialog('revert', vfs_files)
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   130
        self.clear_cached_repo()
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   131
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   132
    def _serve_cb(self, window, vfs_file):
450
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   133
        self._run_dialog('serve', [vfs_file], filelist=False)
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   134
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   135
    def _status_cb(self, window, vfs_file):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   136
        self._run_dialog('status', [vfs_file])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   137
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   138
    def _sync_cb(self, window, vfs_file):
450
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   139
        self._run_dialog('synch', [vfs_file], filelist=False)
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   140
        self.clear_cached_repo()
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   141
471
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   142
    def _thgconfig_repo_cb(self, window, vfs_file):
511
2a1431624462 hggtk/thgconfig: simplify specification of user/repo mode on command line
Steve Borho <steve@borho.org>
parents: 510
diff changeset
   143
        self._run_dialog('config', [vfs_file])
471
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   144
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   145
    def _thgconfig_user_cb(self, window, vfs_file):
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   146
        self._run_dialog('config', [vfs_file], filelist=False)
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   147
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   148
    def _unmerge_cb(self, window, vfs_file):
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   149
        self._run_dialog('checkout', [vfs_file], filelist=False,
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   150
                extras=['--', '--clean', str(self.rev0)])
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   151
        self.clear_cached_repo()
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   152
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   153
    def _view_cb(self, window, vfs_file):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   154
        path = self.get_path_for_vfs_file(vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   155
        if path is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   156
            return
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   157
        repo = self.get_repo_for_path(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   158
        if repo is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   159
            return
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   160
        cwd = os.path.isdir(path) and path or os.path.dirname(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   161
        viewcmd = repo.ui.config('tortoisehg', 'view', 'hgk')
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   162
        if viewcmd == 'hgview':
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   163
            subprocess.Popen(['hgview'], shell=False, cwd=cwd)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   164
        else:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   165
            subprocess.Popen(['hg', 'view'], shell=False, cwd=cwd)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   166
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   167
    def _run_dialog(self, hgcmd, vfs_files, filelist=True, extras=[]):
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   168
        '''
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   169
        hgcmd - hgproc subcommand
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   170
        vfs_files - directory, or list of selected files
511
2a1431624462 hggtk/thgconfig: simplify specification of user/repo mode on command line
Steve Borho <steve@borho.org>
parents: 510
diff changeset
   171
        filelist  - bool for whether to generate file list for hgproc
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   172
        '''
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   173
        paths = [self.get_path_for_vfs_file(f) for f in vfs_files]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   174
        if paths[0] is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   175
            return
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   176
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   177
        path = paths[0]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   178
        repo = self.get_repo_for_path(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   179
        cwd = os.path.isdir(path) and path or os.path.dirname(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   180
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   181
        cmdopts  = [sys.executable, self.hgproc]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   182
        cmdopts += ['--root', repo.root]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   183
        cmdopts += ['--cwd', cwd]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   184
        cmdopts += ['--command', hgcmd]
450
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   185
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   186
        if filelist:
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   187
            # Use temporary file to store file list (avoid shell command
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   188
            # line limitations)
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   189
            fd, tmpfile = tempfile.mkstemp(prefix="tortoisehg_filelist_")
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   190
            os.write(fd, "\n".join(paths))
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   191
            os.close(fd)
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   192
            cmdopts += ['--listfile', tmpfile, '--deletelistfile']
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   193
        cmdopts.extend(extras)
450
bbef1849130e nautilus: prevent file lists for appropriate dialogs
Steve Borho <steve@borho.org>
parents: 419
diff changeset
   194
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   195
        subprocess.Popen(cmdopts, cwd=cwd, shell=False)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   196
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   197
        # Remove cached repo object, dirstate may change
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   198
        self.cacherepo = None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   199
        self.cacheroot = None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   200
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   201
    def get_background_items(self, window, vfs_file):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   202
        '''Build context menu for current directory'''
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   203
        items = []
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   204
        path = self.get_path_for_vfs_file(vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   205
        if path is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   206
            return
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   207
        repo = self.get_repo_for_path(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   208
        if repo is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   209
            item = nautilus.MenuItem('HgNautilus::newtree',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   210
                                 'Create New Repository',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   211
                                 'Make directory versioned',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   212
                                 self.icon('menucreaterepos.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   213
            item.connect('activate', self._init_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   214
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   215
            item = nautilus.MenuItem('HgNautilus::clone',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   216
                                 'Create Clone',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   217
                                 'Create clone here from source',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   218
                                 self.icon('menuclone.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   219
            item.connect('activate', self._clone_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   220
            items.append(item)
491
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   221
            item = nautilus.MenuItem('HgNautilus::about',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   222
                                 'About TortoiseHg',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   223
                                 'Information about TortoiseHg installation',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   224
                                 self.icon('menuabout.ico'))
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   225
            item.connect('activate', self._about_cb, vfs_file)
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   226
            items.append(item)
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   227
            item = nautilus.MenuItem('HgNautilus::terminal',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   228
                                 'Open Terminal Here',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   229
                                 'Open terminal in current directory')
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   230
            item.connect('activate', self._open_terminal_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   231
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   232
            return items
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   233
572
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   234
        if len(repo.workingctx().parents()) > 1:
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   235
            self.rev0 = repo.workingctx().parents()[0].rev()
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   236
            item = nautilus.MenuItem('HgNautilus::undomerge',
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   237
                                 'Undo Merge',
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   238
                                 'Clean checkout of original parent revision',
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   239
                                 self.icon('menuunmerge.ico'))
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   240
            item.connect('activate', self._unmerge_cb, vfs_file)
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   241
            items.append(item)
04c04beffad9 nautilus: add 'undo merge' feature
Steve Borho <steve@borho.org>
parents: 544
diff changeset
   242
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   243
        item = nautilus.MenuItem('HgNautilus::commit',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   244
                             'Commit',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   245
                             'Commit changes',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   246
                             self.icon('menucommit.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   247
        item.connect('activate', self._commit_cb, [vfs_file])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   248
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   249
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   250
        item = nautilus.MenuItem('HgNautilus::status',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   251
                             'Show Status',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   252
                             'Show Repository Status',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   253
                             self.icon('menushowchanged.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   254
        item.connect('activate', self._status_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   255
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   256
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   257
        item = nautilus.MenuItem('HgNautilus::diff',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   258
                             'Visual Diff',
519
6fbc53f56047 nautilus: nit change
Steve Borho <steve@borho.org>
parents: 511
diff changeset
   259
                             'Show Changes to Repository',
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   260
                             self.icon('menudiff.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   261
        item.connect('activate', self._diff_cb, [vfs_file])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   262
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   263
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   264
        item = nautilus.MenuItem('HgNautilus::log',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   265
                             'View Changelog',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   266
                             'Show revision history',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   267
                             self.icon('menulog.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   268
        item.connect('activate', self._history_cb, [vfs_file])
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   269
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   270
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   271
        item = nautilus.MenuItem('HgNautilus::dag',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   272
                             'Revision Graph',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   273
                             'Show revision DAG',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   274
                             self.icon('menurevisiongraph.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   275
        item.connect('activate', self._view_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   276
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   277
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   278
        item = nautilus.MenuItem('HgNautilus::sync',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   279
                             'Synchronize',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   280
                             'Sync with another repository',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   281
                             self.icon('menusynch.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   282
        item.connect('activate', self._sync_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   283
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   284
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   285
        item = nautilus.MenuItem('HgNautilus::serve',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   286
                             'Web Server',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   287
                             'Start internal web server',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   288
                             self.icon('proxy.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   289
        item.connect('activate', self._serve_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   290
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   291
544
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   292
        item = nautilus.MenuItem('HgNautilus::recover',
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   293
                             'Recovery',
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   294
                             'General repair and recovery of repository',
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   295
                             self.icon('general.ico'))
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   296
        item.connect('activate', self._recovery_cb, vfs_file)
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   297
        items.append(item)
75530a344682 nautilus: add recovery tool
Steve Borho <steve@borho.org>
parents: 519
diff changeset
   298
471
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   299
        item = nautilus.MenuItem('HgNautilus::repoconfig',
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   300
                             'Repository Settings',
510
4028d7330575 nautilus: use menusettings.ico for thgconfig
Steve Borho <steve@borho.org>
parents: 491
diff changeset
   301
                             'Configure Mercurial settings for this repo',
4028d7330575 nautilus: use menusettings.ico for thgconfig
Steve Borho <steve@borho.org>
parents: 491
diff changeset
   302
                             self.icon('menusettings.ico'))
471
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   303
        item.connect('activate', self._thgconfig_repo_cb, vfs_file)
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   304
        items.append(item)
491
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   305
471
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   306
        item = nautilus.MenuItem('HgNautilus::userconfig',
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   307
                             'User-Global Settings',
510
4028d7330575 nautilus: use menusettings.ico for thgconfig
Steve Borho <steve@borho.org>
parents: 491
diff changeset
   308
                             'Configure global Mercurial settings',
4028d7330575 nautilus: use menusettings.ico for thgconfig
Steve Borho <steve@borho.org>
parents: 491
diff changeset
   309
                             self.icon('menusettings.ico'))
471
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   310
        item.connect('activate', self._thgconfig_user_cb, vfs_file)
ce5114e13c85 nautilus: replace hg-config with thgconfig
Steve Borho <steve@borho.org>
parents: 454
diff changeset
   311
        items.append(item)
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   312
491
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   313
        item = nautilus.MenuItem('HgNautilus::about',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   314
                             'About TortoiseHg',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   315
                             'Information about TortoiseHg installation',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   316
                             self.icon('menuabout.ico'))
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   317
        item.connect('activate', self._about_cb, vfs_file)
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   318
        items.append(item)
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   319
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   320
        item = nautilus.MenuItem('HgNautilus::terminal',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   321
                             'Open Terminal Here',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   322
                             'Open terminal in current directory')
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   323
        item.connect('activate', self._open_terminal_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   324
        items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   325
        return items
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   326
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   327
    def get_file_items(self, window, vfs_files):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   328
        '''Build context menu for selected files'''
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   329
        items = []
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   330
        if not vfs_files:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   331
            return items
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   332
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   333
        vfs_file = vfs_files[0]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   334
        path = self.get_path_for_vfs_file(vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   335
        repo = self.get_repo_for_path(path)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   336
        if repo is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   337
            if not vfs_file.is_directory():
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   338
                return items
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   339
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   340
            # Menu for unrevisioned subdirectory
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   341
            name = vfs_files[0].get_name()
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   342
            item = nautilus.MenuItem('HgNautilus::newtree',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   343
                                 'Make directory versioned',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   344
                                 'Create Repository in %s' % name,
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   345
                                 self.icon('menucreaterepos.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   346
            item.connect('activate', self._init_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   347
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   348
            item = nautilus.MenuItem('HgNautilus::clone',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   349
                                 'Create clone from source',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   350
                                 'Create Clone in %s' % name,
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   351
                                 self.icon('menuclone.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   352
            item.connect('activate', self._clone_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   353
            items.append(item)
491
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   354
            item = nautilus.MenuItem('HgNautilus::about',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   355
                                 'About TortoiseHg',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   356
                                 'Information about TortoiseHg installation',
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   357
                                 self.icon('menuabout.ico'))
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   358
            item.connect('activate', self._about_cb, vfs_file)
cae6c2d2b43f nautilus: add about dialog to context menus
Steve Borho <steve@borho.org>
parents: 471
diff changeset
   359
            items.append(item)
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   360
            item = nautilus.MenuItem('HgNautilus::terminal',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   361
                                 'Open Terminal Here',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   362
                                 'Open Terminal in %s' % name)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   363
            item.connect('activate', self._open_terminal_cb, vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   364
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   365
            return items
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   366
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   367
        localpaths = []
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   368
        for vfs_file in vfs_files:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   369
            path = self.get_path_for_vfs_file(vfs_file)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   370
            if path is None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   371
                continue
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   372
            localpath = path[len(repo.root)+1:]
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   373
            localpaths.append(localpath)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   374
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   375
        changes = repo.dirstate.status(localpaths, util.always, True, True)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   376
        (lookup, modified, added, removed, deleted, unknown,
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   377
                ignored, clean) = changes
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   378
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   379
        # Add menu items based on states list
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   380
        if unknown:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   381
            item = nautilus.MenuItem('HgNautilus::add',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   382
                                 'Add Files',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   383
                                 'Add unversioned files',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   384
                                 self.icon('menuadd.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   385
            item.connect('activate', self._add_cb, vfs_files)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   386
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   387
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   388
        if modified or added or removed or deleted or unknown:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   389
            item = nautilus.MenuItem('HgNautilus::commit',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   390
                                 'Commit Files',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   391
                                 'Commit changes',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   392
                                 self.icon('menucommit.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   393
            item.connect('activate', self._commit_cb, vfs_files)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   394
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   395
            item = nautilus.MenuItem('HgNautilus::revert',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   396
                                 'Undo Changes',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   397
                                 'Revert changes to files',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   398
                                 self.icon('menurevert.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   399
            item.connect('activate', self._revert_cb, vfs_files)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   400
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   401
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   402
        if modified or clean:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   403
            item = nautilus.MenuItem('HgNautilus::log',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   404
                                 'File Changelog',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   405
                                 'Show file revision history',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   406
                                 self.icon('menulog.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   407
            item.connect('activate', self._history_cb, vfs_files)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   408
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   409
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   410
        if modified:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   411
            item = nautilus.MenuItem('HgNautilus::diff',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   412
                                 'File Diffs',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   413
                                 'Show file changes',
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   414
                                 self.icon('menudiff.ico'))
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   415
            item.connect('activate', self._diff_cb, vfs_files)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   416
            items.append(item)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   417
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   418
        return items
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   419
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   420
    def get_columns(self):
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   421
        return nautilus.Column("HgNautilus::hg_status",
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   422
                               "hg_status",
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   423
                               "HG Status",
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   424
                               "Version control status"),
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   425
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   426
    def _get_file_status(self, repo, localpath):
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   427
        emblem = None
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   428
        status = '?'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   429
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   430
        # This is not what the API is optimized for, but this appears
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   431
        # to work efficiently enough
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   432
        changes = repo.dirstate.status([localpath], util.always, True, True)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   433
        (lookup, modified, added, removed, deleted, unknown,
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   434
                ignored, clean) = changes
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   435
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   436
        if localpath in clean:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   437
            emblem = 'default'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   438
            status = 'clean'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   439
        elif localpath in modified:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   440
            emblem = 'cvs-modified'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   441
            status = 'modified'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   442
        elif localpath in added:
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   443
            emblem = 'cvs-aded'
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   444
            status = 'added'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   445
        elif localpath in unknown:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   446
            emblem = 'new'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   447
            status = 'unrevisioned'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   448
        elif localpath in ignored:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   449
            status = 'ignored'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   450
        elif localpath in deleted:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   451
            # Should be hard to reach this state
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   452
            emblem = 'stockmail-priority-high'
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   453
            status = 'deleted'
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   454
        return emblem, status
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   455
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   456
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   457
    def update_file_info(self, file):
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   458
        '''Return emblem and hg status for this file'''
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   459
        path = self.get_path_for_vfs_file(file)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   460
        if path is None or file.is_directory():
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   461
            return
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   462
        repo = self.get_repo_for_path(path)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   463
        if repo is None:
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   464
            return
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   465
        localpath = path[len(repo.root)+1:]
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   466
        emblem, status = self._get_file_status(repo, localpath)
400
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   467
        if emblem is not None:
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   468
            file.add_emblem(emblem)
d4c301397992 nautilus: add nautilus extension, refactor thgutil.py
Steve Borho <steve@borho.org>
parents:
diff changeset
   469
        file.add_string_attribute('hg_status', status)
419
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   470
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   471
    # property page borrowed from http://www.gnome.org/~gpoo/hg/nautilus-hg/
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   472
    def __add_row(self, table, row, label_item, label_value):
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   473
        label = gtk.Label(label_item)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   474
        label.set_use_markup(True)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   475
        label.set_alignment(1, 0)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   476
        table.attach(label, 0, 1, row, row + 1, gtk.FILL, gtk.FILL, 0, 0)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   477
        label.show()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   478
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   479
        label = gtk.Label(label_value)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   480
        label.set_use_markup(True)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   481
        label.set_alignment(0, 1)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   482
        label.show()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   483
        table.attach(label, 1, 2, row, row + 1, gtk.FILL, 0, 0, 0)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   484
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   485
    def get_property_pages(self, vfs_files):
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   486
        if len(vfs_files) != 1:
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   487
            return
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   488
        file = vfs_files[0]
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   489
        path = self.get_path_for_vfs_file(file)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   490
        if path is None or file.is_directory():
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   491
            return
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   492
        repo = self.get_repo_for_path(path)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   493
        if repo is None:
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   494
            return
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   495
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   496
        localpath = path[len(repo.root)+1:]
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   497
        emblem, status = self._get_file_status(repo, localpath)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   498
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   499
        # Get the information from Mercurial
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   500
        ctx = repo.changectx()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   501
        rev = ctx.rev()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   502
        node = short(ctx.node())
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   503
        parents = '\n'.join([short(p.node()) for p in ctx.parents()])
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   504
        description = ctx.description()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   505
        user = ctx.user()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   506
        user = gobject.markup_escape_text(user)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   507
        tags = ', '.join(ctx.tags())
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   508
        branch = ctx.branch()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   509
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   510
        self.property_label = gtk.Label('Mercurial')
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   511
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   512
        table = gtk.Table(5, 2, False)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   513
        table.set_border_width(5)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   514
        table.set_row_spacings(5)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   515
        table.set_col_spacings(5)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   516
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   517
        self.__add_row(table, 0, '<b>Status</b>:', status)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   518
        self.__add_row(table, 1, '<b>Revision</b>:', str(rev))
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   519
        self.__add_row(table, 2, '<b>Description</b>:', description)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   520
        self.__add_row(table, 3, '<b>Tags</b>:', tags)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   521
        self.__add_row(table, 4, '<b>Node</b>:', node)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   522
        self.__add_row(table, 5, '<b>Parents</b>:', parents)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   523
        self.__add_row(table, 6, '<b>User</b>:', user)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   524
        self.__add_row(table, 7, '<b>Branch</b>:', branch)
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   525
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   526
        table.show()
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   527
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   528
        return nautilus.PropertyPage("MercurialPropertyPage::status",
13b55802e0c3 nautilus: add Mercurial property page
Steve Borho <steve@borho.org>
parents: 418
diff changeset
   529
                                     self.property_label, table),