Meeting notes about remotenames
Ryan McElroy
rm at fb.com
Mon Mar 9 18:53:47 CDT 2015
On 3/9/2015 3:19 PM, Augie Fackler wrote:
> (+TheMystic for commentary)
>
> Sorry for delinquency in responding. Please please don't go running
> off on your own the three of you building something with bookmarks
> that we can't embrace as a whole... (your comment about "bike shedding
> will be ignored" comes across as *actively hostile* to those, like me,
> who are interested in this topic. Please don't penalize my opinion
> because of my geography.)
>
> This looks *very* different in worrying ways from what we've
> previously discussed, and I'd like more context on why you're going
> for something super super complicated.
>
> On Feb 28, 2015, at 3:51 AM, Ryan McElroy <rm at fb.com
> <mailto:rm at fb.com>> wrote:
>
>> The following are the notes from the meeting Sean, Durham, and I had
>> today concerning the work items for the remote names extension
>> (https://smf.io/hgremotenames). I'm sharing them here mostly to keep
>> the community informed of where we're headed with it. Comments are
>> welcome, but most bikeshedding will be ignored :-D
>>
>> A few reference points:
>>
>> * http://farley.io/2015/02/new-mercurial-extension-remotenames/
>> * http://titanpad.com/hg-remotebookmarks
>>
>>
>> Remote Names Extension
>>
>>
>> Notes from 2015-02-27 Meeting
>>
>> Participants: Sean (smf), Ryan (ryanmce), Durham (durham)
>>
>>
>> Defaults
>>
>> Everyone feels weakly that we should enable all major features by
>> default for discoverabilty. If there is major push-back on any of the
>> features, we can iterate and turn that feature off.
>>
>>
>> Clone Behavior
>>
>> For automation, etc, introduce a “--mirror” option for “hg clone”
>> that will act like “hg clone --config remotenames.syncbookmarks=True”
>
> "for automation"? Why can't automation use --config
> remotenames.syncbookmarks? Is there more story here?
>
> --mirror probably wants to be called --all-bookmarks or something similar.
>
>>
>> Push Behavior
>>
>> How should the push command behave under different conditions?
>>
>> * What if repo has no bookmarks?
>> o Just disable remotenames
>> * Hidden heads/closed branch heads
>> o This was broken with anon head detection; fixed by copying
>> code from “pushdiscovery” function
>> + Perhaps factor out this code in the future
>> * No anonymous heads option doesn't seem to be working (can't allow
>> anon heads)
>> o Fix it and test it
>>
> What does this bit mean? I don't understand this.
>
>> * Should we have separate flags for different things that -f does
>> today?
>> o Allows pushing anon heads
>> o Allows moving remote bookmark anyway
>>
> What does this mean?
>
>> o (special case of above) allows pushing when local is behind
>> master
>> o In the end, we decided that keeping everything under --force
>> is fine for now
>> * Do we want to allow multiple “--to” flags? If so, how to we
>> figure out what rev to push with each?
>> o For automation, can't we just rely on clone --mirror and
>> push's default behavior to do what we want?
>> o Maybe we can implement “hg push --to rev:bookmark” if we need
>> to rename local to remote in the future
>> + Ryan is skeptical that this is needed
>>
> What is --to? For renaming a bookmark when we do a push?
>>
>> * Should remotenames make the default push rev “.” even when --to
>> isn't specified?
>> o Probably, we all agree this is the right way to go
>> o Maybe make it configurable
>>
> This is backwards incompatible, and makes me sad. Note that '.' isn't
> a bookmark, so you probably mean something else?
>>
>> * Should remote names work on the server side to prevent anonymous
>> heads from being pushed?
>> o No, this should be a client side extension
>> o Use bundle2 and commit hooks to prevent anonymous heads
>>
>>
>> Transition helpers
>>
>> These are features to aid groups that are rolling out the remotenames
>> extension into established workflows.
>
> This section existing worries me more than a little. Does this mean
> that remotenames is hopelessly backwards-incompatible, and therefore
> won't ever be able to be part of the story of improving bookmarks in core?
>>
>> * To aid transition to a remote names workflow, on first push or
>> pull after enabling remotenames extension (eg, when creating
>> .hg/remotenames), have a config option to delete local bookmarks
>> that match the name of remote bookmarks
>> * Potentially have a list of names to be deleted, or perhaps delete
>> all matches
>>
>>
>> Hoisting names
>>
>> Hoisting refers to the the option to refer to a certain remote's
>> names without the prefix. Eg, remote/master can be referred to as
>> “master” but it will still show up in logs as “remote/master”.
>>
>> * Name hoisting is a bit of a hack right now, but it works well enough
>> o No need for short term changes
>> * Long term, we should get “masking” features into the namespaces API
>> o Support more generalized versions of hoisting that don't feel
>> hacky
>>
>>
>> Renaming remotes
>>
>> Remote renaming refers to renaming a path alias. The primary use case
>> is to prevent users from seeing the “default” path in remote names.
>>
>> * Short term, we should get renaming into the “activepath” function
>> where implicit renaming for default happens now
>> o Should we keep implicit renaming at all or make it all explicit?
>> * TBD: format of remote renames?
>> [remotenames]
>> rename.default = remote
>>
> Please consider working with indygreg's path configuration work on
> this - it seems related.
>
>>
>> Deletion & Renaming
>>
>> Currently, there is no way to delete or rename remote bookmarks using
>> the extension. What do we want to support, and how should it work?
>>
>> * Short term, we want to support “hg push --delete <name>” to
>> delete a remote bookmark
>> o This should be super cheap — eg, avoid discovery; just delete
>> the bookmark and do nothing else
>> o How does this interact with anonymous head warnings?
>> + Should we prevent new anonymous heads if option is on?
>> + Do we care?
>>
> Should this interact with pushing of kill markers for any changes that
> are referenced by the mark?
>
>> * Long term, we might implement “hg push --rename <oldname> --to
>> <newname>” to support atomic bookmark renames
>>
>>
>> Behavior and name of “suppressbranches”
>>
>> The “suppressbranches” option will hide the remote branch name on a
>> given commit if there is also a remote bookmark pointing to the same
>> commit.
>>
>> * Functionality is useful in narrow use cases, it's nice to have
>> * Consider a new name to make it less surprising that it doesn't
>> suppress all remote branches (elidebranches?)
>> * No need for functionality that suppresses all remote branch heads
>> in extension
>>
>>
>> Tracking
>>
>> Tracking refers to the git-like feature where a local bookmark can
>> “track” another bookmark (local or remote), which gives some nice
>> default behaviors.
>
> This is very very complicated conceptually. Do we have any sense of
> how important it is to non-git users? I know there are a handful of
> git power users that demand this faster horse, but I'd rather it got
> more careful consideration before we clone the feature wholesale.
>>
>> * “hg push” with no arguments will default to “hg push --to <tracking>”
>> * “hg rebase” with no arguments will default to “hg rebase -d
>> <tracking>”
>> * To set up tracking, we will extend “hg bookmarks” with a
>> “--track” option
>> * We will record tracking information in a new file, perhaps
>> “bookmarks.tracking”
>> o Ahead/Behind distance will be stored in a separate cache/file
>> o Display distance information like git with “hg bookmarks -v”
>> [3 ahead, 2 behind]
>> * (core) We would like to get “bookmark --update/-U” into core
>> o Make it possible to create a bookmark and update repo at the
>> same time
>> o Furthermore, with remotenames, we can also set up tracking in
>> a single command (which will imply --rev)
>> o Similar to “git co -b <branch> <tracking>”
>>
>>
>> Pull Discovery
>>
>> * How can we leverage remote names to speed up pull discovery?
>> * Can we speed up pull discovery by starting from remote bookmarks
>> only instead of starting from all heads?
>> o This would probably help Mozilla repo a lot
>>
>>
Apologies for coming across as actively hostile. I wanted to avoid
things like "I don't like the name of X". I'm actually open to being
convinced by good arguments that certain things are a bad direction. For
example, Pierre-Yves did a good job of talking to me about why adding a
-U flag to bookmarks might be a bad idea -- because of, for example, the
explosion in options due to the cross-product of possible options
between both bookmarks and update options (eg, if there's a --update,
does that imply we need a --check and --clean as well?) So that's where
I'm coming from, and again apologies for coming across as hostile.
I'm still looking forward to feedback on these ideas and directions.
~Ryan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20150309/0a846469/attachment.html>
More information about the Mercurial-devel
mailing list