( )⚙ D216 evolution: rename bumped to phase-divergent

This is an archive of the discontinued Mercurial Phabricator instance.

evolution: rename bumped to phase-divergent
ClosedPublic

Authored by lothiraldan on Aug 2 2017, 4:23 AM.

Details

Summary

Rename bumped to phase-divergent in all external user-facing output. Only
update user-facing output for the moment, variables names, templates keyword
and potentially configuration would be done in later series.

The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.

Diff Detail

Repository
rHG Mercurial
Lint
Lint Skipped
Unit
Unit Tests Skipped

Event Timeline

lothiraldan created this revision.Aug 2 2017, 4:23 AM

I'd like to hear others chime in on this and D215. Do we /know/ that something that's phase-divergent is only divergent by phase? or could the content also be different? Is it possible to have a case in the tests that's both content-divergent and phase-divergent?

quark added a subscriber: quark.EditedAug 2 2017, 12:08 PM
In D216#3478, @durin42 wrote:

I'd like to hear others chime in on this and D215. Do we /know/ that something that's phase-divergent is only divergent by phase? or could the content also be different? Is it possible to have a case in the tests that's both content-divergent and phase-divergent?

Good question. I think conceptually phase-divergent could also be seen as content-divergent. I guess most users use source control are even aware of the "phase" concept so it might be nice to hide that word from UI.

Maybe we can merge those two into divergent() to simplify the concept a user may face. If something has to distinguish between those details, we can add keyword arguments to the divergent() revset. But I'd prefer the default user-facing words to just be divergent. Or we can think about alternative ways to display instability in the default log template.

In D216#3478, @durin42 wrote:

I'd like to hear others chime in on this and D215. Do we /know/ that something that's phase-divergent is only divergent by phase? or could the content also be different? Is it possible to have a case in the tests that's both content-divergent and phase-divergent?

I know I'm really late to the party and sorry about that, but...

How about instead of "phase-divergent" calling it "overdue"? That seems to capture it pretty well to me -- the only problem with the commit was that it arrived too late. "Tardy" might also be good, but that's probably less familiar to non-native speakers.

According to my understanding of context.troubles, a changeset could be both content-divergent and phase-divergent, it should be easy to add a test for that.

About phase-divergent name, I like it, it's both explicit and coherent with the other terms. Maybe this discussion already happened in one medium listed here: https://www.mercurial-scm.org/wiki/CEDVocabulary#See_Also

I think phases are more or less visible depending on your workflow, hiding it would not be possible for everyone I'm afraid.

quark added a subscriber: ryanmce.EditedAug 3 2017, 7:44 PM

How about instead of "phase-divergent" calling it "overdue"? That seems to capture it pretty well to me -- the only problem with the commit was that it arrived too late. "Tardy" might also be good, but that's probably less familiar to non-native speakers.

I think "overdue" is more friendly to new users than "phase-divergent". cc @ryanmce who actively participated in the original rename discussion.

ryanmce accepted this revision.Aug 4 2017, 5:09 AM

A Dead Horse in Need of Kicking

I have no strong desire to drag this dead horse out of its grave to continue kicking it. However, since we are here, I will state for the record that I disagree that "overdue" is more clear.

Imagine I'm a git user trying out hg due to hearing about some of its cool features. I'm hacking on some stuff with a friend and now I see that I have "1 overdue changeset". I have no idea what that means, to be honest. Is it out-of-date somehow? Will it expire soon? Will I be fined by the library?

However, if I see that a changeset is "phase-divergent" I may also be confused, but I pretty quickly know two things: (1) I should understand what "phase" means, and that this changeset disagrees with another changeset somehow. So, I look up phases and (1) I've learned something important about hg and (2) now phase-divergence makes a lot more sense just by me knowing about phases and the meaning of "divergent": my changeset is draft, but a different version of it is public, so mine is phase-divergent. It's clear from then on because it builds on top of the terminology we already use elsewhere in hg.

Moving on and responding to other comments here

Do we /know/ that something that's phase-divergent is only divergent by phase? or could the content also be different? Is it possible to have a case in the tests that's both content-divergent and phase-divergent?

I think that it's possible to be both at the same time. I'll spend some time coming up with the situation to explain it, but most of the time it's not the case as I recall.

I guess most users use source control are even aware of the "phase" concept so it might be nice to hide that word from UI.

I disagree. hg amend --> abort: cannot amend public changesets

We already expose phases in the UI and I argue that it's a good thing. Making users more aware of it and reusing the terminology I think is a good thing.

Maybe we can merge those two into divergent() to simplify the concept a user may face.

This is kind of the direction we went. Instead of two separate concepts, "bumped" and "divergent", we now have two related concepts "content-divergent" and "phase-divergent". Both are "divergent", which means they need some similar kind of attention. The way it would be introduced in the docs is to explain the concept of divergence and then to explain the two types. However, I disagree with lumping all such types without exposing differences. I believe that will be more confusing since the way to arrive in the situation and the remedies are different.

We can think about alternative ways to display instability in the default log template.

I'd love to hear what suggestions you have here (I lean towards "phase-divergent with f3967dc12" in the log so it's easy to figure out what the "other" version of you is).

Conclusion

I feel that these decisions were made a long time ago. They were recorded on the wiki. We sent out emails about it for comments. We met up at the tail end of the last sprint both at the sprint venue and in a follow-up for anyone who cared enough at the time, up at the Atlassian office. No naming scheme will be perfect -- language is always a compromise -- but I think the names currently on the CEDVocabulary page are quite good, significant improvements over what we currently have, and have been discussed for hours by experts who care, and I think we should stick with them. Unless someone proposes a new name that pretty much everyone agrees is better -- and that hasn't happened here -- I think we should stick with the current naming on the Wiki.

In fact, right at the top of that CED page is an introduction that I think is pretty clear for such a powerful topic:

Introduction to Instability

Rewriting changesets may introduce instability.

There are two main kinds of unstable changesets: orphaned changesets and divergent changesets.

Orphans are changesets left behind when their ancestors are rewritten.

Divergence has two variants:

  • Content-divergence occurs when independent rewrites of the same changeset lead to different results.
  • Phase-divergence occurs when the old (obsolete) version of a changeset becomes public.

I'm probably biased because I helped write this (and I just cleaned it up and added emphasis), but I think it's pretty clear.

quark added a comment.EditedAug 4 2017, 2:04 PM
In D216#3674, @ryanmce wrote:

I disagree. hg amend --> abort: cannot amend public changesets

The word "public" does not get associated with "phase" automatically. I think users can understand "public" and "draft" without knowing what "phase" is. "divergent" also seems understandable without Googling. I'm not sure about "phase".

It seems to me (as a non-native speaker) that "overdue" has a possibility to be understood correctly without Googling - the changeset is too late to be pushed - people have chosen a different version to become "public".

Even if "overdue" is confusing, if you have to Google what "phase" is, I think it's not better than having to Google what "overdue" is.

In addition, even if a user knows what "phase" is, "phase-divergent" may suggest wrong solution - if something is divergent, making them the same is an intuitive way to solve it. A user might just run hg phase --public PHASE-DIVERGENT-CHANGESET which is probably not they want in most cases. "overdue" won't have this issue.

From an internal UX point of view, I'm not convinced that "phase-divergent" is what we want to ship to our internal users. But I understand upstream might have different values. Since it could always be customized (ex. dialect.py), I'm fine with whatever gets chosen here.

durin42 accepted this revision as: durin42.Aug 4 2017, 4:33 PM

I'm fine with this as-is for now, with the caveat that we might want to fix the two -divergent names in the future if they lead to user confusion.

(Someone should feel encouraged to land this, I'm in the middle of some unpleasant debugging and am reviewing while I wait for wireshark to install.)

This revision was automatically updated to reflect the committed changes.