Fri, 14 Aug 2015 12:31:56 +0900 reachableroots: bail if integer object cannot be allocated
Yuya Nishihara <yuya@tcha.org> [Fri, 14 Aug 2015 12:31:56 +0900] rev 26032
reachableroots: bail if integer object cannot be allocated This patch also replaces Py_XDECREF() by Py_DECREF() because we known "val" and "p" are not NULL. BTW, we can eliminate some of these allocation and error handling of int objects if the internal "seen" array has more information. For example, enum { SEEN = 1, ROOT = 2, REACHABLE = 4 }; /* ... build ROOT mask from roots argument ... */ if (seen[revnum + 1] & ROOT) { /* instead of PySet_Contains(roots, val) */ >From my quick hack, it is 2x faster.
Sat, 01 Aug 2015 05:43:39 -0700 devel-warn: issue a warning when writing bookmarks without holding the wlock
Laurent Charignon <lcharignon@fb.com> [Sat, 01 Aug 2015 05:43:39 -0700] rev 26031
devel-warn: issue a warning when writing bookmarks without holding the wlock I saw an issue in an extension that we develop where we were writing bookmarks without holding the wlock. Another extension was taking a lock at the same time and wiped out the bookmarks we were about to write. This patch adds a devel-warning to urge people to fix their invalid code.
Thu, 13 Aug 2015 19:37:47 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 13 Aug 2015 19:37:47 -0500] rev 26030
merge with stable
Tue, 11 Aug 2015 16:45:11 -0700 rebase: lock the repo during the full rebase operation stable
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 11 Aug 2015 16:45:11 -0700] rev 26029
rebase: lock the repo during the full rebase operation Running `hg pull --rebase` would move bookmarks without any repository locking. So we now lock the repository. For good measure and avoiding sneaky race conditions, we lock the repository for the whole operation. There is no code change besides the indentation.
Tue, 11 Aug 2015 16:26:12 -0700 update: wlock the repo for the whole 'hg update' command stable
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 11 Aug 2015 16:26:12 -0700] rev 26028
update: wlock the repo for the whole 'hg update' command The update command is touching the repository and should lock it for the length of its operations. Equally importantly, it should lock the repository when it is writing bookmarks. It wasn't doing so until now, leaving doors open for all kinds of drunk beaver parties. This results in some minor tests changes, and the fixing of a couple of bugs from race conditions. Code does not receive any changes beside extra indentation.
Thu, 13 Aug 2015 11:09:36 -0300 help: fix typo in scripting documentation stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Thu, 13 Aug 2015 11:09:36 -0300] rev 26027
help: fix typo in scripting documentation
Thu, 13 Aug 2015 15:07:07 +0900 hg: avoid auto sharing when the clone destination is remote stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Aug 2015 15:07:07 +0900] rev 26026
hg: avoid auto sharing when the clone destination is remote Before this patch, when auto sharing is enabled, 'hg.clone()' tries to create local clone regardless of locality of the clone destination on the host, and causes failure. To avoid auto sharing when the clone destination is remote, this patch adds examination of 'islocal(dest)' before auto sharing in 'hg.clone()'. 'islocal(dest)' is examined after 'sharepool', because: - the former is more expensive than the latter - without enabling share extension, the later is always negative
Wed, 12 Aug 2015 12:26:39 -0400 largefiles: ensure lfutil.getstandinmatcher() only matches standins stable
Matt Harbison <matt_harbison@yahoo.com> [Wed, 12 Aug 2015 12:26:39 -0400] rev 26025
largefiles: ensure lfutil.getstandinmatcher() only matches standins Previously, simply having the largefiles extension loaded without any largefiles added would crash when amending with -I. The problem was with no files in the matcher, the pattern list of files joined with 'standindir' was empty, and scmutil.match() would match everything. In lfutil.composestandinmatcher(), the match function is used to test if the file is a standin, and after getting a false positive, proceeds to call lfutil.splitstandin(). This returns None because it isn't a standin, which blows up when passed to rmatcher.matchfn(). Manually overriding _always in getstandinmatcher() probably isn't necessary anymore, but we leave well enough alone on stable. This regressed in ab618e52788a.
Wed, 12 Aug 2015 19:44:21 -0700 dirstate: add --minimal flag to debugrebuilddirstate
Durham Goode <durham@fb.com> [Wed, 12 Aug 2015 19:44:21 -0700] rev 26024
dirstate: add --minimal flag to debugrebuilddirstate On repositories with hundreds of thousands of files, hg debugrebuilddirstate causes every dirstate entry to be marked lookup, and the next hg status can take many minutes. This adds a --minimal flag that allows us to only rebuild the parts of the dirstate that are inconsistent. This follows two rules: 1) If a file is in the dirstate but not in the parent manifest, and it is not marked 'add', it is busted and we should drop it. 2) If a file is not in the dirstate at all, but it is in the parent manifest, it should be added to the dirstate and we need to mark it as lookup. This allows us to fix repositories where the dirstate doesn't match the manifest much more quickly. Tested by artificially adding bad dirstate entries (via code) for both cases above.
Thu, 13 Aug 2015 22:10:52 +0900 tests: make filterpyflakes.py read target files relatively to cwd
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Aug 2015 22:10:52 +0900] rev 26023
tests: make filterpyflakes.py read target files relatively to cwd Before this patch, 'filterpyflakes.py' reads target files relatively to own location. But this prevents third party tools from using it in own source tree, because their files are placed separately from 'filterpyflakes.py'. In fact, 'test-check-pyflakes.t', which is the only user of 'filterpyflakes.py', changes current working directory (cwd) to the root of "test target" source tree before using it. Therefore, composing the root of source tree in 'filterpyflakes.py' is redundant. This patch makes 'filterpyflakes.py' read target files relatively to cwd by invoking 'open()' without any path composition. This also removes importing 'os' module, because there is no user of it after this patch. This is a one of preparation of issue4677.
Tue, 11 Aug 2015 13:48:57 +0800 monoblue: remove duplicate font-family property from td.source
Anton Shestakov <av6@dwimlabs.net> [Tue, 11 Aug 2015 13:48:57 +0800] rev 26022
monoblue: remove duplicate font-family property from td.source
Tue, 11 Aug 2015 13:45:54 +0800 monoblue: remove unused elements and related css
Anton Shestakov <av6@dwimlabs.net> [Tue, 11 Aug 2015 13:45:54 +0800] rev 26021
monoblue: remove unused elements and related css Since 91b0ada2d94b and c9b88695d894, when monoblue was introduced, the code this patch removes was untouched. Presumably, there supposed to be nice graphics in the screen corners, but there never were due to: - the css being commented out - ids of the elements and of the css selectors being different - and the png files absent The "corner" elements were unstyled and didn't affect the rest of the page, so I think it's safe to remove all this.
Thu, 13 Aug 2015 16:15:43 +0900 revpair: restrict odd-range handling to top-level x:y expression (issue4774)
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Aug 2015 16:15:43 +0900] rev 26020
revpair: restrict odd-range handling to top-level x:y expression (issue4774) The odd-range hack was introduced by 2a0efa1112ac for backward compatibility, but it was too widely applied. I've checked cmdutil.revpair() at 1.6, and found that ".:", ":0" and ":" are also handled as pairs. So let's enable the hack only for "x:y", "x:", "y:" and ":". test-revset.t is updated because "tip^::tip^ or tip^" shouldn't be taken as an odd range. This patch adds "tip^:tip^" instead. This patch is written for the default branch because parse() of the stable branch lacks compatibility hack for "foo+bar" tag. If we want to mitigate the issue in stable, we can add something like "and '::' in revs[0]".
Thu, 13 Aug 2015 16:27:32 +0900 revpair: update test to make a difference if odd range not handled specially
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Aug 2015 16:27:32 +0900] rev 26019
revpair: update test to make a difference if odd range not handled specially It was added at 2a0efa1112ac, but there was no difference between -r2 and -r2:2 because the working directory was clean.
Thu, 13 Aug 2015 18:59:49 +0900 reachableroots: verify type of each item of heads argument
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Aug 2015 18:59:49 +0900] rev 26018
reachableroots: verify type of each item of heads argument Though PyInt_AS_LONG() can return a value no matter if it isn't an int object, it could exceed the boundary of the underlying struct. I think C API should be defensive to such errors.
Thu, 13 Aug 2015 18:38:46 +0900 reachableroots: verify integer range of heads argument (issue4775)
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Aug 2015 18:38:46 +0900] rev 26017
reachableroots: verify integer range of heads argument (issue4775) Now it raises IndexError instead of SEGV for 'wdir()' as it was before.
Thu, 13 Aug 2015 18:29:38 +0900 reachableroots: unify bail cases to raise exception correctly
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Aug 2015 18:29:38 +0900] rev 26016
reachableroots: unify bail cases to raise exception correctly Before this patch, release_seen_and_tovisit did not return NULL, so the exception was not raised immediately. As Py_XDECREF() and free() are safe for NULL, we can simply bail in any case.
Thu, 13 Aug 2015 17:58:33 +0900 reachableroots: pass NULL to PySet_New() as it expects a pointer, not an int
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Aug 2015 17:58:33 +0900] rev 26015
reachableroots: pass NULL to PySet_New() as it expects a pointer, not an int
Wed, 12 Aug 2015 17:01:50 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 12 Aug 2015 17:01:50 -0500] rev 26014
merge with stable
Tue, 27 Jan 2015 11:26:27 -0800 copy: add flag for disabling copy tracing
Durham Goode <durham@fb.com> [Tue, 27 Jan 2015 11:26:27 -0800] rev 26013
copy: add flag for disabling copy tracing Copy tracing can be up to 80% of rebase time when rebasing stacks of commits in large repos (hundreds of thousands of files). This provides the option of turning off the majority of copy tracing. It does not turn off _forwardcopies() since that is used to carry copy information inside a commit across a rebase. This will affect the situation where a user edits a file, then rebases on top of commits that have moved that file. The move will not be detected and the user will have to manually resolve the issue (possibly by redoing the rebase with this flag off). The reason to have a flag instead of trying to fix the actual copy tracing performance is that copy tracing is fundamentally an O(number of files in the repo) operation. In order to know if file X in the rebase source was copied anywhere, we have to walk the filelog for every new file that exists in the rebase destination (i.e. a file in the destination that is not in the common ancestor). Without an index that lets us trace forward (i.e. from file Y in the common ancestor forward to the rebase destination), it will never be an O(number of changes in my branch) operation. In mozilla-central, rebasing a 3 commit stack across 20,000 revs goes from 39s to 11s.
Sat, 08 Aug 2015 14:50:03 -0700 strip: use the 'finally: tr.release' pattern during stripping stable
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 08 Aug 2015 14:50:03 -0700] rev 26012
strip: use the 'finally: tr.release' pattern during stripping The previous code, was calling 'abort' in all exception cases. This was wrong when an exception was raised by post-close callback on the transaction. Calling 'abort' on an already closed transaction resulted in a error, shadowing the original error. We now use the same pattern as everywhere else. 'tr.release()' will abort the transaction if we escape the scope without closing it. We add a test to make sure we do not regress.
Tue, 11 Aug 2015 15:06:02 -0400 changelog: trust C implementation of reachableroots more
Augie Fackler <augie@google.com> [Tue, 11 Aug 2015 15:06:02 -0400] rev 26011
changelog: trust C implementation of reachableroots more There are no remaining codepaths in reachableroots where it will return None, so just trust it completely and simplify this method. Result by revset ================ Revision: 0) Revision 1c75249e159b: style: adjust whitespaces in webutil.py 1) Revision d1d91b8090c6: changelog: trust C implementation of reachableroots more revset #0: 0::tip plain 0) 0.067684 1) 0.006622 9% revset #1: 0::@ plain 0) 0.068249 1) 0.009394 13% IOW this is a 10x speedup in my repo for hg itself for 0::tip and similar revsets now that the C code is correctly wired up.
Tue, 11 Aug 2015 14:53:47 -0400 reachableroots: return NULL if we're throwing an exception
Augie Fackler <augie@google.com> [Tue, 11 Aug 2015 14:53:47 -0400] rev 26010
reachableroots: return NULL if we're throwing an exception Based on my reading of [0] and surrounding sections, if we want an exception to be properly raised when something goes wrong in the C code, we need to make sure we return NULL here. Do so. https://docs.python.org/2/extending/extending.html#back-to-the-example
Tue, 11 Aug 2015 15:34:10 -0400 reachableroots: fix transposition of set and list types in PyArg_ParseTuple
Augie Fackler <augie@google.com> [Tue, 11 Aug 2015 15:34:10 -0400] rev 26009
reachableroots: fix transposition of set and list types in PyArg_ParseTuple This is being masked by the function not properly returning NULL when it raises an exception, so the client code was just falling back to the native codepath when it got None back. A future change removes all reason for this C function to return None, which exposed this problem during development.
(0) -10000 -3000 -1000 -300 -100 -50 -24 +24 +50 +100 +300 +1000 +3000 +10000 tip