Dirkjan Ochtman <dirkjan@ochtman.nl> [Thu, 20 Dec 2012 21:26:30 +0100] rev 18111
hook: disable demandimport before importing hooks
This solved an obscure bug for me. In upgrading Distribute on the server, a
patch was added to has a try: import a except ImportError thing that's only
supposed to work with Python 3.3. I'm using 2.7. My hook failed with an
ImportError because of this. It seems kind of sensible to turn off
demandimport before importing the hook, since the except ImportError pattern
is used quite a bit in Python code (including in other Distribute code).
Adrian Buehlmann <adrian@cadifra.com> [Thu, 20 Dec 2012 15:18:41 +0100] rev 18110
test-pathencode: accept --seed parameter in hex as well
test-pathencode.py outputs the seed value in hex if it finds a deviation.
This change allows to specify the seed value as a command line
parameter for test-pathencode.py in hex as well.
Angel Ezquerra <angel.ezquerra@gmail.com> [Thu, 13 Dec 2012 23:37:53 +0100] rev 18109
subrepo: append subrepo path to subrepo error messages
This change appends the subrepo path to subrepo errors. That is, when there
is an error performing an operation a subrepo, rather than displaying a message
such as:
pushing subrepo MYSUBREPO to PATH
searching for changes
abort: push creates new remote head HEADHASH!
hint: did you forget to merge? use push -f to force
mercurial will show:
pushing subrepo MYSUBREPO to PATH
searching for changes
abort: push creates new remote head HEADHASH! (in subrepo MYSUBREPO)
hint: did you forget to merge? use push -f to force
The rationale for this change is that the current error messages make it hard
for TortoiseHg (and similar tools) to tell the user which subrepo caused the
push failure.
The "(in subrepo MYSUBREPO)" message has been added to those subrepo methods
were it made sense (by using a decorator). We avoid appending "(in subrepo XXX)"
multiple times when subrepos are nexted by throwing a "SubrepoAbort" exception
after the extra message is appended. The decorator will then "ignore" (i.e. just
re-raise) the exception and never add the message again.
A small drawback of this method is that part of the exception trace is lost when
the exception is catched and re-raised by the annotatesubrepoerror decorator.
Also, because the state() function already printed the subrepo path when it
threw an error, that error has been changed to avoid duplicating the subrepo
path in the error message.
Note that I have also updated several subrepo related tests to reflect these
changes.
Kevin Bullock <kbullock@ringworld.org> [Thu, 20 Dec 2012 13:49:31 -0600] rev 18108
tests: fix some slash-based Windows failures
Bryan O'Sullivan <bryano@fb.com> [Thu, 20 Dec 2012 11:40:04 -0800] rev 18107
inotify: on Python < 2.6, socket.error lacks errno
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 18 Dec 2012 01:51:08 +0100] rev 18106
hidden: invalidate hiddenrevs when needed
The `hiddenrevs` cache is volatile too (It use content from `obscache`). When
unsure it is invalidated when necessary. In a near future, the cache will
probably be moved to `revsfiltercache`
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 18 Dec 2012 02:04:37 +0100] rev 18105
cache: group obscache and revsfiltercache invalidation in a single function
Both caches are very volatile and needs invalidation on the same kind of event.
revsfiltercache actually depends on the content of revsfiltercache.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 17 Dec 2012 17:27:12 +0100] rev 18104
clfilter: use filtering in `visibleheads`
This is the second real use of changelog filtering. The change is very small to
allow testing the new filter with a setup close to the original one.
We replace custom post processing on `heads`function by call to the standard
code pass on a filtering repo.
In later coming will have wider usage of filtering that will make the dedicated
function useless.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 17 Dec 2012 17:42:34 +0100] rev 18103
clfilter: use filtering in `visiblebranchmap`
Here is the first real use of changelog filtering. The change is very small to
allow testing the new filter with a setup close to the original one.
We replace custom post processing on branchmap function by call to the
standard code pass on a filtering repo.
In later coming will have wider usage of filtering that will make the dedicated
function useless.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 17 Dec 2012 17:12:02 +0100] rev 18102
clfilter: introduce a "unserver" filtering mode
This mode is for repository used as a server. It filter secret and hidden
changeset out.
It is put to use in later changeset.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 20 Dec 2012 17:14:07 +0100] rev 18101
clfilter: add a cache on repo for set of revision to filter for a given set.
Recomputing the filtered revisions at every access to changelog is far too
expensive. This changeset introduce a cache for this information. This cache is
hold by the repository (unfiltered repository) and invalidated when necessary.
This cache is not a protected attribute (leading _) because some logic that
invalidate it is not held by the local repo itself.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 20 Dec 2012 15:32:42 +0100] rev 18100
clfilter: add actual repo filtering mechanism
We add a `filtered` method on repo. This method return an instance of `repoview`
that behaves exactly as the original repository but with a filtered changelog
attribute. Filters are identified by a "name". Planned filter are `unserved`,
`hidden` and `mutable`. Filtering the repository in place what out of question
as it wont not allows multiple thread to share the same repo. It would makes
control of the filtering scope harder too. See the `repoview` docstring for
details.
A mechanism to compute filtered revision is also installed. Some caches will be
installed in later commit.
Bryan O'Sullivan <bos@serpentine.com> [Wed, 19 Dec 2012 16:56:26 -0800] rev 18099
inotify: pacify pestiferous pyflakes precipitously
Bryan O'Sullivan <bryano@fb.com> [Wed, 19 Dec 2012 10:45:40 -0800] rev 18098
tests: make test-inotify-issue1208.t disappear
Bryan O'Sullivan <bryano@fb.com> [Tue, 18 Dec 2012 17:15:13 -0800] rev 18097
posix: move server side of unix domain sockets out of inotify
We also turn the unix domain socket into a class, so that we have a
sensible place to hang its logically related attributes and behaviour.
We'll shortly want to reuse this in other code.
Bryan O'Sullivan <bryano@fb.com> [Tue, 18 Dec 2012 17:33:32 -0800] rev 18096
inotify: don't fall over just because of a dangling symlink
Previously, the inotify server failed to start if .hg/inotify.sock was
a symlink that pointed to a non-existent path. This behaviour does not
seem to make any sense.
Now, if we encounter a broken symlink, we unlink it and continue.
Bryan O'Sullivan <bryano@fb.com> [Wed, 19 Dec 2012 10:40:34 -0800] rev 18095
test-inotify: test symlink indirection for unix sockets
The inotify code performs a delicate dance to work around the 108-byte
limit on unix domain socket path names on Linux.
This change sets us up to safely refactor that code without breaking
it. (It is redundant with part of test-inotify-issue1208.t, but we will
shortly make that test go away.)
Adrian Buehlmann <adrian@cadifra.com> [Wed, 19 Dec 2012 10:02:43 +0100] rev 18094
test-pathencode: compare current pathencoding implementations
We already have two implementations of the pathencoding (C and
Python) and this test can perfectly well be used to probabilistically
test them instead of just wasting CPU cycles and test time.
Siddharth Agarwal <sid0@fb.com> [Mon, 17 Dec 2012 20:51:21 -0800] rev 18093
rebase: use lazy ancestor membership testing
For a repository with over 400,000 commits, rebasing one revision near tip,
this avoids one walk up the DAG, speeding the operation up by around 0.8
seconds.
Siddharth Agarwal <sid0@fb.com> [Mon, 17 Dec 2012 20:43:37 -0800] rev 18092
localrepo: use lazy ancestor membership testing
For a repository with over 400,000 commits, rebasing one revision near tip,
this avoids two treks up the DAG, speeding the operation up by around 1.6
seconds.
Siddharth Agarwal <sid0@fb.com> [Tue, 18 Dec 2012 12:47:20 -0800] rev 18091
ancestor: add lazy membership testing to lazyancestors
This also makes the perfancestorset command use lazy membership testing. In a
linear repository with over 400,000 commits, without this patch, hg
perfancestorset takes 0.80 seconds no matter how far behind we're looking.
With this patch, hg perfancestorset -- X takes:
Rev X Time
-1 0.00s
-4000 0.01s
-20000 0.04s
-80000 0.17s
-200000 0.43s
-300000 0.69s
0 0.88s
Thus, for revisions close to tip, we're up to several orders of magnitude
faster. At 0 we're around 10% slower.
Siddharth Agarwal <sid0@fb.com> [Tue, 18 Dec 2012 10:14:01 -0800] rev 18090
revlog: move ancestor generation out to a new class
This refactoring is to prepare for implementing lazy membership.
Bryan O'Sullivan <bryano@fb.com> [Mon, 17 Dec 2012 15:57:02 -0800] rev 18089
ignore: process hgignore files in deterministic order
Previously, we processed them in whatever order the dict iterator gave us.
Bryan O'Sullivan <bryano@fb.com> [Mon, 17 Dec 2012 15:52:44 -0800] rev 18088
ignore: only read an ignore file once
Bryan O'Sullivan <bryano@fb.com> [Mon, 17 Dec 2012 16:23:37 -0800] rev 18087
ignore: refactor ignore into two functions
This prepares us for eventually being able to hash the list of patterns
in use.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 10 Dec 2012 18:12:41 +0100] rev 18086
clfilter: fix `nodemap` usage in `getbundle`
With the current implementation, `changelog.nodemap` is not filtered. So some
filtered changeset in common are not filtered by `n in nodemap`. This leads to
crash lower in the stack when the bundle generation try to access those node on
a filtered changelog.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 17 Dec 2012 17:00:24 +0100] rev 18085
test: fix truncated comment in test
The push is made to ensure repository are related. The comment in the initial
changeset got truncated somehow.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 17 Dec 2012 18:09:41 +0100] rev 18084
clfilter: ensure context raise RepoLookupError when the revision is filtered
Currently the code path of `changectx(filteredrepo, rev)` call
`filteredrepo.changelog.node(rev)`. When `rev` is filtered this raise an
unhandled `IndexError`. This case now raise a `RepoLookupError` as other
error case do.
Siddharth Agarwal <sid0@fb.com> [Mon, 17 Dec 2012 15:08:37 -0800] rev 18083
revlog: remove incancestors since it is no longer used
Siddharth Agarwal <sid0@fb.com> [Mon, 17 Dec 2012 15:08:06 -0800] rev 18082
transplant: replace incancestors uses with ancestors
Siddharth Agarwal <sid0@fb.com> [Mon, 17 Dec 2012 15:13:51 -0800] rev 18081
revlog.ancestors: add support for including revs
This is in preparation for an upcoming refactoring. This also fixes a bug in
incancestors, where if an element of revs was an ancestor of another it would
be generated twice.
Siddharth Agarwal <sid0@fb.com> [Fri, 14 Dec 2012 10:23:18 -0800] rev 18080
perf: add command to test performance of membership in ancestor set
The new command, perfancestorset, takes an argument denoting which revset to
test the membership of.
Currently this runs through all the ancestors and converts them into a set.
The primary purpose of having this is to compare this approach, currently used
in several places, against the upcoming lazy approach.
Siddharth Agarwal <sid0@fb.com> [Tue, 11 Dec 2012 14:47:33 -0800] rev 18079
ancestor: move missingancestors doctest out into a separate file
This is in preparation for upcoming patches which will reuse the same graph
for tests.
Kevin Bullock <kbullock@ringworld.org> [Sun, 16 Dec 2012 23:02:54 -0600] rev 18078
merge with crew-stable
Tim Henigan <tim.henigan@gmail.com> [Thu, 29 Nov 2012 08:44:54 -0500] rev 18077
dirstate: remove obsolete comment from setbranch
This comment should have been removed in b74361cf7c0a, when the call
to scmutil.checknewlabel was removed.
Idan Kamara <idankk86@gmail.com> [Sat, 15 Dec 2012 20:19:07 +0200] rev 18076
dirstate: don't rename branch file if writing it failed
Kevin Bullock <kbullock@ringworld.org> [Sun, 16 Dec 2012 22:00:38 -0600] rev 18075
commands: 'hg bookmark NAME' should work even with ui.strict=True
Before this patch, enabling strict command processing (ui.strict=True)
meant that 'hg bookmark NAME', as referenced several places in the
documentation, would not work. This adds 'bookmark' as an explicit alias
to 'bookmarks'.
Mads Kiilerich <mads@kiilerich.com> [Sun, 16 Dec 2012 19:41:56 +0100] rev 18074
tests: improve test-mv-cp-st-diff.t readability
Pierre-Yves David <pierre-yves.david@logilab.fr> [Sat, 10 Nov 2012 02:19:20 +0100] rev 18073
obsolete: refuse to push divergent changeset
As other troubles `unstable` and `bumped`. Followup patches may simplify the
push code with unification of "obsolescence troubles" handling.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 12 Dec 2012 03:20:49 +0100] rev 18072
obsolete: add a divergent method on context
The same we have `unstable` and `bumped`. Convenient method to access troubles
information in general may land later.
This get actual use and testing in the next changesets.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 12 Dec 2012 03:12:55 +0100] rev 18071
obsolete: add revset and test for divergent changesets
This changesets add a new `divergent()` revset similar to `unstable()` and
`bumped()` one. Introducting this revset allows actuall test of the divergent
detection.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Wed, 12 Dec 2012 03:19:30 +0100] rev 18070
obsolete: detect divergent changesets
Divergent changeset are final successors (non obsolete) of a changeset who
compete with another set of final successors for this same changeset.
For example if you have two obsolescence markers A -> B and A -> C, B and C are
both "divergent" because they compete to be the one true successors of A.
Public revision can't be divergent.
This function is used and tested in the next changeset.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Sat, 10 Nov 2012 01:56:59 +0100] rev 18069
obsolete: drop successors sets which are subset of another one
If both "(B,)" and "(B, C)" are successors set of "A", "(B,)" is dropped.
We won't be interrested in detection such divergence scenario.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 13 Dec 2012 15:38:43 +0100] rev 18068
obsolete: compute successors set
Successors set are an important part of obsolescence. It is necessary to detect
and solve divergence situation. This changeset add a core function to compute
them, a debug command to audit them and solid test on the concept.
Check function docstring for details about the concept.
Mads Kiilerich <mads@kiilerich.com> [Sun, 09 Dec 2012 00:25:21 +0100] rev 18067
mq: don't fail when removing a patch without patch file from series file
Mads Kiilerich <madski@unity3d.com> [Thu, 13 Dec 2012 19:19:06 +0100] rev 18066
largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com> [Thu, 13 Dec 2012 21:34:55 +0100] rev 18065
merge with stable
Levi Bard <levi@unity3d.com> [Mon, 10 Dec 2012 14:58:42 +0100] rev 18064
largefiles: commit directories that only contain largefiles (issue3548)
If we pass a directory to commit whose only commitable files
are largefiles, the core commit code aborts before finding
the largefiles.
So we do the following:
For directories that only have largefiles as matches,
we explicitly add the largefiles to the matchlist and remove
the directory.
In other cases, we leave the match list unmodified.
Siddharth Agarwal <sid0@fb.com> [Fri, 07 Dec 2012 10:37:43 -0800] rev 18063
revset.children: ignore rev numbers that are too low
This replaces unnecessary parentrevs() calls with calculating min(parentset).
Even though the min operation is O(size of parentset), since parentrevs is
relatively expensive, this tradeoff almost always works in our favour. In a
repository with over 400,000 changesets, hg perfrevset "children(X)" takes:
Set X Before After
-1 0.51s 0.06s
-1000: 0.55s 0.08s
-10000: 0.56s 0.10s
-100000: 0.60s 0.25s
-100000:-99000 0.55s 0.19s
0:100000 0.60s 0.61s
all() 0.72s 0.74s
The relative performance is similar for Mercurial's own repository -- several
times faster in most cases, slightly slower for revisions close to 0 and
all().
Siddharth Agarwal <sid0@fb.com> [Thu, 06 Dec 2012 11:21:11 -0800] rev 18062
perf: add a command to measure revset performance
Bryan O'Sullivan <bos@serpentine.com> [Wed, 12 Dec 2012 15:17:18 -0800] rev 18061
run-tests: fix whitespace nonsense
Bryan O'Sullivan <bos@serpentine.com> [Wed, 12 Dec 2012 15:12:28 -0800] rev 18060
merge with mpm
Bryan O'Sullivan <bryano@fb.com> [Wed, 12 Dec 2012 14:52:58 -0800] rev 18059
run-tests: on windows, put correct python at front of PATH
The older approach of trying to copy the python executable into the test
directory was doomed to fail.
There remains one weakness with this approach: if you've run "make local",
tests may pick up the wrong extension DLLs from inside the source tree. I
don't know why this happens.
A reasonable workaround for now is to test either using --local or with
a working directory that does not contain built DLLs.
Siddharth Agarwal <sid0@fb.com> [Tue, 11 Dec 2012 15:38:42 -0800] rev 18058
run-tests: fix exename on Windows
Bryan O'Sullivan <bryano@fb.com> [Tue, 11 Dec 2012 15:13:23 -0800] rev 18057
run-tests: support running tests in parallel on windows
Previously, we used os.spawnvp, which doesn't exist on Windows, and
isn't needed anyway (the command line begins with an absolute path).
We also need a slightly more convoluted way to wait for processes
without specifying an order on Windows, as it lacks os.wait.
Bryan O'Sullivan <bryano@fb.com> [Tue, 11 Dec 2012 13:44:00 -0800] rev 18056
makefile: allow local builds to work on windows/mingw32
Mads Kiilerich <madski@unity3d.com> [Sun, 09 Dec 2012 23:33:16 +0100] rev 18055
check-code: make 'missing whitespace in assignment' more aggressive
New warnings:
> a.b=ab
missing whitespace in assignment
(the pattern did not accept '.' on the left hand side)
> a=a
missing whitespace in assignment
(the right hand side pattern never matched a single character)
> a=a + 7
missing whitespace in assignment
(the pattern only matched one character after the identifier following =)
Mads Kiilerich <madski@unity3d.com> [Sun, 09 Dec 2012 23:33:16 +0100] rev 18054
check-code: there must also be whitespace between ')' and operator
The check pattern only checked for whitespace between keyword and operator.
Now it also warns:
> x = f(),7
missing whitespace after ,
> x = f()+7
missing whitespace in expression
Mads Kiilerich <madski@unity3d.com> [Sun, 09 Dec 2012 23:33:16 +0100] rev 18053
rm: drop misleading 'use -f' hint for the rm --after 'not removing' warning
A warning mentioning 'forgetting' or 'recording delete' would be more correct
than 'not removing' but also more confusing.
Mads Kiilerich <madski@unity3d.com> [Sun, 09 Dec 2012 23:33:16 +0100] rev 18052
contrib: state explicitly how hgtest.vim can be installed
Mads Kiilerich <madski@unity3d.com> [Sun, 09 Dec 2012 23:33:16 +0100] rev 18051
tests: kill daemons early, making breaking at "Accept" prompt safe
Bryan O'Sullivan <bryano@fb.com> [Mon, 10 Dec 2012 12:14:55 -0800] rev 18050
run-tests: use correct python safely under --jobs
Bryan O'Sullivan <bryano@fb.com> [Mon, 10 Dec 2012 12:09:02 -0800] rev 18049
run-tests: check for the correct python when starting
Bryan O'Sullivan <bryano@fb.com> [Mon, 10 Dec 2012 12:07:42 -0800] rev 18048
run-tests: use correct python when run with --local
Bryan O'Sullivan <bryano@fb.com> [Mon, 10 Dec 2012 11:18:03 -0800] rev 18047
synthrepo: do not crash if a list is empty
Angel Ezquerra <angel.ezquerra@gmail.com> [Tue, 27 Nov 2012 22:24:02 +0100] rev 18046
hgwebdir: do not show RSS and Atom links for plain directories
Up until now the templates that show RSS and Atom feeds on the "repository
lists" (i.e. gitweb and monoblue) showed them for all entries, including regular
folders. Clicking on those "folder RSS" links would result in an error page
being shown.
This patch hides those links for regular folders.
Angel Ezquerra <angel.ezquerra@gmail.com> [Tue, 04 Dec 2012 00:37:50 +0100] rev 18045
hgweb: add branches RSS and Atom feeds
There were no RSS nor Atom feeds for the branches page. Different hgweb
templates linked to different feeds on their branches page (some linked to the
tags feed, some to the log feed and some to the unexisting branches feed).
Kevin Bullock <kbullock@ringworld.org> [Fri, 07 Dec 2012 12:03:37 -0600] rev 18044
push: reunite comment with the line of code it describes
Kevin Bullock <kbullock@ringworld.org> [Fri, 07 Dec 2012 11:30:38 -0600] rev 18043
bookmarks: spelling correction in docstring
Kevin Bullock <kbullock@ringworld.org> [Thu, 06 Dec 2012 22:07:44 -0600] rev 18042
merge: fix mistake in moved _checkcollision call from 5881d5b7552f
Matt Mackall <mpm@selenic.com> [Thu, 06 Dec 2012 16:56:44 -0600] rev 18041
windows: correctly pass a mode to S_IFMT in statfiles
Siddharth Agarwal <sid0@fb.com> [Wed, 05 Dec 2012 14:33:15 -0800] rev 18040
strip: make query to get new bookmark target cheaper
The current query to get the new bookmark target for stripped revisions
involves multiple walks up the DAG, and is really expensive, taking over 2.5
seconds on a repository with over 400,000 changesets even if just one
changeset is being stripped.
A slightly simplified version of the current query is
max(heads(::<tostrip> - <tostrip>))
We make two observations here.
1. For any set s, max(heads(s)) == max(s). That is because revision numbers
define a topological order, so that the element with the highest revision
number in s will not have any children in s.
2. For any set s, max(::s - s) == max(parents(s) - s). In other words, the
ancestor of s with the highest revision number not in s is a parent of one
of the revs in s. Why? Because if it were an ancestor but not a parent of s,
it would have a descendant that would be a parent of s. This descendant
would have a higher revision number, leading to a contradiction.
Combining these two observations, we rewrite the revset query as
max(parents(<tostrip>) - <tostrip>)
The time complexity is now linear in the number of changesets being stripped.
For the above repository, the query now takes 0.1 seconds when one changeset
is stripped. This speeds up operations that use repair.strip, like the rebase
and strip commands.
David Schleimer <dschleimer@fb.com> [Tue, 04 Dec 2012 12:54:18 -0800] rev 18039
graft: explicit current node tracking
This changes graft to explicitly track the progression of commits it
makes, and updates it's idea of the current node based on it's last
commit, rather than from the working copy parent. This should have no
effect on the value of current since we were reading the working copy
parent immediately after commiting to it.
The motivation for this change is that a subsequent patch will break
the current node and working copy relationship. Splitting this out
into a separate patch will make that one more readible.
David Schleimer <dschleimer@fb.com> [Tue, 04 Dec 2012 12:54:18 -0800] rev 18038
graft: move commit info building
This moves the logic for generating the commit metadata ahead of the
merge operation. The only purposae of this patch is to make
subsequent patches easier to read, and there should be no behavior
changes.
Matt Mackall <mpm@selenic.com> [Thu, 06 Dec 2012 16:42:15 -0600] rev 18037
merge with stable
David Schleimer <dschleimer@fb.com> [Tue, 04 Dec 2012 12:54:18 -0800] rev 18036
merge: support calculating merge actions against non-working contexts
This is not currently used. It is instead a pre-requisite to
performing non-conflicting grafts in memory, which a subsequent patch
will do.
David Schleimer <dschleimer@fb.com> [Tue, 04 Dec 2012 12:54:18 -0800] rev 18035
merge: refactor action calculation into function
This pulls the code used to calculate the changes that need to happen
during merge.update() into a separate function. This is not useful on
its own, but is instead preparatory to performing grafts in memory
when there are no potential conflicts.
Siddharth Agarwal <sid0@fb.com> [Mon, 03 Dec 2012 14:21:45 -0800] rev 18034
dirstate: inline more properties and methods in status
hg perfstatus -u on a working directory with 170,000 files, without this
change:
! wall 1.839561 comb 1.830000 user 1.120000 sys 0.710000 (best of 6)
With this change:
! wall 1.804222 comb 1.790000 user 1.140000 sys 0.650000 (best of 6)
hg perfstatus on the same directory, without this change:
! wall 1.016609 comb 1.020000 user 0.670000 sys 0.350000 (best of 10)
With this change:
! wall 0.985573 comb 0.980000 user 0.650000 sys 0.330000 (best of 10)
Siddharth Agarwal <sid0@fb.com> [Mon, 03 Dec 2012 13:53:53 -0800] rev 18033
perf: add option to perfstatus to get the status of unknown files
When status needs to look at unknown files (e.g. when running hg status), it
needs to use a completely different algorithm than when it doesn't (e.g. when
running hg diff).
Siddharth Agarwal <sid0@fb.com> [Tue, 04 Dec 2012 10:29:18 -0800] rev 18032
dirstate: test normalize is truthy instead of using a no-op lambda
hg perfstatus -u on a working directory with 170,000 files, without this
change:
! wall 1.869404 comb 1.850000 user 1.170000 sys 0.680000 (best of 6)
With this change:
! wall 1.839561 comb 1.830000 user 1.120000 sys 0.710000 (best of 6)
Kevin Bullock <kbullock@ringworld.org> [Tue, 04 Dec 2012 11:19:32 -0600] rev 18031
merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 06 Dec 2012 13:21:27 -0600] rev 18030
hgweb: avoid generator exhaustion with branches
Matt Mackall <mpm@selenic.com> [Wed, 05 Dec 2012 15:38:18 -0600] rev 18029
hgweb: fix iterator reuse in atom feed generation
Julien Cristau <julien.cristau@logilab.fr> [Tue, 04 Dec 2012 14:35:02 +0100] rev 18028
tests: don't hardcode errno==2 for ENOENT
Hurd seems to set ENOENT to 2 + 2**30, unlike everyone else.
Bryan O'Sullivan <bryano@fb.com> [Mon, 03 Dec 2012 13:17:01 -0800] rev 18027
osutil: tab damage, how i hate thee
Bryan O'Sullivan <bryano@fb.com> [Mon, 03 Dec 2012 12:40:24 -0800] rev 18026
osutil: write a C implementation of statfiles for unix
This makes a big difference to performance.
In a clean working directory containing 170,000 files, performance of
"hg --time diff" improves from 2.38 seconds to 1.69.
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 03 Dec 2012 19:37:36 -0200] rev 18025
merge with i18n
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 30 Nov 2012 21:39:01 +0900] rev 18024
i18n-ja: synchronized with f94ead934067
Matt Mackall <mpm@selenic.com> [Mon, 03 Dec 2012 14:03:57 -0600] rev 18023
Added signature for changeset 0c10cf819146
Matt Mackall <mpm@selenic.com> [Mon, 03 Dec 2012 14:03:52 -0600] rev 18022
Added tag 2.4.1 for changeset 0c10cf819146
Bryan O'Sullivan <bryano@fb.com> [Fri, 30 Nov 2012 17:40:11 -0800] rev 18021
osutil: fix tab damage
Bryan O'Sullivan <bryano@fb.com> [Fri, 30 Nov 2012 15:56:09 -0800] rev 18020
Merge with crew
Bryan O'Sullivan <bryano@fb.com> [Fri, 30 Nov 2012 15:55:09 -0800] rev 18019
osutil: factor out creation and init of listdir_stat
Bryan O'Sullivan <bryano@fb.com> [Fri, 30 Nov 2012 15:55:08 -0800] rev 18018
dirstate: avoid use of zip on big lists
In a clean working directory containing 170,000 tracked files, this
improves performance of "hg --time diff" from 1.69 seconds to 1.43.
This idea is due to Siddharth Agarwal.
Bryan O'Sullivan <bryano@fb.com> [Fri, 30 Nov 2012 15:55:07 -0800] rev 18017
dirstate: move file type filtering to its source
This prepares us to move to a much faster statfiles implementation on Unix.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 30 Nov 2012 22:34:21 +0100] rev 18016
clfilter: rename `unfilteredmeth` to `unfilteredmethod`
As originally intended.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 30 Nov 2012 21:47:04 +0100] rev 18015
clfilter: fix a false positive in the test-obsolete.t
We push between two repo which once filtered looks unrelated. Weakness in the
current implementation allows this push to be done without -f. But later
improvement with filtering will make this push fails for unrelatedness. However
we want this push to fail for including bumped changeset. So we had a smaller
push --force to make them related.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 08 Oct 2012 19:34:04 +0200] rev 18014
clfilter: ensure that filecache on localrepo is unfiltered
All filecache usage on repo is for logic that should be unfiltered. The
caches should be common to all filtered instances, and computation must
be done unfiltered. A dedicated storecache subclass is created for
this purpose.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 08 Oct 2012 20:02:20 +0200] rev 18013
clfilter: add a propertycache that must be unfiltered
Some of the localrepo property caches must be computed unfiltered and
stored globally. Some others must see the filtered version and store data
relative to the current filtering.
This changeset introduces two classes `unfilteredpropertycache`
and `filteredpropertycache` for this purpose. A new function
`hasunfilteredcache` is introduced for unambiguous checking for cached
values on unfiltered repos.
A few tweaks are made to the property cache class to allow overriding
the way the computed value is stored on the object.
Some logic relative to _tagcaches is cleaned up in the process.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 18:11:56 +0200] rev 18012
largefile: status is buggy on repoproxy, so run unfiltered
For some yet-unkown reason, largefile status does not work on
repoproxy. As status is not affected by filtering, we run it unfiltered.
Na'Tosha Bard's view on this issue:
"but, well, largefiles status is kind of an unholy piece of code"
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 20:01:40 +0200] rev 18011
clfilter: mq should not warn about filtered mq patches
MQ warns when qstatus contains unknown nodes. With changelog filtering,
a node may be unknown because it is filtered. Thus, an unfiltered repo
is used for this check.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 18:02:25 +0200] rev 18010
clfilter: ensure that mq performs commits on unfiltered repos
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 17:50:02 +0200] rev 18009
clfilter: use unfiltered repo for bookmark push logic
The remote location of the bookmark may be filtered locally. This
changeset ensures that bookmark movement logic has access to all the
repo's content.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 17:26:23 +0200] rev 18008
clfilter: `bookmark.validdest` should run on unfiltered repo
The logic recently added to `bookmark.validdest` uses data about obsolete
changesets to see if a bookmark destination is valid. Obsolete changesets
are likely to be filtered, so we need to work on an unfiltered repository.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 17:41:07 +0200] rev 18007
clfilter: unfilter some parts of the push logic
Computation of common changesets during push needs to be done on the
widest set possible. An unfiltered version of the repo is kept for
discovery and various revset calls. The discovery code itself enforces
the filtering of unserved outgoing changeset.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Fri, 30 Nov 2012 00:43:55 +0900] rev 18006
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)
Color extension achieves colorization by overriding the class of
"ui" object just before command execution.
Before this patch, "diff()" of abstractsubrepo and classes
derived from it has no "ui" argument, so "diff()" of hgsubrepo
uses "self._repo.ui" to invoke "cmdutil.diffordiffstat()".
For separation of configuration between repositories, revision
573bec4ab7ba changed the initialization source of "self._repo.ui"
from "ui"(overridden) to "baseui"(plain) of parent repository.
And this caused break of colorization.
This patch adds "ui" argument to "diff()" of abstractsubrepo and
classes derived from it to pass "ui" object of caller side.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 17:15:08 +0200] rev 18005
clfilter: prevent unwanted warning about filtered parents as unknown
During changectx __init__ the dirstate's parents MAY be checked. If
the repo is filtered, this check will complain "working directory has
unknown parents" even if the parents are perfectly known.
This may happen when the repo is used for serving and the dirstate has
parents that are secret, as those secret changesets will be filtered.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 17:12:09 +0200] rev 18004
clfilter: strip logic should be unfiltered
Strip is a "write" operation that needs to be aware of the whole repo's
content before destroying changesets.
Only the low level function is altered. The top level command will still
process its argument filtered (if any filtering is in place).
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 17:08:52 +0200] rev 18003
clfilter: verify logic should be unfiltered
To verify a changelog obviously needs all of it. The verify logic now
ensures it works on an unfiltered repository.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 21 Nov 2012 00:53:45 +0100] rev 18002
clfilter: phases logic should be unfiltered
Phase computations and boundary movements need to be aware of all
revisions that exist in the repository to return correct results.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 16:55:00 +0200] rev 18001
clfilter: unfilter computation of obsolescence related computation
All obsolescence related sets need to be computed on the full unfiltered
version of the repository, in particular because several of them
(obsolete, extinct) are used to compute the hidden revisions.
On a filtered repo, revset predicates related to these sets will be
properly filtered because of revset's own pre-filtering.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 26 Nov 2012 19:24:11 +0100] rev 18000
clfilter: ensure changeset creation in the repo is run unfiltered
This applies to both creation of new commits and application of
changegroups.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 26 Nov 2012 19:23:25 +0100] rev 17999
clfilter: ensure changegroup generation is run unfiltered
Changegroup generation logic needs to be aware of the whole repository
to work properly.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 26 Nov 2012 19:21:24 +0100] rev 17998
clfilter: ensure `rollback` is run unfiltered
Rollback logic needs to be aware of the whole repository to work properly.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 26 Nov 2012 19:22:12 +0100] rev 17997
clfilter: ensure cache invalidation is done on the main unfiltered repo
The proxy version will not hold any cache for now. But we have to ensure
all cache operations are done on the unfiltered version.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 26 Nov 2012 19:26:24 +0100] rev 17996
clfilter: ensure that tag logic runs unfiltered
The current tag logic is not aware of filtering. We keep the status quo,
ensuring that the tag cache is computed as before: without any filtering.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 26 Nov 2012 19:25:44 +0100] rev 17995
clfilter: ensure `branchcache` logic runs unfiltered
The current branchcache construction is not aware of filtering. We keep
the status quo, ensuring that the branch cache logic is computed as
before: without any filtering.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 26 Nov 2012 19:11:13 +0100] rev 17994
clfilter: introduce an `unfilteredmethod` decorator
This decorator ensure the method in run on an unfiltered version of the
repository. See follow-up commit for details.
This decorator is not named `unfiltered` because it would clash with the
`unfilteredmethod` on `localrepo` itself.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 21 Nov 2012 00:36:29 +0100] rev 17993
clfilter: introduce an "unfiltered" method on localrepo
This commit is part of the changelog level filtering effort. It returns
the main "unfiltered" version of a repo-like object. For localrepo this
means the same localrepo object. But this method will be overwritten
by the filtered versions of a repository to return the core unfiltered
version of the repo.
Introducing this simple method first allows later commits to prepare
for the use of a filtered version of a repository.
A new repo method is added because a lot of users may call it. At the
end of this series of commits, about 40 calls exist in core and hgext.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 20 Nov 2012 19:05:46 +0100] rev 17992
clfilter: remove usage of `range` and `xrange` in scmutil.revrange
For changelog level filtering to take effect it need to be used for any
iteration.
This changeset removes usage of `range` and `xrange` that survived the first
pass.