<div dir="ltr">If you do, please invite me too. But I suppose we shouldn't be doing that until after the freeze :-)</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 19, 2016 at 5:22 AM Augie Fackler <<a href="mailto:raf@durin42.com">raf@durin42.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">At a high level, this looks fine to me. If you want, we can find some<br>
time in the next couple of weeks for me to go over your series in<br>
advance.<br>
<br>
AF<br>
<br>
On Mon, Jul 18, 2016 at 4:06 PM, Durham Goode <<a href="mailto:durham@fb.com" target="_blank">durham@fb.com</a>> wrote:<br>
> The final design has come out looking like the following.  It mirrors the<br>
> changelog pretty closely, with ctx objects of various implementations, and<br>
> memctx objects for representing pending inmemory manifests.  There is no<br>
> manifest.manifest class after this.<br>
><br>
> class manifestlog(object):<br>
>     def __init__(self, opener, revlog)<br>
>     def __getitem__(self, node): return self.get(node)<br>
>     def get(self, node, dir='')<br>
>     def add(self, m, transaction, link, p1, p2...): return<br>
> m.write(transaction, ...)<br>
><br>
> class manifestrevlog(revlog):<br>
>     def dirlog(self, dir)<br>
><br>
> class manifestctx(manifestdict):<br>
>     def new(self)<br>
>     def node(self)<br>
>     def p1(self)<br>
>     def p2(self)<br>
>     def linkrev(self)<br>
>     def readfast(self, shallow=False)<br>
>     def readdelta(self, shallow=False)<br>
><br>
> class treemanifestctx(treemanifest)<br>
>     <same as manifestctx><br>
><br>
> class memmanifestctx(manifestdict):<br>
>     def new(self)<br>
>     def write(self, transaction, link, p1, p2, ....)<br>
><br>
> class memtreemanifestctx(treemanifest):<br>
>     <same as memmanifestctx><br>
>     def _addtree(...)<br>
><br>
><br>
> Notes:<br>
><br>
> - All the nasty if-tree-else-flat conditions are gone thanks to them being<br>
> separate classes<br>
><br>
> - All revlog specific operations can be accessed via<br>
> repo.manifestlog._revlog, but it has no manifest specific logic on the<br>
> revlog anymore.<br>
><br>
> - The actual manifest.py can be found <a href="https://bpaste.net/show/ef4b138f9083" rel="noreferrer" target="_blank">https://bpaste.net/show/ef4b138f9083</a> .<br>
> I have a 30 patch series that makes the transformation, so I'll start<br>
> sending that out in small chunks soon.<br>
><br>
><br>
><br>
><br>
> On 7/12/16 3:03 PM, Durham Goode wrote:<br>
>><br>
>> We'll be looking at moving to tree manifests as our source of truth over<br>
>> the next few months, and one problem area is the fact that the manifest<br>
>> class is not well factored for this usecase. This one class is the<br>
>> collection of all manifests, the accessor for information about individual<br>
>> manifests, and the storage format (revlog).<br>
</blockquote></div>