How does one add revision information to custom built entities?
So far this seems to be the best example to follow/debug and learn from, others just seem to lack that crucial sentance that actually helps to see what's going on:
https://www.drupal.org/project/typical_entity_example

Use typical_entity_example_5 and note the work on .install and .module.
The key elements are in hook_entity_info (.module)/ hook_schema (.install) and the typical_entity_example_5_form_submit(...) (.admin.inc) function where we have:

$entity = $form_state['typical_entity_example_5'];
entity_form_submit_build_entity('typical_entity_example_5', $entity, $form, $form_state);
$entity-&gt;is_new_revision = TRUE;
$wrapper = entity_metadata_wrapper('typical_entity_example_5', $entity);
$wrapper-&gt;save();


The power of this example is that the form of the schemas are more or less the same, but with differences in the columns used as primary keys. 

I'm still trying to work out though whether it's better to have it in ->save() rather than using it in the admin form submit as above. So that any and every save invocation creates a new entity. Programmatical (non aforementioned admin UI) editing of an entity would presumably not create a new revision unless manually coded in.

NOTE: you can put it in either the custom entity class: 

class YourClass extends Entity {
    public function save() {
        $this-&gt;is_new_revision = TRUE;
        parent::save();
    }
}


or custom controller:

class YourClassController extends EntityAPIController {
    public function save($entity, $transaction = NULL) {
        $entity-&gt;is_new_revision = TRUE;
        return parent::save($entity, $transaction);
    }
}


Or both, I guess. I'm still not 100% sure if there are use cases which neglect one way or another as from what I've seen so far it goes YourClass-&gt;save() >> into >> YourClassController-&gt;save() so I suppose I'll probably just put it in both just to be sure...