[CssSelector] Fix :nth-last-child() translation
[Console] fix and refactor exit code handling
merged branch lazyhammer/issue-8068-2.1 (PR #8073)

This PR was merged into the 2.1 branch.

Discussion
----------

[CssSelector] Fix :nth-last-child() translation

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

Same as #8072, but for < 2.3

Commits
-------

1469953 [CssSelector] Fix :nth-last-child() translation
merged branch Tobion/console-exit-code (PR #8080)

This PR was merged into the 2.1 branch.

Discussion
----------

[Console] fix and refactor exit code handling

Split of #8038

Commits
-------

5c317b7 [Console] fix and refactor exit code handling
Fixed two bugs in HttpCache

1. 304 responses always send "Content-Type: text/html; charset=UTF-8"
header
I discovered that the HttpCache::handle method calls Response::prepare
after calling Response::isModified.  Response::isModified removes the
Content-Type header as it should, but Response::handle adds in the
default Content-Type header when none is set.  If the default
Content-Type is not the correct Content-Type, then the Content-Type in
the cache gets clobered.  I solved this problem by moving the
Response::isModified call after the Response::prepare call.  I updated
the testRespondsWith304WhenIfModifiedSinceMatchesLastModified and
testRespondsWith304WhenIfNoneMatchMatchesETag tests to verify that the
Content-Type header was not being sent for 304 responses.

2. Failure to invalidate cached entities referred to by the Location
header
I discovered that the Store::invalidate method was looking for Location
and Content-Location headers to invalidate, but it was looking in the
request headers instead of the response headers.  Because the
Store::invalidate method doesn't take a response, I decided it was
better to move this logic to the HttpCache::invalidate method instead.
I updated the testInvalidatesCachedResponsesOnPost test to verify that
Location headers are getting invalidated correctly.
merged branch jdesrosiers/ticket_8097 (PR #8098)

This PR was submitted for the 2.0 branch but it was merged into the 2.1 branch instead (closes #8098).

Discussion
----------

[HttpKernel] Fixed two bugs in HttpCache

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

1. 304 responses always send "Content-Type: text/html; charset=UTF-8"
header
I discovered that the HttpCache::handle method calls Response::prepare
after calling Response::isModified.  Response::isModified removes the
Content-Type header as it should, but Response::handle adds in the
default Content-Type header when none is set.  If the default
Content-Type is not the correct Content-Type, then the Content-Type in
the cache gets clobered.  I solved this problem by moving the
Response::isModified call after the Response::prepare call.  I updated
the testRespondsWith304WhenIfModifiedSinceMatchesLastModified and
testRespondsWith304WhenIfNoneMatchMatchesETag tests to verify that the
Content-Type header was not being sent for 304 responses.

2. Failure to invalidate cached entities referred to by the Location
header
I discovered that the Store::invalidate method was looking for Location
and Content-Location headers to invalidate, but it was looking in the
request headers instead of the response headers.  Because the
Store::invalidate method doesn't take a response, I decided it was
better to move this logic to the HttpCache::invalidate method instead.
I updated the testInvalidatesCachedResponsesOnPost test to verify that
Location headers are getting invalidated correctly.

Commits
-------

a4251bd [HttpKernel] Fixed two bugs in HttpCache
Added type of return value in VoterInterface.
merged branch richsage/voterinterface-docblock-type (PR #8117)

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

Discussion
----------

[Security] Added type of return value in VoterInterface.

| Q             | A
| ------------- | ---
| Fixed tickets | none
| License       | MIT

Simple addition of the return type for the `supportsClass` method, as per the `supportsAttribute` method doc in the interface.

Commits
-------

c176d1e [Security] Added type of return value in VoterInterface.
 [Finder] Fix unexpected duplicate sub path related AppendIterator issue
merged branch alquerci/issue-4922 (PR #8127)

This PR was squashed before being merged into the 2.1 branch (closes #8127).

Discussion
----------

 [Finder] Fix unexpected duplicate sub path related AppendIterator issue

Bug fix: yes
New feature: no
BC breaks: no
Deprecations: no
Tests pass: yes
Fixes: https://github.com/symfony/symfony/pull/4993#issuecomment-8515845
Todo: -
License of the code: MIT

> @dg:  I am afraid it is not working, see this example http://davidgrudl.com/tmp/appenditerator-finder.zip.

Commits
-------

45b68e0  [Finder] Fix unexpected duplicate sub path related AppendIterator issue
[Finder] Fix iteration fails with non-rewindable streams
merged branch alquerci/ticket-3585-7834 (PR #8120)

This PR was squashed before being merged into the 2.1 branch (closes

Discussion
----------

[Finder] Fix iteration fails with non-rewindable streams

<table>
  <tr>
    <th>Q</th><th>A</th>
  </tr>
  <tr>
    <td>Bug fix?</td><td>yes</td>
  </tr>
  <tr>
    <td>New feature?</td><td>no</td>
  </tr>
  <tr>
    <td>BC breaks?</td><td>no</td>
  </tr>
  <tr>
    <td>Deprecations?</td><td>no</td>
  </tr>
  <tr>
    <td>Tests pass?</td><td>yes</td>
  </tr>
  <tr>
    <td>Fixed tickets</td><td>#3585, #7834</td>
  </tr>
  <tr>
    <td>License?</td><td>MIT</td>
  </tr>
</table>

- [x] Add a good detection of non seekable stream
- [x] Add some unit tests

But the iteration under ftp stream still not work properly. Edit: need
tests for that.

Commits
-------

169c0b9 [Finder] Fix iteration fails with non-rewindable streams