Changeset 9521df28903d…
Parent a7d4a0c9e5e5…
by
Changes to one file · Browse files at 9521df28903d Showing diff from parent a7d4a0c9e5e5 Diff from another changeset...
|
|
@@ -0,0 +1,271 @@ + # Published under the GNU GPL, v2 or later.
+# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
+# Copyright (C) 2007 Henry Ludemann <misc@hl.id.au>
+# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+
+import os
+#import tempfile
+from mercurial import hg
+from thgutil import *
+from mercurial import ui
+from mercurial.i18n import _
+
+try:
+ from mercurial.error import RepoError
+except ImportError:
+ from mercurial.repo import RepoError
+
+
+class TortoiseMenu(object):
+
+ def __init__(self, menutext, helptext, handler, icon=None, state=True):
+ self.menutext = menutext
+ self.helptext = helptext
+ self.handler = handler
+ self.state = state
+ self.icon = icon
+
+ def isSubmenu():
+ return false
+
+ def isSep():
+ return false
+
+
+class TortoiseSubmenu(TortoiseMenu):
+
+ def __init__(self, menutext, helptext, menus=[], icon=None):
+ TortoiseMenu.__init(self, menutext, helptext, None, icon)
+ self.menus = menus[:]
+
+ def add_menu(self, menutext, helptext, handler, icon=None, state=True):
+ self.menus.append(TortoiseMenu(menutext, helptext,
+ handler, icon, state))
+
+ def add_sep(self):
+ self.menus.append(TortoiseMenuSep())
+
+ def get_menus(self):
+ return self.menus
+
+ def append(self, entry):
+ self.menus.append(entry)
+
+ def isSubmenu():
+ return true
+
+
+class TortoiseMenuSep(object):
+
+ def isSubmenu():
+ return false
+
+ def isSep():
+ return true
+
+
+class menuThg:
+ """shell extension that adds context menu items"""
+
+ def __init__(self):
+ self.handlers = self
+ self.name = "TortoiseHG"
+
+ def get_commands_dragdrop(self, srcfiles, destfolder):
+ """
+ Get a list of commands valid for the current selection.
+
+ Commands are instances of TortoiseMenu, TortoiseMenuSep or TortoiseMenu
+ """
+
+ print "_get_commands_dragdrop() on %s" % ", ".join(self._filenames)
+
+ # we can only accept dropping one item
+ if len(srcfiles) > 1:
+ return []
+
+ # open repo
+ drag_repo = None
+ drop_repo = None
+
+ print "drag = %s" % self.srcfiles[0]
+ print "drop = %s" % self.destfolder
+
+ drag_path = self.srcfiles[0]
+ drag_repo = open_repo(drag_path)
+ if not drag_repo:
+ return []
+ if drag_repo and drag_repo.root != drag_path:
+ return [] # dragged item must be a hg repo root directory
+
+ drop_repo = open_repo(self._folder)
+
+ thgmenu = []
+ thgmenu.append(TortoiseMenu(_("Create Clone"),
+ _("Create clone here from source"),
+ self.handlers._clone_here, icon="menuclone.ico"))
+
+ if drop_repo:
+ thgmenu.append(TortoiseMenu(_("Synchronize"),
+ _("Synchronize with dragged repository"),
+ self.handlers._synch_here, icon="menusynch.py"))
+ return thgmenu
+
+ def get_commands(self, files):
+ """
+ Get a list of commands valid for the current selection.
+
+ Commands are instances of TortoiseMenu, TortoiseMenuSep or TortoiseMenu
+ """
+
+ print "_get_commands() on %s" % ", ".join(self._filenames)
+
+ # open repo
+ repo = open_repo(files[0])
+
+ if repo:
+ thgmenu.append(TortoiseMenu(_("HG Commit..."),
+ _("Commit changes in repository"),
+ self.handlers._commit, icon="menucommit.ico"))
+
+ menu = TortoiseSubmenu(self.name, "Mercurial", [], icon="hg.ico")
+
+ if repo is None:
+ menu.append(TortoiseMenu(_("Clone a Repository"),
+ _("clone a repository"),
+ self.handlers._clone, icon="menuclone.ico"))
+ menu.append(TortoiseMenu(_("Create Repository Here"),
+ _("create a new repository in this directory"),
+ self.handlers._init, icon="menucreaterepos.ico",
+ state=os.path.isdir(rpath)))
+ else:
+
+ for f in self._filenames:
+ if f.endswith('.hgignore'):
+ menu.append(TortoiseMenu(_("Modify ignore filter"),
+ _("Modify repository ignore filter"),
+ self.handlers._hgignore, icon="general.ico")) # needs ico
+ break
+
+ menu.append(TortoiseMenu(_("View File Status"),
+ _("Repository status"),
+ self.handlers._status, icon="menushowchanged.ico"))
+
+ menu.append(TortoiseMenu(_("(Un)Shelve Changes"),
+ _("Shelve repository changes"),
+ self.handlers._shelve, icon="general.ico")) # needs ico
+
+ # Visual Diff (any extdiff command)
+ has_vdiff = repo.ui.config('tortoisehg', 'vdiff', '') != ''
+ menu.append(TortoiseMenu(_("Visual Diff"),
+ _("View changes using GUI diff tool"),
+ self.handlers._vdiff, icon="TortoiseMerge.ico",
+ state=has_vdiff))
+
+ if len(self._filenames) == 0:
+ menu.append(TortoiseMenu(_("Guess Renames"),
+ _("Detect renames and copies"),
+ self.handlers._guess_rename, icon="general.ico")) # needs ico
+ elif len(self._filenames) == 1:
+ result.append(TortoiseMenu(_("Rename file"),
+ _("Rename file or directory"),
+ self.handlers._rename, icon="general.ico")) # needs ico
+
+ menu.append(TortoiseMenu(_("Add Files"),
+ _("Add files to Hg repository"),
+ self.handlers._add, icon="menuadd.ico"))
+ menu.append(TortoiseMenu(_("Remove Files"),
+ _("Remove selected files on the next commit"),
+ self.handlers._remove, icon="menudelete.ico"))
+ menu.append(TortoiseMenu(_("Undo Changes"),
+ _("Revert selected files"),
+ self.handlers._revert, icon="menurevert.ico"))
+
+ # we can only annotate file but not directories
+ annotatible = len(files) > 0
+ for f in self._filenames:
+ if not os.path.isfile(f):
+ annotatible = False
+ break
+ menu.append(TortoiseMenu(_("Annotate Files"),
+ _("show changeset information per file line"),
+ self.handlers._annotate, icon="menublame.ico",
+ state=annotatible))
+
+ menu.append(TortoiseMenuSep())
+ menu.append(TortoiseMenu(_("Update To Revision"),
+ _("update working directory"),
+ self.handlers._update, icon="menucheckout.ico"))
+
+ can_merge = len(repo.heads()) > 1 and \
+ len(repo.changectx(None).parents()) < 2
+ menu.append(TortoiseMenu(_("Merge Revisions"),
+ _("merge working directory with another revision"),
+ self.handlers._merge, icon="menumerge.ico",
+ state=can_merge))
+
+ in_merge = len(repo.changectx(None).parents()) > 1
+ menu.append(TortoiseMenu(_("Undo Merge"),
+ _("Undo merge by updating to revision"),
+ self.handlers._merge, icon="menuunmerge.ico",
+ state=in_merge))
+
+ menu.append(TortoiseMenuSep())
+
+ menu.append(TortoiseMenu(_("View Changelog"),
+ _("View revision history"),
+ self.handlers._history, icon="menulog.ico"))
+
+ menu.append(TortoiseMenu(_("Search Repository"),
+ _("Search revisions of files for a text pattern"),
+ self.handlers._grep, icon="menurepobrowse.ico"))
+
+ if repo.ui.config('tortoisehg', 'view'):
+ menu.append(TortoiseMenu(_("Revision Graph"),
+ _("View history with DAG graph"),
+ self.handlers._view, icon="menurevisiongraph.ico"))
+
+ menu.append(TortoiseMenuSep())
+
+ menu.append(TortoiseMenu(_("Synchronize..."),
+ _("Synchronize with remote repository"),
+ self.handlers._synch, icon="menusynch.ico"))
+ menu.append(TortoiseMenu(_("Recovery..."),
+ _("General repair and recovery of repository"),
+ self.handlers._recovery, icon="general.ico"))
+ menu.append(TortoiseMenu(_("Web Server"),
+ _("start web server for this repository"),
+ self.handlers._serve, icon="proxy.ico"))
+
+ menu.append(TortoiseMenuSep())
+ menu.append(TortoiseMenu(_("Create Clone"),
+ _("Clone a repository here"),
+ self.handlers._clone, icon="menuclone.ico"))
+ can_init = repo.root != rpath and os.path.isdir(rpath)
+ menu.append(TortoiseMenu(_("Create Repository Here"),
+ _("create a new repository in this directory"),
+ self.handlers._init, icon="menucreaterepos.ico",
+ state=can_init))
+
+ # config settings menu
+ menu.append(TortoiseMenuSep())
+ optmenu = TortoiseSubmenu(_("Settings"), '',
+ icon="menusettings.ico")
+ optmenu.add_menu(_("Global"),
+ _("Configure user wide settings"),
+ self.handlers._config_user, icon="settings_user.ico")
+ if repo:
+ optmenu.add_menu(_("Repository"),
+ _("Configure settings local to this repository"),
+ self.handlers._config_repo,
+ icon="settings_repo.ico")
+ menu.append(optmenu)
+
+ # add common menu items
+ menu.append(TortoiseMenuSep())
+ menu.append(TortoiseMenu(_("About"), _("About TortoiseHg"),
+ self.handlers._about, icon="menuabout.ico"))
+
+ thgmenu.append(menu)
+ thgmenu.append(TortoiseMenuSep())
+ return thgmenu
|
Loading...