Firefox

From John's wiki
Jump to navigation Jump to search

This is me hacking on Firefox. I'm also interested in Thunderbird.

Config

I like to configure Firefox like this:

  • about:config
    • network.http.sendRefererHeader = 0
  • General -> Make default
  • Home -> Homepage and new windows: https://start.duckduckgo.com/
  • Home -> New tabs: Blank page
  • Home -> Firefox Home Content: select none
  • Search -> Add search bar in toolbar
  • Search -> Default Search Engine: DuckDuckGo
  • Search -> Search Suggestions: select none
  • Privacy & Security -> Enhanced Tracking Protection: Strict
  • Privacy & Security -> Send "Do Not Track": Always
  • Privacy & Security -> Address Bar: Search engines: unchecked
  • Sync -> Signing with appropriate account

Then add the Menu Bar and Bookmarks Toolbar.

Work

Bug 1610402

I'm working on TAB character width is not a configurable user preference with Emilio Cobos.

View Source tab width.

See here, for -moz-tab-size CSS tip.

See Contributing to the Mozilla code base to get started.

See Firefox Bug Handling for info on P{1..5} priorities.

See Linux build preparation.

See this for testing.

Unit test like this:

jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ ./mach mochitest toolkit/components/viewsource/test/browser/browser_viewsourceprefs.js

See how to submit a patch.

Then create a Mozilla Phabricator account.

Then Linux MozPhab Installation Guide.

See phabricator.

My patch was for:

To submit my patch for review:

jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ moz-phab submit --message "static prefs for view_source.{wrap_long_lines,syntax_highlight,tab_size}" --bug 1610402
Failed to find draft commits to submit

To submit my patch for review, take two:

jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ hg commit --message "static prefs for view_source.{wrap_long_lines,syntax_highlight,tab_size}"
jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ moz-phab submit --bug 1610402

See Phabricator D63470

Extra modifications:

jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ moz-phab --bug 1610402 --reviewer emilio

See Phabricator D63483

IRC chat

[00:44] <jj5> emilio_: are you around?
[00:53] <jj5> I tried to submit a patch for review like this: moz-phab submit --message "static prefs for view_source.{wrap_long_lines,syntax_highlight,tab_size}" --bug 1610402
[00:53] <firebot> https://bugzil.la/1610402 — ASSIGNED, jj5@progclub.org — Migrate view_source.tab_size to static prefs
[00:54] <jj5> but I got this error message: Failed to find draft commits to submit
[00:57] <zalun> @jj5 set the message in commit description
[00:58] <zalun> The --message is for Phabricator update description
[00:58] <zalun> What is your local commit stack? 
[01:01] <jj5> here's my hg diff command and output: https://www.jj5.net/file/2020-02-21-005912/bug-1610402-diff.txt
[01:01] <emilio_> jj5: hey, around now
[01:01] <jj5> emilio_: hey
[01:01] <emilio_> jj5: Did you run `hg commit`?
[01:02] <jj5> emilio_: I ran it the other day and it didn't work. but I seem to be able to run it now... giving that a go.
[01:06] <jj5> emilio_: okay, that seems to have worked. thanks!
[01:08] <emilio_> jj5: great! You probably need to add a reviewer for that patch. I'm happy to review, or hsivonen should also be able to
[01:09] <jj5> emilio_: do I nominated the reviewer in bugzilla or phabricator?
[01:11] <jj5> emilio_: I found the setting in phabricator. I've nominated you as the reviewer.
[01:17] <emilio_> jj5: great, thanks!
[01:22] <jj5> emilio_: thanks to you too! pretty excited I've submitted my first patch. even if it was only 20 lines of code for a P5 priority enhancement... :P
[01:25] <emilio_> jj5: I actually just realized that the patch needs some minor changes
[01:25] <emilio_> jj5: (the reviewbot comment made me realize that...)
[01:25] <jj5> emilio_: okay, cool. what needs doing?
[01:26] <emilio_> jj5: remove https://searchfox.org/mozilla-central/source/mobile/android/app/mobile.js#354 and https://searchfox.org/mozilla-central/source/modules/libpref/init/all.js#886 and change the default of wrap_long_lines to `@IS_ANDROID@`
[01:39] <jj5> as in: pref("view_source.wrap_long_lines", @IS_ANDROID@);  .. ?
[01:39] <emilio_> jj5: no, as in remove those lines and make the yaml file have `value: @IS_ANDROID@`
[01:40] <jj5> emilio_: got it.
[02:14] <jj5> emilio_: my apologies, but my internet is unstable. it has been dropping out. I may have missed messages from you.
[02:15] <emilio_> jj5: no, no worries. I commented on phabricator. There should be one revision instead of two, other than that your patch looks great
[02:18] <jj5> emilio_: so I should use hg histedit to create one patch, commit that, then resubmit with moz-phab?
[02:18] <jj5> emilio_: I will need to RTFM for hg histedit
[02:19] <emilio_> jj5: hg histedit should allow you to merge the second patch in the first one (much like `git commit --fixup`)
[02:20] <emilio_> jj5: then `moz-phab` should update the first revision with the changes from both
[02:21] <jj5> emilio_: when I run moz-phab should I specify --bug and --reviewer?
[02:21] <emilio_> jj5: you don't need to if your commit message has a bug number / reviewer
[02:22] <jj5> emilio_: okay, thanks
[02:27] <jj5> emilio_: I ran `hg help histedit | grep merge` -- but there is no merge option. there is 'pick', 'drop', 'mess', 'fold', 'roll', 'edit' and 'base'...
[02:29] <emilio_> jj5: roll
[02:29] <emilio_> jj5: roll is what you want*
[02:29] <jj5> emilio_: oh. I used 'pick' for #0 and 'fold' for #1 -- have I messed it up..?
[02:30] <emilio_> jj5: seems that should be fine, it fold is pretty similar to roll, just overriding the message / date
[02:31] <emilio_> jj5: you can check with `hg export` though
[02:31] <emilio_> jj5: your update looks great :)
[02:32] <jj5> emilio_: lol. thanks. but it's embarrassingly simple... :P
[02:33] <jj5> emilio_: thanks very much for your help. I will have a look for another bug to work on some time.
[02:43] <emilio_> jj5: np, thanks for the patch! And let me know if you need anything else

Notes

Links

Building etc

Get the latest code with:

jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ time hg pull

Build with:

jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ time ./mach build

Run with:

jj5@jj-dev:/var/export/jj-dev/mozilla/mozilla-unified$ ./mach run

visit_type

In the places.sqlite database in the moz_historyvisits table is a 'visit_type' column. To determine what the values mean see:

jj5@jj-dev:~/desktop/mozilla-unified$ vim toolkit/components/places/nsINavHistoryService.idl

They are:

Value Name Comment
1 TRANSITION_LINK This transition type means the user followed a link and got a new toplevel window.
2 TRANSITION_TYPED This transition type means that the user typed the page's URL in the URL bar or selected it from URL bar autocomplete results, clicked on it from a history query (from the History sidebar, History menu, or history query in the personal toolbar or Places organizer.
3 TRANSITION_BOOKMARK This transition is set when the user followed a bookmark to get to the page.
4 TRANSITION_EMBED This transition type is set when some inner content is loaded. This is true of all images on a page, and the contents of the iframe. It is also true of any content in a frame if the user did not explicitly follow a link to get there.
5 TRANSITION_REDIRECT_PERMANENT Set when the transition was a permanent redirect.
6 TRANSITION_REDIRECT_TEMPORARY Set when the transition was a temporary redirect.
7 TRANSITION_DOWNLOAD Set when the transition is a download.
8 TRANSITION_FRAMED_LINK This transition type means the user followed a link and got a visit in a frame.
9 TRANSITION_RELOAD This transition type means the page has been reloaded.

bootstrap.py

These are my notes from downloading and running the bootstrap.py script.

jj5@jj-dev:~$ uname -m
x86_64
jj5@jj-dev:~$ python --version
Python 2.7.17
jj5@jj-dev:~$ python3 --version
Python 3.6.9
jj5@jj-dev:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           394M  1.1M  393M   1% /run
/dev/sda1        98G   16G   78G  18% /
tmpfs           2.0G  177M  1.8G   9% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           394M   12K  394M   1% /run/user/1000
jj5@jj-dev:~$ mkdir /var/export/jj-dev/src
jj5@jj-dev:~$ ln -s /var/export/jj-dev/src .
jj5@jj-dev:~$ cd src
jj5@jj-dev:~/src$ vim get-bootstrap.py.sh
jj5@jj-dev:~/src$ chmod +x get-bootstrap.py.sh 
jj5@jj-dev:~/src$ ./get-bootstrap.py.sh 
--2020-01-20 06:15:58--  https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py
Resolving hg.mozilla.org (hg.mozilla.org)... 63.245.208.203
Connecting to hg.mozilla.org (hg.mozilla.org)|63.245.208.203|:443... connected.
HTTP request sent, awaiting response... 200 Script output follows
Length: 7064 (6.9K) [text/x-python]
Saving to: 'bootstrap.py’

bootstrap.py          100%[=========================>]   6.90K  --.-KB/s    in 0s      

2020-01-20 06:16:00 (45.5 MB/s) - 'bootstrap.py’ saved [7064/7064]
jj5@jj-dev:~/src$ ll
total 20K
drwxrwxr-x 2 jj5 jj5 4.0K Jan 20 06:16 ./
drwxr-xr-x 6 jj5 jj5 4.0K Jan 20 06:14 ../
-rw-rw-r-- 1 jj5 jj5 6.9K Jan 20 06:16 bootstrap.py
-rwxrwxr-x 1 jj5 jj5  107 Jan 20 06:15 get-bootstrap.py.sh*
jj5@jj-dev:~/src$ chmod +x bootstrap.py 
jj5@jj-dev:~/src$ ./bootstrap.py 

Note on Artifact Mode:

Artifact builds download prebuilt C++ components rather than building
them locally. Artifact builds are faster!

Artifact builds are recommended for people working on Firefox or
Firefox for Android frontends, or the GeckoView Java API. They are unsuitable
for those working on C++ code. For more information see:
https://developer.mozilla.org/en-US/docs/Artifact_builds.

Please choose the version of Firefox you want to build:
  1. Firefox for Desktop Artifact Mode
  2. Firefox for Desktop
  3. GeckoView/Firefox for Android Artifact Mode
  4. GeckoView/Firefox for Android
Your choice: 2
Executing as root: sudo apt-get install autoconf2.13 build-essential nodejs python-dev python-pip python-setuptools unzip uuid zip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
build-essential is already the newest version (12.4ubuntu1).
unzip is already the newest version (6.0-21ubuntu1).
zip is already the newest version (3.0-11build1).
nodejs is already the newest version (8.10.0~dfsg-2ubuntu0.4).
The following additional packages will be installed:
  libexpat1-dev libossp-uuid16 libpython-all-dev libpython-dev libpython2.7-dev
  python-all python-all-dev python-asn1crypto python-cffi-backend python-crypto
  python-cryptography python-idna python-ipaddress python-keyring python-keyrings.alt
  python-pip-whl python-secretstorage python-wheel python-xdg python2.7-dev
Suggested packages:
  gnu-standards python-crypto-doc python-cryptography-doc python-cryptography-vectors
  gir1.2-gnomekeyring-1.0 python-fs python-gdata python-keyczar
  python-secretstorage-doc python-setuptools-doc
The following NEW packages will be installed:
  autoconf2.13 libexpat1-dev libossp-uuid16 libpython-all-dev libpython-dev
  libpython2.7-dev python-all python-all-dev python-asn1crypto python-cffi-backend
  python-crypto python-cryptography python-dev python-idna python-ipaddress
  python-keyring python-keyrings.alt python-pip python-pip-whl python-secretstorage
  python-setuptools python-wheel python-xdg python2.7-dev uuid
0 to upgrade, 25 to newly install, 0 to remove and 0 not to upgrade.
Need to get 31.8 MB of archives.
After this operation, 52.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

...

Executing as root: sudo apt-get install libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdbus-glib-1-dev libgtk-3-dev libgtk2.0-dev libpulse-dev libx11-xcb-dev libxt-dev python-dbus xvfb yasm
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libxt-dev is already the newest version (1:1.1.5-1).
libxt-dev set to manually installed.
python-dbus is already the newest version (1.2.6-1).
The following additional packages will be installed:
  gir1.2-gtk-2.0 libatk-bridge2.0-dev libatk1.0-dev libatspi2.0-dev
  libcairo-script-interpreter2 libcairo2-dev libdrm-dev libegl1-mesa-dev libepoxy-dev
  libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libgles1 libglvnd-core-dev
  libglvnd-dev libopengl0 libpango1.0-dev libpixman-1-dev libpng-dev libpng-tools
  libwayland-bin libwayland-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev
  libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-shape0-dev
  libxcb-shm0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcomposite-dev libxcursor-dev
  libxdamage-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev
  libxkbcommon-dev libxrandr-dev libxrender-dev libxshmfence-dev libxtst-dev
  libxxf86vm-dev mesa-common-dev wayland-protocols x11proto-composite-dev
  x11proto-damage-dev x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev
  x11proto-record-dev x11proto-xext-dev x11proto-xf86vidmode-dev x11proto-xinerama-dev
Suggested packages:
  libasound2-doc libcairo2-doc libcurl4-doc libidn11-dev libkrb5-dev libldap2-dev
  librtmp-dev libssh2-1-dev libgtk-3-doc libgtk2.0-doc libpango1.0-doc libwayland-doc
  libxext-doc
The following NEW packages will be installed:
  gir1.2-gtk-2.0 libasound2-dev libatk-bridge2.0-dev libatk1.0-dev libatspi2.0-dev
  libcairo-script-interpreter2 libcairo2-dev libcurl4-openssl-dev libdbus-1-dev
  libdbus-glib-1-dev libdrm-dev libegl1-mesa-dev libepoxy-dev libfontconfig1-dev
  libfreetype6-dev libgdk-pixbuf2.0-dev libgles1 libglvnd-core-dev libglvnd-dev
  libgtk-3-dev libgtk2.0-dev libopengl0 libpango1.0-dev libpixman-1-dev libpng-dev
  libpng-tools libpulse-dev libwayland-bin libwayland-dev libx11-xcb-dev
  libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev
  libxcb-randr0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-shm0-dev
  libxcb-sync-dev libxcb-xfixes0-dev libxcomposite-dev libxcursor-dev libxdamage-dev
  libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxkbcommon-dev
  libxrandr-dev libxrender-dev libxshmfence-dev libxtst-dev libxxf86vm-dev
  mesa-common-dev wayland-protocols x11proto-composite-dev x11proto-damage-dev
  x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev x11proto-record-dev
  x11proto-xext-dev x11proto-xf86vidmode-dev x11proto-xinerama-dev xvfb yasm
0 to upgrade, 67 to newly install, 0 to remove and 0 not to upgrade.
Need to get 12.4 MB of archives.
After this operation, 69.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

...

You do not have Mercurial installed

Mercurial releases a new version every 3 months and your distro's package
may become out of date. This may cause incompatibility with some
Mercurial extensions that rely on new Mercurial features. As a result,
you may not have an optimal version control experience.

To have the best Mercurial experience possible, we recommend installing
Mercurial via the "pip" Python packaging utility. This will likely result
in files being placed in /usr/local/bin and /usr/local/lib.

How would you like to continue?
  1. Install a modern Mercurial via pip (recommended)
  2. Install a legacy Mercurial via apt
  3. Do not install Mercurial
Your choice: 1
Executing as root: sudo pip install --upgrade Mercurial
The directory '/home/jj5/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/jj5/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting Mercurial
  Downloading https://files.pythonhosted.org/packages/f7/25/f0dba6943dfead28c07e0356f627cf4cd98842c6760593f1ea4115097ead/mercurial-5.2.2.tar.gz (7.3MB)
    100% |████████████████████████████████| 7.3MB 264kB/s
Installing collected packages: Mercurial
  Running setup.py install for Mercurial ... done
Successfully installed Mercurial-5.2.2
Your version of Python (2.7.17) is new enough.
Could not find a Rust compiler.
Will try to install Rust.
Downloading rustup-init... Ok
Running rustup-init...
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2019-12-19, rust version 1.40.0 (73528e339 2019-12-16)
info: downloading component 'rustc'
 57.8 MiB /  57.8 MiB (100 %)  10.9 MiB/s ETA:   0 s
info: downloading component 'rust-std'
 18.5 MiB /  18.5 MiB (100 %)  11.0 MiB/s ETA:   0 s
info: downloading component 'cargo'
info: downloading component 'rust-docs'
 11.9 MiB /  11.9 MiB (100 %)  10.9 MiB/s ETA:   0 s
info: installing component 'rustc'
info: installing component 'rust-std'
info: installing component 'cargo'
info: installing component 'rust-docs'
info: default toolchain set to 'stable'

  stable installed - rustc 1.40.0 (73528e339 2019-12-16)


Rust installation complete. You should now have rustc and cargo
in /home/jj5/.cargo/bin

The installer tries to add these to your default shell PATH, so
restarting your shell and running this script again may work.
If it doesn't, you'll need to add the new command location
manually.

If restarting doesn't work, edit your shell initialization
script, which may be called ~/.bashrc or ~/.bash_profile or
~/.profile, and add the following line:

    source /home/jj5/.cargo/env

Then restart your shell and run the bootstrap script again.

The Firefox build system and related tools store shared, persistent state
in a common directory on the filesystem. On this machine, that directory
is:

  /home/jj5/.mozbuild

If you would like to use a different directory, hit CTRL+c and set the
MOZBUILD_STATE_PATH environment variable to the directory you'd like to
use and re-run the bootstrapper.

Would you like to create this directory? (Yn): Y
Firefox can be cloned using either Git or Mercurial.

Please choose the VCS you want to use:
1. Mercurial
2. Git
Your choice: 1
Mozilla recommends a number of changes to Mercurial to enhance your
experience with it.

Would you like to run a configuration wizard to ensure Mercurial is
optimally configured? (Yn): y
================================================================================
Ensuring https://hg.mozilla.org/hgcustom/version-control-tools is up to date at /home/jj5/.mozbuild/version-control-tools
applying clone bundle from https://hg.cdn.mozilla.net/hgcustom/version-control-tools/548ae9caadb16ff054d1753cc5f4b34055c9821e.zstd.hg
adding changesets
adding manifests
adding file changes
added 7436 changesets with 17866 changes to 2906 files                                                                                                                                                    
finished applying clone bundle
searching for changes
no changes found
7436 local changesets published
1426 files updated, 0 files merged, 0 files removed, 0 files unresolved
(activating bookmark @)
================================================================================
This wizard will guide you through configuring Mercurial for an optimal
experience contributing to Mozilla projects.

The wizard makes no changes without your permission.

To begin, press the enter/return key.

You don't have a username defined in your Mercurial config file. In order
to author commits, you'll need to define a name and e-mail address.

This data will be publicly available when you send commits/patches to others.
If you aren't comfortable giving us your full name, pseudonames are
acceptable.

(Relevant config option: ui.username)
What is your name? John Elliot V
What is your e-mail address? jj5@jj5.net
setting ui.username=John Elliot V <jj5@jj5.net>

Mercurial has implemented some functionality behind ui.tweakdefaults config,
that most users would like by default, but would break some workflows due to
backwards compatibility issues.
You can find more info by running:

  $ hg help config.ui

and checking the "tweakdefaults" section.

Would you like to enable these features (Yn)?  y
Mercurial is not configured to produce diffs in a more readable format.

Would you like to change this (Yn)?  y
Mercurial can provide richer terminal interactions for some operations
by using the popular "curses" library.

Would you like to enable "curses" interfaces (Yn)?  y
Various extensions provide functionality to rewrite repository history. These
enable more powerful - and often more productive - workflows.

If history rewriting is enabled, the following extensions will be enabled:

absorb
  `hg absorb` automatically squashes/folds uncommitted changes in the working
  directory into the appropriate previous changeset. Learn more at
  https://gregoryszorc.com/blog/2018/11/05/absorbing-commit-changes-in-mercurial-4.8/.

histedit
  `hg histedit` allows interactive editing of previous changesets. It presents
  you a list of changesets and allows you to pick actions to perform on each
  changeset. Actions include reordering changesets, dropping changesets,
  folding multiple changesets together, and editing the commit message for
  a changeset.

rebase
  `hg rebase` allows re-parenting changesets from one "branch" of a DAG
  to another. The command is typically used to "move" changesets based on
  an older changeset to be based on the newest changeset.

Would you like to enable these history editing extensions (Yn)?  y

The evolve extension is a Mercurial extension for faster and
safer mutable history. It implements the changeset evolution concept
for Mercurial, allowing for safe and simple history re-writing. It
includes some new commands such as fold, prune and amend which may
improve your user experience with Mercurial.

The evolve extension is recommended for working with Firefox repositories.
More information about changeset evolution can be found by running:

 $ hg help evolution

as well as:

 $ hg help -e evolve

once the `evolve` extension is enabled.

(Relevant config option: extensions.evolve)

Would you like to enable the evolve extension? (Yn)  y
adding changesets
adding manifests
adding file changes
added 4617 changesets with 9472 changes to 471 files
new changesets bbeef801409c:3947964a4ce7
updating to branch stable
312 files updated, 0 files merged, 0 files removed, 0 files unresolved                                                                                                                                    
Evolve was downloaded successfully.
The "watchman" filesystem watching tool could not be found or isn't
working.

Mercurial can leverage "watchman" to make many operations
(like `hg status` and `hg diff`) much faster. Mozilla *highly*
recommends installing "watchman" when working with the Firefox
repository.

Please see https://facebook.github.io/watchman/docs/install.html
for instructions on installing watchman. Please ensure `watchman`
is available on PATH (you should be able to run `watchman` from
your shell).

Enable logging of commands to help diagnose bugs and performance problems (Yn)  y
Enable the shelve feature. Equivalent to git stash (Yn)  y
The firefoxtree extension makes interacting with the multiple Firefox
repositories easier:

* Aliases for common trees are pre-defined. e.g. `hg pull central`
* Pulling from known Firefox trees will create "remote refs" appearing as
  tags. e.g. pulling from fx-team will produce a "fx-team" tag.
* The `hg fxheads` command will list the heads of all pulled Firefox repos
  for easy reference.
* `hg push` will limit itself to pushing a single head when pushing to
  Firefox repos.
* A pre-push hook will prevent you from pushing multiple heads to known
  Firefox repos. This acts quicker than a server-side hook.

The firefoxtree extension is *strongly* recommended if you:

a) aggregate multiple Firefox repositories into a single local repo
b) perform head/bookmark-based development (as opposed to mq)

(Relevant config option: extensions.firefoxtree)

Would you like to activate firefoxtree (Yn)?  y
The "clang-format" extension provides execution of clang-format at the commit steps.
It relies on ./mach clang-format directly.
Would you like to activate clang-format (Yn)?  y
The "js-format" extension provides execution of eslint+prettier at the commit steps.
It relies on ./mach eslint --fix directly.
Would you like to activate js-format (Yn)?  y
It is common to want a quick view of changesets that are in progress.

The ``hg wip`` command provides such a view.

Example Usage:

 $ hg wip
 @  5887 armenzg tip @ Bug 1313661 - Bump pushlog_client to 0.6.0. r=me
 : o  5885 glob mozreview: Improve the error message when pushing to a submitted/discarded review request (bug 1240725) r?smacleod
 : o  5884 glob hgext: Support line breaks in hgrb error messages (bug 1240725) r?gps
 :/
 o  5883 mars mozreview: add py.test and demonstration tests to mozreview (bug 1312875) r=smacleod
 : o  5881 glob autoland: log mercurial commands to autoland.log (bug 1313300) r?smacleod
 :/
 o  5250 gps ansible/docker-hg-web: set USER variable in httpd process
 |
 ~

(Not shown are the colors that help denote the state each changeset
is in.)

(Relevant config options: alias.wip, revsetalias.wip, templates.wip)

Would you like to install the `hg wip` alias (Yn)?  y
The ``hg smart-annotate`` command provides experimental support for
viewing the annotate information while skipping certain changesets,
such as code-formatting changes.

Would you like to install the `hg smart-annotate` alias (Yn)?  y
Will you be submitting commits to Mozilla (Yn)?  n
The push-to-try extension generates a temporary commit with a given
try syntax and pushes it to the try server. The extension is intended
to be used in concert with other tools generating try syntax so that
they can push to try without depending on mq or other workarounds.

(Relevant config option: extensions.push-to-try)

Would you like to activate push-to-try (Yn)?  y
Your config file needs updating.
Would you like to see a diff of the changes first (Yn)?  y
--- hgrc.old
+++ hgrc.new
@@ -0,0 +1,41 @@
+[ui]
+username = John Elliot V <jj5@jj5.net>
+tweakdefaults = true
+interface = curses
+[diff]
+git = true
+showfunc = true
+[extensions]
+absorb =
+histedit =
+rebase =
+evolve = /home/jj5/.mozbuild/evolve/hgext3rd/evolve
+blackbox =
+shelve =
+firefoxtree = /home/jj5/.mozbuild/version-control-tools/hgext/firefoxtree
+clang-format = /home/jj5/.mozbuild/version-control-tools/hgext/clang-format
+js-format = /home/jj5/.mozbuild/version-control-tools/hgext/js-format
+push-to-try = /home/jj5/.mozbuild/version-control-tools/hgext/push-to-try
+[rebase]
+experimental.inmemory = yes
+[alias]
+wip = log --graph --rev=wip --template=wip
+smart-annotate = annotate -w --skip ignored_changesets
+[revsetalias]
+wip = (parents(not public()) or not public() or . or (head() and branch(default))) and (not obsolete() or orphan()^) and not closed() and not (fxheads() - date(-90))
+ignored_changesets = desc("ignore-this-changeset") or extdata(get_ignored_changesets)
+[templates]
+wip = '{label("wip.branch", if(branches,"{branches} "))}{label(ifeq(graphnode,"x","wip.obsolete","wip.{phase}"),"{rev}:{node|short}")}{label("wip.user", " {author|user}")}{label("wip.tags", if(tags," {tags}"))}{label("wip.tags", if(fxheads," {fxheads}"))}{if(bookmarks," ")}{label("wip.bookmarks", if(bookmarks,bookmarks))}{label(ifcontains(rev, revset("parents()"), "wip.here"), " {desc|firstline}")}'
+[color]
+wip.bookmarks = yellow underline
+wip.branch = yellow
+wip.draft = green
+wip.here = red
+wip.obsolete = none
+wip.public = blue
+wip.tags = yellow
+wip.user = magenta
+[experimental]
+graphshorten = true
+[extdata]
+get_ignored_changesets = shell:cat `hg root`/.hg-annotate-ignore-revs 2> /dev/null || true

Write changes to hgrc file (Yn)?  y
Your hgrc file is currently readable by others.

Sensitive information such as your Bugzilla credentials could be
stolen if others have access to this file/machine.

Would you like to fix the file permissions (Yn)  y
Changing permissions of /home/jj5/.hgrc

If you would like to clone the mozilla-unified Mercurial repository, please
enter the destination path below.

Destination directory for Mercurial clone (leave empty to not clone): /var/export/jj-dev/mozilla-unified

Cloning Firefox Mercurial repository to /var/export/jj-dev/mozilla-unified
pulling from https://hg.mozilla.org/mozilla-unified
applying clone bundle from https://hg.cdn.mozilla.net/mozilla-unified/e9a3c8df0fc53e02d6fdd72f0a30e2fa88583077.zstd-max.hg
adding changesets
adding manifests                                                                                                                                                                                          
adding file changes                                                                                                                                                                                       
added 571804 changesets with 3532701 changes to 552550 files (+12 heads)                                                                                                                                  
finished applying clone bundle
searching for changes
adding changesets
adding manifests                                                                                                                                                                                          
adding file changes
updated firefox tree tag aurora
updated firefox tree tag autoland
updated firefox tree tag beta
updated firefox tree tag central
updated firefox tree tag esr10
updated firefox tree tag esr17
updated firefox tree tag esr24
updated firefox tree tag esr31
updated firefox tree tag esr38
updated firefox tree tag esr45
updated firefox tree tag esr52
updated firefox tree tag esr60
updated firefox tree tag esr68
updated firefox tree tag fx-team
updated firefox tree tag inbound
updated firefox tree tag release
added 12 changesets with 45 changes to 36 files
new changesets 615d4ace089d:06b1d6b38002
571804 local changesets published
(run 'hg update' to get a working copy)

updating to "central" - the development head of Gecko and Firefox
(warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor")
285730 files updated, 0 files merged, 0 files removed, 0 files unresolved                                                                                                                                 
Firefox source code available at /var/export/jj-dev/mozilla-unified

Build system telemetry

Mozilla collects data about local builds in order to make builds faster and
improve developer tooling. To learn more about the data we intend to collect
read here:
https://firefox-source-docs.mozilla.org/build/buildsystem/telemetry.html.

If you have questions, please ask in #build in irc.mozilla.org. If you would
like to opt out of data collection, select (N) at the prompt.

Would you like to enable build system telemetry? (Yn): y

Thanks for enabling build telemetry! You can change this setting at any time by editing the config file `/home/jj5/.mozbuild/machrc`

0:04.19 Setting up artifact node.tar.xz
0:04.20 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/bad1328b69e924ec-node.tar.xz
0:04.44 Downloading... 0.0 %
0:06.31 Downloading... 100.0 %
0:06.36 untarring "/home/jj5/.mozbuild/node.tar.xz"
0:02.96 Setting up artifact clang.tar.xz
0:02.96 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/7903192c2a5bf947-clang.tar.xz
0:03.78 Downloading... 0.0 %
0:24.37 Downloading... 100.0 %
0:24.85 untarring "/home/jj5/.mozbuild/clang.tar.xz"
1:26.13 Setting up artifact cbindgen.tar.xz
1:26.14 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/a8e3b544082d318e-cbindgen.tar.xz
1:26.40 Downloading... 0.0 %
1:26.67 Downloading... 100.0 %
1:26.67 untarring "/home/jj5/.mozbuild/cbindgen.tar.xz"
0:02.93 Setting up artifact clang-tidy.tar.xz
0:02.93 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/0dbe7fb2d4893944-clang-tidy.tar.xz
0:03.19 Downloading... 0.0 %
0:08.65 Downloading... 100.0 %
0:08.78 untarring "/home/jj5/.mozbuild/clang-tools/clang-tidy.tar.xz"
0:02.82 Setting up artifact nasm.tar.bz2
0:02.83 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/3fa85ee25c9b561d-nasm.tar.bz2
0:03.10 Downloading... 0.0 %
0:03.19 Downloading... 100.0 %
0:03.22 untarring "/home/jj5/.mozbuild/nasm.tar.bz2"
0:03.01 Setting up artifact sccache.tar.xz
0:03.02 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/74cc61d37c99b38b-sccache.tar.xz
0:03.25 Downloading... 0.0 %
0:04.10 Downloading... 100.0 %
0:04.17 untarring "/home/jj5/.mozbuild/sccache.tar.xz"
0:03.45 Setting up artifact lucetc.tar.xz
0:03.45 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/1e5a07a1a8d3faa2-lucetc.tar.xz
0:03.69 Downloading... 0.0 %
0:04.02 Downloading... 100.0 %
0:04.03 untarring "/home/jj5/.mozbuild/lucetc.tar.xz"
0:03.20 Setting up artifact wasi-sysroot.tar.xz
0:03.20 Downloading artifact to local cache: /home/jj5/.mozbuild/toolchains/59dc751ae04661ee-wasi-sysroot.tar.xz
0:03.45 Downloading... 0.0 %
0:06.76 Downloading... 100.0 %
0:06.87 untarring "/home/jj5/.mozbuild/wasi-sysroot.tar.xz"

Your system should be ready to build Firefox for Desktop!

To build Firefox for Desktop, please restart the shell (Start a new terminal window)