Experimental implementation of liquid-hg

Benoit Boissinot bboissin at gmail.com
Wed Jan 19 13:27:52 CST 2011


(This was directed to the wrong list, it should go to mercurial-devel@)

On Wed, Jan 19, 2011 at 6:34 PM, Arne Babenhauserheide
<arne_bab at yahoo.de> wrote:
> Hi,
>
> (Please excuse the out-of-thread reply, my kmail2 is broken so this reply
> comes from emacs message-mode)
>
> I thought about what I would want to do with liquid:
>
> 1. Simplest case: An easy way to amend commits.
> 2. More complex case: Keep a volatile history from which I select the good
> parts later on.
>
> The first is simple: Liquefy the commit, change it, freeze it. The
> second is a bit harder.
>
> I don't want my changesets to appear in repositories of people who are
> not happy with ugly history. My volatile history could have 20 heads,
> all from experiments, but I might only want to publish one of them, and
> maybe put some others into an experimental branch.
>
> A normal user should not have any change in behaviour: He simply should
> not get or see liquid changesets. Otherwise we would repeat the git index
> mistake (pushing the index into the face of every user).
>
> I see two sets of commands which allows that:
>
> Additional
> ----------
>
> Liquids as additonal layer, only visible to those who use them. A
> seperate volatile cooperation layer.
>
> - push and pull by default do not transfer liquid changesets.
> - push/pull --liquid transfer the liquid changesets in liquid form.
> - push --freeze freezes the changesets before transfering them. There's
>  no way to pull liquid changesets and freeze them in one step (that
>  would mean accidental publishing if you push later on).
> - commit --liquid creates a liquid changeset. Any commit to a liquid
>  changeset is liquid (make it easy to work on liquids).
> - liquefy liquefies a changeset and all its children.
> - vaporize <rev> removes a liquid revision and all its children (but
>  keeps backups like strip; a condensate :) )
> - vaporize --all vaporizes all liquid changesets. Do this after freezing
>  all liquid stuff you want to publish to get rid of broken
>  experiments but keep the clean clone.
> - freeze <rev> freezes the revision and all its ancestors.
> - freeze --collapse <rev|revset> collapses the revision(s) and all its liquid
>  ancestors into a single frozen revision. All of these revisions which
>  have no other children (which don't get collapsed) are vaporized.
>
>
> Integral
> --------
>
> Liquids as integral part in every repository, pushed, pulled and creating
> additional heads as people experiment, but not disturbing normal
> users. An experimenting layer for those who want it.
> It works like the "additional" scheme except for the following changes:
>
> - push and pull always transfer liquids. Push doesn't abort if
>  additional heads are liquid.
> - update by default ignores liquids, except if it explicitely gets a
>  liquid revision. tip is never liquid.
> - update --liquid updates to the latest liquid revision.
> - log only shows liquids if it gets the --liquid argument.
>
>
> Notes
> =====
>
> The one-off commit of a new user should not be liquid, else I'd have to
> explain to the newbe why he has to add the --freeze flag to the
> push. This behaviour should not change when I add an extension.
>
> When I work on liquids, they should not be published or removed by accident =>
> explicit freeze and vaporize.
>
> _______________________________________________
> Mercurial mailing list
> Mercurial at selenic.com
> http://selenic.com/mailman/listinfo/mercurial
>


More information about the Mercurial-devel mailing list