On Mon, Apr 4, 2016, at 12:46 PM, Steve Fink wrote:
> I should clarify that by "non-mq", I really mean using mutable-history 
> aka evolve. And yes, my workflow does depend on some extensions, 
> including some local stuff that I haven't cleaned up enough to publish. 
> (As does my mq workflow; I had to write mqext to get painless versioning 
> of my patch queue.) So I'm not saying "just switch off from mq to evolve 
> and everything will be great"; rather I'm saying that with some effort 
> to get accustomed to the new workflow and some customization, the 
> evolve-based workflow can feel better than the mq-based workflow, even 
> if you've built up a set of workarounds and accommodations to mq's 
> weaknesses that you're comfortable with.

I fully agree with this. I switched over from mq to
bookmarks+mutable-history a while back and I'm now very happy with it. I
assume that anyone that's comfortable with the standard git feature
branch workflow would be happy with this as well, since it's very
similar.

I make a hg bookmark per thing I'm working on (sometimes with one thing
being a branch off of another, for dependent patches), and use `hg
amend` and `hg histedit` quite a bit. I rebase work-in-progress changes
as-needed (for landing or whenever). The nice thing of using bookmarks
vs. mq is that you always have the DAG from your changesets, so a rebase
is always a 3-way merge instead of blindly applying patches and fixing
up the rejects. I use KDiff3 for my merge tool and I'm reasonably happy
with it. I've maintained even large (20+) patch series in this manner
and haven't had issues. I've done the same with mq in the past and
rebasing was always miserable, and I would inevitably wind up with
patches in my queue that didn't apply and I didn't know the base rev
they applied against, so I'd wind up having to practically rewrite them
when I wanted to apply them in the future.

Additionally, the "stack of patches" model of mq just never fit my
actual workflow very well, where I always have multiple WIP patches in
my tree, some of which are dependent on others, but others being
independent. Having bookmarks lets me just commit things in the DAG the
way they fit together, so I can juggle all my WIP without problems.

> For me, the main thing is to stay oriented, and bookmarks plus an alias 
> to do the equivalent of hg log -r 'ancestors(.) and not public()' go a 
> long way towards recovering mq's "what am I working on?" qseries -v 
> affordances. Though I immediately want it to be something closer to hg 
> log -r 'ancestors(.) and not public()' -T '{node|short} {desc}\n' and 
> then I want color etc etc... Anyway, I'll document what I have at some 
> point, and other people have their own things as good or better.

I have two aliases that I find invaluable, `booklog` and `bookedit`:
```
[alias]
booklog = log -r "ancestors(.) & draft()"
bookedit = histedit "first(ancestors(.) & draft())"
```

If my working directory changeset is a WIP patch, I can `hg booklog` to
see just the changes that are only in my local tree ("draft" in
Mercurial parlance) that are ancestors of the current rev, so just the
current change and anything it depends on. `bookedit` is just a handy
alias for "histedit the WIP changesets starting at the working
directory", so I can easily squash or reorder patches that I'm currently
working on.

What I find myself doing a lot is committing things in the units that
make sense, then if I need to make changes later I just commit fixup
changesets on top, and then `hg bookedit` to fold those changes back
into the changesets where they make sense. If there's only one changeset
in play, then `hg amend` is simpler, obviously.

-Ted
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to