merged branch helmer/processutils_patch (PR #8691)

This PR was submitted for the master branch but it was merged into the 2.3 branch instead (closes #8691).

Discussion
----------

[Process] Fix empty process argument escaping on Windows

PR #6796 introduced a regression on Windows platform (symfony 2.3.0+), forgetting to escape explicitly requested empty arguments to ```""``` and return an empty string instead.

This behaviour is imo unintended and renders the component unusable for corner-cases, where you indeed want to specify an empty argument. One good example of this is assetic and compass, which (up to this day) relies on existence of empty parameters on windows.

Some panic and related links on the topic:
https://github.com/kriswallsmith/assetic/issues/455
https://github.com/kriswallsmith/assetic/pull/471
http://stackoverflow.com/questions/17001517/symfony2-3-with-compass ([diff](http://marker.to/KrctHM))
http://stackoverflow.com/questions/17135219/symfony-2-compass-with-assetic-on-windows-xp

Please consider a merge to master and a backport to 2.3.x

Commits
-------

a91537a Fix empty process argument escaping on Windows
merged branch EmmanuelVella/validators (PR #8577)

This PR was merged into the 2.3 branch.

Discussion
----------

Validators

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| License       | MIT

This PR avoid comparison validators to be executed if the compared value is null.

Commits
-------

48338fc Ignore null value in comparison validators
Make sure ContextErrorException is loaded during compile time errors
merged branch ShiraNai7/master (PR #8688)

This PR was submitted for the master branch but it was merged into the 2.3 branch instead (closes #8688).

Discussion
----------

[Debug] Make sure ContextErrorException is loaded during compile time errors

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | no
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | n/a

### Description

When the `ErrorHandler->handle()` attempts to throw a `ContextErrorException` the script might die with a Fatal Error because the class is not found.

    FatalErrorException: Error: Class 'Symfony\Component\Debug\Exception\ContextErrorException' not found in ...

That effectively hides the original error and causes confusion.

### Cause

The cause is a bug/limitation of PHP that makes class autoloading completely inactive during "compiling".

Relevant PHP source code in `zend_execute_API.c`:

    /* The compiler is not-reentrant. Make sure we __autoload() only during run-time
     * (doesn't impact functionality of __autoload()
    */
    if (!use_autoload || zend_is_compiling(TSRMLS_C)) {

#### More information about the PHP bug/limitation:
- https://bugs.php.net/bug.php?id=65322
- many duplicates/relevant: https://www.google.com/search?btnG=1&pws=0&q=site%3Abugs.php.net+autoload+error+handling

### The fix

The most simple way to fix this is to manually ensure that `ContextErrorException` is loaded and if not, load it. This is what I did.

Another way is to detect if autoloading is available (possible by prepending a temporary autoloader) and act accordingly (how?).

### The test

I also added a test case that would fail with a fatal error if the error handler does not successfully throw an exception in case of a compile time error. But I'm not sure if this is the best way or if there should be a test case at all.

###

Commits
-------

b0082ab [Debug] Make sure ContextErrorException is loaded during compile time errors
[HttpKernel] added $event->isMasterRequest()
merged branch kriswallsmith/kernel/is-master-request (PR #8702)

This PR was merged into the master branch.

Discussion
----------

[HttpKernel] added convenience method $event->isMasterRequest()

Prettier code and easier mocking.

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | ~
| License       | MIT
| Doc PR        | ~

Commits
-------

554f95f [HttpKernel] added $event->isMasterRequest()
[Console] Added a way to set terminal dimensions
merged branch lyrixx/console-set-dimension (PR #8603)

This PR was squashed before being merged into the master branch (closes #8603).

Discussion
----------

[Console] Added a way to set terminal dimensions

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #8595
| License       | MIT
| Doc PR        | n/

Commits
-------

ce32981 [Console] Added a way to set terminal dimensions
[Console] Added more semantic commands to detect verbosity
merged branch lyrixx/console-verbosity (PR #8640)

This PR was squashed before being merged into the master branch (closes #8640).

Discussion
----------

[Console] Added more semantic commands to detect verbosity

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | n/a

Commits
-------

0fa3a74 [Console] Added more semantic commands to detect verbosity
fixed typo
optimize some unneeded casts (esp. when casting something to string for array access)
fix phpdoc and add typehints to private methods
merged branch Tobion/cast-optimization (PR #8201)

This PR was submitted for the 2.3 branch but it was merged into the master branch instead (closes #8201).

Discussion
----------

Cast optimization

bc break: no
test pass: yes

I searched for some unneeded casts esp. for `$array[(string) $stringOrInteger]`. But found only a few. When doing so I mainly fixed some phpdocs.

Commits
-------

2c41a31 [Serializer] fix phpdoc and add typehints to private methods
ebe7015 optimize some unneeded casts (esp. when casting something to string for array access)
Add possibility to use array prefixes

This can be useful to use /opt/custom-php/bin/php composer.phar as a prefix, it is not possible with the current implementation
merged branch romainneutron/process-array-prefixes (PR #8179)

This PR was submitted for the 2.3 branch but it was merged into the master branch instead (closes #8179).

Discussion
----------

[2.3][Process] Add possibility to use array prefixes

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | no
| License       | MIT
| Doc PR        | no

This can be useful to use `'/opt/custom-php/bin/php' 'composer.phar'` as a prefix, it is not possible with the current implementation.

I submit the patch on 2.3 as `ProcessBuilder::setPrefix` method has been added for release 2.3. If it's too late for such modification, let me know, I'll open the PR against master.

Commits
-------

ab4812f [Process] Add possibility to use array prefixes
Use strstr instead of strpos
merged branch larowlan/master (PR #8081)

This PR was submitted for the master branch but it was merged into the 2.2 branch instead (closes #8081).

Discussion
----------

Use strstr instead of strpos in ClassLoader (4% perf improvement)

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | [
| License       | MIT
| Doc PR        |

Using ClassLoader in Drupal 8, using strstr instead of strpos nets 4% perf improvement.
XHPROF diff https://dl.dropboxusercontent.com/u/10201421/diff.html

Commits
-------

25d7b90 [ClassLoader] Use strstr instead of strpos
[Filesystem] fixed exception message when not a able to write to a directory
merged branch deeky666/fix-filesystem-exception-message (PR #8587)

This PR was squashed before being merged into the master branch (closes #8587).

Discussion
----------

[Filesystem] fixed exception message when not a able to write to a directory

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | n/a

This simply fixes an exception message in the Filesystem Component when a directory is not writable while dumping a file via `dumpFile()`.

Commits
-------

8b32a4b [Filesystem] fixed exception message when not a able to write to a directory