-
-
Notifications
You must be signed in to change notification settings - Fork 9.7k
Fix/broken merging of parameter bag env placeholders #20214
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
mickadoo
wants to merge
3
commits into
symfony:master
from
mickadoo:fix/broken_merging_of_parameter_bag_env_placeholders
Closed
Changes from 1 commit
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
bfa4b63
[DependencyInjection] Ensure env placeholders are not duplicated and …
mickadoo 60d0847
[DependencyInjection] Add test in case where original parameter bag i…
mickadoo fe8c172
[DependencyInjection] Changes from code review. Add tests for more co…
mickadoo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next
Next commit
[DependencyInjection] Ensure env placeholders are not duplicated and …
…add test for bug
- Loading branch information
commit bfa4b6384cfa07e103aecf64631708ec821891d9
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I propose keeping the above $placeholder index and use this here:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nicolas-grekas Can you maybe explain the reason for the change here a bit more, I'm not seeing it.
With
$this->envPlaceholders += $newPlaceholders;
you're saying merge the new into the existing, fair enough. Then it's looping through each of the new ones and merging the existing ones with it? Won't this already have been done by the first merge?Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The array is recursive, but the
+
isn't. So: the 1st+
adds the new keys to the property, then+
in the foreach adds the new entries to previously existing keys.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In that case why not just use a single
array_merge
then?(edit) bad suggestion. that would not merge the individual elements from, instead just overwrite them using the second value
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nicolas-grekas I was trying to make a test for this but I need your input.
param bag A has placeholders:
'DB_USER' => ['env_DB_USER_1']
param bag B has placeholders:
'DB_USER' => ['env_DB_USER_1'], 'DB_HOST_1' => ['env_DB_HOST_1]
After the merge I would expect param bag A to have placeholders:
'DB_USER' => ['env_DB_USER_1'], 'DB_HOST_1' => ['env_DB_HOST_1]
right?
Now lets make things a little more interesting with param bag C which has a different unique identifier for one of the placeholders:
'DB_USER' => ['env_DB_USER_2']
So now we go and merge that into param bag A (after merging B). Do you expect:
A)
'DB_USER' => ['env_DB_USER_2'], 'DB_HOST_1' => ['env_DB_HOST_1]
or
B)
'DB_USER' => ['env_DB_USER_1', 'env_DB_USER_2'], 'DB_HOST_1' => ['env_DB_HOST_1]
If you're expecting B) like I am then I'll happily make your changes (which work as expected) once I reintroduce the
$this->envPlaceholders[$env][$placeholder] = $placeholder;
from above. If I left it without it your suggestion wouldn't work. The changes on my branch as they are now work in either case. I'm happy with both, using+=
looks nice and neat.Just let me know the decision and i'll push the changes and the new test.
Sorry for the delay, just want to be sure I get this right this time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
B) is the only right answer. We though array_merge_recursive would do it, but you proved us wrong. Now we're trying to achieve B), nothing else :)
I ran my proposal with your tests, so we're safe, isn't it ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pushed changes, and this time I actually tried it out on a project. I think I put too much faith in the tests last time. That or I didn't write enough tests...
Are there tests for actual retrieving of a parameter after the bag has been merged?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think so