Notes captured from the sprint titanpad

Topics
======

* obsmarker
    * perf
* manifest sharding & lightweight clones
* largefiles
* "remote bookmarks"/remote tracking
<https://titanpad.com/hg-remotebookmarks>
* "labels"
* many heads
* rollback/caches/locking
* subrepo caches
* bid merge
* mq (and what it does that nothing else does)
* general deprecations
* windows performance
* in-memory merge
* evolve ui
* interrupted commands
* default ui and other great debates
* bundle2
* obliterate: when it absolutely, positively, has to be removed from history overnight
* kallithea
* bug triage
* advocacy
    * updating the book
    * website
* http2
* inbox/patchbot
* automated builds/packaging
* chg/hglib
* infrastructure
* machine readable output <http://mercurial.selenic.com/wiki/GenericTemplatingPlan>
* linkrevs (cache on the side)
* histedit
<https://titanpad.com/mercurial32-histedit>

Bug triage
----------

* When a (regular) contributor files a bug, move it immediately to CONFIRMED.
* When a contributor reads a bug, move it CONFIRMED or NEED_EXAMPLE.
    * Make sure necessary data is there.
    * Try to quickly reproduce.

Great debates
-------------

http://mercurial.selenic.com/wiki/mpm/moot

Enabling progress/color/pager by default: mpm agrees that we should turn progress on by default. There's a stupid WSGI bug that blocks us doing that for now.

MQ deprecation plan
-------------------

http://mercurial.selenic.com/wiki/MqDeprecationPlan

Need to get some workflows discussed on that page: map MQ-based workflows to Evolve-based workflows, in addition to just a command-to-command mapping.

Deprecatable review
-------------------

Bunch of stuff I haven't captured.


"Friendly HG" config flag
-------------------------
UI config option that we can propose on

Bid Merge
---------
Doesn't help in as many cases as we'd like, because we need to do some merging between manifestmerge and filemerge.

Patch to come to turn it on by default.

Draft Defaults
--------------

Talk about switching default to non-publishing. Concern about accidental non-publishing on servers.

Idea: add UI to hgweb to identify publishing settings and what that means

Idea: Add a banner to hgweb indicating whether a repository is publishing.


Manifest sharding, see https://titanpad.com/mercurial32-manifest-sharding (moved to wiki as http://mercurial.selenic.com/wiki/ManifestShardingPlan)

Obliterate
----------
Use cases: legal requirements to excise data (PII, licensed data, keys)
Tombstone data replaces revlog content, metadata in .hgobliterates
-> Need to rewrite delta chains starting after obliterated revision
V0 impl: command performing local rewrites, core doesn't explode
V1 impl: servers can eagerly propagate obliterates to clients

Patchbot improvements
---------------------

Flowbot: looks at Matt's backlog, number of patches in flight by an author, &c and notifies contributors (privately) to back off when their queue is too deep. Point them to the backlog graph and show contributors what they personally have in-flight.

check-commit-bot: notify contributors that 

Advocacy
--------

* Web site
  * Front page to have news
  * Simplify download flow on web site
    * 1 installer per OS
    * Mac installer (with optional config help)
  * Facebook and Mozilla to ask about webdev love
* [smf] Create repo for new book and give us access
* Helping Git users migrate
* Add Sphinx for hg repo
  * Encourage more rst magic in docstrings?
* How do we surface hg-git on website?
* Website needs common extension guide
* Answer "how to host Mercurial repo" question
* Integrate pull request commands into hgit and/or hg-git
* Look into Kuma

Transactions
-------------------------

Use cases
* Stripping while pushing
* Push races seeing inconsistent data

Transaction Reader Flow
1) read .hg/store/txn -> <id1> + list of files [offset]
2) open all files (from the list) in txn.<id1>/ directory to obtain handles
3) if all files opened -> done, else re-read txn and try open again
4) vfs read FILE only to offset (when offset was available)

Transaction Writer Flow
1) obtain write lock
2) copy all files from txn.<id1> to txn.<id2> (with hardlinks)
3) look for old locations of files (e.g. obstore) and copy into txn.<id2>
4) write updated content to txn.<id2>, using atomictemp
5) write .hg/store/txn.active -> <id2> + list of files [offset]
6) invoke shell hooks to use txn.active
(on transaction close)
8) rename .hg/store/txn.active -> txn
9) copy relevant files to old locations (if necessary)
10) release write lock

Open Issues

* Format of txn file. Multiple append-only files?
* How do extensions declare txn-relevant files

Reader/Appender/Destroyer Locks
-------------------------

Three lock types:
1) Reader Lock 

readers (many) -> appenders (1) -> destroyers (1)


Lockless streaming clones (requires reader locks):
1) Read the tip changelog rev
2) stat all the filelogs for their sizes
3) Read the tip changelog rev again
4) if oldtip != newtip:
    4.a) read new changelog entries to figure out which files changed
    4.b) read files that have changed to figure out the offset of the linkrev read in step #1
5) stream revlogs up to the known offsets


"subrepo cache" (a.k.a. out of working copy subrepo storage)
------------------------------------------------------------

- Extend hg shares by adding options (upon share creation) to share bookmarks and mq queues
- When cloning subrepos, clone them into the parent repo's .hg/subs folder, and then create a "full share" (i.e. share history, bookmarks and mq queues) on the expected working dir location
    - use a unique but human readable naming convention:
    e.g. given: foo/bar/baz = SOURCE_URL
         use: .hg/subs/baz_HASHOF(foo/bar/baz = SOURCE_URL)
- If a subrepo must be removed from the working dir, simply remove the share

3.2sprint/notes (last edited 2014-10-09 13:25:28 by AugieFackler)