Updated: Comment 0

Problem/Motivation

Issues like #1938884: Replace the fallback user listing with a list controller clearly shows that with the new routing system views need a way to override existing route items
instead of just adding new items.

Proposed resolution

Do the magic required to be able to override an existing route.
This requires to replace the existing items and keep the route name!

The route rebuilding works the following way:

  • Foreach static .routing.yml file a alter event is executed
  • On this alter event views figures out that the route has to be overridden and replaces the route definition but keeps the route name
  • Track in state that a certain view was used to replace an existing route
  • After all static routing files are parsed the dynamic route event is fired
  • Views now registers routes for each view which hasn't be used to replaced an existing route before

Remaining tasks

These TODOs are not required for now but are somehow important once we want people to use that in actual real world.

User interface changes

API changes

Original report by @dawehner

Files: 
CommentFileSizeAuthor
#61 override-2027115-61.patch45.88 KBdawehner
PASSED: [[SimpleTest]]: [MySQL] 58,839 pass(es).
[ View ]
#61 interdiff.txt879 bytesdawehner
#59 vdc-2027115-59.patch45.84 KBtim.plunkett
PASSED: [[SimpleTest]]: [MySQL] 58,850 pass(es).
[ View ]
#59 interdiff.txt4.34 KBtim.plunkett
#55 vdc-2027115-55.patch45.53 KBdawehner
PASSED: [[SimpleTest]]: [MySQL] 58,750 pass(es).
[ View ]
#55 interdiff.txt9.07 KBdawehner
#50 override-2027115-50.patch44.3 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] 59,743 pass(es), 5 fail(s), and 1,776 exception(s).
[ View ]
#50 interdiff.txt2.48 KBdawehner
#46 interdiff.txt11.53 KBdawehner
#46 override-2027115-46.patch42.63 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] Drupal installation failed.
[ View ]
#44 override-2027115-44.patch40.15 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] Drupal installation failed.
[ View ]
#44 interdiff.txt17.92 KBdawehner
#32 override-2027115-32.patch29.64 KBdawehner
PASSED: [[SimpleTest]]: [MySQL] 58,335 pass(es).
[ View ]
#32 interdiff.txt857 bytesdawehner
#30 route-2027115-30.patch29.67 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] Drupal installation failed.
[ View ]
#30 interdiff.txt3.17 KBdawehner
#28 vdc-2027115-28.patch29.55 KBtim.plunkett
PASSED: [[SimpleTest]]: [MySQL] 58,311 pass(es).
[ View ]
#26 vdc-2027115-26.patch29.6 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] 58,484 pass(es), 83 fail(s), and 18 exception(s).
[ View ]
#25 vdc-2027115-25.patch29.24 KBdawehner
PASSED: [[SimpleTest]]: [MySQL] 58,976 pass(es).
[ View ]
#25 interdiff.txt3.77 KBdawehner
#22 vdc-2027115-22.patch29.31 KBdawehner
PASSED: [[SimpleTest]]: [MySQL] 58,578 pass(es).
[ View ]
#22 interdiff.txt21.08 KBdawehner
#20 vdc-2027115-20.patch26.49 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] 58,402 pass(es), 13 fail(s), and 6 exception(s).
[ View ]
#20 interdiff.txt6.16 KBdawehner
#17 vdc-2027115-17.patch25.38 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] 58,684 pass(es), 16 fail(s), and 1,660 exception(s).
[ View ]
#12 vdc-2027115-12.patch25.38 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch vdc-2027115-12.patch. Unable to apply patch. See the log in the details link for more information.
[ View ]
#12 interdiff.txt6.51 KBdawehner
#10 vdc-2027115-10.patch21.64 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] 57,323 pass(es), 1 fail(s), and 0 exception(s).
[ View ]
#7 interdiff.txt666 bytestim.plunkett
#7 vdc-2027115-7.patch18.24 KBtim.plunkett
FAILED: [[SimpleTest]]: [MySQL] 56,854 pass(es), 1 fail(s), and 2 exception(s).
[ View ]
#4 vdc-2027115-3.patch18.24 KBtim.plunkett
FAILED: [[SimpleTest]]: [MySQL] 56,515 pass(es), 6 fail(s), and 23 exception(s).
[ View ]
#1 vdc-2027115-1.patch22.65 KBdawehner
FAILED: [[SimpleTest]]: [MySQL] 58,060 pass(es), 96 fail(s), and 1 exception(s).
[ View ]

Comments

Status:Active» Needs review
StatusFileSize
new22.65 KB
FAILED: [[SimpleTest]]: [MySQL] 58,060 pass(es), 96 fail(s), and 1 exception(s).
[ View ]

The idea is to check on the alter event whether it is needed to remove any existing items,
as we have added the routes by views already.

Status:Needs review» Needs work

The last submitted patch, vdc-2027115-1.patch, failed testing.

StatusFileSize
new18.24 KB
FAILED: [[SimpleTest]]: [MySQL] 56,515 pass(es), 6 fail(s), and 23 exception(s).
[ View ]

Rerolled without the change to the view yaml.

Status:Needs work» Needs review

Status:Needs review» Needs work

The last submitted patch, vdc-2027115-3.patch, failed testing.

Status:Needs work» Needs review
StatusFileSize
new18.24 KB
FAILED: [[SimpleTest]]: [MySQL] 56,854 pass(es), 1 fail(s), and 2 exception(s).
[ View ]
new666 bytes

666

Status:Needs review» Needs work

The last submitted patch, vdc-2027115-7.patch, failed testing.

Drupal\views_ui\Tests\ViewListControllerTest::testBuildRowEntityList Argument 4 passed to Drupal\views\Plugin\views\display\PathPluginBase::__construct() must be an instance of Drupal\Core\Routing\RouteProviderInterface, none given /var/lib/drupaltestbot/sites/default/files/checkout/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php:37 /var/lib/drupaltestbot/sites/default/files/checkout/core/modules/views_ui/tests/Drupal/views_ui/Tests/ViewListControllerTest.php:83

The PHPUnit test needs the route provider mocked

Status:Needs work» Needs review
StatusFileSize
new21.64 KB
FAILED: [[SimpleTest]]: [MySQL] 57,323 pass(es), 1 fail(s), and 0 exception(s).
[ View ]

Even if it kind of works now, the problem now is that you should not remove the existing remove, but replace that one with the one provided by views.

One reason is that otherwise the url generator ->generate method will fail at some point.

Status:Needs review» Needs work

The last submitted patch, vdc-2027115-10.patch, failed testing.

Status:Needs work» Needs review
StatusFileSize
new6.51 KB
new25.38 KB
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch vdc-2027115-12.patch. Unable to apply patch. See the log in the details link for more information.
[ View ]

Just tracking some work.

Status:Needs review» Needs work
Issue tags:-VDC

The last submitted patch, vdc-2027115-12.patch, failed testing.

Status:Needs work» Needs review

#12: vdc-2027115-12.patch queued for re-testing.

Status:Needs review» Needs work
Issue tags:+VDC

The last submitted patch, vdc-2027115-12.patch, failed testing.

Status:Needs work» Needs review
StatusFileSize
new25.38 KB
FAILED: [[SimpleTest]]: [MySQL] 58,684 pass(es), 16 fail(s), and 1,660 exception(s).
[ View ]

Ha, this works way better!

Status:Needs review» Needs work

The last submitted patch, vdc-2027115-17.patch, failed testing.

  1. +++ b/core/modules/user/lib/Drupal/user/Controller/UserAdmin.php
    @@ -0,0 +1,161 @@
    +  protected $query;

    this should be entityQuery.

  2. +++ b/core/modules/user/lib/Drupal/user/Controller/UserAdmin.php
    @@ -0,0 +1,161 @@
    +    $roles = array_map('Drupal\Component\Utility\String::checkPlain', user_role_names(TRUE));

    Can we add this namespace above or \ before namespace?

  3. +++ b/core/modules/views/lib/Drupal/views/Entity/View.php
    @@ -320,6 +320,17 @@ public function getExportProperties() {
       /**
        * {@inheritdoc}
    +   *
    +   * Figures out which routes are overridden l
    +   * @param EntityStorageControllerInterface $storage_controller

    We can't mix @inheritdoc and description. Blank line is missing after the comment. @param description is missing.

  4. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -18,14 +20,55 @@
    +   * @param \Drupal\Core\Entity\EntityManager $entity_manager
    +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayRouterInterface.php
    @@ -25,4 +26,12 @@
    +   * @param \Symfony\Component\Routing\RouteCollection $collection

    @param description is missing.

  5. +++ b/core/modules/views/tests/Drupal/views/Tests/Plugin/display/PathPluginBaseTest.php
    @@ -0,0 +1,74 @@
    +  public static function getInfo() {

    doc block missing.

  6. +++ b/core/modules/views/views.services.yml
    @@ -83,7 +83,7 @@ services:
    +    arguments: ['@plugin.manager.entity']

    entity.manager now

Status:Needs work» Needs review
StatusFileSize
new6.16 KB
new26.49 KB
FAILED: [[SimpleTest]]: [MySQL] 58,402 pass(es), 13 fail(s), and 6 exception(s).
[ View ]

Thank you for the review. Let's see how much passes now.

Status:Needs review» Needs work

The last submitted patch, vdc-2027115-20.patch, failed testing.

Status:Needs work» Needs review
StatusFileSize
new21.08 KB
new29.31 KB
PASSED: [[SimpleTest]]: [MySQL] 58,578 pass(es).
[ View ]

Some bugfixes here and there.

This interdiff seems horrible.

  1. +++ b/core/modules/user/user.module
    @@ -880,6 +882,22 @@ function user_menu() {
    + * Implements hook_local_actions().
    + */
    +function user_local_actions() {

    Can't we just add a user.local_actions.yml file instead?

  2. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -18,14 +20,63 @@
    +   * Reset the internal state of the route subscriber

    Resets

  3. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -18,14 +20,63 @@
    +    unset($this->viewsDisplayPairs);

    If we unset, then the property isn't there anymore at all, even though it's a declared property. I think setting it to NULL.

  4. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -18,14 +20,63 @@
    +      $views = views_get_applicable_views('uses_route');

    This is all we can do for now, but we should add a todo to convert this? I'm hoping we can add some more stuff to the Views class for stuff like this.

  5. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -34,15 +85,43 @@ public static function getSubscribedEvents() {
    +      if (($view = $view->getExecutable()) && $view instanceof ViewExecutable) {
    ...
    +      if (($view = $view->getExecutable()) && $view instanceof ViewExecutable) {

    Why the check for ViewExecutable here?

  6. +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayRouterInterface.php
    @@ -25,4 +26,12 @@
    +   * @param \Symfony\Component\Routing\RouteCollection $collection
    +   *
    +   * @return bool
    +   *   Returns TRUE if an existing route was found, otherwise FALSE.

    Needs a first doc line, I think the @return is wrong too.

  7. +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
    @@ -20,6 +23,36 @@
    +   *   The route provider

    full stop.

  8. +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
    @@ -60,12 +93,17 @@ protected function defineOptions() {
    +   * Generate a route entry for a given view and display.

    Generates

  9. +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
    @@ -126,11 +164,44 @@ public function collectRoutes(RouteCollection $collection) {
    +  public function alterRoutes(RouteCollection $collection) {

    So alter routes just runs after collectRoutes has run and basically cleans up (removes) and routes that will be overridden by view?

  10. +++ b/core/modules/views/tests/Drupal/views/Tests/Plugin/display/PathPluginBaseTest.php
    @@ -0,0 +1,76 @@
    +    $view = $this->getMockBuilder('Drupal\views\ViewExecutable')
    +      ->disableOriginalConstructor()
    +      ->getMock();
    +    $display = array();
    +    $display['display_plugin'] = 'page';
    +    $display['id'] = 'page_1';
    +    $display['display_options'] = array(

    Is the plan there to set that on the executable? Because that could be problematic if you need to use properties directly.

  11. +++ b/core/modules/views/tests/Drupal/views/Tests/Plugin/display/PathPluginBaseTest.php
    @@ -0,0 +1,76 @@
    +    // @todo write the actual test.

    I guess this needs to be done still :)

StatusFileSize
new3.77 KB
new29.24 KB
PASSED: [[SimpleTest]]: [MySQL] 58,976 pass(es).
[ View ]

Why the check for ViewExecutable here?

I had some issues while writing the patch, so this worked ...

So alter routes just runs after collectRoutes has run and basically cleans up (removes) and routes that will be overridden by view?

Exactly, but yes, this is actually not the right approach. You would have to keep the existing route name to work as expected.

I guess this needs to be done still :)

Not at all ;)

StatusFileSize
new29.6 KB
FAILED: [[SimpleTest]]: [MySQL] 58,484 pass(es), 83 fail(s), and 18 exception(s).
[ View ]

Missing file.

Status:Needs review» Needs work

The last submitted patch, vdc-2027115-26.patch, failed testing.

Status:Needs work» Needs review
StatusFileSize
new29.55 KB
PASSED: [[SimpleTest]]: [MySQL] 58,311 pass(es).
[ View ]

Rerolled

#28: vdc-2027115-28.patch queued for re-testing.

StatusFileSize
new3.17 KB
new29.67 KB
FAILED: [[SimpleTest]]: [MySQL] Drupal installation failed.
[ View ]

Added some tests and removed that todo.

Status:Needs review» Needs work
Issue tags:-VDC

The last submitted patch, route-2027115-30.patch, failed testing.

Status:Needs work» Needs review
StatusFileSize
new857 bytes
new29.64 KB
PASSED: [[SimpleTest]]: [MySQL] 58,335 pass(es).
[ View ]

.

Status:Needs review» Needs work
Issue tags:-blocker

The last submitted patch, override-2027115-32.patch, failed testing.

Status:Needs work» Needs review

#32: override-2027115-32.patch queued for re-testing.

Status:Needs review» Needs work

The last submitted patch, override-2027115-32.patch, failed testing.

Status:Needs work» Needs review
Issue tags:+blocker

#32: override-2027115-32.patch queued for re-testing.

Issue tags:+Needs followup

Finally it is green. I think we should add issues for all @todo's introduced by this patch. This is a critical issue so adding a needs followup tag.

+++ b/core/modules/user/user.local_actions.yml
@@ -0,0 +1,6 @@
+    - view.user_admin_people.page_1

Yay!!

To be honest I don't have the feeling that we should get this in as it is.

One major problem is that we should keep the existing route names otherwise the url generator will just fail.

Status:Needs review» Reviewed & tested by the community

We need to get this in to continue converting listings to views, and page callbacks to routes. Non-critical follow-ups are great

+1 RTBC and what @tim.plunkett said.

One major problem is that we should keep the existing route names otherwise the url generator will just fail.

Well 2 against 1 but I would really think that my last point is critical. I can't explain at that point of the day why exactly.

Status:Reviewed & tested by the community» Needs review

Hm. I agree with Daniel. Given that we are starting to move to things like e.g. confirm forms acting on routes rather than paths, it seems like we should really figure this out pre-commit, since it could change the implementation. No?

So just take one example you want to link to admin/people and admin/people would be already a view.

With the patch applied the generated route name of the view would differ from the one provided by default.
I will work on this tomorrow so we somehow keep the old route name.

StatusFileSize
new17.92 KB
new40.15 KB
FAILED: [[SimpleTest]]: [MySQL] Drupal installation failed.
[ View ]
  • Implemented the logic to keep the existing route name if we alter it
  • Wrote unit tests for all the things.

Status:Needs review» Needs work

The last submitted patch, override-2027115-44.patch, failed testing.

StatusFileSize
new42.63 KB
FAILED: [[SimpleTest]]: [MySQL] Drupal installation failed.
[ View ]
new11.53 KB

Just tracking some work, note this is now horrible broken as work in progress.

Status:Needs work» Needs review

I think you missed to change the status to needs review.

Status:Needs review» Needs work

The last submitted patch, override-2027115-46.patch, failed testing.

No, I think that was intentional :-)

Issue summary:View changes

blub

StatusFileSize
new2.48 KB
new44.3 KB
FAILED: [[SimpleTest]]: [MySQL] 59,743 pass(es), 5 fail(s), and 1,776 exception(s).
[ View ]

Realized that the access subscriber comes to early, so moved down the priority.

Status:Needs work» Needs review

.

.

Status:Needs review» Needs work

The last submitted patch, override-2027115-50.patch, failed testing.

  1. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -7,25 +7,101 @@
    + * The general idea done here is to first execute

    Suspect comment.

  2. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -7,25 +7,101 @@
    +   * Stores a list of view,display IDs containing routes and still has to be
    +   * added.

    Same.

  3. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -7,25 +7,101 @@
    +   * Constructs a \Drupal\views\EventSubscriber\RouteSubscriber instance.

    We're already in the namespace, so do we need it here? don't we usually just use class name.

  4. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -7,25 +7,101 @@
    +   * Resets the internal state of the route subscriber

    Full stop.

  5. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -7,25 +7,101 @@
    +      // @todo Convert this method to some service.

    This could live on one of the views classes we already have maybe? (follow up)

  6. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -7,25 +7,101 @@
    +        $this->viewsDisplayPairs[$id . '.' . $display_id] = $id . '.' . $display_id;

    Could we mapValuesToKeys() here instead? would be easier reading.

  7. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -34,16 +110,67 @@ public static function getSubscribedEvents() {
    +    foreach ($this->getViewsDisplayIDsWithRoute() as $pair) {
    +      list($view_id, $display_id) = explode('.', $pair);

    Maybe that method should return a keyed array instead? thoughts?

  8. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -34,16 +110,67 @@ public static function getSubscribedEvents() {
    +      // @todo This should have a executable factory injected.

    Follow up?

  9. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -34,16 +110,67 @@ public static function getSubscribedEvents() {
    +      if (($view = $view->getExecutable()) && $view instanceof ViewExecutable) {

    Why do we need to check this again? (I think we talked about this before, so it's again again).

  10. +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
    @@ -34,16 +110,67 @@ public static function getSubscribedEvents() {
    +        if ($view->setDisplay($display_id) && $display = $view->displayHandlers->get($display_id)) {

    If you're using setDisplay() you could just get the display directly from $view->display_handler, as the get from the display bag is already done.

  11. +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
    @@ -126,8 +185,50 @@ public function collectRoutes(RouteCollection $collection) {
    +      if (!$route->hasDefault('view_id') &&  '/' . $view_path == $route_path) {

    Can we add more brackets here, it's easier on my little eyes. If you don't want to though, that's cool too ;)

  12. +++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
    @@ -126,8 +185,50 @@ public function collectRoutes(RouteCollection $collection) {
    +        // @todo Figure out whether we need to merge some settings (like
    +        // requirements).

    From my experience in admin_views, the answer is yes. We can talk about that though, should be some followup.

Status:Needs work» Needs review
StatusFileSize
new9.07 KB
new45.53 KB
PASSED: [[SimpleTest]]: [MySQL] 58,750 pass(es).
[ View ]

We're already in the namespace, so do we need it here? don't we usually just use class name.

I went this way because everything in core is called RouteSubscriber but I so much don't care but too lazy currently to change it and rather write an incredible long sentence without a point in there.

This could live on one of the views classes we already have maybe? (follow up)

Yeah something like a view-repository could make sense? I can't think of another service where this really makes sense at the moment.

Maybe that method should return a keyed array instead? thoughts?

Well, then the mapArray::copyValuesToKeys won't work anymore.

Follow up?

#2102293: Inject the view executable factory where possible

Why do we need to check this again?

Because I need autocompletion :P

If you're using setDisplay() you could just get the display directly from $view->display_handler, as the get from the display bag is already done.

Good point, though this is kind of internal behavior, isn't it? A method is nicer and can be actually unit tested. (What about a follow up to create an getter for the display_handler like getCurrentDisplay() ?

Serializer test is not a unit tests, arg!

Well, then the mapArray::copyValuesToKeys won't work anymore.

Yes, if we went down that route obviously that part would go too :-) I had that thought after.

Status:Needs review» Reviewed & tested by the community

Using state for this is a really good idea, +1.

The unit tests look perfect.

And we even prove it works for user_admin_account()!

Status:Reviewed & tested by the community» Needs work

Sorry, only nitpicks for now, I got called away to something else.

+++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php
@@ -34,16 +114,67 @@ public static function getSubscribedEvents() {
+      // @todo This should have a executable factory injected.

an excutable

+++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayRouterInterface.php
@@ -7,13 +7,14 @@
  */
-use Symfony\Component\Routing\RouteCollection;
interface DisplayRouterInterface {

That PHPDoc has to be right on top of the interface, else api.d.o doesn't pick it up.

+++ b/core/modules/views/tests/Drupal/views/Tests/EventSubscriber/RouteSubscriberTest.php
@@ -0,0 +1,209 @@
+  public static function getInfo() {
...
+  protected function setupMocks() {
...
+class TestRouteSubscriber extends RouteSubscriber {

Docs gate.

+++ b/core/modules/views/tests/Drupal/views/Tests/Plugin/display/PathPluginBaseTest.php
@@ -0,0 +1,187 @@
+  use Drupal\Core\DependencyInjection\ContainerBuilder;
+  use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;

(nitpick) indentation.

Status:Needs work» Needs review
StatusFileSize
new4.34 KB
new45.84 KB
PASSED: [[SimpleTest]]: [MySQL] 58,850 pass(es).
[ View ]

setUp() still doesn't get a docblock, per our standards.

Fixed the rest

Status:Needs review» Reviewed & tested by the community

Back to RTBC as #58 is addressed.

Issue tags:+VDC
StatusFileSize
new879 bytes
new45.88 KB
PASSED: [[SimpleTest]]: [MySQL] 58,839 pass(es).
[ View ]

One small fix to not let the add "user local action" appear multiple times.

Issue tags:-VDC

#61: override-2027115-61.patch queued for re-testing.

Status:Reviewed & tested by the community» Fixed

Sat down to review this more in detail today. I'm just going to be bluntly honest and say that most of this patch is way over my head since it involves both gnarly views internals and gnarly routing system internals. OTOH, I think it's really important to make progress on getting the routing system done, and if there are problems that are introduced here, they can likely be cleaned up elsewhere while in the meantime we can make progress.

In reviewing, I didn't find any blocking concerns, so...

Committed and pushed to 8.x. Thanks!

Issue summary:View changes

blub

Automatically closed -- issue fixed for 2 weeks with no activity.

Issue summary:View changes

blub