Martin Geisler <mg@aragost.com> [Tue, 31 May 2011 08:47:16 +0200] rev 14464
mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
The internal list representation of guards was leaking into the
output. The guards were always printed using repr(guard) and that
style was kept.
When "hg qguard -l" prints several guards for a patch, it does so by
joining the names with " " and that style was used for the error
messages too.
Martin Geisler <mg@aragost.com> [Fri, 27 May 2011 12:42:36 +0200] rev 14463
hg: remove underscores in clone function
Idan Kamara <idankk86@gmail.com> [Sun, 29 May 2011 13:43:50 +0300] rev 14462
hg-ssh: fix dispatch call to use dispatch.request()
08bfec2ef031 changed dispatch.dispatch() to accept a
request object instead of a list of arguments
Martin Geisler <mg@lazybytes.net> [Mon, 30 May 2011 11:18:47 +0200] rev 14461
gendoc: config help topic is in hgrc.5, do not include it in hg.1
Martin Geisler <mg@lazybytes.net> [Mon, 30 May 2011 11:15:25 +0200] rev 14460
doc: improve merge between hgrc.5 and config help topic
Martin Geisler <mg@lazybytes.net> [Mon, 30 May 2011 11:14:31 +0200] rev 14459
doc: rebuild hgrc.5 man and HTML page when help/config changes
Martin Geisler <mg@lazybytes.net> [Mon, 30 May 2011 10:35:43 +0200] rev 14458
help/config: separate terms with a blank line
This makes it easier for translators since they can then translate
each term individually.
Martin Geisler <mg@lazybytes.net> [Mon, 30 May 2011 10:30:46 +0200] rev 14457
help/config: fix rendering of definition list
Without the blank line, the minirst parser renders
Term-1
Line-1
Line-2
Term-2
Line-1
as
Term-1
Line-1
Line-2 Term-2 Line-1
because the second term is seen as a paragraph.
Yun Lee <yun.lee.bj@gmail.com> [Mon, 30 May 2011 10:21:39 +0200] rev 14456
help: move part of hgrc.5 man page config help topic
Yun Lee <yun.lee.bj@gmail.com> [Mon, 30 May 2011 10:05:39 +0200] rev 14455
hgrc.5: make minirst find headings correctly
The minirst parser is stricter than Docutils here and require a blank
after a heading. Otherwise the heading is classified as a paragraph.
Patrick Mezard <pmezard@gmail.com> [Sat, 28 May 2011 11:44:27 +0200] rev 14454
run-tests: fix --blacklist (broken by
95715c2f90bf)
Patrick Mezard <pmezard@gmail.com> [Fri, 27 May 2011 21:50:11 +0200] rev 14453
patch: do not patch unknown files (
issue752)
Patrick Mezard <pmezard@gmail.com> [Fri, 27 May 2011 21:50:10 +0200] rev 14452
patch: use temporary files to handle intermediate copies
git patches may require copies to be handled out-of-order. For instance, take
the following sequence:
* modify a
* copy a into b
Here, we have to generate b from a before its modification. To do so,
applydiff() was scanning for copy metadata and performing the copies before
processing the other changes in-order. While smart and efficient, this approach
complicates things by handling file copies and file creations at different
places and times. While a new file must not exist before being patched a copied
file already exists before applying the first hunk.
Instead of copying the files at their final destination before patching, we
store them in a temporary file location and retrieve them when patching. The
filestore always stores file content in real files but nothing prevents adding
a cache layer. The filestore class was kept separate from fsbackend for at
least two reasons:
- This class is likely to be reused as a temporary result store for a future
repository patching call (entries just have to be extended to contain copy
sources).
- Delegating this role to backends might be more efficient in a repository
backend case: the source files are already available in the repository itself
and do not need to be copied again. It also means that third-parties backend
would have to implement two other methods. If we ever decide to merge the
filestore feature into backend, a minimalistic approach would be to compose
with filestore directly. Keep in mind this copy overhead only applies for
copy/rename sources, and may even be reduced to copy sources which have to
handled ahead of time.
Patrick Mezard <pmezard@gmail.com> [Fri, 27 May 2011 21:50:09 +0200] rev 14451
patch: refactor file creation/removal detection
The patcher has to know if a file is being created or removed to check if the
target already exists, or to actually unlink the file when a hunk emptying it
is applied. This was done by embedding the creation/removal information in the
first (and only) hunk attached to the file.
There are two problems with this approach:
- creation/removal is really a property of the file being patched and not its
hunk.
- for regular patches, file creation cannot be deduced at parsing time: there
are case where the *stripped* file paths must be compared. Modifying hunks
after their creation is clumsy and prevent further refactorings related to
copies handling.
Instead, we delegate this job to selectfile() which has all the relevant
information, and remove the hunk createfile() and rmfile() methods.
Adrian Buehlmann <adrian@cadifra.com> [Fri, 27 May 2011 15:59:52 +0200] rev 14450
commands.remove: don't use workingctx.remove(list, unlink=True)
workingctx.remove(list, unlink=True) is unsuited here, because it does too
much: it also unlinks added files. But the command 'hg remove' is specified
to *never* unlink added files.
Instead, we now unlink the files at the commands.remove level (if --after was
not specified) and use workingctx.forget for all files.
As an added bonus, this happens to eliminate a wlock acquire/release pair,
since the previous implementation caused
acquire wlock
release wlock
acquire wlock
release wlock
where the first pair of acquire/release was caused by the workingctx.forget
call, and the second by the workingctx.remove call.
Idan Kamara <idankk86@gmail.com> [Fri, 27 May 2011 17:51:16 +0300] rev 14449
tests: add a test to check for duplicate command options
Idan Kamara <idankk86@gmail.com> [Fri, 27 May 2011 17:49:54 +0300] rev 14448
mq: allow --mq for qrecord
Idan Kamara <idankk86@gmail.com> [Fri, 27 May 2011 17:46:48 +0300] rev 14447
run-tests: fix --blacklist with jobs > 1
filter blacklisted tests before partitioning them
to the children.
maintains the 'Skipped...' output but not the 's'.
Idan Kamara <idankk86@gmail.com> [Fri, 27 May 2011 17:46:47 +0300] rev 14446
run-tests: slightly simplify blacklist check
Matt Mackall <mpm@selenic.com> [Fri, 27 May 2011 08:50:27 -0500] rev 14445
coal: use preformatted text for descriptions (
issue2835)
The coal style was broken here by an earlier change to paper, which
shares files.
Adrian Buehlmann <adrian@cadifra.com> [Fri, 27 May 2011 10:03:29 +0200] rev 14444
rebase: add option --tool/-t for 'pull --rebase'
This makes 'pull --rebase' consistent with the merge command, which already
provides that option to control the merges
Martin Geisler <mg@aragost.com> [Fri, 27 May 2011 11:01:44 +0200] rev 14443
subrepo: refactor writestate for clarity
Matt Mackall <mpm@selenic.com> [Thu, 26 May 2011 17:15:35 -0500] rev 14442
cmdutil: make private copies of option lists to avoid sharing monkeypatches
Idan Kamara <idankk86@gmail.com> [Thu, 26 May 2011 19:00:47 +0300] rev 14441
record: fix options placeholder
Paul Molodowitch <pm@stanfordalumni.org> [Wed, 25 May 2011 08:38:58 -0700] rev 14440
subrepo: bare git repos considered dirty
Currently, if there is a bare git subrepo, but it is at the "right"
revision, calling dirty() will error because diff-index does not work
on bare repos. This patch makes it so bare subrepos are always
considered dirty.
Idan Kamara <idankk86@gmail.com> [Thu, 26 May 2011 00:53:23 +0300] rev 14439
dispatch: use the request to store the ui object
and check if we got one before creating.
note that the contents of the ui object might change after
dispatch() returns (by options passed through --config for example),
to ensure it doesn't, pass a copy() of it.
Idan Kamara <idankk86@gmail.com> [Thu, 26 May 2011 00:44:11 +0300] rev 14438
dispatch: wrap dispatch related information in a request class
currently only stores the arguments.
Steven Brown <StevenGBrown@gmail.com> [Thu, 26 May 2011 22:51:02 +0800] rev 14437
patch: restore the previous output of 'diff --stat'
Restore the previous diffstat behaviour of scaling by the maximum number of
changes to a single file. Changeset
f03f08240c32 modified the diffstat to be
scaled by the total number of changes. This seems to have been unintentional.
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Tue, 24 May 2011 17:48:16 +0200] rev 14436
wireproto: enable optional args for known() for future extensibility
Firstly, I think we should do this for all new wire commands, just
to be on the safe side. So I want to get this into the 1.9 release.
Secondly, there actually is potential here that sometimes the server
can know that the number of its nodes which can possibly still be
undecided on the client is small. It might then just send them along
directly (cutting short the end game). This, however, requires
walking the graph on the server, which can be expensive, so for the
moment we're not actually doing it.
Matt Mackall <mpm@selenic.com> [Thu, 26 May 2011 17:15:35 -0500] rev 14435
context: make forget work like commands.forget
Switch users of wctx.delete(..., False) to forget.
Matt Mackall <mpm@selenic.com> [Thu, 26 May 2011 17:15:35 -0500] rev 14434
dirstate: rename forget to drop
It has substantially different semantics from forget at the command
layer, so change it to avoid confusion.
We can't simply combine it with remove because we need to explicitly
drop non-added files in some cases like commit.
Martin Geisler <mg@aragost.com> [Thu, 26 May 2011 10:46:34 +0200] rev 14433
minirst: read test input from stdin
Sune Foldager <cryo@cyanite.org> [Thu, 26 May 2011 11:11:34 +0200] rev 14432
tests: update monotone version requirement
Patrick Mezard <pmezard@gmail.com> [Wed, 25 May 2011 10:06:17 +0200] rev 14431
test-git-import: test patching existing copy targets
Matt Mackall <mpm@selenic.com> [Tue, 24 May 2011 17:30:00 -0500] rev 14430
httprepo: handle large lengths by bypassing the len() operator
Adrian Buehlmann <adrian@cadifra.com> [Tue, 24 May 2011 14:52:23 +0200] rev 14429
workingctx.remove: don't stat files again after unlinking
we already know at this point that they have been unlinked
Matt Mackall <mpm@selenic.com> [Tue, 24 May 2011 17:16:31 -0500] rev 14428
httprepo: send URL redirection notices to stderr (
issue2828)
Idan Kamara <idankk86@gmail.com> [Tue, 24 May 2011 19:17:22 +0300] rev 14427
record: alias qrecord to qnew -i/--interactive
Idan Kamara <idankk86@gmail.com> [Tue, 24 May 2011 19:17:19 +0300] rev 14426
record: add qrefresh -i/--interactive
interactively select changes to refresh
Idan Kamara <idankk86@gmail.com> [Tue, 24 May 2011 19:17:04 +0300] rev 14425
record: add an option to backup all wc modifications
Also, don't create a backup dir if we have no files to backup.
This is essential for qrefresh --interactive. Since we can't
select individual files to qrefresh without eliminating already
present changes, we have to backup all changes in the working
copy to avoid refreshing unaccepted hunks.
(thanks to Patrick for the idea)
Idan Kamara <idankk86@gmail.com> [Tue, 24 May 2011 19:17:02 +0300] rev 14424
record: check patch name is valid before prompting in qrecord
Idan Kamara <idankk86@gmail.com> [Tue, 24 May 2011 19:16:51 +0300] rev 14423
mq: use checkpatchname
This also fixes a bug where qrename would allow
renaming a patch to a reserved name.
Idan Kamara <idankk86@gmail.com> [Tue, 24 May 2011 19:16:51 +0300] rev 14422
mq: wrap patch file name checks in a function
Augie Fackler <durin42@gmail.com> [Tue, 24 May 2011 13:30:10 -0500] rev 14421
pure parsers: properly detect corrupt index files
This new Python code should be equivalent in behavior to the if
statement at line 312 of parsers.c. Without this, the pure-python
parsers improperly ignore truncated revlogs as created in
test-verify.t.
Adrian Buehlmann <adrian@cadifra.com> [Tue, 24 May 2011 14:08:20 +0200] rev 14420
workingctx: unlink paths while holding the wlock
Martin Geisler <mg@aragost.com> [Tue, 24 May 2011 16:12:01 +0200] rev 14419
wireproto: do not hash when heads == ['force']
Changeset
88f0e41d8802 introduced the unbundlehash capability and
unconditionally hashed the heads on the client side. By mistake, the
heads were also cased in the heads == ['force'] case.
Patrick Mezard <pmezard@gmail.com> [Tue, 24 May 2011 14:21:04 +0200] rev 14418
patch: remove EOL support from linereader class
This was only used when reading patched files which is now done by backends.
Matt Mackall <mpm@selenic.com> [Mon, 23 May 2011 22:49:10 -0500] rev 14417
subrepo: handle local added subrepo case correctly
Idan Kamara <idankk86@gmail.com> [Mon, 23 May 2011 23:22:47 +0300] rev 14416
graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com> [Mon, 23 May 2011 23:09:00 +0300] rev 14415
extensions: raise when trying to find an extension that failed to load
extensions that depend on other extensions (such as record) use this pattern
to check if the dependant extension is available:
try:
mq = extensions.find('mq')
except KeyError:
return
but since if an error occurs while loading an extension it leaves its entry
in the _extensions map as None, we want to raise in that situation too.
(rather than adding another check if the return value is None)
Adrian Buehlmann <adrian@cadifra.com> [Mon, 23 May 2011 15:56:31 +0200] rev 14414
remove: clarify help text about added files never being deleted from disk
Adrian Buehlmann <adrian@cadifra.com> [Wed, 18 May 2011 09:12:27 +0200] rev 14413
pure: provide more correct implementation of posixfile for Windows
requires ctypes
Why is posixfile a class?
Because the implementation needs to use the Python library call os.fdopen [1],
which sets the 'name' attribute on the Python file object it creates to the
mostly meaningless string '<fdopen>', since file descriptors don't have a name.
But users of posixfile depend on the name attribute [2] being set to a proper
value, like Python's built-in 'open' function sets it on file objects.
Python file's name attribute is read-only, so we can't just assign to it after
the file object has alrady been created.
To solve this problem, we save the name of the file on a wrapper object,
and delegate the file function calls to the wrapped (private) file object
using __getattr__.
[1] http://docs.python.org/library/os.html#os.fdopen
[2] http://docs.python.org/library/stdtypes.html#file.name
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Mon, 23 May 2011 20:35:10 +0200] rev 14412
bundlerepo: make getremotechanges support filtering of incoming
Extensions can hook discovery.findcommonincoming to filter out unwanted remote
changesets. This patch makes getremotechanges respect the changed remote heads
returned by such extensions.
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Mon, 23 May 2011 20:32:29 +0200] rev 14411
tests: add tests for discovery/pull without cgsubset
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Mon, 23 May 2011 20:31:39 +0200] rev 14410
tests: add tests for partial pulls with treediscovery
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Mon, 23 May 2011 20:31:04 +0200] rev 14409
tests: support multiple caps in notcapable
Idan Kamara <idankk86@gmail.com> [Sun, 22 May 2011 16:10:03 +0300] rev 14408
record: use cmdutil.command decorator
Idan Kamara <idankk86@gmail.com> [Sun, 22 May 2011 16:10:02 +0300] rev 14407
record: suggest the right command when running non interactively
Adrian Buehlmann <adrian@cadifra.com> [Sun, 22 May 2011 11:03:15 +0200] rev 14406
applyupdates: audit merged files
protects changing flags on merged files (util.setflags call on line 341)
Adrian Buehlmann <adrian@cadifra.com> [Sat, 21 May 2011 23:21:12 +0200] rev 14405
applyupdates: audit path on flag changes
we're using the auditor of the repo wopener, since this is a path that belongs
to the tree we're updating to
Adrian Buehlmann <adrian@cadifra.com> [Sat, 21 May 2011 23:13:59 +0200] rev 14404
opener: add audit function
Matt Mackall <mpm@selenic.com> [Sat, 21 May 2011 15:09:15 -0500] rev 14403
templatekw: use diffstatsum in diffstat keyword
Matt Mackall <mpm@selenic.com> [Sat, 21 May 2011 15:06:38 -0500] rev 14402
patch: use diffstatsum in diffstat
Matt Mackall <mpm@selenic.com> [Sat, 21 May 2011 15:06:36 -0500] rev 14401
patch: add diffstatsum helper
Matt Mackall <mpm@selenic.com> [Sat, 21 May 2011 15:01:28 -0500] rev 14400
diffstatdata: no longer a generator
This produces a smallish amount of data and all consumers needed to
buffer it anyway.
Adrian Buehlmann <adrian@cadifra.com> [Wed, 18 May 2011 21:31:40 +0200] rev 14399
add new option --all to manifest command
prints a list of all files in all revisions of the repo
obsoletes the cifiles extension
Adrian Buehlmann <adrian@cadifra.com> [Sat, 21 May 2011 02:05:00 +0200] rev 14398
applyupdates: audit unlinking of renamed files and directories
Idan Kamara <idankk86@gmail.com> [Fri, 20 May 2011 21:04:45 +0300] rev 14397
patchbomb: pass --git argument to diffstat
Idan Kamara <idankk86@gmail.com> [Fri, 20 May 2011 21:20:24 +0300] rev 14396
mq: strip all leading slashes from url when importing
When trying to import a url that ends with a slash
os.path.basename() would return an empty string. So
when seeing a leading slash, remove it and infer the
patch name from the remaining url.
e.g. `hg qimport http://paste.pocoo.org/raw/xxx/`
deduced '.' to be the patch name. Now we'll deduce 'xxx'.
Idan Kamara <idankk86@gmail.com> [Fri, 20 May 2011 21:19:33 +0300] rev 14395
mq: check patch name is valid before reading imported file
Matt Mackall <mpm@selenic.com> [Sat, 21 May 2011 15:01:28 -0500] rev 14394
tests: update monotone output for v1.0 changes
Matt Mackall <mpm@selenic.com> [Sat, 21 May 2011 15:01:28 -0500] rev 14393
revlog: stop exporting node.short
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:55:13 +0200] rev 14392
patch: fast-path git case in selectfile()
We avoid a lot of complicated heuristics in git cases, where these heurestics
may even be broken when copies are involved.
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:49:43 +0200] rev 14391
patch: unify backend file access interface
- Rename readlines() into getfile(), return data and mode
- Make setfile() write a data buffer instead of lines, make mode mandatory.
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14390
patch: merge backend setmode() into writelines()
Copy handling will be easier to handle in a single method.
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14389
patch: stop modifying gitpatch objects
gitpatch objects emitted by iterhunks() were referencing file paths unmodified
from the input patch. _applydif() made them usable by modifying the gitpatch
objects in-place with specified path strip level. The same modified objects
were then reused by iterhunks() generator. _applydiff() now copies and update
the paths which completely decouples both routines.
As a side effect, the "git" event now receives only metadata about
copies/renames to perform the necessary copies ahead of time. Other actions are
handled in the "file" event.
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14388
patch: stop handling hunkless git blocks out of stream
Patch changes are emitted by iterhunks() in two separate events: 'file' when
hunks have to be applied and 'git' to describe other modifications like copies
or mode changes. Note that a file which mode is changed and which content is
modified by the same patch will be emitted in both events. It is more
convenient to handle all file modifications in a single event. This patch
"zips" git actions with regular changes so both kinds can be emitted at the
same place.
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14387
patch: reindent code
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14386
patch: unify iterhunks() afile/bfile handling
git afile/bfile are extracted twice, once when reading a 'diff --git', and
again when reading a unified hunk. The problem is not all git blocks have
unified hunks (renames just have metadata) and they were not extracted the same
way. This is what this patch unifies.
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14385
patch: git metadata was ignored if strip > 1
gitpatch objects emitted by iterhunks() are modified in place by applydiff().
Processing them earlier improves iterhunks() isolation. applydiff() modifying
them should still be fixed though.
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14384
patch: construct and parse binary hunks at the same time
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14383
patch: refactor iterhunks() regular and binary files emission
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14382
patch: remove patch.patch() cwd argument
Patrick Mezard <pmezard@gmail.com> [Thu, 19 May 2011 22:44:01 +0200] rev 14381
patch: merge _updatedir() into externalpatch()
Martin Geisler <mg@aragost.com> [Thu, 19 May 2011 18:10:03 +0200] rev 14380
merge with stable
Martin Geisler <mg@aragost.com> [Thu, 19 May 2011 18:09:25 +0200] rev 14379
changelog: convert user and desc from local encoding early
Failing to do so makes it impossible to use the memctx API to create a
changeset with a commit message or username outside of the current
encoding.encoding setting.
Martin Geisler <mg@aragost.com> [Thu, 19 May 2011 16:57:14 +0200] rev 14378
merge crew with main
Brendan Cully <brendan@kublai.com> [Wed, 18 May 2011 23:20:26 -0700] rev 14377
clone: make default path absolute for all local paths
This fixes the default path when cloning local repositories with hg-git, since
hg-git cancopy() is false even for local repositories.
Augie Fackler <durin42@gmail.com> [Tue, 17 May 2011 10:28:03 -0500] rev 14376
httpclient: import revision
fc731618702a of py-nonblocking-http
Augie Fackler <durin42@gmail.com> [Mon, 16 May 2011 16:59:45 -0500] rev 14375
httpconnection: improved logging formatting
I had to use this debugging output for the first time recently when
looking for a problem, and the lack of good formatting made things
difficult.
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Tue, 17 May 2011 00:46:52 +0200] rev 14374
bash_completion: enable alias auto-complete
When auto-completing, set HGPLAINEXCEPT=alias to list aliases
in the suggestions.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Tue, 17 May 2011 00:17:52 +0200] rev 14373
ui: enable alias exception when reading config in plain mode
When in plain mode with "alias" present in the exception list,
keep the aliases. This will be used later to enable auto-completion.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> [Tue, 17 May 2011 00:08:51 +0200] rev 14372
ui: test plain mode against exceptions
Let ui.plain() accept an optional parameter in the form of a feature
name (as a string) to exclude from plain mode.
The result of ui.plain is now:
- False if HGPLAIN is not set or the requested feature is in HGPLAINEXCEPT
- True otherwise
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Matt Mackall <mpm@selenic.com> [Wed, 18 May 2011 17:05:30 -0500] rev 14371
revlog: drop base() again
deltaparent does what's needed, and more "portably".
Patrick Mezard <pmezard@gmail.com> [Wed, 18 May 2011 23:48:17 +0200] rev 14370
patch: add a workingbackend dirstate layer on top of fsbackend
_updatedir() is no longer used by internalpatch()
The change in test-mq-missingfiles.t comes from workingbackend not considering
the missing 'b' file as changed, thus not calling addremove() on it.
Patrick Mezard <pmezard@gmail.com> [Wed, 18 May 2011 23:48:13 +0200] rev 14369
patch: handle binary copies as regular ones
This introduces a performance regression for large files, as they will be
copied just to be clobbered afterwards since binary patching does not use
deltas. But it simplifies the code and the previous optimization will be
reintroduced later in a better way.
Patrick Mezard <pmezard@gmail.com> [Wed, 18 May 2011 23:48:13 +0200] rev 14368
patch: remove files while patching, not in updatedir()
At this point, updatedir() only reads the working directory and update the
dirstate.
Patrick Mezard <pmezard@gmail.com> [Wed, 18 May 2011 23:48:13 +0200] rev 14367
patch: set desired mode when patching, not in updatedir()
This patch and the following aim at merging _updatedir() actions into
_applydiff().
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.