Patrick Mezard <pmezard@gmail.com> [Wed, 18 May 2011 23:48:13 +0200] rev 14366
patch: stop changing current directory before patching
_applydiff() patcher argument was added to help hgsubversion like extension
monkeypatching the patching process. While it could be removed at this point, I
prefer to leave it until patch.py is completely refactored and there is a valid
and tested alternative.
Sune Foldager <cryo@cyanite.org> [Wed, 18 May 2011 23:26:26 +0200] rev 14365
revlog: linearize created changegroups in generaldelta revlogs
This greatly improves the speed of the bundling process, and often reduces the
bundle size considerably. (Although if the repository is already ordered, this
has little effect on both time and bundle size.)
For non-generaldelta clients, the reduced bundle size translates to a reduced
repository size, similar to shrinking the revlogs (which uses the exact same
algorithm). For generaldelta clients the difference is minor.
When the new bundle format comes, reordering will not be necessary since we
can then store the deltaparent relationsships directly. The eventual default
behavior for clients and servers is presented in the table below, where "new"
implies support for GD as well as the new bundle format:
old client new client
old server old bundle, no reorder old bundle, no reorder
new server, non-GD old bundle, no reorder[1] old bundle, no reorder[2]
new server, GD old bundle, reorder[3] new bundle, no reorder[4]
[1] reordering is expensive on the server in this case, skip it
[2] client can choose to do its own redelta here
[3] reordering is needed because otherwise the pull does a lot of extra
work on the server
[4] reordering isn't needed because client can get deltabase in bundle
format
Currently, the default is to reorder on GD-servers, and not otherwise. A new
setting, bundle.reorder, has been added to override the default reordering
behavior. It can be set to either 'auto' (the default), or any true or false
value as a standard boolean setting, to either force the reordering on or off
regardless of generaldelta.
Some timing data from a relatively branch test repository follows. All
bundling is done with --all --type none options.
Non-generaldelta, non-shrunk repo:
-----------------------------------
Size: 276M
Without reorder (default):
Bundle time: 14.4 seconds
Bundle size: 939M
With reorder:
Bundle time: 1 minute, 29.3 seconds
Bundle size: 381M
Generaldelta, non-shrunk repo:
-----------------------------------
Size: 87M
Without reorder:
Bundle time: 2 minutes, 1.4 seconds
Bundle size: 939M
With reorder (default):
Bundle time: 25.5 seconds
Bundle size: 381M
Sune Foldager <cryo@cyanite.org> [Wed, 18 May 2011 23:11:34 +0200] rev 14364
revlogdag: add linearize function
See the docstring for a detailed explanation. The linearizer was originally
written by Benoit Boissinot.
Martin Geisler <mg@lazybytes.net> [Wed, 18 May 2011 19:30:17 +0200] rev 14363
localrepo, sshrepo: use Boolean create argument in __init__
Martin Geisler <mg@lazybytes.net> [Wed, 18 May 2011 19:25:34 +0200] rev 14362
commands: replace 'x = f(); return x' with 'return f()'
Martin Geisler <mg@lazybytes.net> [Wed, 18 May 2011 19:22:55 +0200] rev 14361
merge with stable
Martin Geisler <mg@aragost.com> [Wed, 18 May 2011 15:13:26 +0200] rev 14360
subrepo: respect non-default path for incoming/outgoing
Push and pull set repo._subtoppath before pushing or pulling subrepos.
The incoming and outgoing commands needed to do the same.
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 18 May 2011 15:45:57 +0200] rev 14359
run-tests: print a newline after all warnings
Thomas Arendsen Hein <thomas@intevation.de> [Wed, 18 May 2011 15:41:03 +0200] rev 14358
annotate: fix alignment of columns in front of line numbers (
issue2807)
Martin Geisler <mg@aragost.com> [Wed, 18 May 2011 09:56:27 +0200] rev 14357
merge with stable
Martin Geisler <mg@aragost.com> [Wed, 18 May 2011 09:31:19 +0200] rev 14356
revset: the name is optional for the tag predicate
Martin Geisler <mg@aragost.com> [Wed, 18 May 2011 09:28:11 +0200] rev 14355
revset: note case-sensitive match in grep
Martin Geisler <mg@aragost.com> [Wed, 18 May 2011 09:20:52 +0200] rev 14354
revset: note case-insensitive matches in keyword and user
Martin Geisler <mg@aragost.com> [Wed, 18 May 2011 09:15:18 +0200] rev 14353
revset: expand help for contains predicate
Sune Foldager <cryo@cyanite.org> [Wed, 18 May 2011 09:05:18 +0200] rev 14352
patch: remove unused variable to make pyflakes test happy
Patrick Mezard <pmezard@gmail.com> [Tue, 17 May 2011 23:46:38 +0200] rev 14351
patch: add lexists() to backends, use it in selectfile()
At this point, all applydiff() filesystem calls should pass through fsbackend.
Patrick Mezard <pmezard@gmail.com> [Tue, 17 May 2011 23:46:38 +0200] rev 14350
patch: move copyfile() into backends, abstract basedir
Patrick Mezard <pmezard@gmail.com> [Tue, 17 May 2011 23:46:37 +0200] rev 14349
patch: merge makerejlines() into write_rej()
Patrick Mezard <pmezard@gmail.com> [Tue, 17 May 2011 23:46:15 +0200] rev 14348
patch: extract fs access from patchfile into fsbackend
Most filesystem calls are already isolated in patchfile but this is not enough:
renames are performed before patchfile is available and some chmod calls are
even done outside of the applydiff call. Once all these calls are extracted
into a backend class, we can provide cleaner APIs to write to a working
directory context directly into the repository.
Patrick Mezard <pmezard@gmail.com> [Tue, 17 May 2011 23:27:58 +0200] rev 14347
mq: fix qpush changes detection of renamed files
patch.changedfile() was not considering renamed file source as changed.
Augie Fackler <durin42@gmail.com> [Mon, 16 May 2011 16:59:45 -0500] rev 14346
httpconnection: correctly handle redirects from http to https
Previously the connection cache for keepalives didn't keep track of
ssl. This meant that when we connected to an https server after that
same server via http, both on the default port, we'd incorrectly reuse
the non-https connection as the default port meant the connection
cache key was the same.
Adrian Buehlmann <adrian@cadifra.com> [Sun, 15 May 2011 21:33:51 +0200] rev 14345
win32.py: add argtypes and restype
This is a feature of ctypes. Without these, pypy complains with
RuntimeWarning: C function without declared arguments called
RuntimeWarning: C function without declared return type called
As a side effect of specifying restypes, the return value of e.g. CreateFileA
is now implicitly converted to an instance of _HANDLE, so we also need to
change the definition
_INVALID_HANDLE_VALUE = -1
to
_INVALID_HANDLE_VALUE = _HANDLE(-1).value
Otherwise, tests for equality to _INVALID_HANDLE_VALUE in code like
def _getfileinfo(name):
fh = _kernel32.CreateFileA(name, 0,
_FILE_SHARE_READ | _FILE_SHARE_WRITE | _FILE_SHARE_DELETE,
None, _OPEN_EXISTING, 0, None)
if fh == _INVALID_HANDLE_VALUE:
_raiseoserror(name)
would now fail to detect an invalid handle, which in turn would lead to
exceptions raised with wrong errno values, like e.g.
>>> nlinks('missing.txt')
Traceback (most recent call last):
...
OSError: [Errno 9] missing.txt: The handle is invalid.
instead of the correct (as per this patch and before it)
>>> nlinks('missing.txt')
Traceback (most recent call last):
...
OSError: [Errno 2] missing.txt: The system cannot find the file specified.
Adrian Buehlmann <adrian@cadifra.com> [Sun, 15 May 2011 21:27:59 +0200] rev 14344
win32.py: more explicit definition of _STD_ERROR_HANDLE
Matt Mackall <mpm@selenic.com> [Mon, 16 May 2011 17:02:35 -0500] rev 14343
revset: add follow(filename) to follow a filename's history across copies