I want to make a generic Resource
object representing something with
versioned contents, like an S3 object or a git repo. For each Resource
object subclass, there would be State
, StateId
, DiffState
, DiffMetadata
and Diff
subclasses. So an S3 object's StateId
class would follow
the AWS naming convention for S3 versioning, and the Git StateId
class
would be a commit reference.
But there's more than one way to access a resource. For instance, you
can ask Github about the state of a git repo or you can shell out to git
on your local machine. Even though the mechanics of 'shell out to git'