On 5/2/2019 2:02 PM, Ævar Arnfjörð Bjarmason wrote: > > But those are separate from any back-compat concerns, which is what I > think makes sense to focus on now. Thinking more on this topic, I think I have a way to satisfy _all_ of your concerns by simplifying the plan for incremental commit-graph files. My initial plan was to have the "commit-graph" file always be the "tip" file, and it would point to some number of "graph-{hash}.graph" files. Then, we would have some set of strategies to decide when we create a new .graph file or when we compact the files down into the "commit-graph" file. This has several issues regarding race conditions that I had not yet resolved (and maybe would always have problems). It would be much simpler to restrict the model. Your idea of changing the file name is the inspiration here. * The "commit-graph" file is the base commit graph. It is always closed under reachability (if a commit exists in this file, then its parents are also in this file). We will also consider this to be "commit-graph-0". * A commit-graph-<N> exists, then we check for the existence of commit-graph-<N+1>. This file can contain commits whose parents are in any smaller file. I think this resolves the issue of back-compat without updating the file format: 1. Old clients will never look at commit-graph-N, so they will never complain about an "incomplete" file. 2. If we always open a read handle as we move up the list, then a "merge and collapse" write to commit-graph-N will not interrupt an existing process reading that file. I'll start hacking on this model. Thanks, -Stolee