by
Changes to 46 files · Browse files at e029f53859d8 Showing diff from parent 429f63e37356 c55f3b963ead Diff from another changeset...
@@ -3,3 +3,4 @@ include contrib/nautilus-thg.py
include COPYING.txt ReleaseNotes.txt
recursive-include locale *.mo
+recursive-include i18n *.po
|
@@ -1,13 +1,9 @@ # TortoiseHg plugin for Nautilus
#
-# Copyright (C) 2007-9 Steve Borho
+# Copyright 2007 Steve Borho
#
-# Stolen mercilessly from nautilus-bzr, thanks guys
-# Copyright (C) 2006 Jeff Bailey
-# Copyright (C) 2006 Wouter van Heyst
-# Copyright (C) 2006 Jelmer Vernooij
-#
-# Published under the GNU GPL
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import gobject
|
@@ -1,8 +1,10 @@ + # about.py - TortoiseHg About dialog
#
-# TortoiseHg About dialog
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007-9 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import os
import sys
|
@@ -1,9 +1,10 @@ - #
# backout.py - TortoiseHg's dialog for backing out changeset
#
-# Copyright (C) 2008 Steve Borho <steve@borho.org>
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2008 TK Soh <teekaysoh@gmail.com>
+# Copyright 2008 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 gtk
import gobject
|
@@ -1,8 +1,9 @@ - #
# bugreport.py - Bug report dialog for TortoiseHg
#
-# Copyright (C) 2009 Steve Borho <steve@borho.org>
+# 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 os
import gtk
|
@@ -1,8 +1,9 @@ - #
# changeset.py - Changeset dialog for TortoiseHg
#
# Copyright 2008 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 os
import gtk
|
@@ -1,8 +1,10 @@ + # clone.py - Clone dialog for TortoiseHg
#
-# TortoiseHg dialog to clone a repo
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import os
|
@@ -1,10 +1,11 @@ - #
-# commit.py - commit dialog for TortoiseHg
+# commit.py - Commit dialog for TortoiseHg
#
# Copyright 2007 Brad Schick, brad at gmail . com
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-# Copyright (C) 2009 Steve Borho <steve@borho.org>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 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 os
import errno
@@ -353,10 +354,11 @@ entry[FM_CHECKED] = True
self.update_check_count()
- # pre-fill commit message
+ # pre-fill commit message, if not modified
buf = self.text.get_buffer()
- buf.set_text(_('merge'))
- buf.set_modified(False)
+ if not buf.get_modified():
+ buf.set_text(_('merge'))
+ buf.set_modified(False)
def check_patch_queue(self):
|
@@ -1,7 +1,9 @@ + # datamine.py - Data Mining dialog for TortoiseHg
#
-# Data Mining dialog for TortoiseHg and Mercurial
+# Copyright 2008 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2008 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 gtk
import gobject
|
@@ -1,10 +1,10 @@ # gdialog.py - base dialog for gtools
#
# Copyright 2007 Brad Schick, brad at gmail . com
+# Copyright 2008 Steve Borho <steve@borho.org>
#
-# This software may be used and distributed according to the terms
-# of the GNU General Public License, incorporated herein by reference.
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import os
import threading
|
@@ -1,8 +1,10 @@ + # gtklib.py - miscellaneous PyGTK classes and functions for TortoiseHg
#
-# miscellaneous PyGTK classes and functions for TortoiseHg
+# Copyright 2008 TK Soh <teekaysoh@gmail.com>
+# Copyright 2009 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import os
import sys
|
@@ -1,8 +1,9 @@ - #
# guess.py - TortoiseHg's dialogs for detecting copies and renames
#
-# Copyright (C) 2009 Steve Borho <steve@borho.org>
+# 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 os
import sys
|
@@ -1,8 +1,10 @@ + # hgcmd.py - A simple dialog to execute random command for TortoiseHg
#
-# A simple dialog to execute random command for TortoiseHg
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import gobject
|
@@ -1,9 +1,10 @@ - #
# hgemail.py - TortoiseHg's dialog for sending patches via email
#
-# Copyright (C) 2007 Steve Borho <steve@borho.org>
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 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 os
import sys
|
@@ -1,8 +1,9 @@ - #
# hgignore.py - TortoiseHg's dialog for editing .hgignore
#
-# Copyright (C) 2008-2009 Steve Borho <steve@borho.org>
+# Copyright 2008 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 os
import gtk
|
@@ -1,8 +1,9 @@ + # hginit.py - TortoiseHg dialog to initialize a repo
#
-# TortoiseHg dialog to initialize a repo
+# Copyright 2008 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2008 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import os
import gtk
|
|
|
- # shelve.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, incorporated herein by reference.
+# 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
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)
try:
ret = patch.applydiff(ui, fp, files, strip=strip,
reverse=reverse)
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]...')),
}
|
@@ -1,8 +1,9 @@ + # hgthread.py - Gtk UI class TortoiseHg
#
-# Gtk UI class TortoiseHg
+# Copyright 2009 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import Queue
|
@@ -1,7 +1,10 @@ - # front-end script for TortoiseHg dialogs
+# hgtk.py - front-end script for TortoiseHg dialogs
#
-# Copyright (C) 2008-9 Steve Borho <steve@borho.org>
-# Copyright (C) 2008 TK Soh <teekaysoh@gmail.com>
+# Copyright 2008 Steve Borho <steve@borho.org>
+# Copyright 2008 TK Soh <teekaysoh@gmail.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
shortlicense = '''
Copyright (C) 2009 Steve Borho <steve@borho.org>.
|
@@ -1,9 +1,10 @@ - #
# history.py - Changelog dialog for TortoiseHg
#
# Copyright 2007 Brad Schick, brad at gmail . com
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2008 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 os
import gtk
@@ -841,8 +842,5 @@ 'date':None, 'only_merges':None, 'prune':[], 'git':False,
'verbose':False, 'include':[], 'exclude':[]
}
- root = paths.find_root()
- canonpats = []
- for f in pats:
- canonpats.append(util.canonpath(root, os.getcwd(), f))
- return GLog(ui, None, None, canonpats, cmdoptions)
+ pats = hglib.canonpaths(pats)
+ return GLog(ui, None, None, pats, cmdoptions)
|
@@ -1,8 +1,10 @@ - #
# logfilter.py - TortoiseHg's dialog for defining log filter criteria
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 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 os
import gtk
|
@@ -1,3 +1,10 @@ + # treemodel.py - changelog viewer data model
+#
+# Copyright 2008 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.
+
''' Mercurial revision DAG visualization library
Implements a gtk.TreeModel which visualizes a Mercurial repository
|
@@ -1,3 +1,10 @@ + # treeview.py - changelog viewer implementation
+#
+# Copyright 2008 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.
+
''' Mercurial revision DAG visualization library
Implements a gtk.TreeModel which visualizes a Mercurial repository
|
@@ -1,8 +1,10 @@ - #
# merge.py - TortoiseHg's dialog for merging revisions
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 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 os
import gtk
|
@@ -1,9 +1,10 @@ + # recovery.py - Repository recovery dialog for TortoiseHg
#
-# Repository recovery dialog for TortoiseHg
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007 Steve Borho <steve@borho.org>
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import gobject
|
@@ -1,8 +1,9 @@ - #
# rename.py - TortoiseHg's dialogs for handling renames
#
-# Copyright (C) 2009 Steve Borho <steve@borho.org>
+# 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
|
@@ -1,9 +1,10 @@ + # serve.py - TortoiseHg dialog to start web server
#
-# TortoiseHg dialog to start web server
+# Copyright 2007 Steve Borho <steve@borho.org>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
#
-# Copyright (C) 2007 Steve Borho <steve@borho.org>
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import gobject
|
@@ -1,11 +1,11 @@ - #
# status.py - status dialog for TortoiseHg
#
# Copyright 2007 Brad Schick, brad at gmail . com
-# Copyright (C) 2007-8 TK Soh <teekaysoh@gmail.com>
-# Copyright (C) 2008-9 Steve Borho <steve@borho.org>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2008 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 os
import cStringIO
|
@@ -1,9 +1,10 @@ + # synch.py - Repository synchronization dialog for TortoiseHg
#
-# Repository synchronization dialog for TortoiseHg
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007 Steve Borho <steve@borho.org>
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import gobject
|
@@ -1,8 +1,10 @@ + # tagadd.py - TortoiseHg dialog to add tag
#
-# TortoiseHg dialog to add tag
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 Steve Borho <steve@borho.org>
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import os
import gtk
|
@@ -1,8 +1,9 @@ - #
# taskbarui.py - User interface for the TortoiseHg taskbar app
#
-# Copyright (C) 2009 Steve Borho <steve@borho.org>
+# 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 os
import gtk
|
@@ -1,9 +1,9 @@ - #_
-# Configuration dialog for TortoiseHg and Mercurial
+# thgconfig.py - Configuration dialog for TortoiseHg and Mercurial
#
-# Copyright (C) 2008-9 Steve Borho <steve@borho.org>
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 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 gtk
import os
|
@@ -1,10 +1,11 @@ - #
# thgshelve.py - commit dialog for TortoiseHg
#
# Copyright 2007 Brad Schick, brad at gmail . com
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-# Copyright (C) 2009 Steve Borho <steve@borho.org>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 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 os
import gtk
|
@@ -1,8 +1,9 @@ - #
# thgstatus.py - update TortoiseHg status cache
#
-# Copyright (C) 2009 Adrian Buehlmann
+# Copyright 2009 Adrian Buehlmann
#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
'''update TortoiseHg status cache'''
|
@@ -1,8 +1,10 @@ - #
# update.py - TortoiseHg's dialog for updating repo
#
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2007 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 os
import gtk
|
@@ -1,11 +1,9 @@ # visdiff.py - launch external visual diff tools
#
-# Copyright 2009 Steve Borho
+# Copyright 2009 Steve Borho <steve@borho.org>
#
-# Based on extdiff extension for Mercurial
-#
-# This software may be used and distributed according to the terms
-# of the GNU General Public License, incorporated herein by reference.
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import gtk
import gobject
@@ -276,8 +274,4 @@ return tools
def run(ui, *pats, **opts):
- root = paths.find_root()
- canonpats = []
- for f in pats:
- canonpats.append(util.canonpath(root, os.getcwd(), f))
- return FileSelectionDialog(canonpats, opts)
+ return FileSelectionDialog(hglib.canonpaths(pats), opts)
|
@@ -1,3 +1,10 @@ + # cachethg.py - overlay/status cache
+#
+# Copyright 2008 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 os
import sys
|
@@ -1,3 +1,10 @@ + # debugthg.py - debugging library for TortoiseHg shell extensions
+#
+# Copyright 2008 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.
+
debugging = ''
try:
import _winreg
|
@@ -1,10 +1,9 @@ - """
-hglib.py
- Copyright (C) 2007 Steve Borho <steve@borho.org>
-
-This software may be used and distributed according to the terms
-of the GNU General Public License, incorporated herein by reference.
-"""
+# hglib.py - Mercurial API wrappers for TortoiseHg
+#
+# Copyright 2007 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 os
import sys
@@ -113,6 +112,25 @@ if 'mq' in repo.__dict__: #do not create if it does not exist
repo.mq.invalidate()
+def canonpaths(list):
+ 'Get canonical paths (relative to root) for list of files'
+ canonpats = []
+ cwd = os.getcwd()
+ root = paths.find_root(cwd)
+ for f in list:
+ try:
+ canonpats.append(util.canonpath(root, cwd, f))
+ except util.Abort:
+ # Attempt to resolve case folding conflicts.
+ fu = f.upper()
+ cwdu = cwd.upper()
+ if fu.startswith(cwdu):
+ canonpats.append(util.canonpath(root, cwd, f[len(cwd+os.sep):]))
+ else:
+ # May already be canonical
+ canonpats.append(f)
+ return canonpats
+
def hgcmd_toq(path, q, *args):
'''
Run an hg command in a background thread, pipe all output to a Queue
|
@@ -1,10 +1,9 @@ - """
-i18n.py
- Copyright (C) 2009 Steve Borho <steve@borho.org>
-
-This software may be used and distributed according to the terms
-of the GNU General Public License, incorporated herein by reference.
-"""
+# i18n.py - TortoiseHg internationalization code
+#
+# 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 gettext, sys
from gettext import gettext as _
|
@@ -1,7 +1,9 @@ - # Published under the GNU GPL, v2 or later.
-# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
-# Copyright (C) 2007 Henry Ludemann <misc@hl.id.au>
-# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
+# menuthg.py - TortoiseHg shell extension menu
+#
+# 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 os
|
@@ -1,10 +1,9 @@ - """
-paths.py
- Copyright (C) 2009 Steve Borho <steve@borho.org>
-
-This software may be used and distributed according to the terms
-of the GNU General Public License, incorporated herein by reference.
-"""
+# paths.py - TortoiseHg path utilities
+#
+# 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.
try:
from config import icon_path, bin_path, license_path, locale_path
|
@@ -1,10 +1,10 @@ - """
-settings.py - TortoiseHg dialog settings library
- Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-
-This software may be used and distributed according to the terms
-of the GNU General Public License, incorporated herein by reference.
-"""
+# settings.py - TortoiseHg dialog settings library
+#
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# 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 os
import cPickle
|
@@ -1,10 +1,10 @@ - """
-shlib.py - TortoiseHg shell utilities
- Copyright (C) 2007 TK Soh <teekaysoh@gmail.com>
-
-This software may be used and distributed according to the terms
-of the GNU General Public License, incorporated herein by reference.
-"""
+# shlib.py - TortoiseHg shell utilities
+#
+# Copyright 2007 TK Soh <teekaysoh@gmail.com>
+# Copyright 2008 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 os
import sys
|
@@ -1,6 +1,9 @@ # Interuptible threads
#
# http://sebulba.wikispaces.com/recipe+thread2
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
import threading
import inspect
|
@@ -1,10 +1,9 @@ - """
-version.py - TortoiseHg version
- Copyright (C) 2009 Steve Borho <steve@borho.org>
-
-This software may be used and distributed according to the terms
-of the GNU General Public License, incorporated herein by reference.
-"""
+# version.py - TortoiseHg version
+#
+# 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.
from thgutil.i18n import _
|
Loading...