Changeset db36d1f7e96a…
Parent 61482ea34fd0…
by
Changes to 64 files · Browse files at db36d1f7e96a Showing diff from parent 61482ea34fd0 Diff from another changeset...
@@ -35,13 +35,13 @@ pfile = pfile[:-1]
path = os.path.dirname(os.path.dirname(os.path.realpath(pfile)))
thgpath = os.path.normpath(path)
- testpath = os.path.join(thgpath, 'thgutil')
+ 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 thgutil import paths, debugthg, hglib, cachethg
-from hggtk import gtklib
+from tortoisehg.util import paths, debugthg, hglib, cachethg
+from tortoisehg.hgtk import gtklib
if debugthg.debug('N'):
debugf = debugthg.debugf
@@ -62,7 +62,7 @@ self.allvfs = {}
self.inv_dirs = set()
- from thgutil import menuthg
+ from tortoisehg.util import menuthg
self.hgtk = paths.find_in_path('hgtk')
self.menu = menuthg.menuThg()
self.notify = os.path.expanduser('~/.tortoisehg/notify')
|
@@ -35,7 +35,7 @@ # Fix for nautilus python extensions in lib64 on x86_64
sed -i "s,lib/nautilus,%{_lib}/nautilus,g" setup.py
-cat > thgutil/config.py << EOT
+cat > tortoisehg/util/config.py << EOT
bin_path = "%{_bindir}"
license_path = "%{_docdir}/%{name}-%{version}/COPYING.txt"
locale_path = "%{_datadir}/locale"
@@ -62,8 +62,8 @@%defattr(-,root,root,-)
%doc COPYING.txt ReleaseNotes.txt doc/build/html/
%{_bindir}/hgtk
-%{python_sitelib}/hggtk/
-%{python_sitelib}/thgutil/
+%{python_sitelib}/tortoisehg/hgtk/
+%{python_sitelib}/tortoisehg/util/
%{python_sitelib}/tortoisehg-*.egg-info
%{_datadir}/pixmaps/tortoisehg/
%{_datadir}/locale/*/LC_MESSAGES/tortoisehg.mo
|
|
@@ -1,73 +0,0 @@ - # rename.py - TortoiseHg's dialogs for handling renames
-#
-# Copyright 2009 Steve Borho <steve@borho.org>
-#
-# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
-
-import sys
-import gtk
-import cStringIO
-
-from mercurial import hg, ui, util, commands
-
-from thgutil.i18n import _
-from thgutil import hglib, paths
-
-from hggtk import dialog
-
-def run(ui, *pats, **opts):
- fname, target = '', ''
- try:
- fname = pats[0]
- target = pats[1]
- except IndexError:
- pass
- fname = util.normpath(fname)
- if target:
- target = hglib.toutf(util.normpath(target))
- else:
- target = hglib.toutf(fname)
- title = _('Rename ') + hglib.toutf(fname)
- dlg = dialog.entry_dialog(None, title, True, target, rename_resp)
- dlg.orig = fname
- return dlg
-
-def rename_resp(dlg, response):
- if response != gtk.RESPONSE_OK:
- dlg.destroy()
- return
- try:
- root = paths.find_root()
- repo = hg.repository(ui.ui(), root)
- except (ImportError, hglib.RepoError):
- dlg.destroy()
- return
-
- new_name = hglib.fromutf(dlg.entry.get_text())
- opts = {}
- opts['force'] = False # Checkbox? Nah.
- opts['after'] = False
- opts['dry_run'] = False
-
- saved = sys.stderr
- errors = cStringIO.StringIO()
- toquit = False
- try:
- sys.stderr = errors
- repo.ui.pushbuffer()
- repo.ui.quiet = True
- try:
- commands.rename(repo.ui, repo, dlg.orig, new_name, **opts)
- toquit = True
- except (util.Abort, hglib.RepoError), inst:
- dlg.error_dialog(None, _('rename error'), str(inst))
- toquit = False
- finally:
- sys.stderr = saved
- textout = errors.getvalue() + repo.ui.popbuffer()
- errors.close()
- if len(textout) > 1:
- dlg.error_dialog(None, _('rename error'), textout)
- elif toquit:
- dlg.destroy()
|
@@ -11,13 +11,13 @@
if hasattr(sys, "frozen"):
# Prepend C:\Program Files\TortoiseHg\gtk (equiv) to the path
- from thgutil import paths
+ from tortoisehg.util import paths
gtkpath = os.path.join(paths.bin_path, 'gtk')
os.environ['PATH'] = os.pathsep.join([gtkpath, os.environ['PATH']])
else:
# if hgtk is a symlink, insert symlink target directory in sys.path
thgpath = os.path.dirname(os.path.realpath(__file__))
- testpath = os.path.join(thgpath, 'thgutil')
+ testpath = os.path.join(thgpath, 'tortoisehg')
if os.path.isdir(testpath) and thgpath not in sys.path:
sys.path.insert(0, thgpath)
@@ -30,14 +30,14 @@demandimport.ignore.append('win32com.shell')
demandimport.enable()
from mercurial import ui, util
-from thgutil.hgversion import hgversion, checkhgversion
+from tortoisehg.util.hgversion import hgversion, checkhgversion
import cStringIO
import traceback
try:
- import hggtk.hgtk
+ import tortoisehg.hgtk.hgtk
except ImportError:
- sys.stderr.write("abort: couldn't find hggtk libraries in [%s]\n" %
+ sys.stderr.write("abort: couldn't find hgtk libraries in [%s]\n" %
';'.join(sys.path))
sys.stderr.write("(check your install and PYTHONPATH)\n")
sys.exit(-1)
@@ -51,19 +51,19 @@ sys.exit(1)
if not capt or 'THGDEBUG' in os.environ:
- sys.exit(hggtk.hgtk.dispatch(sys.argv[1:]))
+ sys.exit(tortoisehg.hgtk.hgtk.dispatch(sys.argv[1:]))
else:
mystderr = cStringIO.StringIO()
origstderr = sys.stderr
sys.stderr = mystderr
try:
- ret = hggtk.hgtk.dispatch(sys.argv[1:])
+ ret = tortoisehg.hgtk.hgtk.dispatch(sys.argv[1:])
sys.stderr = origstderr
mystderr.seek(0)
for l in mystderr.readlines():
if l.startswith('Traceback') or l.startswith('TypeError'):
- from hggtk.bugreport import run
- from hggtk.hgtk import gtkrun
+ from tortoisehg.hgtk.bugreport import run
+ from tortoisehg.hgtk.hgtk import gtkrun
error = 'Recoverable runtime error (stderr):\n'
error += mystderr.getvalue()
opts = {}
|
@@ -56,7 +56,8 @@ # Specific definitios for Windows NT-alike installations
_scripts = []
_data_files = []
- _packages = ['hggtk', 'hggtk.logview', 'thgutil']
+ _packages = ['tortoisehg.hgtk', 'tortoisehg.hgtk.logview',
+ 'tortoisehg.util']
extra = {}
hgextmods = []
@@ -128,7 +129,8 @@ # Specific definitios for Posix installations
_extra = {}
_scripts = ['hgtk']
- _packages = ['hggtk', 'hggtk.logview', 'thgutil']
+ _packages = ['tortoisehg.hgtk', 'tortoisehg.hgtk.logview',
+ 'tortoisehg.util']
_data_files = [(os.path.join('share/pixmaps/tortoisehg', root),
[os.path.join(root, file_) for file_ in files])
for root, dirs, files in os.walk('icons')]
@@ -139,7 +141,7 @@ ['contrib/nautilus-thg.py'])]
# Create a config.py. Distributions will need to supply their own
- cfgfile = os.path.join('thgutil', 'config.py')
+ cfgfile = os.path.join('tortoisehg', 'util', 'config.py')
if not os.path.exists(cfgfile) and not os.path.exists('.hg/requires'):
f = open(cfgfile, "w")
f.write('bin_path = "/usr/bin"\n')
@@ -168,15 +170,15 @@except OSError:
version = "unknown"
-verfile = os.path.join("thgutil", "__version__.py")
+verfile = os.path.join('tortoisehg', 'util', '__version__.py')
if version != 'unknown' or not os.path.exists(verfile):
f = file(verfile, "w")
f.write('# this file is autogenerated by setup.py\n')
f.write('version = "%s"\n' % version)
f.close()
else:
- import thgutil.__version__
- version = thgutil.__version__.version
+ import tortoisehg.util.__version__
+ version = tortoisehg.util.__version__.version
setup(name="tortoisehg",
version=version,
|
@@ -24,12 +24,11 @@ demandimport.ignore.append('win32com.shell')
demandimport.enable()
from mercurial import ui, error
-from thgutil.i18n import agettext as _
-from thgutil import thread2, paths, shlib
+from tortoisehg.util.i18n import agettext as _
+from tortoisehg.util import thread2, paths, shlib
if hasattr(sys, "frozen"):
# Insert PATH to binary installer gtk directory
- from thgutil import paths
gtkpath = os.path.join(paths.bin_path, 'gtk')
os.environ['PATH'] = os.pathsep.join([gtkpath, os.environ['PATH']])
# Give stdout/stderr closed attributes to prevent ui.py errors
@@ -45,7 +44,7 @@ # Try and find a custom icon
print "SetIcon(%s)" % name
hinst = GetModuleHandle(None)
- from thgutil.paths import get_tortoise_icon
+ from tortoisehg.util.paths import get_tortoise_icon
iconPathName = get_tortoise_icon(name)
if iconPathName and os.path.isfile(iconPathName):
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
@@ -172,7 +171,7 @@ def launchgui(self):
def launch():
import gtk
- from hggtk import taskbarui, hgtk
+ from tortoisehg.hgtk import taskbarui
dlg = taskbarui.TaskBarUI(logger.getqueue(), requests)
dlg.show_all()
dlg.connect('destroy', gtk.main_quit)
|
@@ -11,10 +11,10 @@ import gtk
import threading
-from thgutil.i18n import _
-from thgutil import version, paths, hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import version, paths, hglib
-from hggtk import gtklib, hgtk
+from tortoisehg.hgtk import gtklib, hgtk
def browse_url(url):
def start_browser():
|
@@ -12,10 +12,10 @@
from mercurial import hg, ui
-from thgutil.i18n import _
-from thgutil import hglib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, paths
-from hggtk import hgcmd, gtklib
+from tortoisehg.hgtk import hgcmd, gtklib
_working_dir_parent_ = _('= Working Directory Parent =')
|
@@ -12,10 +12,10 @@
from mercurial import hg, ui
-from thgutil.i18n import _
-from thgutil import hglib, paths, i18n, settings
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, paths, i18n, settings
-from hggtk import changesetinfo, gtklib, hgcmd, gdialog
+from tortoisehg.hgtk import changesetinfo, gtklib, hgcmd, gdialog
keep = i18n.keepgettext()
|
Change 1 of 1
Show Entire File
tortoisehg/hgtk/bugreport.py
Stacked
renamed from hggtk/bugreport.py
|
||
---|---|---|
@@ -10,9 +10,9 @@ import pango
from mercurial import extensions
-from thgutil.i18n import _
-from thgutil import hglib, version
-from hggtk import gdialog
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, version
+from tortoisehg.hgtk import gdialog
class BugReport(gdialog.GDialog):
"""GTK+ based dialog for displaying traceback info to the user in a
|
Change 1 of 3
Show Entire File
tortoisehg/hgtk/changeset.py
Stacked
renamed from hggtk/changeset.py
|
||
---|---|---|
@@ -13,11 +13,11 @@
from mercurial import cmdutil, context, util, ui, hg, patch, mdiff
-from thgutil.i18n import _
-from thgutil.hglib import *
-from thgutil import shlib
+from tortoisehg.util.i18n import _
+from tortoisehg.util.hglib import *
+from tortoisehg.util import shlib
-from hggtk import gdialog, gtklib, hgcmd
+from tortoisehg.hgtk import gdialog, gtklib, hgcmd
class ChangeSet(gdialog.GDialog):
'GTK+ based dialog for displaying repository logs'
@@ -677,7 +677,7 @@
def ann_file(self, menuitem):
'User selected annotate file from the file list context menu'
- from hggtk import datamine
+ from tortoisehg.hgtk import datamine
rev = self.currev
dialog = datamine.DataMineDialog(self.ui, self.repo, self.cwd, [], {})
dialog.display()
@@ -694,7 +694,7 @@ self.glog_parent.reload_log(**opts)
else:
# Else launch our own glog instance
- from hggtk import history
+ from tortoisehg.hgtk import history
dlg = history.run(self.ui, filehist=self.curfile)
dlg.display()
|
Change 1 of 1
Show Entire File
tortoisehg/hgtk/changesetinfo.py
Stacked
renamed from hggtk/changesetinfo.py
|
||
---|---|---|
@@ -10,10 +10,10 @@ import os
import gtk
-from thgutil.i18n import _
-from thgutil import hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib
-from hggtk import gtklib
+from tortoisehg.hgtk import gtklib
def changesetinfo(repo, revid, head=False):
def lbl(str, bold=False, right=False):
|
@@ -12,9 +12,9 @@ import traceback
from mercurial import ui, util
-from thgutil.i18n import _
-from thgutil import hglib, shlib, settings
-from hggtk import gdialog, gtklib, hgcmd
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, shlib, settings
+from tortoisehg.hgtk import gdialog, gtklib, hgcmd
class CloneDialog(gtk.Dialog):
""" Dialog to clone a Mercurial repo """
|
@@ -18,12 +18,11 @@
from mercurial import ui, hg, util, patch, cmdutil
-from thgutil.i18n import _
-from thgutil import shlib, hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import shlib, hglib
-from hggtk.status import GStatus, FM_STATUS, FM_CHECKED, FM_PATH_UTF8
-from hggtk.status import DM_REJECTED, DM_CHUNK_ID
-from hggtk import gtklib, thgconfig, gdialog, hgcmd
+from tortoisehg.hgtk.status import GStatus, FM_STATUS, FM_CHECKED, FM_PATH_UTF8
+from tortoisehg.hgtk import gtklib, thgconfig, gdialog, hgcmd
class BranchOperationDialog(gtk.Dialog):
def __init__(self, branch, close, mergebranches):
@@ -745,7 +744,7 @@
def changelog_clicked(self, toolbutton, data=None):
- from hggtk import history
+ from tortoisehg.hgtk import history
dlg = history.run(self.ui)
dlg.display()
return True
|
@@ -15,14 +15,13 @@
from mercurial import util
-from thgutil.i18n import _
-from thgutil import hglib
-from thgutil import thread2
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, thread2
-from hggtk.logview.colormap import AnnotateColorMap, AnnotateColorSaturation
-from hggtk.logview.treeview import TreeView as LogTreeView
-
-from hggtk import gtklib, gdialog, changeset
+from tortoisehg.hgtk.logview.colormap import AnnotateColorMap
+from tortoisehg.hgtk.logview.colormap import AnnotateColorSaturation
+from tortoisehg.hgtk.logview.treeview import TreeView as LogTreeView
+from tortoisehg.hgtk import gtklib, gdialog, changeset
class DataMineDialog(gdialog.GDialog):
COL_REVID = 0
@@ -161,7 +160,7 @@ self.add_annotate_page(self.curpath, self.currev)
def cmenu_file_log(self, menuitem):
- from hggtk import history
+ from tortoisehg.hgtk import history
dlg = history.run(self.ui, filehist=self.curpath)
dlg.display()
|
@@ -15,8 +15,8 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import gtk
-from thgutil.i18n import _
-from hggtk import gtklib
+from tortoisehg.util.i18n import _
+from tortoisehg.hgtk import gtklib
def entry_dialog(parent, msg, visible=True, default='', respfunc=None):
""" Allow a user to enter a text string (username/password)
|
@@ -17,10 +17,10 @@
from mercurial import cmdutil, util, ui, hg, commands
-from thgutil.i18n import _
-from thgutil import settings, hglib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import settings, hglib, paths
-from hggtk import gtklib
+from tortoisehg.hgtk import gtklib
class SimpleMessage(gtklib.MessageDialog):
def run(self):
@@ -344,7 +344,7 @@ if not url.startswith('http'):
docpath = os.path.dirname(paths.get_license_path())
url = os.path.join(docpath, url)
- from hggtk import about
+ from tortoisehg.hgtk import about
about.browseurl(url)
def launch(self, item, app):
@@ -517,7 +517,7 @@ return True, textout
def _do_diff(self, canonpats, options):
- from hggtk import visdiff
+ from tortoisehg.hgtk import visdiff
options['canonpats'] = canonpats
dialog = visdiff.run(self.ui, **options)
if not dialog:
@@ -530,7 +530,7 @@ self._do_diff(file and [file] or [], self.opts)
def _view_files(self, files, otherparent):
- from hggtk import thgconfig
+ from tortoisehg.hgtk import thgconfig
def cleanup():
shutil.rmtree(self.tmproot)
|
@@ -11,8 +11,8 @@ import gobject
import mercurial
-from thgutil.i18n import _
-from hggtk import gtklib, gdialog
+from tortoisehg.util.i18n import _
+from tortoisehg.hgtk import gtklib, gdialog
class GotoRevDialog(gtk.Dialog):
|
@@ -12,10 +12,10 @@ import gobject
import pango
-from thgutil.i18n import _
-from thgutil import paths, hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import paths, hglib
-from hggtk import hgtk
+from tortoisehg.hgtk import hgtk
if gtk.gtk_version < (2, 14, 0):
# at least on 2.12.12, gtk widgets can be confused by control
@@ -329,7 +329,7 @@ pass
else:
def selectlang(senderitem):
- from hggtk import dialog
+ from tortoisehg.hgtk import dialog
spell = gtkspell.get_from_text_view(textview)
lang = ''
while True:
|
@@ -15,11 +15,11 @@
from mercurial import hg, ui, mdiff, cmdutil, match, util
-from thgutil.i18n import _
-from thgutil.hglib import toutf, fromutf, diffexpand, RepoError
-from thgutil import shlib, paths, thread2, settings
+from tortoisehg.util.i18n import _
+from tortoisehg.util.hglib import toutf, fromutf, diffexpand, RepoError
+from tortoisehg.util import shlib, paths, thread2, settings
-from hggtk import gtklib
+from tortoisehg.hgtk import gtklib
# This function and some key bits below borrowed ruthelessly from
# Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
|
@@ -12,10 +12,10 @@ import os
import Queue
-from thgutil.i18n import _
-from thgutil import shlib, hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import shlib, hglib
-from hggtk import gtklib, hgthread
+from tortoisehg.hgtk import gtklib, hgthread
class CmdDialog(gtk.Dialog):
def __init__(self, cmdline, progressbar=True):
|
@@ -15,10 +15,10 @@
from mercurial import hg, ui, extensions
-from thgutil.i18n import _
-from thgutil import hglib, settings
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, settings
-from hggtk import gtklib, dialog, thgconfig, hgcmd
+from tortoisehg.hgtk import gtklib, dialog, thgconfig, hgcmd
class EmailDialog(gtk.Window):
""" Send patches or bundles via email """
|
@@ -12,10 +12,10 @@
from mercurial import hg, ui, match, util
-from thgutil.i18n import _
-from thgutil import shlib, hglib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import shlib, hglib, paths
-from hggtk import gtklib, gdialog
+from tortoisehg.hgtk import gtklib, gdialog
class HgIgnoreDialog(gtk.Window):
'Edit a reposiory .hgignore file'
|
@@ -10,10 +10,10 @@
from mercurial import hg, ui, util
-from thgutil.i18n import _
-from thgutil import hglib, shlib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, shlib
-from hggtk import dialog, gtklib
+from tortoisehg.hgtk import dialog, gtklib
class InitDialog(gtk.Dialog):
""" Dialog to initialize a Mercurial repo """
|
@@ -11,10 +11,10 @@
from mercurial import ui, util
-from thgutil.i18n import _
-from thgutil import hglib, thread2
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, thread2
-from hggtk import dialog, gdialog
+from tortoisehg.hgtk import dialog, gdialog
class GtkUi(ui.ui):
'''
|
|
|
@@ -22,9 +22,9 @@ import mercurial.ui as _ui
from mercurial import hg, util, fancyopts, cmdutil, extensions
-from thgutil.i18n import agettext as _
-from thgutil import hglib, paths, shlib
-from thgutil import version as thgversion
+from tortoisehg.util.i18n import agettext as _
+from tortoisehg.util import hglib, paths, shlib
+from tortoisehg.util import version as thgversion
nonrepo_commands = '''userconfig clone debugcomplete init about help
version thgstatus serve'''
@@ -55,7 +55,7 @@ except KeyboardInterrupt:
print _('\nCaught keyboard interrupt, aborting.\n')
except:
- from hggtk.bugreport import run
+ from tortoisehg.hgtk.bugreport import run
if '--debugger' in args:
pdb.post_mortem(sys.exc_info()[2])
error = traceback.format_exc()
@@ -275,7 +275,7 @@
def about(ui, *pats, **opts):
"""about TortoiseHg"""
- from hggtk.about import run
+ from tortoisehg.hgtk.about import run
gtkrun(run, ui, *pats, **opts)
def add(ui, *pats, **opts):
@@ -286,12 +286,12 @@
def thgstatus(ui, *pats, **opts):
"""update TortoiseHg status cache"""
- from hggtk.thgstatus import run
+ from tortoisehg.util.thgstatus import run
run(ui, *pats, **opts)
def clone(ui, *pats, **opts):
"""clone tool"""
- from hggtk.clone import run
+ from tortoisehg.hgtk.clone import run
gtkrun(run, ui, *pats, **opts)
def commit(ui, *pats, **opts):
@@ -302,89 +302,89 @@ if len(repo.parents()) > 1:
os.chdir(repo.root)
pats = []
- from hggtk.commit import run
+ from tortoisehg.hgtk.commit import run
gtkrun(run, ui, *pats, **opts)
def shelve(ui, *pats, **opts):
"""shelve/unshelve tool"""
- from hggtk.thgshelve import run
+ from tortoisehg.hgtk.thgshelve import run
gtkrun(run, ui, *pats, **opts)
def userconfig(ui, *pats, **opts):
"""user configuration editor"""
- from hggtk.thgconfig import run
+ from tortoisehg.hgtk.thgconfig import run
opts['repomode'] = False
gtkrun(run, ui, *pats, **opts)
def repoconfig(ui, *pats, **opts):
"""repository configuration editor"""
- from hggtk.thgconfig import run
+ from tortoisehg.hgtk.thgconfig import run
opts['repomode'] = True
gtkrun(run, ui, *pats, **opts)
def rename(ui, *pats, **opts):
"""rename a single file or directory"""
if not pats or len(pats) > 2:
- from hggtk import gdialog
+ from tortoisehg.hgtk import gdialog
gdialog.Prompt(_('Rename error'),
_('rename takes one or two path arguments'), None).run()
return
- from hggtk.rename import run
+ from tortoisehg.hgtk.rename import run
gtkrun(run, ui, *pats, **opts)
def guess(ui, *pats, **opts):
"""guess previous renames or copies"""
- from hggtk.guess import run
+ from tortoisehg.hgtk.guess import run
gtkrun(run, ui, *pats, **opts)
def datamine(ui, *pats, **opts):
"""repository search and annotate tool"""
- from hggtk.datamine import run
+ from tortoisehg.hgtk.datamine import run
gtkrun(run, ui, *pats, **opts)
def hgignore(ui, *pats, **opts):
"""ignore filter editor"""
- from hggtk.hgignore import run
+ from tortoisehg.hgtk.hgignore import run
gtkrun(run, ui, *pats, **opts)
def hginit(ui, *pats, **opts):
"""repository initialization tool"""
- from hggtk.hginit import run
+ from tortoisehg.hgtk.hginit import run
gtkrun(run, ui, *pats, **opts)
def log(ui, *pats, **opts):
"""changelog viewer"""
- from hggtk.history import run
+ from tortoisehg.hgtk.history import run
gtkrun(run, ui, *pats, **opts)
def merge(ui, *pats, **opts):
"""merge tool"""
- from hggtk.merge import run
+ from tortoisehg.hgtk.merge import run
gtkrun(run, ui, *pats, **opts)
def recovery(ui, *pats, **opts):
"""recover, rollback & verify"""
- from hggtk.recovery import run
+ from tortoisehg.hgtk.recovery import run
gtkrun(run, ui, *pats, **opts)
def remove(ui, *pats, **opts):
"""file status viewer in remove mode"""
- from hggtk.status import run
+ from tortoisehg.hgtk.status import run
gtkrun(run, ui, *pats, **opts)
def revert(ui, *pats, **opts):
"""file status viewer in revert mode"""
- from hggtk.status import run
+ from tortoisehg.hgtk.status import run
gtkrun(run, ui, *pats, **opts)
def forget(ui, *pats, **opts):
"""file status viewer in forget mode"""
- from hggtk.status import run
+ from tortoisehg.hgtk.status import run
gtkrun(run, ui, *pats, **opts)
def serve(ui, *pats, **opts):
"""web server"""
- from hggtk.serve import run
+ from tortoisehg.hgtk.serve import run
if paths.find_root() == None and not opts['webdir_conf']:
raise hglib.RepoError(_("There is no Mercurial repository here"
" (.hg not found)"))
@@ -392,12 +392,12 @@
def status(ui, *pats, **opts):
"""file status & diff viewer"""
- from hggtk.status import run
+ from tortoisehg.hgtk.status import run
gtkrun(run, ui, *pats, **opts)
def synch(ui, *pats, **opts):
"""repository synchronization tool"""
- from hggtk.synch import run
+ from tortoisehg.hgtk.synch import run
cmd = opts['alias']
if cmd in ('push', 'outgoing', 'email'):
opts['pushmode'] = True
@@ -407,12 +407,12 @@
def update(ui, *pats, **opts):
"""update/checkout tool"""
- from hggtk.update import run
+ from tortoisehg.hgtk.update import run
gtkrun(run, ui, *pats, **opts)
def vdiff(ui, *pats, **opts):
"""launch configured visual diff tool"""
- from hggtk.visdiff import run, rawextdiff
+ from tortoisehg.hgtk.visdiff import run, rawextdiff
if opts.get('raw'):
rawextdiff(ui, *pats, **opts)
return
@@ -614,7 +614,7 @@
def archive(ui, *pats, **opts):
"""create an unversioned archive of a repository revision"""
- from hggtk.archive import run
+ from tortoisehg.hgtk.archive import run
gtkrun(run, ui, *pats, **opts)
globalopts = [
|
Change 1 of 1
Show Entire File
tortoisehg/hgtk/histdetails.py
Stacked
renamed from hggtk/histdetails.py
|
||
---|---|---|
@@ -8,9 +8,9 @@ import gtk
import gobject
-from thgutil.i18n import _
+from tortoisehg.util.i18n import _
-from hggtk import gtklib
+from tortoisehg.hgtk import gtklib
class LogDetailsDialog(gtk.Dialog):
|
@@ -14,14 +14,14 @@
from mercurial import ui, hg, cmdutil, commands, extensions, util
-from thgutil.i18n import _
-from thgutil import hglib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, paths
-from hggtk.logview.treeview import TreeView as LogTreeView
+from tortoisehg.hgtk.logview.treeview import TreeView as LogTreeView
-from hggtk import gdialog, gtklib, hgcmd, datamine, logfilter, gorev
-from hggtk import backout, status, hgemail, tagadd, update, merge, archive
-from hggtk import changeset, thgconfig, thgmq, histdetails
+from tortoisehg.hgtk import gdialog, gtklib, hgcmd, datamine, logfilter, gorev
+from tortoisehg.hgtk import backout, status, hgemail, tagadd, update, merge
+from tortoisehg.hgtk import archive, changeset, thgconfig, thgmq, histdetails
def create_menu(label, callback):
menuitem = gtk.MenuItem(label, True)
@@ -122,7 +122,7 @@ elif not parents == newparents:
self.refresh_model()
- from hggtk import synch
+ from tortoisehg.hgtk import synch
parents = [x.node() for x in self.repo.parents()]
dlg = synch.SynchDialog([], False, True)
dlg.set_notify_func(synch_callback, parents)
|
renamed from hggtk/logview/__init__.py
|
||
---|---|---|
renamed from hggtk/logview/colormap.py
|
||
---|---|---|
renamed from hggtk/logview/graphcell.py
|
||
---|---|---|
renamed from hggtk/logview/revgraph.py
|
||
---|---|---|
Change 1 of 1
Show Entire File
tortoisehg/hgtk/logview/treemodel.py
Stacked
renamed from hggtk/logview/treemodel.py
|
||
---|---|---|
@@ -17,8 +17,8 @@ import gtk
import gobject
from mercurial import util, templatefilters
-from thgutil import hglib
-from hggtk import gtklib
+from tortoisehg.util import hglib
+from tortoisehg.hgtk import gtklib
# treemodel row enumerated attributes
LINES = 0 # These elements come from the changelog walker
|
Change 1 of 1
Show Entire File
tortoisehg/hgtk/logview/treeview.py
Stacked
renamed from hggtk/logview/treeview.py
|
||
---|---|---|
@@ -21,12 +21,12 @@ import re
import time
-from thgutil.i18n import _
-from thgutil import hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib
-from hggtk.logview import treemodel
-from hggtk.logview.graphcell import CellRendererGraph
-from hggtk.logview.revgraph import *
+from tortoisehg.hgtk.logview import treemodel
+from tortoisehg.hgtk.logview.graphcell import CellRendererGraph
+from tortoisehg.hgtk.logview.revgraph import *
class TreeView(gtk.ScrolledWindow):
|
@@ -12,10 +12,10 @@
from mercurial import hg, ui
-from thgutil.i18n import _
-from thgutil import hglib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, paths
-from hggtk import changesetinfo, gtklib, commit, gdialog, hgcmd
+from tortoisehg.hgtk import changesetinfo, gtklib, commit, gdialog, hgcmd
class MergeDialog(gtk.Window):
""" Dialog to merge revisions of a Mercurial repo """
|
@@ -15,10 +15,10 @@
from mercurial import hg, ui
-from thgutil.i18n import _
-from thgutil import hglib, shlib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, shlib, paths
-from hggtk import gdialog, dialog, gtklib, hgthread
+from tortoisehg.hgtk import gdialog, dialog, gtklib, hgthread
class RecoveryDialog(gtk.Window):
def __init__(self):
|
|
@@ -0,0 +1,73 @@ + # rename.py - TortoiseHg's dialogs for handling renames
+#
+# Copyright 2009 Steve Borho <steve@borho.org>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
+
+import sys
+import gtk
+import cStringIO
+
+from mercurial import hg, ui, util, commands
+
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, paths
+
+from tortoisehg.hgtk import dialog
+
+def run(ui, *pats, **opts):
+ fname, target = '', ''
+ try:
+ fname = pats[0]
+ target = pats[1]
+ except IndexError:
+ pass
+ fname = util.normpath(fname)
+ if target:
+ target = hglib.toutf(util.normpath(target))
+ else:
+ target = hglib.toutf(fname)
+ title = _('Rename ') + hglib.toutf(fname)
+ dlg = dialog.entry_dialog(None, title, True, target, rename_resp)
+ dlg.orig = fname
+ return dlg
+
+def rename_resp(dlg, response):
+ if response != gtk.RESPONSE_OK:
+ dlg.destroy()
+ return
+ try:
+ root = paths.find_root()
+ repo = hg.repository(ui.ui(), root)
+ except (ImportError, hglib.RepoError):
+ dlg.destroy()
+ return
+
+ new_name = hglib.fromutf(dlg.entry.get_text())
+ opts = {}
+ opts['force'] = False # Checkbox? Nah.
+ opts['after'] = False
+ opts['dry_run'] = False
+
+ saved = sys.stderr
+ errors = cStringIO.StringIO()
+ toquit = False
+ try:
+ sys.stderr = errors
+ repo.ui.pushbuffer()
+ repo.ui.quiet = True
+ try:
+ commands.rename(repo.ui, repo, dlg.orig, new_name, **opts)
+ toquit = True
+ except (util.Abort, hglib.RepoError), inst:
+ dlg.error_dialog(None, _('rename error'), str(inst))
+ toquit = False
+ finally:
+ sys.stderr = saved
+ textout = errors.getvalue() + repo.ui.popbuffer()
+ errors.close()
+ if len(textout) > 1:
+ dlg.error_dialog(None, _('rename error'), textout)
+ elif toquit:
+ dlg.destroy()
|
@@ -20,10 +20,10 @@ from mercurial import hg, ui, commands, cmdutil, util
from mercurial.hgweb import server
-from thgutil.i18n import _
-from thgutil import hglib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, paths
-from hggtk import dialog, gdialog, gtklib, thgconfig
+from tortoisehg.hgtk import dialog, gdialog, gtklib, thgconfig
gservice = None
class ServeDialog(gtk.Window):
|
@@ -18,10 +18,10 @@ from mercurial import cmdutil, util, commands, patch, mdiff
from mercurial import merge as merge_
-from thgutil.i18n import _
-from thgutil import hglib, shlib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, shlib, paths, hgshelve
-from hggtk import dialog, gdialog, hgshelve, gtklib, guess, hgignore
+from tortoisehg.hgtk import dialog, gdialog, gtklib, guess, hgignore
# file model row enumerations
FM_CHECKED = 0
@@ -1334,7 +1334,7 @@ def remove(menuitem, files):
self.hg_remove(files)
def log(menuitem, files):
- from hggtk import history
+ from tortoisehg.hgtk import history
dlg = history.run(self.ui, canonpats=files)
dlg.display()
def forget(menuitem, files):
|
@@ -17,11 +17,11 @@
from mercurial import hg, ui, extensions, url
-from thgutil.i18n import _
-from thgutil import hglib, settings, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, settings, paths
-from hggtk import dialog, gtklib, hgthread, history, thgconfig, hgemail
-from hggtk import thgshelve
+from tortoisehg.hgtk import dialog, gtklib, hgthread, history, thgconfig
+from tortoisehg.hgtk import thgshelve, hgemail
class SynchDialog(gtk.Window):
def __init__(self, repos=[], pushmode=False, fromlog=False):
|
@@ -12,10 +12,10 @@
from mercurial import hg, ui, util
-from thgutil.i18n import _
-from thgutil import hglib, settings, i18n
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, settings, i18n
-from hggtk import dialog, gtklib
+from tortoisehg.hgtk import dialog, gtklib
keep = i18n.keepgettext()
|
Change 1 of 2
Show Entire File
tortoisehg/hgtk/taskbarui.py
Stacked
renamed from hggtk/taskbarui.py
|
||
---|---|---|
@@ -9,9 +9,9 @@ import gtk
import gobject
-from thgutil.i18n import _
-from thgutil import hglib, settings, menuthg
-from hggtk import gtklib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, settings, menuthg
+from tortoisehg.hgtk import gtklib
shellcmds = '''about add clone commit datamine init log recovery
shelve synch status thgstatus userconf repoconf remove rename
@@ -207,7 +207,7 @@ return frame
def about(self, button):
- from hggtk import about
+ from tortoisehg.hgtk import about
dlg = about.AboutDialog()
dlg.show_all()
|
Change 1 of 2
Show Entire File
tortoisehg/hgtk/thgconfig.py
Stacked
renamed from hggtk/thgconfig.py
|
||
---|---|---|
@@ -14,10 +14,10 @@
from mercurial import hg, ui, util, url, filemerge
-from thgutil.i18n import _
-from thgutil import hglib, settings, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, settings, paths
-from hggtk import dialog, gdialog, gtklib, hgcmd
+from tortoisehg.hgtk import dialog, gdialog, gtklib, hgcmd
_unspecstr = _('<unspecified>')
_unspeclocalstr = hglib.fromutf(_unspecstr)
@@ -734,7 +734,7 @@ self.pathdata.get_path(i),
self.pathtree.get_column(0))
self.refresh_path_list()
- # This method may be called from hggtk.sync, so ensure page is visible
+ # This method may be called from hgtk.sync, so ensure page is visible
self.notebook.set_current_page(3)
self.dirty_event()
|
@@ -10,10 +10,10 @@ import gobject
import pango
-from thgutil.i18n import _
-from thgutil import hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib
-from hggtk import gtklib, hgcmd
+from tortoisehg.hgtk import gtklib, hgcmd
# MQ patches row enumerations
MQ_INDEX = 0
|
Change 1 of 1
Show Entire File
tortoisehg/hgtk/thgshelve.py
Stacked
renamed from hggtk/thgshelve.py
|
||
---|---|---|
@@ -12,11 +12,11 @@
from mercurial import util
-from thgutil.i18n import _
-from thgutil import hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, hgshelve
-from hggtk.status import GStatus, FM_STATUS, FM_CHECKED
-from hggtk import hgshelve, gdialog, gtklib
+from tortoisehg.hgtk.status import GStatus, FM_STATUS, FM_CHECKED
+from tortoisehg.hgtk import gdialog, gtklib
class GShelve(GStatus):
"""GTK+ based dialog for displaying repository status and shelving changes.
|
@@ -12,10 +12,10 @@
from mercurial import hg, ui
-from thgutil.i18n import _
-from thgutil import hglib, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, paths
-from hggtk import hgcmd, gtklib
+from tortoisehg.hgtk import hgcmd, gtklib
_branch_tip_ = _('= Current Branch Tip =')
|
@@ -15,10 +15,10 @@
from mercurial import hg, ui, cmdutil, util
-from thgutil.i18n import _
-from thgutil import hglib, settings, paths
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib, settings, paths
-from hggtk import gdialog, gtklib
+from tortoisehg.hgtk import gdialog, gtklib
try:
import win32con
|
@@ -22,7 +22,7 @@ _encodingmode = encoding.encodingmode
_fallbackencoding = encoding.fallbackencoding
-from thgutil.hgversion import hgversion
+from tortoisehg.util.hgversion import hgversion
def tounicode(s):
"""
|
Change 1 of 1
Show Changes Only
tortoisehg/util/hgshelve.py
Stacked
renamed from hggtk/hgshelve.py
|
||
---|---|---|
|
|
# hgshelve.py - TortoiseHg dialog to initialize a repo
#
# Copyright 2007 Bryan O'Sullivan <bos@serpentine.com>
# Copyright 2007 TK Soh <teekaysoh@gmailcom>
# Copyright 2009 Steve Borho <steve@borho.org>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2, incorporated herein by reference.
'''interactive change selection to set aside that may be restored later'''
import copy
import cStringIO
import errno
import operator
import os
import re
import shutil
import tempfile
from mercurial import cmdutil, commands, cmdutil, hg, mdiff, patch, revlog
from mercurial import util, fancyopts
-from thgutil.i18n import _
-from thgutil import hglib
+from tortoisehg.util.i18n import _
+from tortoisehg.util import hglib
lines_re = re.compile(r'@@ -(\d+),(\d+) \+(\d+),(\d+) @@\s*(.*)')
def internalpatch(patchobj, ui, strip, cwd, reverse=False, files={}):
"""use builtin patch to apply <patchobj> to the working directory.
returns whether patch was applied with fuzz factor.
Adapted from patch.internalpatch() to support reverse patching.
"""
try:
fp = file(patchobj, 'rb')
except TypeError:
fp = patchobj
if cwd:
curdir = os.getcwd()
os.chdir(cwd)
eolmode = ui.config('patch', 'eol', 'strict')
try:
eol = {'strict': None, 'crlf': '\r\n', 'lf': '\n'}[eolmode.lower()]
except KeyError:
raise util.Abort(_('Unsupported line endings type: %s') % eolmode)
try:
ret = patch.applydiff(ui, fp, files, strip=strip,
reverse=reverse, eol=eol)
finally:
if cwd:
os.chdir(curdir)
if ret < 0:
raise patch.PatchError
return ret > 0
def scanpatch(fp):
lr = patch.linereader(fp)
def scanwhile(first, p):
lines = [first]
while True:
line = lr.readline()
if not line:
break
if p(line):
lines.append(line)
else:
lr.push(line)
break
return lines
while True:
line = lr.readline()
if not line:
break
if line.startswith('diff --git a/'):
def notheader(line):
s = line.split(None, 1)
return not s or s[0] not in ('---', 'diff')
header = scanwhile(line, notheader)
fromfile = lr.readline()
if fromfile.startswith('---'):
tofile = lr.readline()
header += [fromfile, tofile]
else:
lr.push(fromfile)
yield 'file', header
elif line[0] == ' ':
yield 'context', scanwhile(line, lambda l: l[0] in ' \\')
elif line[0] in '-+':
yield 'hunk', scanwhile(line, lambda l: l[0] in '-+\\')
else:
m = lines_re.match(line)
if m:
yield 'range', m.groups()
else:
raise patch.PatchError(_('unknown patch content: %r') % line)
class header(object):
diff_re = re.compile('diff --git a/(.*) b/(.*)$')
allhunks_re = re.compile('(?:index|new file|deleted file) ')
pretty_re = re.compile('(?:new file|deleted file) ')
special_re = re.compile('(?:index|new file|deleted|copy|rename) ')
def __init__(self, header):
self.header = header
self.hunks = []
def binary(self):
for h in self.header:
if h.startswith('index '):
return True
def selpretty(self, selected):
str = ''
for h in self.header:
if h.startswith('index '):
str += _('this modifies a binary file (all or nothing)\n')
break
if self.pretty_re.match(h):
str += hglib.toutf(h)
if self.binary():
str += _('this is a binary file\n')
break
if h.startswith('---'):
hunks = len(self.hunks)
shunks, lines, slines = 0, 0, 0
for i, h in enumerate(self.hunks):
lines += h.added + h.removed
if selected(i):
shunks += 1
slines += h.added + h.removed
str += "<span foreground='#000088'>"
str += _('total: %d hunks (%d changed lines); '
'selected: %d hunks (%d changed lines)') % (hunks,
lines, shunks, slines)
str += "</span>"
break
str += hglib.toutf(h)
return str
def pretty(self, fp):
for h in self.header:
if h.startswith('index '):
fp.write(_('this modifies a binary file (all or nothing)\n'))
break
if self.pretty_re.match(h):
fp.write(h)
if self.binary():
fp.write(_('this is a binary file\n'))
break
if h.startswith('---'):
fp.write(_('%d hunks, %d lines changed\n') %
(len(self.hunks),
sum([h.added + h.removed for h in self.hunks])))
break
fp.write(h)
def write(self, fp):
fp.write(''.join(self.header))
def allhunks(self):
for h in self.header:
if self.allhunks_re.match(h):
return True
def files(self):
fromfile, tofile = self.diff_re.match(self.header[0]).groups()
if fromfile == tofile:
return [fromfile]
return [fromfile, tofile]
def filename(self):
return self.files()[-1]
def __repr__(self):
return '<header %s>' % (' '.join(map(repr, self.files())))
def special(self):
for h in self.header:
if self.special_re.match(h):
return True
def __cmp__(self, other):
return cmp(repr(self), repr(other))
def countchanges(hunk):
add = len([h for h in hunk if h[0] == '+'])
rem = len([h for h in hunk if h[0] == '-'])
return add, rem
class hunk(object):
maxcontext = 3
def __init__(self, header, fromline, toline, proc, before, hunk, after):
def trimcontext(number, lines):
delta = len(lines) - self.maxcontext
if False and delta > 0:
return number + delta, lines[:self.maxcontext]
return number, lines
self.header = header
self.fromline, self.before = trimcontext(fromline, before)
self.toline, self.after = trimcontext(toline, after)
self.proc = proc
self.hunk = hunk
self.added, self.removed = countchanges(self.hunk)
def write(self, fp):
delta = len(self.before) + len(self.after)
if self.after and self.after[-1] == '\\ No newline at end of file\n':
delta -= 1
fromlen = delta + self.removed
tolen = delta + self.added
fp.write('@@ -%d,%d +%d,%d @@%s\n' %
(self.fromline, fromlen, self.toline, tolen,
self.proc and (' ' + self.proc)))
fp.write(''.join(self.before + self.hunk + self.after))
pretty = write
def filename(self):
return self.header.filename()
def __repr__(self):
return '<hunk %r@%d>' % (self.filename(), self.fromline)
def __cmp__(self, other):
return cmp(repr(self), repr(other))
def parsepatch(fp):
class parser(object):
def __init__(self):
self.fromline = 0
self.toline = 0
self.proc = ''
self.header = None
self.context = []
self.before = []
self.hunk = []
self.stream = []
def addrange(self, (fromstart, fromend, tostart, toend, proc)):
self.fromline = int(fromstart)
self.toline = int(tostart)
self.proc = proc
def addcontext(self, context):
if self.hunk:
h = hunk(self.header, self.fromline, self.toline, self.proc,
self.before, self.hunk, context)
self.header.hunks.append(h)
self.stream.append(h)
self.fromline += len(self.before) + h.removed
self.toline += len(self.before) + h.added
self.before = []
self.hunk = []
self.proc = ''
self.context = context
def addhunk(self, hunk):
if self.context:
self.before = self.context
self.context = []
self.hunk = hunk
def newfile(self, hdr):
self.addcontext([])
h = header(hdr)
self.stream.append(h)
self.header = h
def finished(self):
self.addcontext([])
return self.stream
transitions = {
'file': {'context': addcontext,
'file': newfile,
'hunk': addhunk,
'range': addrange},
'context': {'file': newfile,
'hunk': addhunk,
'range': addrange},
'hunk': {'context': addcontext,
'file': newfile,
'range': addrange},
'range': {'context': addcontext,
'hunk': addhunk},
}
p = parser()
state = 'context'
for newstate, data in scanpatch(fp):
try:
p.transitions[state][newstate](p, data)
except KeyError:
raise patch.PatchError(_('unhandled transition: %s -> %s') %
(state, newstate))
state = newstate
return p.finished()
def filterpatch(ui, chunks):
chunks = list(chunks)
chunks.reverse()
seen = {}
def consumefile():
consumed = []
while chunks:
if isinstance(chunks[-1], header):
break
else:
consumed.append(chunks.pop())
return consumed
resp_all = [None]
resp_file = [None]
applied = {}
def prompt(query):
if resp_all[0] is not None:
return resp_all[0]
if resp_file[0] is not None:
return resp_file[0]
while True:
r = (ui.prompt(query + _(' [Ynsfdaq?] '), '(?i)[Ynsfdaq?]?$')
or 'y').lower()
if r == '?':
c = shelve.__doc__.find('y - shelve this change')
for l in shelve.__doc__[c:].splitlines():
if l: ui.write(_(l.strip()), '\n')
continue
elif r == 's':
r = resp_file[0] = 'n'
elif r == 'f':
r = resp_file[0] = 'y'
elif r == 'd':
r = resp_all[0] = 'n'
elif r == 'a':
r = resp_all[0] = 'y'
elif r == 'q':
raise util.Abort(_('user quit'))
return r
while chunks:
chunk = chunks.pop()
if isinstance(chunk, header):
resp_file = [None]
fixoffset = 0
hdr = ''.join(chunk.header)
if hdr in seen:
consumefile()
continue
seen[hdr] = True
if resp_all[0] is None:
chunk.pretty(ui)
r = prompt(_('shelve changes to %s?') %
_(' and ').join(map(repr, chunk.files())))
if r == 'y':
applied[chunk.filename()] = [chunk]
if chunk.allhunks():
applied[chunk.filename()] += consumefile()
else:
consumefile()
else:
if resp_file[0] is None and resp_all[0] is None:
chunk.pretty(ui)
r = prompt(_('shelve this change to %r?') %
chunk.filename())
if r == 'y':
if fixoffset:
chunk = copy.copy(chunk)
chunk.toline += fixoffset
applied[chunk.filename()].append(chunk)
else:
fixoffset += chunk.removed - chunk.added
return reduce(operator.add, [h for h in applied.itervalues()
if h[0].special() or len(h) > 1], [])
def refilterpatch(allchunk, selected):
''' return unshelved chunks of files to be shelved '''
l = []
fil = []
for c in allchunk:
if isinstance(c, header):
if len(l) > 1 and l[0] in selected:
fil += l
l = [c]
elif c not in selected:
l.append(c)
if len(l) > 1 and l[0] in selected:
fil += l
return fil
def makebackup(ui, repo, dir, files):
try:
os.mkdir(dir)
except OSError, err:
if err.errno != errno.EEXIST:
raise
backups = {}
for f in files:
fd, tmpname = tempfile.mkstemp(prefix=f.replace('/', '_')+'.',
dir=dir)
os.close(fd)
ui.debug(_('backup %r as %r\n') % (f, tmpname))
util.copyfile(repo.wjoin(f), tmpname)
backups[f] = tmpname
return backups
def get_shelve_filename(repo):
return repo.join('shelve')
def shelve(ui, repo, *pats, **opts):
'''interactively select changes to set aside
If a list of files is omitted, all changes reported by "hg status"
will be candidates for shelveing.
You will be prompted for whether to shelve changes to each
modified file, and for files with multiple changes, for each
change to use. For each query, the following responses are
possible:
y - shelve this change
n - skip this change
s - skip remaining changes to this file
f - shelve remaining changes to this file
d - done, skip remaining changes and files
a - shelve all changes to all remaining files
q - quit, shelveing no changes
? - display help'''
if not ui.interactive():
raise util.Abort(_('shelve can only be run interactively'))
forced = opts['force'] or opts['append']
if os.path.exists(repo.join('shelve')) and not forced:
raise util.Abort(_('shelve data already exists'))
def shelvefunc(ui, repo, message, match, opts):
# If an MQ patch is applied, consider all qdiff changes
if hasattr(repo, 'mq') and repo.mq.applied and repo['.'] == repo['qtip']:
qtip = repo['.']
basenode = qtip.parents()[0].node()
else:
basenode = repo.dirstate.parents()[0]
changes = repo.status(node1=basenode, match=match)[:5]
modified, added, removed = changes[:3]
files = modified + added + removed
diffopts = mdiff.diffopts(git=True, nodates=True)
patch_diff = ''.join(patch.diff(repo, basenode, match=match,
changes=changes, opts=diffopts))
fp = cStringIO.StringIO(patch_diff)
ac = parsepatch(fp)
fp.close()
chunks = filterpatch(ui, ac)
rc = refilterpatch(ac, chunks)
contenders = {}
for h in chunks:
try: contenders.update(dict.fromkeys(h.files()))
except AttributeError: pass
newfiles = [f for f in files if f in contenders]
if not newfiles:
ui.status(_('no changes to shelve\n'))
return 0
modified = dict.fromkeys(changes[0])
backupdir = repo.join('shelve-backups')
try:
bkfiles = [f for f in newfiles if f in modified]
backups = makebackup(ui, repo, backupdir, bkfiles)
# patch to shelve
sp = cStringIO.StringIO()
for c in chunks:
if c.filename() in backups:
c.write(sp)
doshelve = sp.tell()
sp.seek(0)
# patch to apply to shelved files
fp = cStringIO.StringIO()
for c in rc:
if c.filename() in backups:
c.write(fp)
dopatch = fp.tell()
fp.seek(0)
try:
# 3a. apply filtered patch to clean repo (clean)
if backups:
hg.revert(repo, basenode, backups.has_key)
# 3b. apply filtered patch to clean repo (apply)
if dopatch:
ui.debug(_('applying patch\n'))
ui.debug(fp.getvalue())
patch.internalpatch(fp, ui, 1, repo.root, eolmode=None)
del fp
# 3c. apply filtered patch to clean repo (shelve)
if doshelve:
ui.debug(_('saving patch to shelve\n'))
if opts['append']:
f = repo.opener('shelve', "a")
else:
f = repo.opener('shelve', "w")
f.write(sp.getvalue())
del f
del sp
except:
try:
for realname, tmpname in backups.iteritems():
ui.debug(_('restoring %r to %r\n') % (tmpname, realname))
util.copyfile(tmpname, repo.wjoin(realname))
ui.debug(_('removing shelve file\n'))
os.unlink(repo.join('shelve'))
except OSError:
pass
return 0
finally:
try:
for realname, tmpname in backups.iteritems():
ui.debug(_('removing backup for %r : %r\n') % (realname, tmpname))
os.unlink(tmpname)
os.rmdir(backupdir)
except OSError:
pass
fancyopts.fancyopts([], commands.commitopts, opts)
return cmdutil.commit(ui, repo, shelvefunc, pats, opts)
def unshelve(ui, repo, *pats, **opts):
'''restore shelved changes'''
try:
fp = cStringIO.StringIO()
fp.write(repo.opener('shelve').read())
if opts['inspect']:
ui.status(fp.getvalue())
else:
files = []
for chunk in parsepatch(fp):
if isinstance(chunk, header):
files += chunk.files()
backupdir = repo.join('shelve-backups')
backups = makebackup(ui, repo, backupdir, set(files))
ui.debug(_('applying shelved patch\n'))
patchdone = 0
try:
try:
fp.seek(0)
pfiles = {}
internalpatch(fp, ui, 1, repo.root, files=pfiles)
patch.updatedir(ui, repo, pfiles)
patchdone = 1
except:
if opts['force']:
patchdone = 1
else:
ui.status(_('restoring backup files\n'))
for realname, tmpname in backups.iteritems():
ui.debug(_('restoring %r to %r\n') %
(tmpname, realname))
util.copyfile(tmpname, repo.wjoin(realname))
finally:
try:
ui.debug(_('removing backup files\n'))
shutil.rmtree(backupdir, True)
except OSError:
pass
if patchdone:
ui.debug(_('removing shelved patches\n'))
os.unlink(repo.join('shelve'))
ui.status(_('unshelve completed\n'))
except IOError:
ui.warn(_('nothing to unshelve\n'))
cmdtable = {
"shelve":
(shelve,
[('A', 'addremove', None,
_('mark new/missing files as added/removed before shelving')),
('f', 'force', None,
_('overwrite existing shelve data')),
('a', 'append', None,
_('append to existing shelve data')),
] + commands.walkopts,
_('hg shelve [OPTION]... [FILE]...')),
"unshelve":
(unshelve,
[('i', 'inspect', None, _('inspect shelved changes only')),
('f', 'force', None,
_('proceed even if patches do not unshelve cleanly')),
],
_('hg unshelve [OPTION]... [FILE]...')),
}
|
@@ -7,7 +7,7 @@
import gettext, sys
from gettext import gettext as _
-from thgutil import paths, hglib
+from tortoisehg.util import paths, hglib
gettext.bindtextdomain("tortoisehg", paths.get_locale_path())
gettext.textdomain("tortoisehg")
|
@@ -66,7 +66,7 @@ return _winreg.QueryValue(_winreg.HKEY_LOCAL_MACHINE,
r"Software\TortoiseHg")
except:
- return os.path.dirname(os.path.dirname(__file__))
+ return os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
def netdrive_status(drive):
"""
@@ -99,7 +99,7 @@ return None
def get_prog_root():
- path = os.path.dirname(os.path.dirname(__file__))
+ path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
return path
def netdrive_status(drive):
|
Change 1 of 1
Show Entire File
tortoisehg/util/thgstatus.py
Stacked
renamed from hggtk/thgstatus.py
|
||
---|---|---|
@@ -8,7 +8,7 @@ '''update TortoiseHg status cache'''
from mercurial import hg
-from thgutil import paths, shlib
+from tortoisehg.util import paths, shlib
import os
def cachefilepath(repo):
|
@@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the
# GNU General Public License version 2, incorporated herein by reference.
-from thgutil.i18n import _
+from tortoisehg.util.i18n import _
def version():
try:
|
@@ -18,12 +18,12 @@ pfile = pfile[:-1]
path = os.path.dirname(os.path.dirname(os.path.realpath(pfile)))
thgpath = os.path.normpath(path)
- testpath = os.path.join(thgpath, 'thgutil')
+ 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 thgutil.menuthg import thgcmenu
+from tortoisehg.util.menuthg import thgcmenu
regkeytmpl = u'[HKEY_CURRENT_USER\\Software\\TortoiseHg\\CMenu\\%s\\%s]'
regheaders = ( u'Windows Registry Editor Version 5.00',
|
Loading...