##// END OF EJS Templates
debugcommands: stub for debugupgraderepo command...
debugcommands: stub for debugupgraderepo command Currently, if Mercurial introduces a new repository/store feature or changes behavior of an existing feature, users must perform an `hg clone` to create a new repository with hopefully the correct/optimal settings. Unfortunately, even `hg clone` may not give the correct results. For example, if you do a local `hg clone`, you may get hardlinks to revlog files that inherit the old state. If you `hg clone` from a remote or `hg clone --pull`, changegroup application may bypass some optimization, such as converting to generaldelta. Optimizing a repository is harder than it seems and requires more than a simple `hg` command invocation. This commit starts the process of changing that. We introduce `hg debugupgraderepo`, a command that performs an in-place upgrade of a repository to use new, optimal features. The command is just a stub right now. Features will be added in subsequent commits. This commit does foreshadow some of the behavior of the new command, notably that it doesn't do anything by default and that it takes arguments that influence what actions it performs. These will be explained more in subsequent commits.

File last commit:

r27336:80214358 default
r30774:eaa56071 default
Show More
diffhelpers.py
62 lines | 1.6 KiB | text/x-python | PythonLexer
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 # diffhelpers.py - pure Python implementation of diffhelpers.c
#
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
Martin Geisler
updated license to be explicit about GPL version 2
r8225 # This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Martin Geisler
pure Python implementation of diffhelpers.c
r7702
Gregory Szorc
diffhelpers: use absolute_import
r27336 from __future__ import absolute_import
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 def addlines(fp, hunk, lena, lenb, a, b):
while True:
todoa = lena - len(a)
todob = lenb - len(b)
num = max(todoa, todob)
if num == 0:
break
for i in xrange(num):
s = fp.readline()
c = s[0]
if s == "\\ No newline at end of file\n":
fix_newline(hunk, a, b)
continue
if c == "\n":
# Some patches may be missing the control char
# on empty lines. Supply a leading space.
s = " \n"
hunk.append(s)
if c == "+":
b.append(s[1:])
elif c == "-":
a.append(s)
else:
b.append(s[1:])
a.append(s)
return 0
def fix_newline(hunk, a, b):
l = hunk[-1]
Benoit Boissinot
fix test-mq-eol under --pure (mimic diffhelper.c behaviour)...
r10551 # tolerate CRLF in last line
if l.endswith('\r\n'):
hline = l[:-2]
else:
hline = l[:-1]
c = hline[0]
Martin Geisler
pure Python implementation of diffhelpers.c
r7702
Brodie Rao
cleanup: use x in (a, b) instead of x == a or x == b
r12387 if c in " +":
Benoit Boissinot
fix test-mq-eol under --pure (mimic diffhelper.c behaviour)...
r10551 b[-1] = hline[1:]
Brodie Rao
cleanup: use x in (a, b) instead of x == a or x == b
r12387 if c in " -":
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 a[-1] = hline
hunk[-1] = hline
return 0
def testhunk(a, b, bstart):
alen = len(a)
blen = len(b)
if alen > blen - bstart:
return -1
for i in xrange(alen):
if a[i][1:] != b[i + bstart]:
return -1
return 0