Hi David,
Yes, that is an important use case, and it's not really possible yet.

The lowest level of revision storage is in
COSQLiteStorePersistentRootBackingStore, which resembles the revlog data
structure used by mercurial - an array containing a mix of snapshots of the
object graph and deltas. The backing store has a -deleteRevids: method
which can delete an arbitrary set of revisions. However, this method
doesn't provide a guarantee that the revisions will be erased from disk.
It will actually erase the revisions from disk if it's possible to do so
without rebuilding the delta storage - so if you delete the most recently
written revision(s), they will actually be erased.

What we would need is a -forceDeleteRevids: method that will rebuild the
delta storage to ensure that those revisions are actually erased from disk.
That would also require that deleting a revision means also deleting all
descendant revisions.

Next, this functionality would need to be exposed at higher layers of the
API.
COSQLiteStorePersistentRootBackingStore is a private class used in the
implementation of COSQLiteStore. The store API for deletion is
"-finalizeDeletionsForPersistentRoot:error:" which is the same idea as "git
gc" - it deletes revisions from the backing store if they can't be reached
from any of the branch pointers. The COSQLiteStore should probably have a
different API for "please force delete these revisions", and finally we'd
also need an API in COPersistentRoot or COBranch for this.

Anyhow, that's my take on it; Quentin recently did some work with history
compaction so maybe he has some other idea on how it could work.
Cheers
Eric

On Sun, Sep 20, 2015 at 6:23 AM, David Chisnall <[email protected]> wrote:

> Hi,
>
> Is there a mechanism in CoreObject to permanently delete a specific item
> from the differential revision history?  For example, consider this
> sequence: a user hits paste and accidentally pastes a password, rather than
> the text that they thought was on the paste buffer, then deletes it, then a
> little while later notices that it’s still stored in plain text in the
> revision history.  It would be nice to expose a UI that allows them to
> delete the ‘inserted text “hunter2"’ and 'deleted text “hunter2”’ history
> items.  Is this currently possible?
>
> David
>
>
> -- Sent from my IBM 1620
>
>
> _______________________________________________
> Etoile-dev mailing list
> [email protected]
> https://mail.gna.org/listinfo/etoile-dev
>
_______________________________________________
Etoile-dev mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-dev

Reply via email to