Christian Ebert <blacktrash@gmx.net> [Sun, 10 Jun 2012 16:32:22 +0100] rev 1092
Merge with stable
Adrian Buehlmann <adrian@cadifra.com> [Fri, 08 Jun 2012 15:11:05 +0200] rev 1091
tests/hghave: implement #if true / #if false
For unconditionally testing / skipping a section. Useful for testing the test
infrastructure in test-run-tests.t and for debugging/developing tests.
[ original upstream message ]
Adrian Buehlmann <adrian@cadifra.com> [Sun, 10 Jun 2012 03:05:59 +0200] rev 1090
tests/run-tests: avoid C:/ in arguments
MSYS replaces C:/... in arguments with C;... as it interprets the C:/ as a
colon separated POSIX path list. The colon is replaced with ; (path separator
on Windows) according to
http://www.mingw.org/wiki/Posix_path_conversion
So we must not replace \ with / for neither $TESTTMP nor $TESTDIR, but we
have to keep replacing \ with / for the Popen4 call of function hghave. If we
don't do the latter, test-run-tests.t will fail with
$ python run-tests.py --local test-run-tests.t
--- C:\Users\adi\hgrepos\hg-main\tests\test-run-tests.t
+++ C:\Users\adi\hgrepos\hg-main\tests\test-run-tests.t.err
@@ -70,6 +70,7 @@
tested
#else
$ echo skipped
+ skipped
#endif
#if false
An additional tweak in test-ssh.t is needed that globs away an encoded path,
as it can't be translated back to $TESTTMP, because the backslashes in the
output have been already encoded as %5C.
This patch makes test-ssh.t pass in MSYS on Windows.
[ original upstream message ]
Adrian Buehlmann <adrian@cadifra.com> [Sun, 27 May 2012 18:25:04 +0200] rev 1089
hghave: wrap command in 'sh -c "..."' for has_pyflakes()
Without this, the has_pyflakes() check always fails in MSYS on Windows.
[ original upstream message ]
Adrian Buehlmann <adrian@cadifra.com> [Fri, 08 Jun 2012 15:11:05 +0200] rev 1088
tests/run-tests: use $TMP on Windows (issue3490)
This is just a short-term workaround for that issue. More work needs to be
done on scmutil.canonpath & friends.
$TMP on Windows is specified to be defined, and it has correct casing, so we
can use that as the default dir for tempfile.mkdtemp on Windows.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Tue, 05 Jun 2012 00:20:53 +0100] rev 1087
Merge with stable
Mads Kiilerich <mads@kiilerich.com> [Fri, 01 Jun 2012 02:25:12 +0200] rev 1086
tests: introduce c-style conditional sections in .t tests
This makes it possible to have conditional sections like:
#if windows
$ echo foo
foo
#else
$ echo bar
bar
#endif
The directives and skipped sections are treated like comments, so don't
interleave them with commands and their output.
The parameters to #if are evaluated while preparing the test by passing them
over to hghave. Requirements can thus be negated with 'no-' prefix, and
multiple requirements must all be true to return true.
[ original upstream message ]
Adrian Buehlmann <adrian@cadifra.com> [Wed, 30 May 2012 14:28:57 +0200] rev 1085
run-tests: don't add python lines to expected dict
For test input lines of *.t files starting with ' >>> ', the code block for
' >>> '
609: if l.startswith(' >>> '): # python inlines
610: after.setdefault(pos, []).append(l)
was (unsurprisingly) executed, but because there was an "if" instead of an
"elif" on the condition "l.startswith(' ... ')", program execution proceeded
to line 636
635: elif l.startswith(' '): # results
636: # queue up a list of expected results
637: expected.setdefault(pos, []).append(l[2:])
due to the fact that if l starts with ' >>> ' it also starts with ' '.
The net effect was that python command lines in *.t files were (surprisingly)
also added to the "expected" dict.
This caused no externally observable bad behavior, as the "expected" dict was
not consulted for these lines.
[ original upstream message ]
Adrian Buehlmann <adrian@cadifra.com> [Sun, 03 Jun 2012 19:35:23 +0200] rev 1084
run-test: replace backslashes in TESTDIR
This may cause troubles in MSYS on Windows.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Sat, 02 Jun 2012 10:09:59 +0200] rev 1083
Merge with default
Christian Ebert <blacktrash@gmx.net> [Thu, 31 May 2012 12:47:50 +0200] rev 1082
Update copyleft
Christian Ebert <blacktrash@gmx.net> [Thu, 31 May 2012 12:47:50 +0200] rev 1081
Wlock cmdutil.copy wrapper
Expanding/shrinking happens outside the wrapped copy function;
therefore write lock the repo.
Christian Ebert <blacktrash@gmx.net> [Thu, 31 May 2012 12:47:50 +0200] rev 1080
Support commit --amend (issue3471)
Include a test as well.
Christian Ebert <blacktrash@gmx.net> [Thu, 31 May 2012 12:47:49 +0200] rev 1079
Rename kwt.record attribute to kwt.postcommit
A more general descriptive name, as the attribute will be used
for commit --amend as well.
Christian Ebert <blacktrash@gmx.net> [Fri, 18 May 2012 01:21:54 +0100] rev 1078
Merge with stable
Augie Fackler <raf@durin42.com> [Tue, 15 May 2012 14:37:49 -0500] rev 1077
hgext: mark all first-party extensions as such
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Fri, 18 May 2012 01:21:22 +0100] rev 1076
Merge with default
Christian Ebert <blacktrash@gmx.net> [Sun, 13 May 2012 14:26:26 +0100] rev 1075
Intentionally ignore check-code warning about unwrapped ui message
Christian Ebert <blacktrash@gmx.net> [Sun, 13 May 2012 14:39:47 +0100] rev 1074
Merge with stable
Brodie Rao <brodie@sf.io> [Sat, 12 May 2012 16:00:57 +0200] rev 1073
cleanup: "not x in y" -> "x not in y"
[ original upstream message ]
Brodie Rao <brodie@sf.io> [Sat, 12 May 2012 16:02:45 +0200] rev 1072
cleanup: replace naked excepts with more specific ones
[ original upstream message ]
Brodie Rao <brodie@sf.io> [Sat, 12 May 2012 16:00:53 +0200] rev 1071
cleanup: replace hasattr() usage with getattr() in hghave
[ original upstream message ]
Brodie Rao <brodie@sf.io> [Sat, 12 May 2012 15:56:23 +0200] rev 1070
cleanup: "x != None" -> "x is not None"
[ original upstream message ]
Brodie Rao <brodie@sf.io> [Sat, 12 May 2012 15:54:54 +0200] rev 1069
cleanup: eradicate long lines
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Tue, 08 May 2012 15:46:51 -0500] rev 1068
tests: set a standard terminal type
This makes test-ui-color.py happy when run in a dumb terminal.
Spotted by Jesse Glick <jesse.glick@oracle.com>
[ original upstream message ]
Patrick Mezard <patrick@mezard.eu> [Thu, 10 May 2012 18:21:15 +0200] rev 1067
repair: no need to call filterunknown() in strip()
Calling strip() will eventually trigger localrepo.destroyed() which will
invalidate _parseroots. It will call filterunknown() upon reload.
Changes to test-keyword.t are related to commit --debug running after
either qpop or rollback.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Sun, 29 Apr 2012 16:58:42 +0100] rev 1066
Merge with stable
Mads Kiilerich <mads@kiilerich.com> [Sat, 28 Apr 2012 01:22:47 +0200] rev 1065
tests: don't require 'hg' without extension on windows
Hackable uses hg.exe instead.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Fri, 06 Apr 2012 22:53:24 +0200] rev 1064
Merge with stable
Patrick Mezard <patrick@mezard.eu> [Wed, 04 Apr 2012 15:59:56 +0200] rev 1063
hghave: remove symlink test made useless by ac0da5caebec
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Wed, 04 Apr 2012 09:31:47 +0200] rev 1062
Merge with stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 03 Apr 2012 19:06:35 +0200] rev 1061
tests: make tests work if directory contains special characters
With this quoting tests will work e.g. in "/tmp/foo bar/mercurial/".
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Tue, 03 Apr 2012 16:34:50 +0100] rev 1060
Merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 02 Apr 2012 17:02:03 -0500] rev 1059
tests: shorten post-test sleeps
This helps expose races
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Mon, 02 Apr 2012 17:28:55 +0100] rev 1058
Merge with stable
A. S. Budden <abudden@gmail.com> [Fri, 30 Mar 2012 22:08:46 +0100] rev 1057
record: allow splitting of hunks by manually editing patches
It is possible that unrelated changes in a file are on sequential lines. The
current record extension does not allow these to be committed independently.
An example use case for this is in software development for deeply embedded
real-time systems. In these environments, it is not always possible to use a
debugger (due to time-constraints) and hence inline UART-based printing is
often used. When fixing a bug in a module, it is often convenient to add a
large number of 'printf's (linked to the UART via a custom fputc) to the module
in order to work out what is going wrong. printf is a very slow function (and
also variadic so somewhat frowned upon by the MISRA standard) and hence it is
highly undesirable to commit these lines to the repository. If only a partial
fix is implemented, however, it is desirable to commit the fix without deleting
all of the printf lines. This is also simplifies removal of the printf lines
as once the final fix is committed, 'hg revert' does the rest. It is likely
that the printf lines will be very near the actual fix, so being able to split
the hunk is very useful in this case.
There were two alternatives I considered for the user interface. One was to
manually edit the patch, the other to allow a hunk to be split into individual
lines for consideration. The latter option would require a significant
refactor of the record module and is less flexible. While the former is
potentially more complicated to use, this is a feature that is likely to only
be used in certain exceptional cases (such as the use case proposed above) and
hence I felt that the complexity would not be a considerable issue.
I've also written a follow-up patch that refactors the 'prompt' code to base
everything on the choices variable. This tidies up and clarifies the code a
bit (removes constructs like 'if ret == 7' and removes the 'e' option from the
file scope options as it's not relevant there. It's not really a necessity, so
I've excluded it from this submission for now, but I can send it separately if
there's a desire and it's on bitbucket (see below) in the meantime.
Possible future improvements include:
* Tidying up the 'prompt' code to base everything on the choices variable.
This would allow entries to be removed from the prompt as currently 'e' is
offered even for entire file patches, which is currently unsupported.
* Allowing the entire file (or even multi-file) patch to be edited manually:
this would require quite a large refactor without much benefit, so I decided
to exclude it from the initial submission.
* Allow the option to retry if a patch fails to apply (this is what Git does).
This would require quite a bit of refactoring given the current 'hg record'
implementation, so it's debatable whether it's worth it.
Output is similar to existing record user interface except that an additional
option ('e') exists to allow manual editing of the patch. This opens the
user's configured editor with the patch. A comment is added to the bottom of
the patch explaining what to do (based on Git's one).
A large proportion of the changeset is test-case changes to update the options
reported by record (Ynesfdaq? instead of Ynsfdaq?). Functional changes are in
record.py and there are some new test cases in test-record.t.
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Sat, 31 Mar 2012 10:44:31 -0500] rev 1056
tests: make hghave handle exec bit on Linux with vfat
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Sat, 31 Mar 2012 10:44:31 -0500] rev 1055
tests: teach hghave to actually test for symlink support
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Sat, 31 Mar 2012 17:14:32 +0100] rev 1054
Merge with stable
Dirkjan Ochtman <dirkjan@ochtman.nl> [Sat, 11 Sep 2010 10:57:35 +0200] rev 1053
tests: fix incompatibility with python-2.4 in test-hgweb
Thanks to lcantey for catching it.
[ original upstream message ]
Dirkjan Ochtman <dirkjan@ochtman.nl> [Wed, 08 Sep 2010 15:11:35 +0200] rev 1052
tests: extend get-with-headers to support cache testing
[ original upstream message ]
Nicolas Dumazet <nicdumz.commits@gmail.com> [Wed, 14 Apr 2010 17:58:10 +0900] rev 1051
pylint, pyflakes: remove unused or duplicate imports
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Sat, 11 Feb 2012 14:18:19 +0000] rev 1050
Merge with stable
Patrick Mezard <patrick@mezard.eu> [Tue, 07 Feb 2012 18:47:16 +0100] rev 1049
mq: restore _branchtags() fast path (issue3223)
Since a5917346c72e, mq saves the nodeid of the first applied patch to
cache/branchheads, which breaks the optimized cache handling introduced in
fbf8320f25c8. The problem is the revision being committed is appended to
mqrepo.applied after the commit succeeds, which means mqrepo._branchtags()
performs a regular update and write the first applied patch to the branch
cache.
One solution is to set a context variable _committingpatch on the mqrepo while
it is committing a patch and to take it in account when deciding to fast-path
mqrepo._branchtags(). Not really elegant but it works.
The changes to test-mq-caches.t reverse changes introduced by a5917346c72e. The
cache should not have been updated with mq records.
The changes to test-keyword.t are indirectly caused by a5917346c72e.
Reported and analyzed by Yuya Nishihara <yuya@tcha.org>
Notes:
- qpush still makes a slow path _branchtags() call when checking heads. Maybe
this can be optimized.
- be careful when merging this patch in default as secretcommit() was renamed
newcommit() right after the end of the code freeze.
[ original upstream message ]
Jim Hague <jim.hague@acm.org> [Wed, 08 Feb 2012 16:56:00 +0000] rev 1048
tests: tighten checks for octal escapes in shell printf.
printf on AIX default shell ksh (89) says \1 is an invalid escape. It insists
on at least 2 digits. This causes failures in test-keyword.t and test-status.t.
check-code.py already looks out for \NNN and recommends using Python
for outputting octal values. Extend the check to \NN and \N and fix up
resulting failures.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Mon, 23 Jan 2012 16:21:12 +0100] rev 1047
Merge with stable
Mads Kiilerich <mads@kiilerich.com> [Sat, 14 Jan 2012 01:56:27 +0100] rev 1046
run-tests: expand user in --with-hg
This makes it possible to run:
$ ./run-tests.py --with-hg=~/hg-bin/hg
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Fri, 20 Jan 2012 01:24:16 +0100] rev 1045
tests: let run-tests.py default to use 'sh' in $PATH instead of '/bin/sh'
This makes it easier to run tests on systems that have a usable sh in the
search path but not in the standard location.
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Sat, 14 Jan 2012 01:55:50 +0100] rev 1044
tests: add 'set -x' to the .t sh scripts in run-tests.py debug mode
This makes -d output much more readable when debugging the test framework or
very strange test failures.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Thu, 19 Jan 2012 02:01:05 +0100] rev 1043
Merge with default
Christian Ebert <blacktrash@gmx.net> [Sun, 15 Jan 2012 13:37:33 +0100] rev 1042
Update filectx.cmp monkeypatch to handle '\1\n' at start of file
Analogous to 012b285cf643 in mercurial main.
Sune Foldager <cryo@cyanite.org> [Wed, 18 Jan 2012 16:46:15 +0100] rev 1041
phases: use nodemap to check for missing nodes
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Thu, 19 Jan 2012 01:50:48 +0100] rev 1040
Merge with stable
Markus Zapke-Gr?ndemann <info@keimlink.de> [Wed, 11 Jan 2012 15:38:31 +0100] rev 1039
tests: add htmlcov option
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Thu, 12 Jan 2012 14:39:02 -0600] rev 1038
run-tests: use a list comprehension instead of map
[ original upstream message ]
Markus Zapke-Gr?ndemann <info@keimlink.de> [Wed, 11 Jan 2012 15:37:25 +0100] rev 1037
tests: fix omit path list
All directories need a trailing asterisk. Otherwise the files are not excluded
from coverage.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Fri, 09 Dec 2011 00:10:00 +0100] rev 1036
Merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 08 Dec 2011 14:32:44 -0600] rev 1035
branch: warn on branching
[ orginal upstream message ]
Christian Ebert <blacktrash@gmx.net> [Thu, 24 Nov 2011 06:43:43 +0000] rev 1034
Merge with stable
Mads Kiilerich <mads@kiilerich.com> [Mon, 21 Nov 2011 01:49:20 +0100] rev 1033
tests: use an alias to make msys 'pwd' return paths with forward slashes
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 21 Nov 2011 01:49:20 +0100] rev 1032
tests: skip cvs tests with msys on windows
They will fail with weird 'ssh' errors.
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 21 Nov 2011 01:49:20 +0100] rev 1031
tests: introduce 'hghave msys' to skip tests that would fail because of msys
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Thu, 24 Nov 2011 06:42:48 +0000] rev 1030
Merge with default
Christian Ebert <blacktrash@gmx.net> [Wed, 23 Nov 2011 01:20:32 +0000] rev 1029
test-keyword: use inline doctest syntax
Christian Ebert <blacktrash@gmx.net> [Mon, 21 Nov 2011 11:52:11 +0000] rev 1028
Merge with stable
Mads Kiilerich <mads@kiilerich.com> [Mon, 21 Nov 2011 00:39:32 +0100] rev 1027
tests: skip color test on platforms without tic
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Mon, 21 Nov 2011 11:51:46 +0000] rev 1026
Merge with default
Make tests/hgave executable on stable branch too.
Christian Ebert <blacktrash@gmx.net> [Fri, 18 Nov 2011 11:06:59 +0000] rev 1025
Merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 16 Nov 2011 18:04:19 -0600] rev 1024
merge: give a special message for internal:merge failure (issue3105)
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Wed, 16 Nov 2011 12:55:59 +0000] rev 1023
Merge with stable
Mads Kiilerich <mads@kiilerich.com> [Wed, 16 Nov 2011 03:45:14 +0100] rev 1022
tests: use the specified shell for running old fashioned sh tests
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Fri, 11 Nov 2011 09:39:33 +0000] rev 1021
Merge with stable
Christian Ebert <blacktrash@gmx.net> [Fri, 11 Nov 2011 09:38:45 +0000] rev 1020
Make hghave executable
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:25:10 +0100] rev 1019
run-tests: make $TESTTMP matching case-insensitive on windows
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:25:10 +0100] rev 1018
run-tests: don't quote command names - that do apparently not work with msys
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:25:10 +0100] rev 1017
tests: ignore \r on windows
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:25:10 +0100] rev 1016
run-tests: convert windows paths to unix
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:25:10 +0100] rev 1015
tests: make (glob) on windows accept \ instead of /
Globbing is usually used for filenames, so on windows it is reasonable and very
convenient that glob patterns accepts '\' or '/' when the pattern specifies
'/'.
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:24:53 +0100] rev 1014
tests: use 'hghave serve' to guard tests that requires serve daemon management
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:14:55 +0100] rev 1013
tests: use 'hghave system-sh' to guard tests that requires sh in system()
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:14:55 +0100] rev 1012
tests: use 'hghave no-windows' to avoid testing reserved file names on windows
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:14:55 +0100] rev 1011
tests: use 'hghave unix-permissions' for tests that really use chmod
chmod of helper scripts is not included.
tests that exercise the x bit in the file system uses 'hghave execbit'.
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 03:14:54 +0100] rev 1010
tests: use 'hghave symlink' for tests using symlinks
[ original upstream message ]
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Nov 2011 02:44:04 +0100] rev 1009
tests: make '(esc)' matching in run-tests.py work as intended
The code for match on (esc) lines didn't work, and it would thus always end up
emitting another suggestion ... which however would match the old one.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Wed, 09 Nov 2011 13:45:20 +0000] rev 1008
Merge with default
Christian Ebert <blacktrash@gmx.net> [Wed, 09 Nov 2011 13:44:57 +0000] rev 1007
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net> [Tue, 08 Nov 2011 18:13:53 +0000] rev 1006
Merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 07 Nov 2011 13:46:41 -0600] rev 1005
run-tests: replace inline python handling with more native scheme
Normally changes in tests are reported like this in diffs:
$ cat foo
- a
+ b
Using -i mode lets us update tests when the new results are correct
and/or populate tests with their output.
But with the standard doctest framework, inline Python sections in
tests changes instead result in a big failure report that's unhelpful.
So here, we replace the doctest calls with a simple compile/eval loop.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Mon, 07 Nov 2011 13:52:03 +0000] rev 1004
Merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 03 Nov 2011 15:18:10 -0500] rev 1003
run-tests: minor cleanups
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Thu, 03 Nov 2011 15:08:45 -0500] rev 1002
run-tests: pull out line matching function
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Thu, 03 Nov 2011 14:51:04 -0500] rev 1001
run-tests: pull out unified matching funcs
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Thu, 03 Nov 2011 14:48:56 -0500] rev 1000
tests: add some comments to the unified test code
[ original upstream message ]
Matt Mackall <mpm@selenic.com> [Thu, 03 Nov 2011 14:30:00 -0500] rev 999
tests: rewrite inline Python support
Tests with inline Python could turn '>>>' into their underlying python
invocation if the test got updated with -i.
[ original upstream message ]
Christian Ebert <blacktrash@gmx.net> [Mon, 07 Nov 2011 13:48:11 +0000] rev 998
Backout b78cce2b1430 until a proper solution is found
Christian Ebert <blacktrash@gmx.net> [Mon, 24 Oct 2011 17:02:10 +0100] rev 997
Merge with stable