Internal-changeset concept

Pierre-Yves David pierre-yves.david at ens-lyon.org
Tue Apr 4 14:26:29 EDT 2017


TL;DR; having an internal changeset concept help building simpler UI. 
Implementation-wise, phases offer a fitting home for the concept while 
allow simpler implementation now and later. Moreover, this can be done 
sooner and independently from other discussions.

On 04/03/2017 06:02 PM, Jun Wu wrote:
> Excerpts from Pierre-Yves David's message of 2017-04-03 13:11:10 +0200:
>> Local-hidding still needs its own solution.
>
> If we do have root-based hidden, and it's used for both "strip" and this
> "local-only" thing.

Let us make a small vocabulary point first (because I think it is 
important to be on the same pages here).

* "strip" is the action of "physically" removing data from the 
repository. And this should remains so. The word is accurate and 
describe an operation that is sometimes useful and will stay around in 
the future.
   I know that Facebook use this word for something else but we should 
stick to strict semantic here to avoid confusion.

* "root-based hidden" is a possible implementation for hiding. At that 
point of the discussion it would better to stay at the concept level 
"local-hiding" or "local-only-hiding" seems describe the concept you 
have in mind well. "root-based" is one of the many possible 
implementation. Until we have actually reviewed use-cases and option we 
are not sure we'll use that implementation for that concept, in practice 
a bitemap-based or ranged-based approach might turn out a better choice.
In addition such description could match implementation for other 
concept. For example this internal phases is also "root-based" since 
phases are "root-based"

> What problem will that cause? Worst case we add a bit
> per root saying "whether this is by user or by system". But I don't think
> they are fundamentally different that requires two different solutions.

As mentioned in previous messages, we could use a generic local-hiding 
mechanism to hide internal changesets. I do not think this will create 
major problem.

They are still multiple advantages to have handled by a new phases:

* It fits well into the phases concept "public, draft, secret, internal" 
feel natural,

* We already have all the visualization and manipulation we want for 
phases, so the "internal-changeset" comes at a very low overhead 
extension to an existing concept,

* clear distinction between hidden internal-changeset and hidden 
real-changesets will help offer a clean UI around locally-hidden 
changesets. (To avoid internals polluting user output related to hidden-ess)

* Adding extra bits related to internal in local-hiding will make 
local-hiding implementation and UI more complex. (while extending phases 
does not requires any changes)

Implementation-wise, adding "internal" through phase should be quite 
trivial, we already have a solid phase implementation. Include fast C 
code to computes revision in each phases. And the hiding API support 
multiple source for feeding "internal" phase to it will be trivial.


To conclude, having "internal-changeset" as an explicit concept will 
help building better/simpler UI. From my analysis, using phases for them 
provides us with a simpler implementation both -right- -now- and -later- 
even in the presence of a local hiding mechanism.

What do you think ?

Cheers,

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list