Subject: Re: [TOPIC 3/17] Obliterate

From: [email-masked]
Date: Fri, 15 May 2020 19:21:48 -0700

From: Nickolai Belakovski <[email-masked]>

Hi guys,

Sorry I missed you at the contributor summit, but this is an idea I've been
thinking of on my own for some time now, mostly in the context of dealing with
large files as opposed to security issues. I've come to a lot of the same
conclusions that this group has already come up with, namely

* Using git replace functionality is a very obvious apth forward here

* A list of 'revoked' (could I propose the word 'obliterated', in order to make
  the names consistent?) hashes needs to be maintained so that any
  functionality expecting the original object can figure out that it's not
  available.

* This needs support from GitHub, Gitlab, etc. in order for it to work. I'm
  thinking that git prune gets updated to remove 'oblierated' objects, and
  when a git hosting service receives an updated list of obliterated objects,
  it just runs prune. Of course, there would need to be support for replace
  refs as well

I've started working on a prototype/proof of concept. In the v1 it will do the
following upon receiving a hash (i.e. git obliterate abc123):

* Add it to the list of obliterated objects (I'm thinking just .git/obliterate,
  any issues with that?)

* Create a new blob containing the content "This file was obliterated by
  $git.user on $today" and create a replace ref from the provided has to the
  hash of this new blob (so instead of an empty file, there's some info as to
  why the file is missing)

* Run git prune (which will be modified to delete obliterated objects)

It should just take a couple of days. If anyone is interested in joining, I'm
livestreaming my work on twitch at https://www.twitch.tv/actinium226 from 1pm
to 5pm Pacific time on weekdays. This version will still have some issues. As
Damien pointed out, index doesn't handle replace, so the file will look
modified, but I hope that having an initial prototype will help further
discussion and get this feature closer to a state of being completed.