tortoisehg-3.7.3/ 0000755 0000765 0000024 00000000000 12677266123 014346 5 ustar sborho staff 0000000 0000000 tortoisehg-3.7.3/contrib/ 0000755 0000765 0000024 00000000000 12677266123 016006 5 ustar sborho staff 0000000 0000000 tortoisehg-3.7.3/contrib/mergetools.rc 0000644 0000765 0000024 00000033445 12620147176 020517 0 ustar sborho staff 0000000 0000000 [merge-tools]
kdiff3.args=--auto --L1 base --L2 parent1 --L3 parent2 $base $local $other -o $output
kdiff3.regkey=Software\KDiff3
kdiff3.regkeyalt=Software\Wow6432Node\KDiff3
kdiff3.regappend=\kdiff3.exe
kdiff3.fixeol=False
kdiff3.premerge=False
kdiff3.gui=True
kdiff3.priority=-3
kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child
kdiff3.diff3args=--L1 '$plabel1' --L2 '$clabel' --L3 '$plabel2' $parent1 $child $parent2
kdiff3.dirdiff=True
; copy of kdiff3 above, dropping --auto
kdiff3-noauto.executable=kdiff3
kdiff3-noauto.args=--L1 base --L2 parent1 --L3 parent2 $base $local $other -o $output
kdiff3-noauto.regkey=Software\KDiff3
kdiff3-noauto.regkeyalt=Software\Wow6432Node\KDiff3
kdiff3-noauto.regappend=\kdiff3.exe
kdiff3-noauto.fixeol=False
kdiff3-noauto.premerge=False
kdiff3-noauto.gui=True
kdiff3-noauto.priority=-4
kdiff3-noauto.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child
kdiff3-noauto.diff3args=--L1 '$plabel1' --L2 '$clabel' --L3 '$plabel2' $parent1 $child $parent2
kdiff3-noauto.dirdiff=True
gvimdiff.args=--nofork -d -g -O $local $other $base
gvimdiff.regkey=Software\Vim\GVim
gvimdiff.regkeyalt=Software\Wow6432Node\Vim\GVim
gvimdiff.regname=path
gvimdiff.priority=-9
gvimdiff.diffargs=--nofork -d -g -O $parent $child
gvimdiff.diff3args=--nofork -d -g -O $parent1 $child $parent2
meld.regkey=SOFTWARE\Meld
meld.regkeyalt=SOFTWARE\Wow6432Node\Meld
meld.regname=Executable
meld.gui=True
meld.priority=-2
meld.args=--label='local' $local --label='merged' $base --label='other' $other -o $output
meld.checkchanged=True
meld.diffargs=-a --label='$plabel1' $parent --label='$clabel' $child
meld.diff3args=-a --label='$plabel1' $parent1 --label='$clabel' $child --label='$plabel2' $parent2
meld.dirdiff=True
tkdiff.args=-L local -L other $local $other -a $base -o $output
tkdiff.gui=True
tkdiff.priority=-5
tkdiff.diffargs=-L '$plabel1' $parent -L '$clabel' $child
tkdiff.diff3args=
tkdiff.dirdiff=False
xxdiff.args=--show-merged-pane --exit-with-merge-status --title1 local --title2 base --title3 other --merged-filename $output --merge $local $base $other
xxdiff.gui=True
xxdiff.priority=-4
xxdiff.diffargs=--title1 '$plabel1' $parent --title2 '$clabel' $child
xxdiff.diff3args=--title1 '$plabel1' $parent1 --title2 '$clabel' $child --title3 '$plabel2' $parent2
xxdiff.dirdiff=True
diffmerge.regkey=Software\SourceGear\SourceGear DiffMerge\
diffmerge.regkeyalt=Software\Wow6432Node\SourceGear\SourceGear DiffMerge\
diffmerge.regname=Location
diffmerge.priority=-7
diffmerge.args=-nosplash -merge -title1=local -title2=merged -title3=other $local $base $other -result=$output
diffmerge.checkchanged=True
diffmerge.gui=True
diffmerge.diffargs=--nosplash --title1='$plabel1' --title2='$clabel' $parent $child
diffmerge.diff3args=--nosplash --title1='$plabel1' --title2='$clabel' --title3='$plabel2' $parent1 $child $parent2
diffmerge.dirdiff=True
diffmerge3.regkey=Software\SourceGear\Common\DiffMerge\Installer
diffmerge3.regkeyalt=Software\Wow6432Node\SourceGear\Common\DiffMerge\Installer
diffmerge3.regname=Location
diffmerge3.priority=-7
diffmerge3.args=-nosplash -merge -title1=local -title2=merged -title3=other $local $base $other -result=$output
diffmerge3.checkchanged=True
diffmerge3.gui=True
diffmerge3.diffargs=--nosplash --title1='$plabel1' --title2='$clabel' $parent $child
diffmerge3.diff3args=--nosplash --title1='$plabel1' --title2='$clabel' --title3='$plabel2' $parent1 $child $parent2
diffmerge3.dirdiff=True
p4merge.args=$base $local $other $output
p4merge.regkey=Software\Perforce\Environment
p4merge.regkeyalt=Software\Wow6432Node\Perforce\Environment
p4merge.regname=P4INSTROOT
p4merge.regappend=\p4merge.exe
p4merge.gui=True
p4merge.priority=-8
p4merge.diffargs=$parent $child
p4merge.diff3args=$child $parent1 $parent2
p4merge.dirdiff=False
p4merge.checkchanged = True
tortoisemerge.args=/base:$base /mine:$local /theirs:$other /merged:$output
tortoisemerge.regkey=Software\TortoiseSVN
tortoisemerge.regkeyalt=Software\Wow6432Node\TortoiseSVN
tortoisemerge.checkchanged=True
tortoisemerge.gui=True
tortoisemerge.priority=-9
tortoisemerge.diffargs=/base:$parent /mine:$child /basename:'$plabel1' /minename:'$clabel'
; TortoiseMerge does not support three-way file or directory comparisons
; Fork of TortoiseMerge bundled with TortoiseGit
tortoisegitmerge.args=/base:$base /mine:$local /theirs:$other /merged:$output
tortoisegitmerge.regkey=Software\TortoiseGit
tortoisegitmerge.regkeyalt=Software\Wow6432Node\TortoiseGit
tortoisegitmerge.regname=TMergePath
tortoisegitmerge.checkchanged=True
tortoisegitmerge.gui=True
tortoisegitmerge.priority=-9
tortoisegitmerge.diffargs=/base:$parent /mine:$child /basename:'$plabel1' /minename:'$clabel'
ecmerge.args=$base $local $other --mode=merge3 --title0=base --title1=local --title2=other --to=$output
ecmerge.regkey=Software\Elli\xc3\xa9 Computing\Merge
ecmerge.regkeyalt=Software\Wow6432Node\Elli\xc3\xa9 Computing\Merge
ecmerge.gui=True
ecmerge.priority=-10
ecmerge.diffargs=$parent $child --mode=diff2 --title1='$plabel1' --title2='$clabel'
ecmerge.diff3args=$child $parent1 $parent2 --mode=diff3 --title0='$clabel' --title1='$plabel1' --title2='$plabel2'
ecmerge.dirdiff=True
ecmerge.dir3diff=True
; Windows version of BeyondCompare 2 (2-way diff only)
beyondcompare2.args= /ro /title1="Original" /title2="Working copy" $local $other
beyondcompare2.regkey=Software\Scooter Software\Beyond Compare
beyondcompare2.regkeyalt=Software\Wow6432Node\Scooter Software\Beyond Compare
beyondcompare2.regname=ExePath
beyondcompare2.gui=True
beyondcompare2.priority=-4
beyondcompare2.diffargs=/lro /title1='$plabel1' /title2='$clabel' $parent $child
beyondcompare2.dirdiff=True
; Windows version of BeyondCompare 3
beyondcompare3.args=$local $other $base /mergeoutput=$output /ro /lefttitle=parent1 /centertitle=base /righttitle=parent2 /outputtitle=merged /automerge /reviewconflicts /solo
beyondcompare3.premerge=False
beyondcompare3.regkey=Software\Scooter Software\Beyond Compare 3
beyondcompare3.regkeyalt=Software\Wow6432Node\Scooter Software\Beyond Compare 3
beyondcompare3.regname=ExePath
beyondcompare3.gui=True
beyondcompare3.priority=-1
beyondcompare3.diffargs=/lro /lefttitle='$plabel1' /righttitle='$clabel' /solo /expandall $parent $child
beyondcompare3.diff3args=$parent1 $parent2 $child /lefttitle='$plabel1' /centertitle='$clabel' /righttitle='$plabel2' /solo /ro
beyondcompare3.dirdiff=True
; copy of BeyondCompare 3 above, dropping /automerge
beyondcompare3-noauto.executable=beyondcompare3
beyondcompare3-noauto.args=$local $other $base /mergeoutput=$output /ro /lefttitle=parent1 /centertitle=base /righttitle=parent2 /outputtitle=merged /reviewconflicts /solo
beyondcompare3-noauto.premerge=False
beyondcompare3-noauto.regkey=Software\Scooter Software\Beyond Compare 3
beyondcompare3-noauto.regkeyalt=Software\Wow6432Node\Scooter Software\Beyond Compare 3
beyondcompare3-noauto.regname=ExePath
beyondcompare3-noauto.gui=True
beyondcompare3-noauto.priority=-1
beyondcompare3-noauto.diffargs=/lro /lefttitle='$plabel1' /righttitle='$clabel' /solo /expandall $parent $child
beyondcompare3-noauto.diff3args=$parent1 $parent2 $child /lefttitle='$plabel1' /centertitle='$clabel' /righttitle='$plabel2' /solo /ro
beyondcompare3-noauto.dirdiff=True
; Windows version of BeyondCompare 4
beyondcompare4.args=$local $other $base /mergeoutput=$output /ro /lefttitle=parent1 /centertitle=base /righttitle=parent2 /outputtitle=merged /automerge /reviewconflicts /solo
beyondcompare4.premerge=False
beyondcompare4.regkey=Software\Scooter Software\Beyond Compare 4
beyondcompare4.regkeyalt=Software\Wow6432Node\Scooter Software\Beyond Compare 4
beyondcompare4.regname=ExePath
beyondcompare4.gui=True
beyondcompare4.priority=-1
beyondcompare4.diffargs=/lro /lefttitle='$plabel1' /righttitle='$clabel' /solo /expandall $parent $child
beyondcompare4.diff3args=$parent1 $parent2 $child /lefttitle='$plabel1' /centertitle='$clabel' /righttitle='$plabel2' /solo /ro
beyondcompare4.dirdiff=True
beyondcompare4.dir3diff=True
; copy of BeyondCompare 4 above, dropping /automerge
beyondcompare4-noauto.executable=beyondcompare4
beyondcompare4-noauto.args=$local $other $base /mergeoutput=$output /ro /lefttitle=parent1 /centertitle=base /righttitle=parent2 /outputtitle=merged /reviewconflicts /solo
beyondcompare4-noauto.premerge=False
beyondcompare4-noauto.regkey=Software\Scooter Software\Beyond Compare 4
beyondcompare4-noauto.regkeyalt=Software\Wow6432Node\Scooter Software\Beyond Compare 4
beyondcompare4-noauto.regname=ExePath
beyondcompare4-noauto.gui=True
beyondcompare4-noauto.priority=-1
beyondcompare4-noauto.diffargs=/lro /lefttitle='$plabel1' /righttitle='$clabel' /solo /expandall $parent $child
beyondcompare4-noauto.diff3args=$parent1 $parent2 $child /lefttitle='$plabel1' /centertitle='$clabel' /righttitle='$plabel2' /solo /ro
beyondcompare4-noauto.dirdiff=True
beyondcompare4-noauto.dir3diff=True
; Linux only diff tools, listed here for reference
bcompare.args=$local $other $base -mergeoutput=$output -ro -lefttitle=parent1 -centertitle=base -righttitle=parent2 -outputtitle=merged -automerge -reviewconflicts -solo
bcompare.premerge=False
bcompare.gui=True
bcompare.priority=-1
bcompare.diffargs=-lro -lefttitle='$plabel1' -righttitle='$clabel' -solo -expandall $parent $child
bcompare.diff3args=$parent1 $parent2 $child -lefttitle='$plabel1' -centertitle='$clabel' -righttitle='$plabel2' -solo -expandall
bcompare.dirdiff=True
winmergeu.regkey=Software\Thingamahoochie\WinMerge\
winmergeu.regkeyalt=Software\Wow6432Node\Thingamahoochie\WinMerge\
winmergeu.regname=Executable
winmergeu.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=True
winmergeu.priority=-10
winmergeu.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmergeu.diff3args=
winmergeu.dirdiff=True
; The Araxis Merge tool is configured to work with newer versions of Araxis Merge
; if you are using Araxis Merge 2008 or earlier, create a [merge-tools] section
; in your mercurial.ini file, and add one of the two following "araxis.executable"
; lines, depending on whether you have installed a 32 or a 64 bit version
; of Araxis Merge and whether you are on a 32 or 64 bit version of windows
;
;araxis.executable=${ProgramFiles}/Araxis/Araxis Merge/ConsoleCompare.exe
;araxis.executable=${ProgramFiles(x86)}/Araxis/Araxis Merge/ConsoleCompare.exe
;
; Please remember to remove the leading ";" to uncomment the line
;
araxis.regkey=SOFTWARE\Classes\TypeLib\{46799e0a-7bd1-4330-911c-9660bb964ea2}\7.0\HELPDIR
araxis.regappend=\ConsoleCompare.exe
araxis.priority=-2
araxis.args=/3 /a2 /wait /merge /title1:"Parent 1" /title2:"Merge Result: "$output /title3:"Parent 2" $local $base $other $output
araxis.premerge=False
araxis.checkconflicts=True
araxis.binary=True
araxis.gui=True
araxis.diffargs=/2 /wait /title1:"$plabel1" /title2:"$clabel" $parent $child
araxis.diff3args=/3 /a2 /wait /title1:"$plabel1" /title2:"$clabel" /title3:"$plabel2" $parent1 $child $parent2
araxis.dirdiff=True
araxis.dir3diff=True
diffuse.priority=-3
diffuse.args=$local $base $other
diffuse.gui=True
diffuse.diffargs=$parent $child
diffuse.diff3args=$parent1 $child $parent2
diffuse.dirdiff=False
UltraCompare.regkey=Software\Microsoft\Windows\CurrentVersion\App Paths\UC.exe
UltraCompare.regkeyalt=Software\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths\UC.exe
UltraCompare.args = $base $local $other -title1 base -title3 other
UltraCompare.priority = -2
UltraCompare.gui = True
UltraCompare.binary = True
UltraCompare.checkconflicts = True
UltraCompare.checkchanged = True
UltraCompare.diffargs=$child $parent -title1 $clabel -title2 $plabel1
UltraCompare.diff3args=$parent1 $child $parent2 -title1 $plabel1 -title2 $clabel -title3 $plabel2
; TortoiseHg diff wrapper for some binary documents, not for merge general use
docdiff.priority=-100
docdiff.regkey=Software\TortoiseHg
docdiff.regappend=\docdiff.exe
docdiff.args=$local $base $other $output
docdiff.gui=True
docdiff.diffargs=$child $parent
docdiff.diff3args=$parent1 $child $parent2 $child
; These scripts fork processes, so the visual diff window must be used
docdiff.usewin=True
; Windows only diff tools
rekisa.priority=-1
rekisa.args = -Title=Base "$base" -Title=Local "$local" -Title=Other "$other"
rekisa.gui = True
rekisa.diffargs = "-Title=$plabel1" "$parent" "-Title=$clabel" "$child"
rekisa.diff3args = "-Title=$plabel1" "$parent1" "-Title=$clabel" "$child" "-Title=$plabel2" "$parent2"
rekisa.dirdiff = False
; 2-way diff only version of Code Compare
codecompare_diff.regkey=SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CodeCompare_is1
codecompare_diff.regname=InstallLocation
codecompare_diff.regappend=CodeCompare.exe
codecompare_diff.diffargs=/SC=TortoiseHg /title1="$plabel1" /title2="$clabel" $parent $child
codecompare_diff.diff3args=/SC=TortoiseHg /title1="$plabel1" /title2="$clabel" /title3="$plabel2" $parent1 $child $parent2
codecompare_diff.binary=False
codecompare_diff.gui=True
codecompare_diff.dirdiff=True
; 3-way merge version of Code Compare (not for diff, just for merge, Pro version only)
codecompare_merge.regkey=SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CodeCompare_is1
codecompare_merge.regname=InstallLocation
codecompare_merge.regappend=CodeMerge.exe
codecompare_merge.args=/SC=TortoiseHg /TF=$other /MF=$local /RF=$output /BF=$base /TT="Other: $other" /MT="Local: $local" /RT="Output: $output" /BT="Base: $base"
codecompare_merge.binary=False
codecompare_merge.gui=True
codecompare_merge.checkconflicts=True
codecompare_merge.premerge=Keep
; Telelogic Rhapsody DiffMerge Tool
rhapsody_diffmerge.regkey=Software\Telelogic\Rhapsody\DiffMerge\
rhapsody_diffmerge.regkeyalt=Software\Wow6432Node\Telelogic\Rhapsody\DiffMerge\
rhapsody_diffmerge.regname=Install Path
rhapsody_diffmerge.priority=-110
rhapsody_diffmerge.args=-xmerge $other $local -base $base -out $output
rhapsody_diffmerge.checkchanged=True
rhapsody_diffmerge.gui=True
rhapsody_diffmerge.diffargs=-xcompare $parent $child
rhapsody_diffmerge.diff3args=
tortoisehg-3.7.3/contrib/nautilus-thg.py 0000644 0000765 0000024 00000032663 12651730337 021011 0 ustar sborho staff 0000000 0000000 # TortoiseHg plugin for Nautilus and Caja
#
# Copyright 2007 Steve Borho
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2, incorporated herein by reference.
this_file = __file__.rsplit('.', 1)[0]
if this_file.endswith('caja-thg'):
from gi.repository import Caja as Nautilus
idstr_prefix = 'HgCaja'
else:
from gi.repository import Nautilus
idstr_prefix = 'HgNautilus3'
from gi.repository import GObject
from gi.repository import GLib
from gi.repository import Gio
from gi.repository import Gtk
import os
import sys
thg_main = 'thg'
try:
from mercurial import demandimport
except ImportError:
# workaround to use user's local python libs
userlib = os.path.expanduser('~/lib/python')
if os.path.exists(userlib) and userlib not in sys.path:
sys.path.append(userlib)
from mercurial import demandimport
demandimport.enable()
import subprocess
import urllib
from mercurial import hg, ui, match, util, error
from mercurial.node import short
def _thg_path():
# check if nautilus-thg.py is a symlink first
pfile = __file__
if pfile.endswith('.pyc'):
pfile = pfile[:-1]
path = os.path.dirname(os.path.dirname(os.path.realpath(pfile)))
thgpath = os.path.normpath(path)
testpath = os.path.join(thgpath, 'tortoisehg')
if os.path.isdir(testpath) and thgpath not in sys.path:
sys.path.insert(0, thgpath)
_thg_path()
from tortoisehg.util import paths, debugthg, cachethg
if debugthg.debug('N'):
debugf = debugthg.debugf
else:
debugf = debugthg.debugf_No
# avoid breaking other Python nautilus extensions
demandimport.disable()
nofilecmds = 'about serve synch repoconfig userconfig merge unmerge'.split()
class HgExtensionDefault(GObject.GObject):
def __init__(self):
self.scanStack = []
self.allvfs = {}
self.inv_dirs = set()
from tortoisehg.util import menuthg
self.hgtk = paths.find_in_path(thg_main)
self.menu = menuthg.menuThg()
# Get the configuration directory path
try:
self.notify = os.environ['XDG_CONFIG_HOME']
except KeyError:
self.notify = os.path.join('$HOME', '.config')
self.notify = os.path.expandvars(os.path.join(
self.notify,
'TortoiseHg'))
# Create folder if it does not exist
if not os.path.isdir(self.notify):
os.makedirs(self.notify)
# Create the notify file
self.notify = os.path.join(self.notify, 'notify')
open(self.notify, 'w').close()
self.gmon = Gio.file_new_for_path(self.notify).monitor(Gio.FileMonitorFlags.NONE, None)
self.gmon.connect('changed', self.notified)
def icon(self, iname):
return paths.get_tortoise_icon(iname)
def get_path_for_vfs_file(self, vfs_file, store=True):
if vfs_file.get_uri_scheme() != 'file':
return None
path = urllib.unquote(vfs_file.get_uri()[7:])
if vfs_file.is_gone():
self.allvfs.pop(path, '')
return None
if store:
self.allvfs[path] = vfs_file
return path
def get_vfs(self, path):
vfs = self.allvfs.get(path, None)
if vfs and vfs.is_gone():
del self.allvfs[path]
return None
return vfs
def get_repo_for_path(self, path):
'''
Find mercurial repository for vfs_file
Returns hg.repo
'''
p = paths.find_root(path)
if not p:
return None
try:
return hg.repository(ui.ui(), path=p)
except error.RepoError:
return None
except StandardError, e:
debugf(e)
return None
def run_dialog(self, menuitem, hgtkcmd, cwd = None, files = None):
'''
hgtkcmd - hgtk subcommand
'''
if cwd: #bg
files = []
else:
cwd = self.cwd
repo = self.get_repo_for_path(cwd)
cmdopts = [sys.executable, self.hgtk, hgtkcmd]
if hgtkcmd not in nofilecmds and files:
pipe = subprocess.PIPE
cmdopts += ['--listfile', '-']
else:
pipe = None
proc = subprocess.Popen(cmdopts, cwd=cwd, stdin=pipe, shell=False)
if pipe:
proc.stdin.write('\n'.join(files))
proc.stdin.close()
def buildMenu(self, vfs_files, bg):
'''Build menu'''
self.pos = 0
files = []
for vfs_file in vfs_files:
f = self.get_path_for_vfs_file(vfs_file)
if f:
files.append(f)
if not files:
return
if bg or len(files) == 1 and vfs_files[0].is_directory():
cwd = files[0]
files = []
else:
cwd = os.path.dirname(files[0])
repo = self.get_repo_for_path(cwd)
if repo:
menus = self.menu.get_commands(repo, cwd, files)
else:
menus = self.menu.get_norepo_commands(cwd, files)
files = []
self.cwd = cwd
return self._buildMenu(menus, files)
def _buildMenu(self, menus, files):
'''Build one level of a menu'''
items = []
if files:
passcwd = None
else: #bg
passcwd = self.cwd
for menu_info in menus:
idstr = '%s::%02d%s' % (idstr_prefix ,self.pos, menu_info.hgcmd)
self.pos += 1
if menu_info.isSep():
# can not insert a separator till now
pass
elif menu_info.isSubmenu():
if hasattr(Nautilus, 'Menu'):
item = Nautilus.MenuItem(name=idstr, label=menu_info.menutext,
tip=menu_info.helptext)
submenu = Nautilus.Menu()
item.set_submenu(submenu)
for subitem in self._buildMenu(menu_info.get_menus(), files):
submenu.append_item(subitem)
items.append(item)
else: #submenu not suported
for subitem in self._buildMenu(menu_info.get_menus(), files):
items.append(subitem)
else:
if menu_info.state:
item = Nautilus.MenuItem.new(idstr,
menu_info.menutext,
menu_info.helptext,
self.icon(menu_info.icon))
item.connect('activate', self.run_dialog, menu_info.hgcmd,
passcwd, files)
items.append(item)
return items
def get_background_items(self, window, vfs_file):
'''Build context menu for current directory'''
if vfs_file and self.menu:
return self.buildMenu([vfs_file], True)
def get_file_items(self, window, vfs_files):
'''Build context menu for selected files/directories'''
if vfs_files and self.menu:
return self.buildMenu(vfs_files, False)
def get_columns(self):
return Nautilus.Column.new(idstr_prefix + "::80hg_status",
"hg_status",
"Hg Status",
"Version control status"),
def _get_file_status(self, localpath, repo=None):
cachestate = cachethg.get_state(localpath, repo)
cache2state = {cachethg.UNCHANGED: ('default', 'clean'),
cachethg.ADDED: ('list-add', 'added'),
cachethg.MODIFIED: ('important', 'modified'),
cachethg.UNKNOWN: ('dialog-question', 'unrevisioned'),
cachethg.IGNORED: ('unreadable', 'ignored'),
cachethg.NOT_IN_REPO: (None, 'unrevisioned'),
cachethg.ROOT: ('generic', 'root'),
cachethg.UNRESOLVED: ('danger', 'unresolved')}
emblem, status = cache2state.get(cachestate, (None, '?'))
return emblem, status
def notified(self, monitor=None, changedfile=None, otherfile=None, event=None):
if event == Gio.FileMonitorEvent.CHANGES_DONE_HINT: return
debugf('notified from hgtk, %s', event, level='n')
f = open(self.notify, 'a+')
files = None
try:
files = [line[:-1] for line in f if line]
if files:
f.truncate(0)
finally:
f.close()
if not files:
return
root = os.path.commonprefix(files)
root = paths.find_root(root)
if root:
self.invalidate(files, root)
def invalidate(self, paths, root = ''):
started = bool(self.inv_dirs)
if cachethg.cache_pdir == root and root not in self.inv_dirs:
cachethg.overlay_cache.clear()
self.inv_dirs.update([os.path.dirname(root), '/', ''])
for path in paths:
path = os.path.join(root, path)
while path not in self.inv_dirs:
self.inv_dirs.add(path)
path = os.path.dirname(path)
if cachethg.cache_pdir == path:
cachethg.overlay_cache.clear()
if started:
return
if len(paths) > 1:
self._invalidate_dirs()
else:
#group invalidation of directories
GLib.timeout_add(200, self._invalidate_dirs)
def _invalidate_dirs(self):
for path in self.inv_dirs:
vfs = self.get_vfs(path)
if vfs:
vfs.invalidate_extension_info()
self.inv_dirs.clear()
# property page borrowed from http://www.gnome.org/~gpoo/hg/nautilus-hg/
def __add_row(self, row, label_item, label_value):
label = Gtk.Label(label_item)
label.set_use_markup(True)
label.set_alignment(1, 0)
self.table.attach(label, 0, 1, row, row + 1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL, 0, 0)
label.show()
label = Gtk.Label(label_value)
label.set_use_markup(True)
label.set_alignment(0, 1)
label.show()
self.table.attach(label, 1, 2, row, row + 1, Gtk.AttachOptions.FILL, 0, 0, 0)
def get_property_pages(self, vfs_files):
if len(vfs_files) != 1:
return
file = vfs_files[0]
path = self.get_path_for_vfs_file(file)
if path is None or file.is_directory():
return
repo = self.get_repo_for_path(path)
if repo is None:
return
localpath = path[len(repo.root)+1:]
emblem, status = self._get_file_status(path, repo)
# Get the information from Mercurial
ctx = repo['.']
try:
fctx = ctx.filectx(localpath)
rev = fctx.filelog().linkrev(fctx.filerev())
except:
rev = ctx.rev()
ctx = repo.changectx(rev)
node = short(ctx.node())
date = util.datestr(ctx.date(), '%Y-%m-%d %H:%M:%S %1%2')
parents = '\n'.join([short(p.node()) for p in ctx.parents()])
description = ctx.description()
user = ctx.user()
user = GLib.markup_escape_text(user)
tags = ', '.join(ctx.tags())
branch = ctx.branch()
self.property_label = Gtk.Label('Mercurial')
self.table = Gtk.Table(7, 2, False)
self.table.set_border_width(5)
self.table.set_row_spacings(5)
self.table.set_col_spacings(5)
self.__add_row(0, 'Status:', status)
self.__add_row(1, 'Last-Commit-Revision:', str(rev))
self.__add_row(2, 'Last-Commit-Description:', description)
self.__add_row(3, 'Last-Commit-Date:', date)
self.__add_row(4, 'Last-Commit-User:', user)
if tags:
self.__add_row(5, 'Tags:', tags)
if branch != 'default':
self.__add_row(6, 'Branch:', branch)
self.table.show()
return Nautilus.PropertyPage.new("MercurialPropertyPage::status",
self.property_label, self.table),
class HgExtensionIcons(HgExtensionDefault):
def update_file_info(self, file):
'''Queue file for emblem and hg status update'''
self.scanStack.append(file)
if len(self.scanStack) == 1:
GLib.idle_add(self.fileinfo_on_idle)
def fileinfo_on_idle(self):
'''Update emblem and hg status for files when there is time'''
if not self.scanStack:
return False
try:
vfs_file = self.scanStack.pop()
path = self.get_path_for_vfs_file(vfs_file, False)
if not path:
return True
oldvfs = self.get_vfs(path)
if oldvfs and oldvfs != vfs_file:
#file has changed on disc (not invalidated)
self.get_path_for_vfs_file(vfs_file) #save new vfs
self.invalidate([os.path.dirname(path)])
emblem, status = self._get_file_status(path)
if emblem is not None:
vfs_file.add_emblem(emblem)
vfs_file.add_string_attribute('hg_status', status)
except StandardError, e:
debugf(e)
return True
if ui.ui().configbool("tortoisehg", "overlayicons", default = True):
class HgExtension(HgExtensionIcons, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertyPageProvider, Nautilus.InfoProvider):
pass
else:
class HgExtension(HgExtensionDefault, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertyPageProvider):
pass
tortoisehg-3.7.3/contrib/thg.desktop 0000644 0000765 0000024 00000000305 12620147176 020153 0 ustar sborho staff 0000000 0000000 [Desktop Entry]
Type=Application
Name=TortoiseHg
GenericName=Version Control GUI
Comment=GUI application for using Mercurial
Icon=thg_logo
Exec=thg --nofork
Categories=Development;RevisionControl;
tortoisehg-3.7.3/COPYING.txt 0000644 0000765 0000024 00000043254 12620147176 016221 0 ustar sborho staff 0000000 0000000 GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
tortoisehg-3.7.3/doc/ 0000755 0000765 0000024 00000000000 12677266123 015113 5 ustar sborho staff 0000000 0000000 tortoisehg-3.7.3/doc/Build.bat 0000644 0000765 0000024 00000006030 12620147176 016633 0 ustar sborho staff 0000000 0000000 @echo off
setlocal
if not exist %hhc_compiler%. (
set hhc_compiler=hhc.exe
)
if not exist %qcollectiongenerator%. (
set qcollectiongenerator=qcollectiongenerator.exe
)
set PDFLATEX=PdfLatex
set SPHINXBUILD=sphinx-build
set OUTPUTDIRSUFFIX=
if not "%2" == "" (
set OUTPUTDIRSUFFIX=-%2
)
if "%2" == "en" (
set OUTPUTDIRSUFFIX=
)
set OUTPUTDIR=build%OUTPUTDIRSUFFIX%
set ALLSPHINXOPTS=-d %OUTPUTDIR%/doctrees %SPHINXOPTS% source%OUTPUTDIRSUFFIX%
if not "%PAPER%" == "" (
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
)
if "%1" == "" goto help
if "%1" == "help" (
:help
echo.Please use `Build.bat ^ [^]` where ^ is one of
echo. html to make standalone HTML files
echo. htmlhelp to make HTML files and a HTML help project
echo. chm to make CHM file
echo. qthelp to make HTML files and a qthelp project
echo. qhc to make QHC file
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
echo. pdf to make PDF file, you can set PAPER=a4 or PAPER=letter
echo.
echo.and where ^ is one of
echo. en to make target in English ^(default^)
echo. ja to make target in Japanese
echo. cs to make target in Czech
goto end
)
if "%1" == "clean" (
for /d %%i in (%OUTPUTDIR%\*) do rmdir /q /s %%i
del /q /s %OUTPUTDIR%\*
goto end
)
if "%1" == "html" (
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %OUTPUTDIR%/html
echo.
echo.Build finished. The HTML pages are in %OUTPUTDIR%/html.
goto end
)
if "%1" == "htmlhelp" (
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %OUTPUTDIR%/htmlhelp
echo.
echo.Build finished; now you can run HTML Help Workshop with the ^
.hhp project file in %OUTPUTDIR%/htmlhelp.
goto end
)
if "%1" == "chm" (
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %OUTPUTDIR%/chm
%hhc_compiler% %OUTPUTDIR%/chm/TortoiseHg.hhp
echo.
echo.Build finished. The CHM file is in %OUTPUTDIR%/chm.
goto end
)
if "%1" == "qthelp" (
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %OUTPUTDIR%/qthelp
echo.
echo.Build finished; now you can run "qcollectiongenerator" with the ^
.qhcp project file in %OUTPUTDIR%/qthelp, like this:
echo.^> qcollectiongenerator %OUTPUTDIR%\qthelp\foo.qhcp
echo.To view the help file:
echo.^> assistant -collectionFile %OUTPUTDIR%\qthelp\foo.ghc
goto end
)
if "%1" == "qhc" (
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %OUTPUTDIR%/qthelp
%qcollectiongenerator% %OUTPUTDIR%/qthelp/TortoiseHg.qhcp
echo.
echo.Build finished. The QHC file is in %OUTPUTDIR%/qthelp.
goto end
)
if "%1" == "latex" (
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %OUTPUTDIR%/latex
echo.
echo.Build finished; the LaTeX files are in %OUTPUTDIR%/latex.
goto end
)
if "%1" == "pdf" (
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %OUTPUTDIR%/pdf
pushd .
cd %OUTPUTDIR%\pdf
%PDFLATEX% TortoiseHg.tex
%PDFLATEX% TortoiseHg.tex
%PDFLATEX% TortoiseHg.tex
makeindex -s python.ist TortoiseHg.idx
makeindex -s python.ist modTortoiseHg.idx
%PDFLATEX% TortoiseHg.tex
%PDFLATEX% TortoiseHg.tex
popd
echo.
echo.Build finished; the PDF file is in %OUTPUTDIR%/pdf.
goto end
)
:end
tortoisehg-3.7.3/doc/Makefile 0000644 0000765 0000024 00000006061 12620147176 016550 0 ustar sborho staff 0000000 0000000 # Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
QCOLLECTIONGENERATOR = qcollectiongenerator
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
.PHONY: help clean html web pickle htmlhelp qthelp qhc latex changes linkcheck
help:
@echo "Please use \`make ' where is one of"
@echo " html to make standalone HTML files"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " qhc to make QHC file"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " changes to make an overview over all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
clean:
-rm -rf build/*
html:
mkdir -p build/html build/doctrees
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
@echo
@echo "Build finished. The HTML pages are in build/html."
zip: html
(cd build ; zip TortoiseHg.html.zip -r html)
pickle:
mkdir -p build/pickle build/doctrees
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle
@echo
@echo "Build finished; now you can process the pickle files."
web: pickle
json:
mkdir -p build/json build/doctrees
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
mkdir -p build/htmlhelp build/doctrees
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in build/htmlhelp."
qthelp:
mkdir -p build/qthelp build/doctrees
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in build/qthelp, like this:"
@echo "# qcollectiongenerator build/qthelp/foo.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile build/qthelp/foo.qhc"
qhc: qthelp
$(QCOLLECTIONGENERATOR) build/qthelp/TortoiseHg.qhcp
@echo "Build finished. To view the help file:"
@echo "# assistant -collectionFile build/qthelp/TortoiseHg.qhc"
latex:
mkdir -p build/latex build/doctrees
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
@echo
@echo "Build finished; the LaTeX files are in build/latex."
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
"run these through (pdf)latex."
changes:
mkdir -p build/changes build/doctrees
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes
@echo
@echo "The overview file is in build/changes."
linkcheck:
mkdir -p build/linkcheck build/doctrees
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in build/linkcheck/output.txt."
tortoisehg-3.7.3/doc/ReadMe-cs.txt 0000644 0000765 0000024 00000004007 12620147176 017407 0 ustar sborho staff 0000000 0000000 TortoiseHg Documentation
Pro vytvoření dokumentace ve formátu HTML je potřebná instalace Sphinx. V Ubuntu je to balíček Sphinx-Python. Ve Windows je zřejmě nejlepší easy_install. Sphinx musí být novější než 0.6.
Pro vytvoření souborů PDF jsou potřebné balíčky LaTeX. V Ubuntu to jsou texlive-latex-extra, texlive-fonts-recomended a všechny jejich dependence. Ve Windows je nejlepší MikTeX.
Jsou-li všechny potřebné rekvizity k disposici, lze použít makefile pro vytvoření cílů: 'make html htmlhelp latex'.
Máme-li 'latex' vybudován, nacédujeme se do jeho výstupního adresáře a spuštěním 'make all-pdf' vytvoříme vlastní soubor PDF.
Máme-li vybudován 'htmlhelp', musíme ve Windows použít vlastní HTML Help Compiler.
Pokud ve Window nemáme žádný nástroj 'make', můžeme použít build.bat. Je-li nainstalován HTML Help Compiler a MikTeX, můžeme formáty chm a pdf generovat přímo ('build chm' či 'build pdf').
Formování zdrojového textu
==========================
Následujte prosím tato pravidla při úpravě textů ve zdrojových souborech dokumentace.
- Jak navrženo ve Sphinxu (viz http://sphinx.pocoo.org/rest.html#sections),
použijte:
*************
Chapter title
*************
Section title
=============
Subsection title
----------------
Subsubsection title
^^^^^^^^^^^^^^^^^^^
- K uvedení klávesy nebo kombinace kláves použijte :kbd:, například:
:kbd:`Ctrl-A`
- K uvedení štítku, tlačítka nebo čehokoli, co se objeví v uživatelském rozhraní, použijte :guilabel:, například:
:guilabel:`Commit`
- K uvedení nabídky použijte :menuselection: a -->, například:
:menuselection:`TortoiseHg... --> About`
- K uvedení souboru použijte :file:, například:
:file:`.hg/hgrc`
- K uvedení příkazu, zadávaného na příkazovém řádku, použijte :command:, například:
:command:`hgtk log`
- K uvedení textu, vkládaného do vstupního pole GUI použijte ``, například:
``myproxy:8000``
tortoisehg-3.7.3/doc/ReadMe-ja.txt 0000644 0000765 0000024 00000003623 12620147176 017377 0 ustar sborho staff 0000000 0000000 TortoiseHg }jA
̃}jArhɂ sphinx CXg[Kv܂B
Ubuntu ł python-sphinx pbP[WƂĒĂAWindows ł
easy_install R}hgăCXg[̂łȒPłB
o[W 0.6 ȍ~ sphinx łΖȂrhł܂B
PDF `ŏo͂ɂ LaTeX pbP[WKvɂȂ܂BUbuntu ł
texlive-latex-extra pbP[WƂ̑SĂ̈ˑpbP[WŁAWindows ł
MiKTeX IXXłB
rhɕKvȃc[ Makefile gĈȉ̃^[Qbgw肵
rhł܂: html htmlhelp latex
PDF `̃rhɂ́A܂ LaTeX `̃rhĂA
cd R}hŏo̓fBNgɈړ "make all-pdf" sĂB
HTML wv`̃rhAɃwvRpCsKv
܂B
Windows GNU Make gȂꍇ Build.bat gƂł܂B
HTML wvRpC MiKTeX CXg[Ă̂łA
CHM ` PDF `ŏo͂邱Ƃł܂B
}jALqKChC
======================
}jÃ\[Xt@CύXꍇ͈ȉ̃KChCɏ]ĂB
- ̃KChC Sphinx ̂̂ł:
http://sphinx.pocoo.org/rest.html#sections
*********
̓^Cg
*********
߃^Cg
=========
߃^Cg
-----------
X߃^Cg
^^^^^^^^^^^^^
- L[܂̓L[̑gݍ킹ꍇ :kbd: gpĂBႦ
:kbd:`Ctrl-A`
- xA{^Ȃǃ[UC^[tFCXɕ\̂ :guilabel:
g܂BႦ
:guilabel:`Commit`
- j[̑I :menuselection: --> 𗘗pĂBႦ
:menuselection:`TortoiseHg... --> About`
- t@CfBNg̏ꏊ :file: g܂BႦ
:file:`.hg/hgrc`
- :command: ̓R}hvvgœ͂Ӗ܂BႦ
:command:`hgtk log`
- GUI ̃eLXg{bNXւ̓͂ ``(obNNI[e[V2)g܂B
Ⴆ
``myproxy:8000``
tortoisehg-3.7.3/doc/ReadMe-nl.txt 0000644 0000765 0000024 00000004131 12620147176 017411 0 ustar sborho staff 0000000 0000000 TortoiseHg Documentatie
Om deze documentatie aan te maken moet Sphinx genstalleerd zijn. Voor Ubuntu
is dit het python-sphinx pakket. Voor Windows maakt u de beste kans met
easy_install of pip. Om een build te doen zonder waarschuwingen heeft u
Sphinx 0.6 of later nodig.
Om PDF bestanden te maken heeft u LaTeX pakketten nodig. Voor Ubuntu zijn dat
texlive-latex-extra, texlive-fonts-recommended en al hun afhankelijkheden. Voor
Windows is de beste keuze MiKTeX.
Eens alle voorwaarden voldaan zijn kunt u de makefile gebruiken om doelen te
maken: 'make html htmlhelp latex'.
Eens 'latex' aangemaakt is gaat u met cd naar de resultaatmap om 'make all-pdf'
te laten lopen om de eigenlijke PDF bestanden te maken.
Eens 'htmlhelp' gemaakt is kunt u de eigenlijke HTML Help Compiler laten lopen
op een Windows machine.
Als u geen make programma hebt voor Windows kunt u build.bat gebruiken. Als
de HTML Help Compiler en MiKTeX genstalleerd zijn kunt u het CHM bestand
('build chm') en het PDF bestand ('build pdf') rechtstreeks genereren.
Hacking in de broncode
======================
Volg aub onderstaande regels als u de bronbestanden van de documentatie gaat
aanpassen.
- Zoals voorgesteld door Sphinx (zie http://sphinx.pocoo.org/rest.html#sections) gebruik:
***************
Hoofdstuk titel
***************
Sectie titel
============
Subsectie titel
---------------
Subsubsectie titel
^^^^^^^^^^^^^^^^^^
- Om een toets of toetscombinatie aan te geven gebruik :kbd:, bijvoorbeeld:
:kbd:`Ctrl-A`
- Om een veldnaam of knop aan te geven, of eender wat in de
gebruikersinterfaces verschijnt, gebruik :guilabel:, bijvoorbeeld:
:guilabel:`Commit`
- Om een menukeuze aan te geven gebruik :menuselection: en -->, bijvoorbeeld:
:menuselection:`Bestand --> Instellingen...`
- Om een bestand aan te geven gebruik :file:, bijvoorbeeld:
:file:`.hg/hgrc`
- Om een opdracht aan te geven om in het opdrachtvenster in te voeren gebruik
:command:, bijvoorbeeld:
:command:`thg log`
- Om een tekst aan te geven om in te geven in een tekstveld in de GUI gebruik ``, bijvoorbeeld:
``myproxy:8000``
tortoisehg-3.7.3/doc/ReadMe.txt 0000644 0000765 0000024 00000003552 12620147176 017010 0 ustar sborho staff 0000000 0000000 TortoiseHg Documentation
To build this documentation you need Sphinx installed. On Ubuntu this
is the python-sphinx package. On Windows your best bet is easy_install
or pip. To build without warnings, you need Sphinx 0.6 or later.
To build PDF files you need LaTeX packages. On Ubuntu these are
texlive-latex-extra, texlive-fonts-recommended and all of their
dependencies. On Windows the best choice is MiKTeX.
Once all of the prerequisites are in place, you can use the makefile to
build targets: 'make html htmlhelp latex'.
Once 'latex' is built, you have to cd into that output directory and run
'make all-pdf' to build the actual PDF file.
Once 'htmlhelp' is built, you have to run the actual HTML Help Compiler on a
Windows machine.
On Windows, if you have no make tool you can use build.bat. If the HTML Help
Compiler and MiKTeX are installed you can directly generate the CHM file
('build chm') and PDF file ('build pdf').
Hacking the source
==================
Please follow this rules when hacking the doc source files.
- As suggested by Sphinx (see http://sphinx.pocoo.org/rest.html#sections)
use:
*************
Chapter title
*************
Section title
=============
Subsection title
----------------
Subsubsection title
^^^^^^^^^^^^^^^^^^^
- To indicate a key or a combination of keys use :kbd:, for example:
:kbd:`Ctrl-A`
- To indicate a label, button or anything that appears in user interfaces
use :guilabel:, for example:
:guilabel:`Commit`
- To indicate a menu choice use :menuselection: and -->, for example:
:menuselection:`File --> Settings...`
- To indicate a file use :file:, for example:
:file:`.hg/hgrc`
- To indicate a command to enter into command window use :command:, for example:
:command:`thg log`
- To indicate a text to enter into a text input field in the GUI use ``, for example:
``myproxy:8000``
tortoisehg-3.7.3/doc/source/ 0000755 0000765 0000024 00000000000 12677266123 016413 5 ustar sborho staff 0000000 0000000 tortoisehg-3.7.3/doc/source/.static/ 0000755 0000765 0000024 00000000000 12677266123 017760 5 ustar sborho staff 0000000 0000000 tortoisehg-3.7.3/doc/source/.static/.keep 0000644 0000765 0000024 00000000000 12620147176 020665 0 ustar sborho staff 0000000 0000000 tortoisehg-3.7.3/doc/source/.static/tortoisehg.css 0000644 0000765 0000024 00000000440 12620147176 022651 0 ustar sborho staff 0000000 0000000 /*
* tortoisehg.css
* ~~~~~~~~~~~~~
*
* TortoiseHg stylesheet
*
*/
@import url("default.css");
/* -- figure styles ----------------------------------------------------------- */
.figure {
display: block;
margin-left: auto;
margin-right: auto;
text-align: center;
} tortoisehg-3.7.3/doc/source/archive.txt 0000644 0000765 0000024 00000004471 12620147176 020575 0 ustar sborho staff 0000000 0000000 Archiving
=========
.. module:: archive.dialog
:synopsis: Dialog used to make an archive of a repository
You can choose from quite a lot of formats to make an archive of a repository.
There are the usual compressed formats, of course, but it's also possible to make a
folder of the uncompressed files in a place other than the Working Directory (like a clone,
but without the .hg folder). Such archives, for example, can be useful for doing builds (similar
to 'svn export'). Archives may also be useful for sending changes to external people
without access to the reposity, where only the effected files of a given revision or set
of revisions need be included in the archive.
From TortoiseHg
---------------
From the changelog context menu in the Workbench select
:menuselection:`Export --> Archive...` for the choosen changeset.
.. figure:: figures/archive.png
:alt: Archive dialog
Repository Archive Dialog
:guilabel:`Revision`
To select the revision you wish to archive or export.
:guilabel:`Only files modified/created in this revision`
To limit the number of files in the archive.
:guilabel:`Destination path`
The filename or directory where the archive will be created. The archive is filled
with the name of the current repository, suffixed with the revision number
of the selected revision, and has the appropriate extension of the selected
archive type.
:guilabel:`Archive types`
Here you can choose the type of archive to create, ranging from a plain
folder with files to a variety of standard archive type.
:guilabel:`Hg command`
This field displays the command that will be executed by the dialog.
:guilabel:`Always show output`
To have an logging output pane with the results of the command while it runs.
Archiving a repository means create an archive file or subdirectory with the
contents of the selected revision.
From command line
-----------------
The archive tool can be started from command line ::
thg archive
The syntax is ::
thg archive -r [REV] -t [TYPE] [DEST]
where [REV] is the revision to archive, [TYPE] is the type of archive to create,
and [DEST] is the name of the file or folder to create.
See `hg.1.html#archive `_
for details, or type :command:`hg help archive` at the command line or in the
Output Log of the Workbench.
.. vim: noet ts=4
tortoisehg-3.7.3/doc/source/clone.txt 0000644 0000765 0000024 00000004545 12620147176 020256 0 ustar sborho staff 0000000 0000000 Clone a repository
=======================
.. module:: clone.dialog
:synopsis: Dialog used to clone a repository
To clone a repository you have to run the clone dialog.
From the explorer context menu select :menuselection:`TortoiseHg... --> Clone a repository`
or type :command:`thg clone`.
.. figure:: figures/clone.png
:alt: Clone dialog
Clone Dialog
:guilabel:`Source`
It is the path (or URL) of the repository that will be cloned. Use
the :guilabel:`Browse...` to choose a local folder.
:guilabel:`Destination`
It is the path of destination directory, a folder with the same name
of source repository will be created within this directory.
Under the :guilabel:`Options` expander you will find:
:guilabel:`Clone To Revision`
You can limit the clone up to this revision. Even the tags created
after this revision will not be imported.
:guilabel:`Do not update the new working directory`
If checked, after the clone the working directory will be empty. It
is useful when you have to clone a repository with the purpose of
central repository, or backup, where you have only, in the future,
to *push* and *pull*.
:guilabel:`Use pull protocol to copy metadata`
When the source and destination are on the same filesystem,
Mercurial tries to use hardlinks. Some filesystems, such as AFS
implement hardlink incorrectly, but do not report errors. Use this
option to avoid hardlinks.
:guilabel:`Use uncompressed transfer`
To use uncompressed transfer (fast over LAN).
:guilabel:`Include patch queue`
To also clone an MQ patch repository along with the main repository.
It is possible to provide a patch queue name that differs from the
default one.
:guilabel:`Use proxy server`
To use the proxy server configured in :menuselection:`TortoiseHg... --> Global Settings --> Proxy`.
This is enabled only if a proxy is configured.
:guilabel:`Do not verify host certificate`
Skip checking server certificate for https:// url (ignoring web.cacerts config).
:guilabel:`Remote command`
Specify a Mercurial command to run on the remote side.
:guilabel:`Hg command`
This field displays the command that will be executed by the dialog.
From command line
-----------------
The clone tool can be started from command line ::
thg clone
The syntax is ::
thg clone [SOURCE] [DEST]
where [SOURCE] and [DEST] are, the paths of source repository and destination folder.
.. vim: noet ts=4
tortoisehg-3.7.3/doc/source/commit.txt 0000644 0000765 0000024 00000027624 12620147176 020451 0 ustar sborho staff 0000000 0000000 Commit
======
.. module:: commit.dialog
:synopsis: Dialog used to perform commit
The commit tool is second most commonly used application after the
Workbench. Not only can the commit tool commit your changes, but it can
also examine the state of your working directory and perform most
routine maintenance tasks (add new files, detect renames, manage the
ignore filter, etc).
.. figure:: figures/commit.png
:alt: Commit dialog
Commit dialog
Features
--------
Enumerating the toolbar buttons:
:guilabel:`Branch dialog`
Shows the current branch name of the working directory. Normally
this is informational only, but pressing this button opens up a
branch maintenance dialog. Do not use this feature unless you
understand Mercurial's
`named branches `_.
:guilabel:`Recent Commit Messages`
A drop-down list of the 10 most recent commit messages. The
the drop-down list is filled the first time it is opened.
:guilabel:`Commit`
Commit selected diffs in checked files.
:guilabel:`Undo`
Undo (rollback) last immediate commit. Your commit message will be
available in the message history, so you can easily repeat the
commit if necessary.
The file list has four columns:
1) A checkbox that indicates whether the file is selected for an
operation. The toolbar buttons only operate on checked files.
"Partially" selected files have a special check state. This
column header is checkable, it will toggle the file selection
states.
2) The :guilabel:`st` column holds the status of the file, defined
by Mercurial's status command, one of 'MARD?IC'. A status of 'S'
indicates a dirty subrepository that needs to be committed.
3) The :guilabel:`ms` column holds the merge state of the file,
defined by Mercurial's resolve command, one of ' RU'. See the
merge section below.
4) The canonical path of the file relative to the repository root
.. note::
If the commit tool was started with a file pattern or selection, a
button will appear at the bottom of the file list that can clear the
file pattern and give you an unfiltered view of the entire working
directory.
The :guilabel:`Status` button has a menu with checkable options that
toggle the display of the various classes of files {modified, added,
removed, deleted, unknown, clean, ignored}.
*Removed* means a revisioned file has been marked as removed. *Deleted*
means a revisioned file is missing but Mercurial has not been told to
quit tracking that file. For instance, if you rename a revisioned file
in Explorer, the original filename will show up as deleted and the
new filename will show up as unknown. By right-clicking on the new
filename you can bring up the rename guessing dialog which can discover
the rename by comparing file contents and mark the old file as removed
and the new file as added while recording the whole operation as a
rename.
*Unknown* files are not tracked by Mercurial, but they also do not match
any ignore filters you have configured. Unknown files are shown by
default because they are usually files that need to be added to revision
control. It is recommended that you keep your ignore filters up to date
to ensure that is the case. The context menu of unknown files has an
option open the ignore pattern tool.
*Clean* files are tracked files that have not been modified, while
*Ignored* files are untracked files that match a configured ignore
pattern. Neither of those file types are shown by default, unless a the
user includes such a file in a selection (explorer) or provides the file
name on the command line.
Change Selection
----------------
Change selection is the process of selecting which of the changes you
have made to the working directory will be included in the next commit.
The commit tool allows one to exclude modified (or added or removed)
files from a commit, leaving them with their same state after the
commit.
This somewhat violates Mercurial's precept that each changeset
describes the state of the repository at a single point in time. When
you exclude files from the commit, the changeset you create may never
have existed. But since file selection during commit is sometimes
convenient, and is supported by Mercurial itself, our commit tool has
supported this feature from its first release.
New in TortoiseHg 2.7, the commit tool now allows one to partially
select modified files. This means you can now exclude a portion of the
changes you have made to the file. This further violates Mercurial's
precept of committing the state of the working copy, but it is a very
useful feature. The most commonly cited example is being able to check
in a bug fix while excluding all your debug instrumentation so that you
can continue debugging after the commit.
When the user has excluded one or more of the changes made to a file,
TortoiseHg considers the file partially selected (and this change
selection feature is sometimes referred to as **partial commit**).
Partially selected files are displayed in the file list with a special
partial check state.
The diff view pane has a context menu option for configuring the
marking of excluded changes. :menuselection:`Mark excluded changes`
toggles a strike-through indicator on excluded changes. This setting is
primarily a personal preference, but future versions of TortoiseHg may
extend the use of the strike-through indicator for partial exclusion of
individual changes.
This new partial selection feature is similar to hgtk's
`chunk selection `_,
but is superior in several ways:
1) Change selection is integrated directly into the diff view. No mode
switch is required.
2) The working copy files are not modified during partial commit. This
avoids serious file permission problems on Windows.
3) Change selection is possible for copied or renamed files, with one
exception. You cannot exclude all of the changes because this
excludes the entire file from the commit.
TortoiseHg has had a shelve tool since version 2.0 which can move
selected changes from the working directory to a patch (or between
patches) but the partial commit feature is very different in that it
never modifies the working copy files. All it is doing is excluding a
portion of your changes from the version of the file which is committed
to the repository. After the commit, all of your excluded changes will
still remain in the working copy.
When the commit button is pressed, the commit tool checks if any of the
checked files are partially excluded. If any such partial commits are
required, the commit tool builds a temporary patch file which describes
how to generate the contents of the partially excluded files and passes
that patch file to TortoiseHg's partial commit extension. This
extension triggers Mercurial's commit command with special hooks so that
the partial commit file contents come from patched tempfiles instead of
being read from the working copy. After the commit the temporary files
and patch are deleted but the working copy files are completely
untouched.
Keyboard navigation
-------------------
:kbd:`Ctrl-Enter`
Trigger the commit
:kbd:`Ctrl-E`
Reflow the paragraph currently under the cursor. You must configure
a message format policy for this shortcut to work.
File Context Menus
------------------
When right clicking on files in the file list, you will get a context
menu of commands that are applicable to the selected files.
For unknown **?** files, the context menu will allow you to detect
renames (if you think the unknown file is a copy or rename of a
revisioned file) or to configure the repository's ignore filter (if the
unknown file should never be revisioned and you want Mercurial to ignore
it).
Merging
-------
The commit tool has a special mode when it is opened in a repository
that is in a merged state (either a merge is in progress, or an update
was performed that caused a conflict).
The merge state *ms* column is especially useful in this mode. Files
that are marked with *R* are files where Mercurial and/or the user have
successfully merged (resolved) changes from both parents. Files that
are marked with *U* have unresolved changes. You can use the *Restart
Merge* context menu option to restart the merge for those files, or you
can use the *edit* context menu option to resolve the conflict by hand.
The *Restart Merge* menu option allows you to select the merge tool to
use to perform the merge, or even to pick one version or the other
unconditionally (internal:local, internal:other). After the conflicts
have been manually resolved, you must use the *mark resolved* context
menu option to change the file's merge state to *R*.
Mercurial will not allow you to commit a merge if any files have
unresolved *U* merge states.
For your reference, *local* is the revision you had checked out when you
started the merge and *other* is the revision you merged with.
To undo a failed merge attempt, you must tell Mercurial to remove the
second parent from your working directory. This usually means
performing a clean update of the first parent. The merge tool has an
:guilabel:`Undo` button which does exactly that.
Once you have your working directory back at one parent revision, you
may restart the merge process.
Commit Message Pane
-------------------
The commit message pane has these special context menu options:
:guilabel:`Paste Filenames`:
Paste checked filenames into the commit message at the cursor.
:guilabel:`Apply Format`:
Apply configured message wrap policy to current message.
:guilabel:`Configure Format`:
Opens the settings dialog to the :guilabel:`Commit` tab.
If your project has guidelines for the format of commit messages, you
can configure them in the settings tool. The commit tool will enforce
your policy at commit time, and you can ask the tool to apply the format
to the current message. The :guilabel:`Commit` tab of the settings tool
has these two configurables for commit message policy:
:guilabel:`Summary Line Length`:
Maximum length of the commit message summary line. If set,
TortoiseHg will draw a line at the specified width.
Subrepositories
---------------
A `subrepository `_
is a feature introduced in Mercurial 1.3. It allows one Mercurial
repository to store references to external Mercurial (or potentially
other VCS) repositories, and to include the state of those external
repositories in the main repository's history.
TortoiseHg 1.0 introduced rudimentary support for subrepositories, and
only in the commit / status tool. When Mercurial considers a subrepo
dirty, it will appear in the commit tool as a special entry in the file
list with a status of *S*. If a subrepo is included in the file list of
a commit, the subrepo is committed along with the other changes,
updating the .hgsubstate file in the main repository root.
Configurables
-------------
:menuselection:`Commit --> Username`
Sets username associated with your commits (see :doc:`quick`)
:menuselection:`Commit --> Summary Line Length`
Configures a 'policy' limit for summary lines
:menuselection:`Commit --> Close After Commit`:
When set to True, the commit tool will close after a
successful commit.
And three other features for *advanced* users.
:menuselection:`Commit --> Push After Commit`:
If configured, the commit tool will try to push to the configured
URL or alias after each commit.
:menuselection:`Commit --> Auto Commit List`:
Comma separated list of files that are automatically included in
every commit. Intended for use only as a repository setting.
:menuselection:`TortoiseHg --> Max Diff Size`
Configures the diff size limit
From command line
-----------------
The commit tool can be started from command line::
thg commit [OPTIONS] [FILE]...
aliases: ci
commit tool
options:
-u --user record user as committer
-d --date record datecode as commit date
use "thg -v help commit" to show global options
For a quick help on the format of date type::
hg help dates
.. vim: noet ts=4
tortoisehg-3.7.3/doc/source/common.txt 0000644 0000765 0000024 00000012677 12620147176 020453 0 ustar sborho staff 0000000 0000000 Common Features
===============
.. module:: common.dialog
:synopsis: Features common to many dialogs
These features are common to many TortoiseHg tools, so we document them
here just once.
Visual Diffs
------------
.. figure:: figures/visual-diff.jpg
:alt: Visual Diff Window
Visual Diff Window
In TortoiseHg 1.0, the visual (external) diff infrastructure was
refactored. The new system uses tool descriptions in
:file:`mergetools.rc` to detect most common diff tools on your computer
(including KDiff3, which ships in our installer) and select the best
available tool.
If the user has selected a merge tool
(:menuselection:`TortoiseHg --> Three-way Merge Tool`), that tool will
also be used to perform visual diffs, bypassing the tool selection
process. However the user can still select a separate tool
(:menuselection:`TortoiseHg --> Visual Diff Tool`) for visual diffs if
they chose.
The merge tool configuration file contains optimal command lines for
each tool, so no further configuration is required by the user. They
only need to select the tools they wish use, or accept the defaults.
The visual diff system will use any existing extdiff configuration it
finds. Since extdiff did not support three way diff arguments until
very recently and still does not support label arguments, you will
likely have a better experience by disabling or deleting any extdiff
configuration you may have.
The visual diff system will directly use the selected diff tool unless
the action you are attempting requires the use of the TortoiseHg visual
diff window. The list of conditions includes:
1) The selection of files being compared require multiple tools
2) The selected tool forks detached background processes
3) The selected tool does not support the required directory diffs
4) The selected tool does not support three way comparisons
5) The file changes include renames or copies
When the visual diff window is used, the temporary files are cleaned up
when the dialog is closed. Thus it should be left open until you close
all of your diff tool instances. When your diff tool is launched
directly, the temporary files are deleted when your tool exits.
If your diff tool is launched directly to compare a working copy file,
it will directly diff against the working file so you may modify it from
within the diff tool. If you are comparing multiple files, the visual
diff system will make a snapshot of the working copy files and track
their initial sizes and timestamps. When your diff tool exits, the
system compares the sizes and timestamps and copies modified files back
over the original working copies. In this way, you can still modify
your working copy files from your visual diff tool even when performing
directory comparisons.
When the visual diff window is used to compare working copy files, it
always directly diffs against the working copy files since it always
operates on a single file at a time.
.. deprecated:: 1.0
The :menuselection:`TortoiseHg --> Skip Diff Window` configurable
has been removed because it is now redundant.
Adding Tools
~~~~~~~~~~~~
If you have a visual diff tool installed that is not supported by
TortoiseHg, you can create a tool configuration for it in your user
:file:`Mercurial.ini` file. See Mercurial's
`documentation `_
on how to configure your tool for use in file merges. When that is
complete, you can add the extra keys used by TortoiseHg for visual
diff::
diffargs: the arguments to use for two-way file comparisons
diff3args: the arguments to use for three-way file comparisons
dirdiff: this tool supports two-way directory comparisons
dir3diff: this tool supports three-way directory comparisons
When building command line arguments, you can use the following
variables::
$parent1: the file or directory from the first parent revision
$parent2: the file or directory from the second parent revision
$child: the file or directory from the revision being compared
$parent: a synonym for $parent1
$plabel1: a symbolic name for the first parent revision
$plabel2: a symbolic name for the second parent revision
$clabel: a symbolic name for the revision being compared
Obviously, $parent2 and $ancestor are only meaningful when used in three
way diff arguments, for viewing merge changesets. If your diff tool
cannot use the ancestor revision in any productive way, it is safe to
leave it out of the diff3args command line.
.. note::
On Windows, the `executable` parameter can use environment variables
using the syntax ${ProgramFiles}
If unconfigured, the default value of **diffargs** is '$parent $child'.
The default value of **diff3args** is "", indicating the visual diff
tool cannot perform three way comparisons.
If you create a new visual diff tool configuration, or improve upon an
existing configuration, please email it to our development mailing list
so it may be incorporated in a future release.
Word Diffs
~~~~~~~~~~
The TortoiseHg Windows installers now include TortoiseSVN's scripts for
comparing (and sometimes merging) many binary document formats. These
are configured in the site-wide :file:`mergepatterns.rc` as handlers for
each binary format's common file extensions, so no user intervention is
required.
In order to support file extension based tool selection, TortoiseHg has
added support for a **[diff-patterns]** section equivalent to Mercurial's
`merge-patterns `_
section.
.. vim: noet ts=4
tortoisehg-3.7.3/doc/source/conf.py 0000644 0000765 0000024 00000014030 12663354417 017707 0 ustar sborho staff 0000000 0000000 # -*- coding: utf-8 -*-
#
# TortoiseHg documentation build configuration file, created by
# sphinx-quickstart on Tue Jul 21 23:42:44 2009.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# The contents of this file are pickled, so don't put values in the namespace
# that aren't pickleable (module imports are okay, they're removed automatically).
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys, os
# If your extensions (or modules documented by autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.append(os.path.abspath('.'))
# General configuration
# ---------------------
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['.templates']
# The suffix of source filenames.
source_suffix = '.txt'
# The encoding of source files.
#source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'TortoiseHg'
copyright = u'2010-2016, Steve Borho and others'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '3.7'
# The full version, including alpha/beta/rc tags.
release = '3.7.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of documents that shouldn't be included in the build.
#unused_docs = []
# List of directories, relative to source directory, that shouldn't be searched
# for source files.
exclude_trees = []
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# Options for HTML output
# -----------------------
# The style sheet to use for HTML and HTML Help pages. A file of that name
# must exist either in Sphinx' static/ path, or in one of the custom paths
# given in html_static_path.
html_style = 'tortoisehg.css'
# The name for this set of Sphinx documents. If None, it defaults to
# " v documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
html_logo = 'figures/thg_logo_92x50.png'
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['.static']
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_use_modindex = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, the reST sources are included in the HTML build as _sources/.
#html_copy_source = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = ''
# Output file base name for HTML help builder.
htmlhelp_basename = 'TortoiseHg'
# Options for LaTeX output
# ------------------------
# The paper size ('letter' or 'a4').
#latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
#latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, document class [howto/manual]).
latex_documents = [
('index', 'TortoiseHg.tex', ur'TortoiseHg Documentation',
ur'Steve Borho and others', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
latex_logo = 'figures/thg_logo_pdf.png'
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# Additional stuff for the LaTeX preamble.
#latex_preamble = ''
# Documents to append as an appendix to all manuals.
#latex_appendices = ['faq']
# If false, no module index is generated.
#latex_use_modindex = True
tortoisehg-3.7.3/doc/source/daily.txt 0000644 0000765 0000024 00000000342 12620147176 020247 0 ustar sborho staff 0000000 0000000 ***********************
TortoiseHg in daily use
***********************
.. toctree::
:maxdepth: 3
common
explorer
nautilus
workbench
init
clone
commit
shelve
sync
serve
guess
ignore
archive
.. vim: noet ts=4
tortoisehg-3.7.3/doc/source/debugging.txt 0000644 0000765 0000024 00000005317 12620147176 021107 0 ustar sborho staff 0000000 0000000 Debugging
=========
.. module:: debugging
:synopsis: Debug problems in shell extension or dialogs
Dialogs
-------
Stderr is being captured to a buffer that is being inspected at program
exit. If any serious errors (tracebacks, etc) are found in the stderr
buffer the entire contents are sent to the bug report tool so the user
can (should) report a bug. If you suspect there are errors that are not
being reported, you can set the environment variable **THGDEBUG** to any
value to disable the stderr buffering.
If you have a bit of Python knowledge, you can also use::
thg --debugger
To disable the forking behavior of thg, you can either set an
environment variable **THG_HGTK_SPAWN**, or add the command line
parameter '--nofork'.
Windows
~~~~~~~
To debug the changelog viewer, for instance, enter these commands
into a :command:`cmd.exe` window, while inside the repository::
set THGDEBUG=1
thg --nofork log
Linux/MacOSX
~~~~~~~~~~~~
To debug the changelog viewer, for instance, enter these commands
into your shell window, while inside the repository::
export THGDEBUG=1
thg --nofork log
Shell Extension
---------------
The debugging mechanisms depend on your platform.
Windows
~~~~~~~
See also http://msdn.microsoft.com/en-us/library/cc144064(VS.85).aspx
for some info bits about Running and Testing Shell Extensions on Windows
The :command:`DbgView` tool from the SysInternals suite will capture
debug messages from the shell extension. However, the shell
extension does not emit debugging info by default. It must be enabled
by setting the registry key defined in
:file:`win32/shellext/DebugShellExt.reg` in the TortoiseHg source
repository. You can double-click on this file to load the key into your
registry.
Another option is to exit the :command:`TortoiseHgOverlayServer` system tray
application and start it from the command line. It will emit some debug
information to the console.
Nautilus
~~~~~~~~
Debugging is done via the environment variable DEBUG_THG
* to test in a separate process::
DEBUG_THG=Ne TMPDIR=/tmp/anydir/ --no-desktop nautilus [path]
* to test in the main instance::
nautilus -q
DEBUG_THG=NOe nautilus
* permanent debugging, set DEBUG_THG in a file which is read on session
start (~/.profile, ~/.xprofile)
Upper case characters in DEBUG_THG specify modules. Only *O* and *N*
for *OverlayCache* and *Nautilus*, respectively, are supported module
names. Lower case characters imply parts. Only *e* is supported,
implying *error* messages.
To restart nautilus, chose either
1) killall nautilus (the session restarts nautilus automatically, stdin and stdout go to ~/.xsession-errors)
2) nautilus -q; nautilus (stdin and stdout are on the console)
tortoisehg-3.7.3/doc/source/explorer.txt 0000644 0000765 0000024 00000012074 12620147176 021012 0 ustar sborho staff 0000000 0000000 Windows Explorer Integration
============================
.. module:: explorer
:synopsis: Windows explorer integration
.. _explorer-context-label:
Context Menus
-------------
TortoiseHg commands may be accessed via the context menu of Explorer
windows and other applications which use the standard File/Open dialogs.
Here is the context menu for a revisioned folder:
.. figure:: figures/cmenu-nofiles.png
:alt: Context menu
Context menu for a folder under Mercurial revision control
And here is the context menu for selected files or folders:
.. figure:: figures/cmenu-files.png
:alt: Context menu
Context menu for file or folder selection
TortoiseHg provides dialogs for the most regularly used Mercurial
commands. Less frequently used and newly added Mercurial commands
may be accessed from the CLI (command line interface) through
:file:`cmd.exe` on Windows.
Overlay Icons
-------------
TortoiseHg provides visual representation of the file status via overlay
icons in the MS-Explorer windows. This is similar to those that found on
other Tortoise client, such as TortoiseCVS and TortoiseSVN.
TortoiseHg shares the overlay icons with TortoiseSVN (version 1.5.x or
later) and the other "Tortoise" projects via the use of TortoiseOverlays
(another project created by TortoiseSVN team).
.. figure:: figures/overlayicons.png
:alt: Overlay icons
Overlay icons in Icons view (XP)
The context menu has an :guilabel:`Update Icons` option which forces
TortoiseHg to refresh the icons in the currently browsed repository or
directory of repositories. The taskbar icon will turn green and the
directory icons will turn into question marks while this refresh is in
progress.
Shell Configuration
-------------------
The overlay handler and context menus are configurable. From any folder
background (even the desktop), right click and select
:menuselection:`TortoiseHg --> Explorer Extension Settings`. This opens the
Explorer Extension Settings dialog.
On the tab "Context Menu" you can promote individual menu options to the
top level menu.
.. figure:: figures/shell-config-cmenu.png
:alt: Explorer Extension Settings dialog, Context Menu tab
Explorer Extension Settings Dialog, Context Menu tab
On the "Icons" tab you configure settings related to the overlay icons and the
icon of the "Overlay Icons Server" in the taskbar (in the notification area of
Windows).
.. figure:: figures/shell-config-icons.png
:alt: Explorer Extension Settings dialog, Icons tab
Explorer Extension Settings Dialog, Icons tab
:guilabel:`Enable overlays:`
If checked, overlay icons are shown on folders and files in the
working directory (woking copy) of Mercurial repositories.
(Default: checked)
:guilabel:`Local disks only:`
If checked, overlay icons are only shown for volumes on local disks, not
on network shares. Scanning for Mercurial repositories over the network
may result in high latency in the user interface of explorer. Check this
option if browsing network shares becomes too slow and/or you do not need
overlay icons on non-local volumes.
(Default: not checked)
:guilabel:`Enabled Overlay Handlers:`
These (per user) settings provide the possibility to disable overlay
icon handlers in the shared TortoiseOverlays component.
The TortoiseOverlays component is shared by all Tortoises (TortoiseHg,
TortoiseSVN, etc), with the goal to avoid registering too many icon slots,
by using a common set of icons slots for all Tortoises (thus using the
same set of icons for all Tortoises).
The total number of overlay slots available on Windows is fairly limited and
depends on the exact Windows version. For example, on a pristine install
of Windows 7, there are only 8 free overlay handler slots available.
This section allows to disable certain non-essential overlay
handlers, to reduce icon handler slot consumption by the TortoiseOverlays
component. Unchecking handlers in this section increases the chances that
important handlers like "Normal" (green checkmark) or "Modifed" (red
exclamation mark) will still get an icon slot, even if there are too many
handlers registered on a computer.
Unchecking handlers that are not used by TortoiseHg (that is: Locked,
Readonly, Ignored, Deleted) is highly recommended, if you know that no
other Tortoises (e.g. TortoiseSVN) uses them.
Make sure the "Added" and "Unversioned" handlers are enabled, as these
are used by TortoiseHg.
(Default: all checked)
.. warning::
The "Enabled Overlay Handlers" settings affect all Tortoises for a user.
A logoff/login is required to make changes in that section effective.
:guilabel:`Taskbar:`
Checkmark "Show Icon" to show the icon of the Overlay Icon Server in the
taskbar in the notification area. "Highlight Icon" highlights that icon
using a light green color while the icon server is busy updating cache files
in the repository (files :file:`.hg\\dirstate` and :file:`.hg\\thgstatus`).
(Default: both checked)
One can selectively disable overlay icons in a specific repository by
editing the :file:`.hg\\thgstatus` file inside the repository and
replacing its contents with a single line containing::
@@noicons
.. vim: noet ts=4
tortoisehg-3.7.3/doc/source/extensions.txt 0000644 0000765 0000024 00000033033 12620147176 021347 0 ustar sborho staff 0000000 0000000 **********
Extensions
**********
.. module:: extensions
:synopsis: Describe extensions bundled with TortoiseHg binary packages
This chapter describes Mercurial extensions that are shipped with
TortoiseHg binary packages for Windows. These external extensions are
included as a convenience to users, so they can be easily enabled as
soon as they are needed.
Hgfold
======
`hgfold `_ is a
Mercurial extension that helps Windows users deal with filename case
collisions on VFAT and NTFS.
It adds options to the following Mercurial commands. Type
:command:`hg help ` for more information::
up - allows you to update to a revision with filename collisions
merge - allows you to merge with a changeset that would create filename collisions
The extension does not currently do anything to prevent filename
collisions. See discussion on the Mercurial Wiki
**Installation**
To test the use of this plugin, you can specify it on the Mercurial
command line like this::
hg --config "extensions.fold=" status
You may want to add it to your Mercurial.ini or a repository's hgrc like this::
[extensions]
fold=
If you do this, you can omit the --config command-line option.
**Warnings**
Like all merge operations, fold.py has to change the parents of the
working directory. It is still in early testing, so use with caution.
If you get an error about an unknown changeset after running
:command:`hg recover` try
:command:`hg debugsetparents `.
You can find the number of the tip revision by running :command:`hg log -l 2`.
Perfarce
========
`Perfarce `_ home
page.
This extension is documented in :ref:`perfarce-perforce` section of
:doc:`nonhg` chapter.
Mercurial-Keyring
=================
* `Mercurial Keyring `_ home page
* `Keyring Extension `_ wiki page
Keyring extension uses services of the keyring library to securely save
authentication passwords (HTTP/HTTPS and SMTP) using system specific
password database (Gnome Keyring, KDE KWallet, OSXKeyChain, dedicated
solutions for Win32 and command line).
**What it does**
The extension prompts for the HTTP password on the first pull/push
to/from given remote repository (just like it is done by default), but
saves the password (keyed by the combination of username and remote
repository url) in the password database. On the next run it checks for
the username in :file:`.hg/hgrc`, then for suitable password in the password
database, and uses those credentials if found.
Similarly, while sending emails via SMTP server which requires
authorization, it prompts for the password on first use of given server,
then saves it in the password database and reuses on successive runs.
In case password turns out incorrect (either because it was invalid, or
because it was changed on the server) it just prompts the user again.
**Installation**
First, the extension must be enabled in your Mercurial.ini file as::
[extensions]
mercurial_keyring=
**Password backend configuration**
The most appropriate password backend should usually be picked automatically,
without configuration. Still, if necessary, it can be configured using
:file:`~/keyringrc.cfg` file (:file:`keyringrc.cfg` in the home directory of
the current user).
Refer to `keyring docs `_
for more details.
.. note::
On Windows XP and above, your encrypted passwords are stored in the
credentials subsystem using
`CredRead `_ and `CredWrite `_
.. note::
On Windows 2K, the encrypted passwords are stored in the system
registry under HKCU\\Software\\Mercurial\\Keyring.
**Repository configuration (HTTP)**
Edit repository-local :file:`.hg/hgrc` and save there the remote repository
path and the username, but do not save the password. For example::
[paths]
myremote = https://my.server.com/hgrepo/someproject
[auth]
myremote.schemes = http https
myremote.prefix = my.server.com/hgrepo
myremote.username = mekk
Simpler form with url-embedded name can also be used::
[paths]
bitbucket = https://User@bitbucket.org/User/project_name/
.. note::
If both username and password are given in :file:`.hg/hgrc`, extension
will use them without using the password database. If username is not
given, extension will prompt for credentials every time, also
without saving the password. So, in both cases, it is effectively
reverting to the default behaviour.
Consult `[auth] `_
section documentation for more details.
**Repository configuration (SMTP)**
Edit either repository-local :file:`.hg/hgrc`, or :file:`~/.hgrc` (the latter
is usually preferable) and set there all standard email and smtp properties,
including smtp username, but without smtp password. For example::
[email]
method = smtp
from = Joe Doe
[smtp]
host = smtp.gmail.com
port = 587
username = JoeDoe@gmail.com
tls = true
Just as in case of HTTP, you must set username, but must not set password here
to use the extension, in other cases it will revert to the default behaviour.
**Usage**
Configure the repository as above, then just pull and push (or email) You
should be asked for the password only once (per every username +
remote_repository_url combination).
.. vim: noet ts=4
projrc
======
`projrc `_ is an extension
that makes Mercurial look for and parse .hg/projrc for additional
configuration settings.The file is transferred on clone and on pull
(but never on push), after confirmation by the user, from a list of servers
that '''must''' be configured by the user. For security reasons the user
'''must''' also select which ''`projrc`'' configuration settings will be
transferred (i.e. no settings are transferred from any servers by default).
The user can also configure the extension to automatically accept all changes
to the .hg/projrc file.
This is useful for centralized setups where you want to distribute
configuration settings to all repositories with a minimum amount of setup.
In particular, it can be used to remap subrepository sources, as explained
on Mercurial's
`SubrepoRemappingPlan `_.
**Configuration**
This extension (as most other extensions) is disabled by default. To use
and configure you must first enable it on the Settings/Extensions panel.
When the extension is enabled you will see a new entry, "Projrc" on the
settings dialog. This let's you configure the extension by setting the
following settings:
:guilabel:`Request confirmation`
If True (the default) you'll get a prompt whenever
the extension detects changes to the remote server's
.hg/projrc file.
If false, the extension will automatically accept any change to the
remote .hg/projrc file.
:guilabel:`Servers`
This setting is a comma separated list of glob patterns matching
the server names of the servers that the projrc file will be pulled from.
Unless this setting is set, no .hg/projrc files will be ever
transferred from any servers.
:guilabel:`Include`
This key lets you control which sections and which keys will be accepted
from the remote projrc files. This is a a comma separated list of glob
patterns that match the section or key names that will be included.
Keys names must be specified with their section name followed by a '.'
followed by the key name (e.g. "''`diff.git`''").
To allow all sections and all keys you can set this setting to "*"
(without the quotes).
:guilabel:`Exclude`
This setting is similar to the "''`Include`''" setting but it has the
opposite effect. It sets an "exclude list" of settings that will not
be transferred from the common projrc files.
The exclude list has the same syntax as the include list. If an exclusion
list is set but the inclusion list is empty or not set all non excluded
keys will be included.
:guilabel:`Update on incoming`
Control whether the .hg/projrc file will be updated on incoming.
It can have the following values:
* never: The default. Show whether the remote projrc file has changed,
but do not update (nor ask to update) the local projrc file.
* prompt: Look for changes to the projrc file.
If there are changes _always_ show a confirmation prompt,
asking the user if it wants to update its local projrc file.
* auto: Look for changes to the projrc file.
Use the value of the "''`projrc.confirm`''" configuration key to
determine whether to show a confirmation dialog or not
before updating the local projrc file.
If False (the default) you'll get a prompt whenever
the extension detects changes to the remote server's
.hg/projrc file.
If false, the extension will automatically accept any change to the
remote .hg/projrc file.
If both an include and an exclude lists are set, and a key matches both
the include and the exclude list, priority is given to the most explicit
key match, in the following order:
* full key, exact matches are considered the most explicit (e.g.
"''`ui.merge`''");
* pattern (glob) matches are considered next (e.g.
"''`auth.bitbucket.com.*`''"), with the longest matching pattern being the
most explicit;
* section level matches (e.g. "''`ui`''");
* global ("''`*`''") matches.
If a key matches both an include and an exclude (glob) pattern of the same
length, the key is ''included'' (i.e. inclusion takes precedence over
exclusion).
**Usage**
Once enabled and properly configured, the extension will look for
.hg/projrc files whenever you clone or pull from one of the repositories
specified on its "servers" configuration key.
Whenever the extension detects changes to the remote projrc file (e.g. when
you do not have a .hg/projrc file yet, or when the contents of said file
have changed on the server), you'll receive a warning unless you have set the
"Require confirmation" setting to False (in which case the extension assumes
that you accept the changes). If you accept the changes your local .hg/projrc
file will be updated, and its settings will be taken into account by mercurial
and TortoiseHg.
If a local repository has a .hg/projrc file, you'll see an extra panel
on the setting dialog. The title of the extra panel is "project settings
(.hg/projrc)".
The "project settings" panel is a read-only panel that shows the settings that
are set on the local .hg/projrc file. Although you can update your local
version of the .hg/projrc file, the panel is read only to indicate that
you cannot change the remote repository's settings, and that if the remote
repository settings change your local copy will be updated on the next pull
(if you allow it).
The "project settings" settings panel is shown between the "global settings" panel
and the "repository settings" panel, indicating that its settings are applied
_after_ the global settings but _before_ the local repository settings (i.e
the settings specified in the repository .hg/hgrc file).
**Additional Information**
For the most up to date information regarding this extension, to see several
detailed usage examples and to learn how to use it and configure it from the
command line, please go to the extension's
`Wiki `_.
pbranch
=======
Patch Branches (`pbranch `_)
is a way to develop a series of patches for submission into a main
repo. It is based on topic branches, one per patch, and is thus highly
suitable for collaborative and/or long-term patch development and
maintenance.
`A detailed manual `_ can be found online.
It adds a number of commands which can be listed with
:command:`hg help pbranch`::
pbackout - backs out the current patch branch (undoes all its changes)
pdiff - prints the final diff for the current or given patch branch
peditmessage - edit the patch message
pemail - send patches by email
pexport - exports patches
pextdiff - combines pdiff and extdiff
pgraph - print an ASCII art rendering of the patch dependency graph
pmerge - merge pending heads from dependencies into patch branches
pmessage - print the patch message(s)
pnew - start a new patch branch
pstatus - print status of current (or given) patch branch
reapply - reverts the working copy of all files touched by REV to REV
TortoiseHg will provide a new task tab that shows the patch dependency graph.
.. figure:: figures/pbranch.png
:alt: Pbranch task tab
Pbranch task tab
**Installation**
As this extension is not installed with TortoiseHg, you have to download
it from ``_. Be sure to dowload the
right one according to the Mercurial version included with TortoiseHg (see the
wiki page on the download site).
To test the use of this plugin, you can specify it on the Mercurial
command line like this::
hg --config "extensions.pbranch=C:\path\to\pbranch.py" pstatus
You may want to add it to your Mercurial.ini or a repository's hgrc like this::
[extensions]
pbranch = C:\path\to\pbranch.py
If you do this, you can omit the --config command-line option.
tortoisehg-3.7.3/doc/source/faq.txt 0000644 0000765 0000024 00000010266 12620147176 017722 0 ustar sborho staff 0000000 0000000 **************************
Frequently Asked Questions
**************************
*What is TortoiseHg?*
A Windows shell extension for the Mercurial revision control system,
similar to the Tortoise clients for Subversion and CVS. It also
includes a thg application for command line use on many platforms.
*What comes included in the TortoiseHg binary installer for Windows?*
`Mercurial `_,
`kdiff3 `_,
`TortoisePlink `_
bonus extensions: hgfold, perfarce, mercurial-keyring. fixfrozenexts,
python-svn for hgsubversion and convert extensions, and dulwich for
hg-git use.
See :file:`extension-versions.txt` in the TortoiseHg folder for more
details on the exact versions packaged.
*Is Mercurial on Windows compatible with the index service and virus scanners?*
No. Like TortoiseSVN, `we recommend `_
to turn off the indexing service on the working copies and repositories,
and exclude them from virus scans.
*How can I get translations for the Explorer context menu?*
The available translations were stored by the installer under
:file:`C:\\Program Files\\TortoiseHg\\i18n\\cmenu`. Select the
locale you would like to use, double-click on it, and confirm all
requests.
*How do I do merges and arbitrary version checkouts?*
Merges and updates are intended to be done within the
:guilabel:`Workbench`, using changeset context menus
*Why can't I connect to an ssh server (remote: bash: : command not found)?*
TortoisePlink (and basic Plink) will try to use the :guilabel:`Host
Name` configured in Putty under the :guilabel:`Default Settings`.
It adds this host name to its command line parameters, causing the
hostname to be specified twice, causing this particular error.
Clearing the host name from the :guilabel:`Default Settings` is a
possible workaround.
*How can I use tool X as my visual diff tool?*
Since version 1.0, TortoiseHg should autodetect most popular visual
diff tools and make them available for selection from the
:guilabel:`Visual Diff Tool` item in the settings tool.
*How is TortoiseHg configured?*
TortoiseHg gets configuration settings from two systems.
1. The Mercurial configuration system, which is three-tiered
a. Site-wide :file:`Mercurial.ini` in :file:`%ProgramFiles%\\TortoiseHg`
b. Per-User :file:`Mercurial.ini` in :file:`%UserProfile%`
c. Per-Repository :file:`hgrc` in :file:`{repo-root}\\.hg`
2. The folder :file:`%APPDATA%\\TortoiseHg`:
a. File :file:`thg-reporegistry.xml` holds the content of the RepoRegistry.
b. File :file:`TortoiseHgQt.ini` contains the settings for application state (window positions, etc).
These are some of the configurables that are stored in the Mercurial
configuration system. ::
[tortoisehg]
vdiff = vdiff
editor = gvim
tabwidth = 4
longsummary = True
authorcolor = True
authorcolor.steve = blue
*Where do TortoiseHg extensions look for external Python modules on Windows?*
TortoiseHg includes an entire Python distribution bundled up as
DLLs. The standard library modules are all in the
:file:`library.zip` file in :file:`C:\\Program Files\\TortoiseHg`.
If you try to use an extension that imports a non-standard Python
module, you will find that the extension will fail to load because
it can't find the module. For example the ReviewBoard extension
imports the simplejson module, which is not part of the standard
Python distribution.
In order to make it work you need to add a couple of lines to the
top of the extension's .py file, before the line that imports the
foreign module::
import sys
sys.path.append(r'C:\path\to\module')
Note that this will not work for modules distributed as .egg files;
the supplied path must contain the module's .py or .pyc files.
If you have many extensions and/or hooks that all share the same
Python package, you can create an extension which explicitly
modifies sys.path for all the others. Simply name the extension
such that it is loaded first (alphabetically). Something like::
[extensions]
00setSysPath = C:\path\to\setsyspath.py
.. vim: noet ts=4
tortoisehg-3.7.3/doc/source/figures/ 0000755 0000765 0000024 00000000000 12677266123 020057 5 ustar sborho staff 0000000 0000000 tortoisehg-3.7.3/doc/source/figures/advancedbar.png 0000644 0000765 0000024 00000005645 12620147176 023023 0 ustar sborho staff 0000000 0000000 PNG
IHDR ! "^ sRGB gAMA a cHRM z&