Matt Mackall <mpm@selenic.com> [Thu, 11 Oct 2012 22:58:34 -0500] rev 17752
vfs: use fchmod for _fixfilemode
On general principle, we should use fchmod instead of chmod to avoid
security pitfalls, although none is likely possible here.
Bryan O'Sullivan <bryano@fb.com> [Thu, 11 Oct 2012 16:05:14 -0700] rev 17751
tests: correctly report a test killed by a signal
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 10 Oct 2012 05:54:38 +0200] rev 17750
histedit: update bookmark movement notice
New format is:
histedit: moving bookmarks <bookmark> from <old> to <new>
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Wed, 10 Oct 2012 06:20:14 +0200] rev 17749
histedit: simplify computation of `newchildren` during --continue
We are now checking for any changesets between the previous `parentctx` and the
current working directory parent. If the current working directory parent is
inconsistent, we abort.
This change is useful as it simplifies the --continue process, easing upcoming
changes.
While working on this changeset, I spotted an unhandled corner case. This corner
case is now documented and have an appropriate issue in the tracker (
issue3655).
However, the corner case is still unhandled. handling this test case would
required some additional work:
- actually decide what the proper behavior should be:
- change content of "histedit-state" to add missing data necessary to detect
the situation
- add proper testcase,
But leaving the case unhandled is "okay":
- this is not a regression,
- this is not the purpose of the current series,
- the freeze was near and I had more critical stuff to attend to,
- this is a simple but non trivial, (see above)
Adrian Buehlmann <adrian@cadifra.com> [Wed, 03 Oct 2012 19:43:10 +0200] rev 17748
test-fncache: enable for Windows
Should also fix
http://hgbuildbot.kublai.com/builders/vfat%20hg%20tests/builds/182
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 16:17:55 +0900] rev 17747
store: invoke "osutil.listdir()" via vfs
This patch invokes "osutil.listdir()" via vfs object.
The function added newly to "abstractvfs" is named not as "listdir()"
but as "readdir()", because:
- "os.listdir()" seems to be more familiar as "listdir()" than
"osutil.listdir()"
- "osutil.listdir()" returns also type of each files like
"readdir()" POSIX API: even though "d_type" field of "dirent"
structure is defined mainly only on BSD/Linux
This patch invokes "osutil.listdir()" via "rawvfs" object to avoid
filename encoding, because the path passed to "osutil.listdir()"
shouldn't be encoded.
This patch also omits importing "osutil" module, because it is no
longer used.
smuralid [Thu, 13 Sep 2012 23:50:45 -0700] rev 17746
log: speed up hg log for untracked files (
issue1340)
'hg log' on untracked files tends to be fairly slow. The root cause is that we end up using the 'slowpath' when we can't find a revlog for the files listed. This could happen if the file in question is an untracked file, or it is a directory.
This diff tries to speed up 'hg log' (by avoiding the slowpath) for files if we can determine if that file is not (and was never) a directory. We use the previously added store.__contains__ methods to test if the directory exists (or existed) in the store.
To avoid changing any existing semantics, this 'optimization' kicks in only when none of the files listed as arguments to the hg log command exist in the store.
smuralid [Thu, 13 Sep 2012 17:57:43 -0700] rev 17745
store: add a contains method to fncachestore
Adds a __contains__ method to fncachestore to check for file/dir existence (using fncache.__contains__).
Also extends fncache.__contains__ to check for directories (by prefix matching)
smuralid [Thu, 13 Sep 2012 17:00:34 -0700] rev 17744
store: add a contains method to basicstore
Adds a __contains__ method to basicstore that checks if a file/dir is present in the store
Mads Kiilerich <mads@kiilerich.com> [Wed, 10 Oct 2012 01:37:54 +0200] rev 17743
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
Mads Kiilerich <mads@kiilerich.com> [Wed, 26 Sep 2012 00:56:27 +0200] rev 17742
run-tests: allow test output lines to be terminated with \r in addition to \n
str.splitlines could not be used in
546c76e5a3e6, but _now_ we would like to
have lines with other line endings than \n.
Some fine occurences of (esc) markup of \r is replaced with multiple lines
ending with '\r (no-eol) (esc)'. That is no win but also no significant loss.
This change makes it possible to drop filtercr.py - _that_ is a win.
Mads Kiilerich <mads@kiilerich.com> [Wed, 10 Oct 2012 01:37:53 +0200] rev 17741
run-tests: use more explicit criteria for detecting no-eol
Preparing for the situation where there could be unsalted lines not terminated
with \n.
Tomasz Kleczek <tomasz.kleczek@fb.com> [Wed, 03 Oct 2012 13:19:53 -0700] rev 17740
branchcache: fetch source branchcache during clone (
issue3378)
Recomputing branch cache on clone may be expensive,
therefore if possible we fetch it along with the data.
- If the clone is performed by copying, we just copy branchcache file.
- If we localrepo.clone and streaming then we follow the procedure:
1. Fetch branchmap from the remote
2. Fetch the actual data.
3. Find the latest rev within branch heads (tip at the time of
branchmap fetch)
4. Update the cache for the revs in [remotetip+1, tip]
This way we ensure that the branchcache is correct even in case
of races with commits.
Mads Kiilerich <mads@kiilerich.com> [Wed, 10 Oct 2012 01:30:45 +0200] rev 17739
run-tests: drop unused enumerate
Mads Kiilerich <mads@kiilerich.com> [Wed, 10 Oct 2012 01:29:56 +0200] rev 17738
spelling: fix minor spell checker issues
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 09 Oct 2012 12:47:54 +0200] rev 17737
test-dirstate: remove test with date larger than 32 bit
When running on a 32bit system or with a touch command that only accepts
32bit dates, the following happened:
$ touch -t
250001011200 a
touch: invalid date format `
250001011200'
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 09 Oct 2012 09:45:44 +0200] rev 17736
merge with crew-stable
Kevin Bullock <kbullock@ringworld.org> [Mon, 08 Oct 2012 00:19:30 +0200] rev 17735
bookmarks: deactivate current bookmark if no name is given
f57f891eb88e added this help text to hg bookmark:
If no NAME is given, the current active bookmark will be marked inactive.
But that was never actually the case.
Originally spotted by Idan Kamara <idankk86@gmail.com>.
Bryan O'Sullivan <bryano@fb.com> [Mon, 08 Oct 2012 15:57:21 -0700] rev 17734
contrib: add a commit synthesizer for reproducing scaling problems
This adds two new commands:
- analyze examines an existing repo and writes out a statistical
description of its properties that contains no identifying
information.
- synthesize creates new commits based on the description generated
by analyze.
The intention is that a repo constructed using synthesize will have
properties that are vaguely statistically similar to the originating
repo, but entirely random content.
This can be useful for forecasting performance as a repo grows, and
for developers who want to find bottlenecks in proprietary repos
to which they do not have access.
Matt Mackall <mpm@selenic.com> [Mon, 08 Oct 2012 17:50:42 -0500] rev 17733
dirstate: handle large dates and times with masking (
issue2608)
Dates and times that are outside the 31-bit signed range are now
compared modulo 2^31. This should prevent it from behaving badly with
very large files or corrupt dates while still having a high
probability of detecting changes.
Adrian Buehlmann <adrian@cadifra.com> [Tue, 07 Aug 2012 11:04:41 +0200] rev 17732
exewrapper: adapt for legacy HackableMercurial
We give up using CPython's PythonXX.lib import libraries (and Python.h), and
now "manually" call the LoadLibrary() / GetProcAddress() Windows API's instead.
If there is a "hg-python" subdirectory (the canonical directory name for
HackableMercurial's private Python copy) next to the hg.exe, we load the
pythonXX.dll from there (feeding an absolute path to LoadLibrary) and we set
Py_SetPythonHome() to that directory, so that the Python libraries are used
from there as well.
If there is no "hg-python" subdir found next to the hg.exe, we do not feed an
absolute path to LoadLibrary. This continues to allow to find a globally
installed Python DLL, as before this change - that is, without having to edit,
delete, rename, or configure anything.
Note that the hg.exe built is still bound to a *specific* major version of the
pythonXX.dll (e.g. python27.dll). What version it is, is inferred from the
version of the python interpreter that was used when calling setup.py. For
example
C:\python27_x86\python.exe setup.py build_hgexe -i --compiler=mingw32
builds a hg.exe (using the mingw32 tool chain) bound to (x86) Python 2.7. And
C:\python27_x86\python.exe setup.py build_hgexe -i
builds the same using the Microsoft C compiler/linker. (Note that the Microsoft
toolchain combined with x64 CPython can be used to build an x64 hg.exe.)
setup.py is changed to write the name of the pythonlib into the generated header
file "mercurial/hgpythonlib.h", which is #included by exewrapper.c. For a Python
2.7 build, it for example contains:
#define HGPYTHONLIB "python27"
exewrapper.c then uses HGPYTHONLIB for the name of the Python dll to load.
We don't want to track mercurial/hgpythonlib.h, so we add it to .hgignore.
Matt Mackall <mpm@selenic.com> [Mon, 08 Oct 2012 16:46:11 -0500] rev 17731
store: restore getsize method
This method was created for subclassing.
David Soria Parra <dsp@php.net> [Mon, 01 Oct 2012 02:44:46 +0200] rev 17730
mq: update bookmarks during qrefresh
Bookmarks are updated during qpop and qpush, but they are not updated
during qrefresh. This behaviour makes it hard to work on an evolving
changeset at the head of a branch. qrefresh should update all bookmarks
that point to the refreshed commit with the new nodeid.
Matt Mackall <mpm@selenic.com> [Mon, 08 Oct 2012 16:21:24 -0500] rev 17729
templater: drop redundant return in _flatten
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17728
store: invoke "os.path.isdir()" via vfs
This patch invokes "os.path.isdir()" via "rawvfs" object to avoid
filename encoding, because the path passed to "os.path.isdir()"
shouldn't be encoded.
This patch newly adds "self.rawvfs" field only to "basicstore" and
"encodedstore", because "fncachestore" has "self.rawvfs" already.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17727
store: replace invocation of "getsize()" by "vfs.stat()"
This patch replaces invocation of "getsize()", which calls "os.stat()"
internally, by "vfs.stat()".
The object referred by "self.rawvfs" is used internally by
"_fncachevfs" and doesn't encode filename for each file API invocation.
This patch invokes "os.stat()" via "self.rawvfs" to avoid redundant
filename encoding: invocation of "os.stat()" via "self.vfs" hides
filename encoding and encoding result from caller, so it is not
appropriate, when both encoded and non-encoded filenames should be
yield.
Even though changeset
b42b0729744d improved stream_out performance by
"self.pathsep + path", this patch replaces it by
"os.path.join(self.base, path)" of vfs. So, this may increase cost to
join path components.
But this shouldn't have large impact, because:
- such cost is much less than cost of "os.stat()" which causes
system call invocation
- "datafiles()" of store object is invoked only for "hg manifest
--all" or "hg verify" which are both heavy functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17726
store: invoke "os.stat()" for "createmode" initialization via vfs
This just replaces "os.stat()" invocation: refactoring around
"self.createmode" and "vfs.createmode" initialization is omitted.
This patch also newly adds "stat()" function to "abstractvfs".
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17725
vfs: define "join()" in each classes derived from "abstractvfs"
This patch defines "join()" in each classes derived from "abstractvfs"
except "vfs", which already defines it.
This allows all vfs instances to be used for indirect file API
invocation.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17724
store: initialize vfs field first to use it for initialization of others
This patch initializes "vfs" field in the constructor of each store
classes to use it for initialization of others.
In this patch, "self.vfs.base" is used to initialize "self.path",
because redo join of path components for "self.path" is redundant.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17723
scmutil: reorder newly added functions for vfs support in dictionary order
Definition functions for vfs support in dictionary order increases
readability/maintainability, because there are functions which invoke
file API:
- with same name: "os.listdir" and "osutil.listdir", for example
- with ambiguous names: "os.mkdir" and "util.makedirs", for example
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17722
store: rename field name from "opener" to "vfs" in internal classes for fncache
These fields are used only in store module, so keeping "self.opener"
for backward compatibility like as "localrepository" class is not
needed.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 09 Oct 2012 01:41:55 +0900] rev 17721
store: rename argument name from "op"(ener) to "vfs"