As a way of working around race conditions (#2376819: Race condition on busy site), compatibility problems (#1807460: Field collection doesn't play nice with workbench moderation (patch)), etc, rewrite the module to leverage the new Drafty module which executes the state changes during a single entity update action thanks to its use of hook_entity_presave().

CommentFileSizeAuthor
#129 workbench_moderation-n2376839-125.patch47.29 KBDamienMcKenna
#125 interdiff-2376839-106-125.txt3.2 KBgnucifer
#125 workbench_moderation-n2376839-125.patch47.29 KBgnucifer
#122 workbench_moderation-n2376839-with-106-122.patch46.56 KBgnucifer
#119 workbench_moderation-n2376839-119.patch46.56 KBgnucifer
#106 workbench_moderation-n2376839-106.patch46 KBDamienMcKenna
#96 workbench_moderation-n2376839-96.patch46 KBdgtlmoon
#95 workbench_moderation-n2376839-95.patch.patch46 KBMiroslavBanov
#89 workbench_moderation-n2376839-89.patch724 bytesDamienMcKenna
#62 workbench_moderation-n2376839-62.patch44.49 KBDamienMcKenna
#61 2376839-wm-drafty-59.patch45.29 KBMiroslavBanov
#53 interdiff.txt402 bytesnicrodgers
#53 workbench_moderation-n2376839-53.patch45.3 KBnicrodgers
#51 workbench_moderation-n2376839-51.patch445 bytesDamienMcKenna
#46 2376839-wm-drafty-46.patch45.21 KBMiroslavBanov
#36 2376839-wm-drafty-21.patch44.28 KBjoelpittet
#29 fail.png142.72 KBMiroslavBanov
#21 2376839-wm-drafty-21.patch44.28 KBagentrickard
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

DamienMcKenna’s picture

Because WM 2 is using the State Machine v3 module which still uses the dual node_save() process, this would need to either be a fork or be built as WM 3.

DamienMcKenna’s picture

das-peter’s picture

This sounds interesting. It would be great if we could focus all efforts of solving those issues (drafts / revisions) in one location.

catch’s picture

The main problems I've seen I've seen is with overwriting the current revision somehow. Either saving entities with $entity->revision = FALSE during workflow operations (i.e. publishing a draft revision) and/or using field_attach_update() to workaround core's lack of support for writing revisions without touching base tables etc.

Hope with drafty is to 1. Not have that set of problems since it'll always force a new revision all the time (then at some point deal with revision proliferation) 2. Provide a single low-level module that any workflow creating draft revisions can rely on so if there are issues they can be handled in one place.

I don't have clients using workbench_moderation atm so I won't work on this personally unless that changes, but happy to review if someone else takes this on.

Michelle’s picture

Issue summary: View changes
DamienMcKenna’s picture

FYI the existing module Revisioning already uses the same/similar logic to handle state changes (hook_presave), so maybe effort should be moved over to using it instead?

catch’s picture

So I'd missed revisioning module when reviewing other work, but it doesn't look like it solves the various issues completely either.

If you look at revisioning_node_update() it's following a slightly different approach to drafty - it 'resets' the {node} and field_data_*() tables manually to match the previous published revision state, as opposed to drafty which always uses entity_save() everywhere. This means it needs to handle file entities, taxonomy index etc. individually. Also incompatible with alternative field storage.

Also it looks like it would suffer from at least one issue I've seen with CPS and field collections - where the field collection archive state isn't updated correctly for the published revision - this is tracked in field_collection_entity_update() (see current version of CPS module - various issues with field_collection is why I started the drafty project).

http://cgit.drupalcode.org/revisioning/tree/revisioning.module#n599

DamienMcKenna’s picture

I presume the problems you saw with Field Collections in CPS would also be true of other linked objects, e.g. files, FPPs or ECK via EntityReference, i.e. that there's a need to also control the revisioned state of the linked objects? In EntityReference there's #1837650: Allow referencing a specific revision ID which can help, but I've not looked into Field Collection much.

catch’s picture

Field collection actually marks the field collection item entities as archived or not archived based on the status of the parent entity referencing them, that's not the case for any of the other reference modules so for the specific problem I'm thinking of it's not an issue. File usage is similar though and that can go horribly wrong with the update-in-place method.

The ability to say 'I want this version of this entity to be referenced by this version of this entity' isn't something that CPS deals with - if you have an edit to one entity that references another entity that you also edit at the same time, that can be handled by keeping both edits in the same changeset.

I'm not convinced per-revision entity references is a good idea - in the published version of the site you just want to reference the default revision, anything else bypasses field cache (or entitycache).

DamienMcKenna’s picture

.. hence the notion of needing to keep a changeset of multiple entities.

If the "published" state of each of the connected entities is kept in sync, why wouldn't it work with caching?

catch’s picture

If the entity reference field is referenced by both entity id and revision id, then whenever you load the entity based on that reference you need to specify the revision ID.

Both core field cache and entitycache don't both caching when a specific revision ID is requested, so it'll be a cache miss on the field cache.

See https://api.drupal.org/api/drupal/modules!field!field.attach.inc/functio...

DamienMcKenna’s picture

Version: 7.x-1.x-dev » 7.x-2.x-dev
Priority: Normal » Major

Bumping this to v2, because it'd be a large architecture change.

States Machine doesn't fix the architectural flaw, WM is just "passing the buck".

das-peter’s picture

How about "pass the buck" from State Machine to drafty then?
I'd really like to see this solved in a central place.

DamienMcKenna’s picture

@das-peter: That'd be my suggestion.

mikeryan’s picture

Another pain point with the current architecture: #1445824: Support for Migrate module

das-peter’s picture

I started working on this locally. But it's not quite there yet

DamienMcKenna’s picture

Status: Active » Postponed

Waiting to see what happens with #2376819: Race condition on busy site first.

DamienMcKenna’s picture

Status: Postponed » Active

Sorry, scrap that, back to Active.

iStryker’s picture

If we do a rewrite, will it get rid of the workbench_moderation_store() function added to drupal_register_shutdown_function(). This has cause major problems, with resaving the live revision. This causes undesirable results when other modules that are using hook_node_save() and/or hook_entity_update()/hook_entity_insert().

das-peter’s picture

Using drafty makes any drupal_register_shutdown_function() obsolete.

agentrickard’s picture

Status: Active » Needs review
FileSize
44.28 KB

We've been working on this internally for a project, and here's the patch we have, which includes proper test coverage.

MiroslavBanov’s picture

Patch #21 is for the 7.x-1.x version of Workbench moderation. Just a suggestion - If the hook_entity_presave is changed back to hook_node_presave, and if the function workbench_moderation_set_node_state is moved lower into the file, the diff would be easier to review.

This is very good news. We have been using Workbench moderation module 1.x, but often there are problems with field collections, CER, programmatic saving of nodes, and others. I will test this patch when I find the time.

agentrickard’s picture

IIRC, we have to use hook_entity_presave() because of the callback order. Drafty uses it, and if we fire in hook_node_presave() our changes are not respected.

MiroslavBanov’s picture

Aha, OK :). Ignore what I said.

MiroslavBanov’s picture

OK, testing #21, it does appear to work, and I see no regressions. Great job, agentrickard. I think it is better to focus on that patch, rather than on the 2.x branch.

Unfortunately for me, #21 doesn't automatically resolve all of my problems related to field collections, and synchronization of workbench-moderation-enabled nodes on Drupal sites via services.

das-peter’s picture

I think it is better to focus on that patch, rather than on the 2.x branch

Well, the 2.x branch uses state machine - and for state machine there's the 3.x-drafty branch we're testing for a project atm. :)

agentrickard’s picture

So is anyone willing to call this RTBC? Are the test cases sufficient?

MiroslavBanov’s picture

I haven't reviewed the tests or run the tests. But I did review the code, tested manually, and I am using the patch in a project. I may look at the tests later but this will be after couple of weeks, probably.

MiroslavBanov’s picture

FileSize
142.72 KB

Now that I see the test changes, they are not many. But for some reason I am getting failures. Not sure if there is any regression or they were like that initially. If there is no regression, I say this is RTBC, but need second opinion.

Test failures are attached.

MiroslavBanov’s picture

Version: 7.x-2.x-dev » 7.x-1.x-dev

Need testbot to test on 7.x-1.x

das-peter’s picture

FYI: I just merged the Drafty integration into the State Machine 7.x-3.x branch which is used by Workbench Moderation 2.x

Fabianx’s picture

Status: Needs review » Reviewed & tested by the community

No idea what the test failures are, but from a 'drafty' / CPS maintainer perspective, this would be RTBC (ready to be committed) - I did not test it, but Miroslav did ...

Hoping that setting RTBC status will re-run the bot on the patch - can be set back afterwards.

Also not sure how 3.x handles the integration.

Fabianx’s picture

Issue tags: +Needs manual test run
colan’s picture

Status: Reviewed & tested by the community » Needs review

Maybe it needs to be set to Needs Review? That test is still stuck. If this doesn't work, anyone know how to get it rolling again? We've got both the old & new QA systems enabled on this project.

catch’s picture

I'd re-upload the patch.

joelpittet’s picture

Status: Needs review » Needs work

The last submitted patch, 36: 2376839-wm-drafty-21.patch, failed testing.

Status: Needs work » Needs review

Status: Needs review » Needs work

The last submitted patch, 36: 2376839-wm-drafty-21.patch, failed testing.

Status: Needs work » Needs review

Status: Needs review » Needs work

The last submitted patch, 36: 2376839-wm-drafty-21.patch, failed testing.

Dave Reid’s picture

Does anyone else feel really uneasy making this dependency/change on the stable 1.x branch? Also confused about the very low number of test passes returned by the new test bot.

MiroslavBanov’s picture

Well you are probably right about uneasiness and dependency things. But the testbot failures don't make sense at all. They look like problems with the testbot.

Fabianx’s picture

#42: The new number is just the number of tests, but if you look at the detailed results you see that it ran all the tests.

The old testbot counted the assertions - it is probably broken for good now though ...

MiroslavBanov’s picture

Should we open an issue in testbot issue queue? I really don't understand testbot problems, and the testbot FAQ is not very helpful.

MiroslavBanov’s picture

Really I don't understand what's going on with the testbot, bu let's try this one more time.

Only changed the dependencies in setUp().

Status: Needs review » Needs work

The last submitted patch, 46: 2376839-wm-drafty-46.patch, failed testing.

The last submitted patch, 46: 2376839-wm-drafty-46.patch, failed testing.

DamienMcKenna’s picture

Odd. I ran the tests locally and they all passed successfully. I'll look into them.

DamienMcKenna’s picture

Status: Needs work » Needs review

Ok, yes, it's because the Drafty module wasn't downloaded, it only grabs core and workbench_moderation - see the console output for details: https://dispatcher.drupalci.org/job/default/83005/console

DamienMcKenna’s picture

The way to fix this would be add a small commit to the main module to add 'drafty' as a test requirement, and then it'd be picked up for a follow-on patch test. Something like the attached file.

DamienMcKenna’s picture

FYI the hint to the root problem is the following failure message:

fail: [Other] Line 14 of sites/all/modules/workbench_moderation/tests/workbench_moderation.test:
Enabled modules: workbench_moderation_test, drafty, workbench_moderation

If it fails to enable a module then confirm in the console output it was able to download it - in this case it did not download drafty therefore it would obviously not be able to enable it.

nicrodgers’s picture

The attached patch is based on #46 and adds drafty as a test_dependency in the .info file as per #51, hopefully this will get the test bot to pass.

Status: Needs review » Needs work

The last submitted patch, 53: workbench_moderation-n2376839-53.patch, failed testing.

The last submitted patch, 53: workbench_moderation-n2376839-53.patch, failed testing.

DamienMcKenna’s picture

Status: Needs work » Needs review

@nicrogers: The problem isn't the test_dependency in the main patch, the dependencies won't be downloaded unless they're first listed in the existing codebase, hence the need for a separate patch (#51) to first add the new dependency.

At this point we need a maintainer to chime in on what to do next.

das-peter’s picture

Just patched & pushed 7.x-1.x with #51 - hope the test bot can run now.

The last submitted patch, 46: 2376839-wm-drafty-46.patch, failed testing.

The last submitted patch, 46: 2376839-wm-drafty-46.patch, failed testing.

MiroslavBanov’s picture

Let's try this again. Same as #53, only change is info file.

DamienMcKenna’s picture

This is the patch from #36 rerolled.

nicrodgers’s picture

Status: Needs review » Needs work

After applying this patch, translating content with more than one revision doesn't work properly. Once there is more than one revision, the translate tab still shows links to the published revision, and there is no apparent way to translate the current draft revision.

MiroslavBanov’s picture

@nicrodgers

Are you sure this patch is what caused the problem? Can you give some steps, or requirements to reproduce this?

MiroslavBanov’s picture

Status: Needs work » Active

@nicrodgers

I tried to see how it works with i18n_node + translation + workbench_moderation (without patches). It is translating the published version and not the current draft, and there is no change/regression caused by this patch.

Please open a separate issue as it is not related. If you still think it is regression introduced with the patch, please provide steps to reproduce.

MiroslavBanov’s picture

Status: Active » Needs review
MiroslavBanov’s picture

Status: Needs review » Reviewed & tested by the community

To me, this is RTBC. I have used the earlier version for a while. And all that's changed is the test dependency to fix the testbot failure.

nicrodgers’s picture

@MiroslavBanov

This patch doesn't cause the problem specifically, sorry for the confusion.

There is a patch in https://www.drupal.org/node/1707156 that successfully integrates workbench moderation with entity translation, enabling translation of revisions through the workflow process. That issue was marked as postponed, as a number of developers said that this issue (rewriting to use Drafty module) would make that patch unnecessary. I wasn't sure which of the two issues to feedback on, so I added it to both. Sorry for the confusion.

Fabianx’s picture

RTBC + 1, patch still looks good to me.

colan’s picture

Assuming the concerns from #42 have been alleviated, does anyone have any reservations about this latest patch, or should we commit it?

I'm assuming we'll have to put something in the release notes about installing Drafty.

catch’s picture

It should probably be a new branch given the new dependency?

DamienMcKenna’s picture

The problem with using a new branch is that there's already a 7.x-2.x branch that contains a different rewrite.

colan’s picture

That's what I was wondering. 2.x is used for the State Machine / State Flow implementation. So a new 3.x then?

hass’s picture

Is 2.x dead? Then we can overwrite it...

dgtlmoon’s picture

+1 overwriting 2.x branch. #1316314: Workflow Architecture for Workbench Moderation is what 2.x is about and that issue is verrrry unloved

DamienMcKenna’s picture

My concern with overwriting the 7.x-2.x branch is that it would break existing sites that were already using it, whereas publishing a new 7.x-3.x branch and not marking it as a preferred branch would allow those sites to continue as-is. Of course if the 7.x-1.x branch was deprecated would site maintainers know to jump to 7.x-3.x or would the updater jump to 7.x-2.x?

Ultimately, this whole situation is a little awkward.

dgtlmoon’s picture

Why not commit to 7.x-1.x ? The other concern is that this work will also get lost, 1.x is VERY active

hass’s picture

A 2.x DEV version was never supported. There was also no working upgrade path as I know. They are lost on all ways. If we now use 2.x everyone knows this is the next major version. I hope there is now a working upgrade path and also a upgrade path to D8.

catch’s picture

Seems simpletest to make sure 7.x-2.x is marked completely unsupported and has no releases, then commit this to 7.x-3.x. Don't think it's that confusing if there's a dead 2.x branch.

dgtlmoon’s picture

what happens in the future with this new 3.x branch then? how does anyone know it's got anything todo with Drafty? why not merge this into 1.x and close 2.x?

catch’s picture

@dgtlmoon it'll need to be in the release notes and 1.x can move to unsupported.

The advantage of a new branch is less chance of people missing they need to do something extra when updating then getting fatal errors if they don't.

dgtlmoon’s picture

@catch sure, just trying to see that this work does not become another 2.x branch left behind

"The advantage of a new branch is less chance of people missing they need to do something extra when updating then getting fatal errors if they don't."

What are those 'something extras', can you write tests for it?

What fatal errors exactly are you referring to? should the issue be moved be to Needs Review? I'm still voting for 7.x-1.x there

I still see no clear way or plan that the existing 1.x branch and this 'new branch' you propose will ever become the one branch

catch’s picture

What are those 'something extras', can you write tests for it?

You need to download drafty module before updating.

I still see no clear way or plan that the existing 1.x branch and this 'new branch' you propose will ever become the one branch

1. Create 7.x-3.x branch
2. Commit this patch to it
3. Release 7.x-3.0
4. Move all 7.x-1.x issues to 7.x-3.x
5. Stop committing anything to 7.x-1.x
6. Mark 7.x-1.x unsupported

colan’s picture

I'm with @catch on this one. Was just about to post that plan myself.

hass’s picture

I have a question about the upgrade path. Does this patch not require a single DB update? Just wondering that such a major change does not require an upgrade... Is it missing or not required?

MiroslavBanov’s picture

I also think it is safest to move to 3.x, and like the plan in #83.

MiroslavBanov’s picture

@hass

Does this patch not require a single DB update?

> Correct. It really is not needed.

DamienMcKenna’s picture

One quick point - shouldn't there be an update script to enable Drafty?

DamienMcKenna’s picture

This is an example of what the update script could look like.

catch’s picture

@DamienMcKenna that looks right to me.

stefan.r’s picture

Now that this is finalized, can we tag a new 7.x-1.5(-beta?) release?

DamienMcKenna’s picture

I'd like to see this patch committed somewhere so that we can reroll all the other RTBC issues.

colan’s picture

Status: Reviewed & tested by the community » Needs work

Don't we need to include #89 in the patch first though, or do we want to do these separately in the new branch?

MiroslavBanov’s picture

Here's both patches merged.

dgtlmoon’s picture

Dave Reid’s picture

I'm still confused why we're adding a major dependency change in a stable 1.x branch. We should be doing this in a 7.x-3.x branch.

  • Dave Reid committed ea81d25 on 7.x-1.x
    Revert "Issue #2376839 by MiroslavBanov, nicrodgers, DamienMcKenna,...
Dave Reid’s picture

I created a new 7.x-3.x branch and reverted the drafty test dependency from the 7.x-1.x branch. I'll assign this issue to the branch once it becomes available.

Dave Reid’s picture

Status: Needs review » Needs work
Issue tags: -Needs manual test run

Will need to be re-rolled because the update hook should be workbench_moderation_update_7300() now.

Dave Reid’s picture

Version: 7.x-1.x-dev » 7.x-3.x-dev
dgtlmoon’s picture

@davereid that's very heavy handed to just move this to 3.x branch without explaining why you don't understand, not really feeling the love here

stefan.r’s picture

Yeah that's unfortunate, would have been great to have it already widely installed on 1.x. How close is 3.x to being as stable as 1.x?

On the 1.x branch can we make it optional so it's enabled for new installs and disabled (but can be opted in to) for existing installs?

Dave Reid’s picture

New dependencies should not just be added in a branch after it has a stable release. That kind of major change warrants new branches, especially if those changes are not optional. It has been discussed several times already in this issue that we should move this to a new branch, so I was acting on that.

DamienMcKenna’s picture

Status: Needs work » Needs review
FileSize
46 KB

So, an update script like this?

dgtlmoon’s picture

Whilst testing this #2730265: Try to avoid saving a new revision when restoring the published revision

    // Doing this in hook_entity_update() so that the entire process is
    // completed within entity saving. However this results in two entity saves
    // within entity insert. The other option is hook_exit(), which is not
    // better since for example that would happen outside the transaction.

yeah so it seems it's probably well best to keep this code away from the 1.x branch, this could still break things

dgtlmoon’s picture

Status: Needs review » Needs work
dgtlmoon’s picture

drafty maintainer says that a double save and race conditions are unavoidable as it currently stands with the drafty module.

where does this leave the work here? it does not resolve the original issue as stated by the owner

MiroslavBanov’s picture

@dgtlmoon
I don't get what you're saying in #107 and I don't get why you're making this a needs work in #108. Please explain.
With using Drafty, things are a bit better than without Drafty, because we avoid register_shutdown_function(). There are still two entity_update happening. That's true for both branches.

As for the stability of 3.x, it is exactly the same as 1.x because we branch from 1.x, and there is only this change in it. The question is how quick we can deprecate 1.x and document the upgrade, so the community can focus on 3.x branch.

Dave Reid’s picture

WIthout any benefit around the double entity-saving, I'm not sure this is worth the effort at this point, especially in fragmenting work and efforts.

dgtlmoon’s picture

@Miroslavbanov see the issue linked iny comment above. It is based on what the drafty maintainer says. There is simply nothing for me to explain "This is unavoidable with forward revisions in 7.x. Workbench,the version of cps before drafty, and other modules were doing this logic in hook_exit() or directly updating the node table both of which lead to data integrity issues or race conditions.

If someone can come up with a non-race-condition alternative that'd be great, but you have to save two revisions and core doesn't have an Api for saving only to the revision tables."

if you read this issues original description you can see this issue has wandered somewhat

MiroslavBanov’s picture

Does this patch cause Race conditions? Does it resolve Race conditions? I can't say for sure. I think it helps resolve some of the linked issues that are about batch/bulk updates, and the migration module specifically. The issues seem to be more about data integrity and consistency than about performance.

stefan.r’s picture

As for the stability of 3.x, it is exactly the same as 1.x because we branch from 1.x, and there is only this change in it. The question is how quick we can deprecate 1.x and document the upgrade, so the community can focus on 3.x branch.

Then the plan in #83 sounds great :)

catch’s picture

The double entity_save() is unavoidable in Drupal 7. It's fixed in Drupal 8 but that doesn't help 7.x users and it's not backportable.

I first suggested the drafty forward revision approach about six years ago in a Drupal 7 core forward revisions issue (that got derailed). To not do that, you'd need to be able to save an entity without touching the main table, which there is no API for - neither for entities themselves or for field API.

The difference with drafty and workbench currently is not doing the logic in hook_exit(). The hook_exit() causes race conditions and data-loss, and is why busy sites get corrupted data and field_collection gets broken. If you look at drafty and CPS's code, it has zero special casing for field_collection, only a couple of workarounds for entity_translation and title module bugs/limitations. This is what the issue summary identifies and is a valid reason for the rewrite. I wrote drafty specifically to address similar race conditions in CPS for a Tag1 client - it was using the hook_exit() approach before that.

To summarize, there are three ways to do this, all Drupal 7 workflow modules do some version of these:

1. drafty's method - no race condition, but double save.
2. Save in hook_exit() - race condition and double save.
3. Manual queries on the node table - race conditions, breaks other modules worse than #1 and #2 and no workaround because it's bypassing APIs altogether.

I'm not currently working on the project that's using CPS, nor any sites using workbench, so I have limited time to help with this. #2379071: Use drafty module for draft revision handling is the equivalent CPS issue if people want more background.

catch’s picture

Status: Needs work » Needs review
catch’s picture

Category: Feature request » Bug report

Also this is a data loss bug, not a feature request.

nikolabintev’s picture

Status: Needs review » Needs work

It isn't in 7.x-3.x yet, and it doesn't apply anymore to latest 7.x-3.x. Needs re-roll.

gnucifer’s picture

I gave it a shot, re-roll against current 7.x-1.x (52ff3ad818c62a4e5bd9d7e8ad420e22f2ff5e74).

gnucifer’s picture

Status: Needs work » Needs review
gnucifer’s picture

Forgot to include changes in #106, hold on.

gnucifer’s picture

gnucifer’s picture

Status: Needs review » Needs work

I just reviewed the re-rolled patch again and it seems like I botched the merge and some changes are missing. Please don't use the new patch! I don't have time to re-roll it again right now, but if not any one else beats me to it I will give it another go on monday.

DamienMcKenna’s picture

The patch also needs to be rerolled against 7.x-3.x rather than 7.x-1.x.

gnucifer’s picture

Ok, rerolled against 7.x-3.x. I think I got it right this time.

gnucifer’s picture

Status: Needs work » Needs review
DamienMcKenna’s picture

Can one of the project's maintainers please enable automated testing for the 7.x-3.x branch? Thanks.

Dave Reid’s picture

Enabled, need to have the patch re-uploaded to test.

DamienMcKenna’s picture

Re-uploading gnucifer's patch fro #125.

MiroslavBanov’s picture

Status: Needs review » Reviewed & tested by the community

OK, let's get this patch in. I have been using this since #21, and I am now using it on a new project as well.

stefan.r’s picture

After this patch, would anything be blocking a 7.x-3.0 still?

dgtlmoon’s picture

To the maintainers - please put some really informative text on the project page about exactly what is in the 3.x branch once this is merged in

DamienMcKenna’s picture

Bump.

das-peter’s picture

Status: Reviewed & tested by the community » Fixed

As this was essentially stuck I decided to commit and push it despite the agreement I had to only touch the 2.x branch.
I did my best to give proper credit.

DamienMcKenna’s picture

It was @agentrickard who did all the work, he's due all the credit, but thanks.

das-peter’s picture

@DamienMcKenna Damn, I was afraid that I missed something :( - thanks for clarifying
@agentrickard sorry about that! :|

Fabianx’s picture

#137: You can still tick the right checkbox and revert the commit, then redo it with proper credit - if you want to.

That is what we do in core sometimes.

Status: Fixed » Closed (fixed)

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

agentrickard’s picture

Thanks, everyone, for pushing this forward.

smustgrave’s picture

I'm not sure if this is the right thread but I was wondering what is the benefit of Drafty's forward revisioning? Why does it need to save twice?

MiroslavBanov’s picture

@smustgrave

It saves twice with or without Drafty.

See also: https://www.drupal.org/node/2376839#comment-11214317 for details.