Mercurial and Git clients can push and pull from this alias URL to interact with this repository. You can change to which repository an alias points by going to the Aliases link on the project page.
* tracked state should include clean files (UNCHANGED) * Change 'Undo Changes' to 'Revert Changes' to be consistent with hg command name * Update (checkout) and (Un)Merge are not valid with file selections * Change 'Search Repository' to 'Search History' * Append 'Settings' after 'Global' and 'Repository' (submenu is not necessary)
# 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>importosfrommercurialimporthgfromthgutilimport*importcachethgfrommercurialimportuifrommercurial.i18nimport_try:frommercurial.errorimportRepoErrorexceptImportError:frommercurial.repoimportRepoErrorclassTortoiseMenu(object):def__init__(self,menutext,helptext,hgcmd,icon=None,state=True):self.menutext=menutextself.helptext=helptextself.hgcmd=hgcmdself.state=stateself.icon=icondefisSubmenu(self):returnFalsedefisSep(self):returnFalseclassTortoiseSubmenu(TortoiseMenu):def__init__(self,menutext,helptext,menus=[],icon=None):TortoiseMenu.__init__(self,menutext,helptext,None,icon)self.menus=menus[:]defadd_menu(self,menutext,helptext,hgcmd,icon=None,state=True):self.menus.append(TortoiseMenu(menutext,helptext,hgcmd,icon,state))defadd_sep(self):self.menus.append(TortoiseMenuSep())defget_menus(self):returnself.menusdefappend(self,entry):self.menus.append(entry)defisSubmenu(self):returnTrueclassTortoiseMenuSep(object):hgcmd='----'defisSubmenu(self):returnFalsedefisSep(self):returnTrueclassthg_menu(object):def__init__(self,ui,name="TortoiseHG"):self.menus=[[]]self.ui=uiself.name=nameself.sep=[False]defadd_menu(self,menutext,helptext,hgcmd,icon=None,state=True):pos=self.ui.config('tortoisehg','menu.'+hgcmd)ifpos:ifpos.isdigit():pos=int(pos)else:pos=pos[0].lower()notin'nfm'# no, false, main menuelifhgcmd=='commit':pos=0else:pos=1ifpos<0:returnwhilelen(self.menus)<=pos:#add Submenuself.menus.append([])self.sep.append(False)ifself.sep[pos]:self.sep[pos]=Falseself.menus[pos].append(TortoiseMenuSep())self.menus[pos].append(TortoiseMenu(menutext,helptext,hgcmd,icon,state))defadd_sep(self):self.sep=[Truefor_sinself.sep]defget(self):menu=self.menus[0][:]forsubmenuinself.menus[1:]:menu.append(TortoiseSubmenu(self.name,'Mercurial',submenu,"hg.ico"))menu.append(TortoiseMenuSep())returnmenudef__iter__(self):returniter(self.get())defopen_repo(path):root=find_root(path)ifroot:try:repo=hg.repository(ui.ui(),path=root)returnrepoexceptRepoError:passexceptStandardError,e:print"error while opening repo %s:"%pathprintereturnNoneclassmenuThg:"""shell extension that adds context menu items"""def__init__(self):self.name="TortoiseHG"defget_commands_dragdrop(self,srcfiles,destfolder):""" Get a list of commands valid for the current selection. Commands are instances of TortoiseMenu, TortoiseMenuSep or TortoiseMenu """# we can only accept dropping one itemiflen(srcfiles)>1:return[]# open repodrag_repo=Nonedrop_repo=Nonedrag_path=self.srcfiles[0]drag_repo=open_repo(drag_path)ifnotdrag_repo:return[]ifdrag_repoanddrag_repo.root!=drag_path:return[]# dragged item must be a hg repo root directorydrop_repo=open_repo(self._folder)menu=thg_menu(drag_repo.ui,self.name)menu.add_menu(_("Create Clone"),_("Create clone here from source"),'clone',icon="menuclone.ico")ifdrop_repo:menu.add_menu(_("Synchronize"),_("Synchronize with dragged repository"),'synch',icon="menusynch.py")returnmenudefget_norepo_commands(self,cwd,files):menu=thg_menu(ui.ui(),self.name)menu.add_menu(_("Clone a Repository"),_("clone a repository"),'clone',icon="menuclone.ico")menu.add_menu(_("Create Repository Here"),_("create a new repository in this directory"),'init',icon="menucreaterepos.ico")menu.add_menu(_("Global Settings"),_("Configure user wide settings"),'userconfig',icon="settings_user.ico")menu.add_sep()menu.add_menu(_("About"),_("About TortoiseHg"),'about',icon="menuabout.ico")menu.add_sep()returnmenudefget_commands(self,repo,cwd,files):""" Get a list of commands valid for the current selection. Commands are instances of TortoiseMenu, TortoiseMenuSep or TortoiseMenu """states=set()onlyfiles=len(files)>0hashgignore=Falseforfinfiles:ifnotos.path.isfile(f):onlyfiles=Falseiff.endswith('.hgignore'):hashgignore=Truestates.update(cachethg.get_states(f,repo))ifnotfiles:states.update(cachethg.get_states(cwd,repo))ifcachethg.ROOTinstatesandlen(states)==1:states.add(cachethg.MODIFIED) changed = bool(states & set([cachethg.ADDED, cachethg.MODIFIED]))
modified = cachethg.MODIFIED in states
- tracked = changed or modified
+ clean = cachethg.UNCHANGED in states+ tracked = changed or modified or clean new = bool(states & set([cachethg.UNKNOWN, cachethg.IGNORED]))
menu = thg_menu(repo.ui, self.name)
ifchangedorcachethg.UNKNOWNinstatesor'qtip'inrepo['.'].tags():menu.add_menu(_("HG Commit..."),_("Commit changes in repository"),'commit',icon="menucommit.ico")ifhashgignoreornewandlen(states)==1:menu.add_menu(_("Edit Ignore Filter"),_("Edit repository ignore filter"),'hgignore',icon="ignore.ico")ifchangedorcachethg.UNKNOWNinstates:menu.add_menu(_("View File Status"),_("Repository status"),'status',icon="menushowchanged.ico")ifmodified:menu.add_menu(_("Shelve Changes"),_("Shelve or unshelve repository changes"),'shelve',icon="shelve.ico")# Visual Diff (any extdiff command)has_vdiff=repo.ui.config('tortoisehg','vdiff','vdiff')!=''ifhas_vdiffandmodified:menu.add_menu(_("Visual Diff"),_("View changes using GUI diff tool"),'vdiff',icon="TortoiseMerge.ico")iflen(files)==0andcachethg.UNKNOWNinstates:menu.add_menu(_("Guess Renames"),_("Detect renames and copies"),'guess',icon="detect_rename.ico")eliflen(files)==1andtracked:# needs icomenu.add_menu(_("Rename File"),_("Rename file or directory"),'rename',icon="general.ico")iffilesandnew:menu.add_menu(_("Add Files"),_("Add files to Hg repository"),'add',icon="menuadd.ico")iffilesandtracked:menu.add_menu(_("Remove Files"), _("Remove selected files on the next commit"),
'remove', icon="menudelete.ico")
if files and changed:
- menu.add_menu(_("Undo Changes"),
+ menu.add_menu(_("Revert Changes"),
_("Revert selected files"),
'revert', icon="menurevert.ico")
# we can only annotate file but not directoriesifonlyfilesandtracked:menu.add_menu(_("Annotate Files"),_("show changeset information per file line"), 'datamine', icon="menublame.ico")
menu.add_sep()
- menu.add_menu(_("Update To Revision"),- _("update working directory"),- 'update', icon="menucheckout.ico")-- if len(repo.changectx(None).parents()) < 2:- menu.add_menu(_("Merge Revisions"),- _("merge working directory with another revision"),- 'merge', icon="menumerge.ico")-- inmerge = len(repo.changectx(None).parents()) > 1- if inmerge:- menu.add_menu(_("Undo Merge"),- _("Undo merge by updating to revision"),- 'merge', icon="menuunmerge.ico")-- menu.add_sep() if tracked:
menu.add_menu(_("View Changelog"),
_("View revision history"), 'history', icon="menulog.ico")
if len(files) == 0:
- menu.add_menu(_("Search Repository"),+ menu.add_sep()+ menu.add_menu(_("Update To Revision"),+ _("update working directory"),+ 'update', icon="menucheckout.ico")++ if len(repo.changectx(None).parents()) < 2:+ menu.add_menu(_("Merge Revisions"),+ _("merge working directory with another revision"),+ 'merge', icon="menumerge.ico")++ inmerge = len(repo.changectx(None).parents()) > 1+ if inmerge:+ menu.add_menu(_("Undo Merge"),+ _("Undo merge by updating to revision"),+ 'merge', icon="menuunmerge.ico")++ menu.add_menu(_("Search History"), _("Search revisions of files for a text pattern"),
'datamine', icon="menurepobrowse.ico")
menu.add_sep()menu.add_menu(_("Synchronize..."),_("Synchronize with remote repository"),'synch',icon="menusynch.ico")menu.add_menu(_("Recovery..."),_("General repair and recovery of repository"),'recovery',icon="general.ico")menu.add_menu(_("Web Server"),_("start web server for this repository"),'serve',icon="proxy.ico")menu.add_sep()menu.add_menu(_("Create Clone"),_("Clone a repository here"),'clone',icon="menuclone.ico")ifrepo.root!=cwd:menu.add_menu(_("Create Repository Here"), _("create a new repository in this directory"),
'init', icon="menucreaterepos.ico")
- # config settings menu
- menu.add_sep()
- menu.add_menu(_("Global"),- _("Configure user wide settings"),
- 'userconfig', icon="settings_user.ico")
- menu.add_menu(_("Repository"),- _("Configure settings local to this repository"),
- 'repoconfig', icon="settings_repo.ico")
+ # config settings menu
+menu.add_sep()
+menu.add_menu(_("Global Settings"),+ _("Configure user wide settings"),
+ 'userconfig', icon="settings_user.ico")
+menu.add_menu(_("Repository Settings"),+ _("Configure settings local to this repository"),
+ 'repoconfig', icon="settings_repo.ico")
# add common menu items
menu.add_sep()
menu.add_menu(_("About"),_("About TortoiseHg"),'about',icon="menuabout.ico")menu.add_sep()returnmenu
Attach a Trello Card
Add a tag
Your session has expired
You are no longer logged in. Please log in and try your request again.
Filter RSS Feed
This RSS feed URL allows you to see the contents of your current filter using any feed reader.
This link includes a special authentication token. If you share the URL with anyone else, they can see this RSS feed's activity. You can disable these tokens when needed.
Your current filter is unsaved; changing it won't affect this RSS feed.