Commit Graph
64 Commits
Author SHA1 Message Date
Alex Hochheiden 0346e7cfb6 Bug 2036604 - Resolve callable choices when listing settings in ./mach settings r=firefox-build-system-reviewers,sergesanspaille
Differential Revision: https://phabricator.services.mozilla.com/D300106
2026-05-28 16:33:54 +00:00
Sylvestre Ledru a2ce5437ce Bug 2024589 - doc: use the :searchfox: macro r=asuth,perftest-reviewers,necko-reviewers,mozperftest-reviewers,geckoview-reviewers,extension-reviewers,credential-management-reviewers,search-reviewers,releng-reviewers,places-reviewers,profiler-reviewers,win-reviewers,omc-reviewers,urlbar-reviewers,permissions-reviewers,core-sessionstore-reviewers,browser-installer-reviewers,layout-reviewers,dom-worker-reviewers,ai-platform-reviewers,niklas,sthompson,janerik,bhearsum,valentin,dshin,sparky,scunnane,canaltinova,hanna_a,handyman,ahal,farre,jteow,emz,nrishel,ohall,dimi,robwu,emilio
Differential Revision: https://phabricator.services.mozilla.com/D288640
2026-04-30 13:28:53 +00:00
Sylvestre Ledru 62b1ca8d05 Bug 2024589 - adjust the code: searchfox.org/mozilla-central is now redirecting to searchfox.org/firefox-main/ r=asuth,perftest-reviewers,necko-reviewers,jgraham,webcompat-reviewers,mozperftest-reviewers,geckoview-reviewers,extension-reviewers,credential-management-reviewers,devtools-reviewers,taskgraph-reviewers,releng-reviewers,desktop-theme-reviewers,win-reviewers,translations-reviewers,omc-reviewers,firefox-desktop-core-reviewers ,home-newtab-reviewers,core-sessionstore-reviewers,browser-installer-reviewers,profiles-reviewers,dom-worker-reviewers,geckodriver-reviewers,ai-platform-reviewers,Sasha,niklas,manuel,janerik,bhearsum,valentin,twisniewski,nchevobbe,emcminn,webrtc-reviewers,mjf,handyman,mconley,mossop,ahal,sparky,nrishel,robwu,ohall,dimi,hjones
Differential Revision: https://phabricator.services.mozilla.com/D288623
2026-04-30 13:28:49 +00:00
Emilio Cobos Álvarez edf8de90e3 Bug 2033421 - Remove some ccache special-cases. r=firefox-build-system-reviewers,ahochheiden
CCACHE_CPP2 is no longer a thing and hasn't been for ~10y.

There are other ways to configure icecream that isn't CCACHE_PREFIX, so
remove the broken and special-casey detection while at it.

The right thing to check would be to run `ccache -k prefix_command` or
so (and even so `mk_add_option` would bypass it).

It seems nobody had regenerated the metrics doc in a while...

Differential Revision: https://phabricator.services.mozilla.com/D295254
2026-04-20 20:24:07 +00:00
Sylvestre Ledru f7aca49bb2 Bug 2015713 - doc: rename the page title to avoid conflicts DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D283862
2026-02-23 14:05:08 +00:00
AJ Dhaliwal 9e0a48c5c0 Bug 1888339 Update doc on creating new mach commands. r=firefox-build-system-reviewers,sergesanspaille
Update the doc with the newer category, description, and MACH_COMMANDS requirements.

Differential Revision: https://phabricator.services.mozilla.com/D206034
2025-04-16 15:56:54 +00:00
Francesco Lodolo (:flod) 426d95862d Bug 1917163 - Update rstcheck to 6.2.4, fix resulting errors in documents, r=Standard8
Differential Revision: https://phabricator.services.mozilla.com/D221287
2024-09-06 15:04:10 +00:00
Cristina Horotan fcdbf602e5 Backed out changeset 4e2df2c48e4b (bug 1917163) for causing mozlint failure. CLOSED TREE 2024-09-06 16:57:11 +03:00
Francesco Lodolo (:flod) d62c1a8e25 Bug 1917163 - Update rstcheck to 6.2.4, fix resulting errors in documents, r=Standard8
Differential Revision: https://phabricator.services.mozilla.com/D221287
2024-09-06 12:17:06 +00:00
ahochheiden 3ca4c07b58 Bug 1887885 - Collect the target architecture of a build r=firefox-build-system-reviewers,glandium
Added one field:
 - The `--target` of a build.

Re-added `python/mach/metrics.yaml` to `./mach doc mach-telemetry` generation (Not sure why it was missing).

Re-generated the associated docs. (It looks like this was not done for previously when other fields were added.

Differential Revision: https://phabricator.services.mozilla.com/D208811
2024-07-09 19:57:45 +00:00
ogiorgis d916e7edbe Bug 1840493 - doc/rst: fix some languages declaration r=firefox-source-docs-reviewers,webdriver-reviewers,necko-reviewers,geckoview-reviewers,devtools-reviewers,profiler-reviewers,championshuttler,whimboo,nchevobbe,julienw,amejiamarmol
Differential Revision: https://phabricator.services.mozilla.com/D196268
2023-12-13 18:32:20 +00:00
ahochheiden 7f05ed2814 Bug 1695312 - Add the ability for dispatch to ad-hoc load command modules that aren't already loaded r=firefox-build-system-reviewers,glandium
This is really just shuffling a bunch of things around. None of the
'load_*' member functions of the `Mach` class actually needed to be
member functions. They can all be static so that they can be used
anywhere. That combined with moving all the other 'mach_command' logic
to a different file, allows us to load the module for any command so
that we can successfully dispatch it.

Differential Revision: https://phabricator.services.mozilla.com/D184060
2023-07-25 00:24:53 +00:00
ogiorgis 4e44d78531 Bug 1749473 - fix some typos in doc r=firefox-source-docs-reviewers,sylvestre DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D171191
2023-03-01 09:35:11 +00:00
Sylvestre Ledru 1fd63074c1 Bug 1807899 - Remove the trailing whitespace and Windows CR on md files r=linter-reviewers,necko-reviewers,marco,jesup
Differential Revision: https://phabricator.services.mozilla.com/D165662
2022-12-30 15:23:21 +00:00
Shane Hughes 6058393486 Bug 1803225 - [docs] Link to MSYS2 setup guide. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D163385
2022-11-30 04:10:42 +00:00
Sean Pedigo c71f7fc3df Bug 1752202 - Updated documentation to better inform contributers how to debug Mach. r=ahal
Depends on D137058

Differential Revision: https://phabricator.services.mozilla.com/D137066
2022-08-17 21:18:08 +00:00
Sylvestre Ledru 5cbc63e635 no bug - Fix a few typo found by the next version of codespell r=marco
Differential Revision: https://phabricator.services.mozilla.com/D150321
2022-07-20 15:26:22 +00:00
Mitchell Hentges c652709987 Bug 1760054: Add Set-ExecutionPolicy item to Windows Mach docs r=ahochheiden
By default, Windows clients are not allowed to run Powershell
scripts [1]. Since our way of understanding `./mach` in Powershell is to
have a `mach.ps1` script, we should have instructions for configuring
Windows to properly understand and invoke it.

`RemoteSigned` is a good default, because it maintains security, while
allowing "local scripts" (such as those from VCS) to run.

[1] https://docs.microsoft.com/en-ca/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.2

Differential Revision: https://phabricator.services.mozilla.com/D141400
2022-03-22 16:43:59 +00:00
Mitchell Hentges a91e740b7f Bug 1755562: Document Mach dependency management r=ahal
* Restructure "Using third-party Python packages" page to focus on the
 "Mach commands"/"adding a Python package" use case since that's why
 most people will be looking at these docs.
* Document the `<site>_virtualenv_packages.txt` behaviour and how it
  relates to a Mach command's definition.
* Simplify the information around using a non-PyPI index to reference
  the RelEng docs directly. It's a shame that the existing docs don't
  explain how to identify tasks that need to use the internal mirror,
  because I'm not sure either. There's existing cases of ad-hoc `pip`
  installs //not// using the mirror, but the pattern isn't clear to me.
* Remove the "specify hashes" information, since the centralized
  solution (will) automatically manage this internally.
  * Arguably, it's still beneficial instructions for ad-hoc
  `pip install` usages, but those are frowned upon today anyways - use
  the centralized solution!

Differential Revision: https://phabricator.services.mozilla.com/D138931
2022-03-02 15:51:30 +00:00
Sylvestre Ledru aa55fd2be8 Bug 1753413 - fx doc: Remove whitespaces, trailing lines & windows CR r=andi,perftest-reviewers,sparky
Differential Revision: https://phabricator.services.mozilla.com/D137741
2022-02-03 18:34:58 +00:00
Mitchell Hentges d7f6252622 Bug 1750874: Support launching Mach with py instead of python r=glandium
When installing from Python.org, the `python` command isn't available by
default (in favour of `py`). Support using `py` instead.

There were issues running `hg` when `python` isn't added to the `PATH`,
so the docs are being updated accordingly.
Of course, it's still worth supporting `py`-instead-of-`python`
workflows for `git` users who won't be impacted by that bug.

Differential Revision: https://phabricator.services.mozilla.com/D136286
2022-01-21 18:22:58 +00:00
Mitchell Hentges 4d8e4f9291 Bug 1746286: Don't recommend adding "Mach" to your PATH r=ahal
This can cause issues when Mach from sourcetree A fails when used in
sourcetree B because an expected file is missing.

Differential Revision: https://phabricator.services.mozilla.com/D133951
2022-01-13 21:39:39 +00:00
Mitchell Hentges ddbb742a6c Bug 1740123: Allow invoking Mach outside of MozillaBuild r=glandium
Assuming that the `MOZILLABUILD` environment variable is set, allow
invoking Mach from non-MozillaBuild terminals.

Note that MozillaBuild still needs to be installed, and the
`MOZILLABUILD` environment variable will have to be set.

For future reference: when I tried setting this up with Windows
Store's Python 3.9, I encountered issues when running binaries installed
via `pip`: it would fail with `abort: failed to load Python DLL
python3x.dll`.

Differential Revision: https://phabricator.services.mozilla.com/D133936
2022-01-06 06:49:47 +00:00
Mitchell Hentges fdc33dac57 Bug 1725895: Port --profile-command to pure-Python r=nalexander,glandium
As part of this, the shell-script part of `./mach` can be removed,
making it pure Python.

There's a change in `--profile-command` behaviour, though: it now only
profiles the specific command, rather than all of Mach.
This is because _so much of Mach_ has already been run before
CLI arguments are parsed in the Python process.

If a developer wants to profile Mach itself, they can manually run
`python3 -m cProfile -o <file> ./mach ...`

Differential Revision: https://phabricator.services.mozilla.com/D133928
2022-01-06 00:32:48 +00:00
Marian-Vasile Laza 5e6f31856a Backed out 2 changesets (bug 1725895, bug 1740123) for causing build bustages.
Backed out changeset a6eabd95e31d (bug 1740123)
Backed out changeset bfd5211060b4 (bug 1725895)
2022-01-05 03:46:17 +02:00
Mitchell Hentges 6d1070bc8e Bug 1725895: Port --profile-command to pure-Python r=nalexander,glandium
As part of this, the shell-script part of `./mach` can be removed,
making it pure Python.

There's a change in `--profile-command` behaviour, though: it now only
profiles the specific command, rather than all of Mach.
This is because _so much of Mach_ has already been run before
CLI arguments are parsed in the Python process.

If a developer wants to profile Mach itself, they can manually run
`python3 -m cProfile -o <file> ./mach ...`

Differential Revision: https://phabricator.services.mozilla.com/D133928
2022-01-04 21:07:32 +00:00
Alex Lopez 5db2d91e9f Bug 1696251: Allow mach commands as stand-alone functions and adapt existing commands. r=mhentges,webdriver-reviewers,perftest-reviewers,sparky,whimboo
This removes the `@CommandProvider` decorator and the need to implement
mach commands inside subclasses of `MachCommandBase`, and moves all
existing commands out from classes to module level functions.

Differential Revision: https://phabricator.services.mozilla.com/D121512
2021-09-27 18:12:51 +00:00
Butkovits Atila 776d615efa Backed out changeset 53b1fa0faa6d (bug 1696251) for breaking the static-analysis integration. a=backout 2021-09-23 13:06:40 +03:00
Alex Lopez 05519dde6e Bug 1696251: Allow mach commands as stand-alone functions and adapt existing commands. r=mhentges,webdriver-reviewers,perftest-reviewers,sparky,whimboo
This removes the `@CommandProvider` decorator and the need to implement
mach commands inside subclasses of `MachCommandBase`, and moves all
existing commands out from classes to module level functions.

Differential Revision: https://phabricator.services.mozilla.com/D121512
2021-09-21 20:38:16 +00:00
Butkovits Atila c1ea191790 Backed out changeset 510dd46a9de7 (bug 1696251) for causing Android build bustages. 2021-09-21 05:16:50 +03:00
Alex Lopez f3dec7c4dd Bug 1696251: Allow mach commands as stand-alone functions and adapt existing commands. r=mhentges,webdriver-reviewers,perftest-reviewers,sparky,whimboo
This removes the `@CommandProvider` decorator and the need to implement
mach commands inside subclasses of `MachCommandBase`, and moves all
existing commands out from classes to module level functions.

Differential Revision: https://phabricator.services.mozilla.com/D121512
2021-09-20 20:21:07 +00:00
Noemi Erli d04aa2bc01 Backed out changeset 5f5b612878f3 (bug 1696251) for causing multiple bustages 2021-09-18 02:22:39 +03:00
Alex Lopez 9d8b080fa8 Bug 1696251: Allow mach commands as stand-alone functions and adapt existing commands. r=mhentges,webdriver-reviewers,perftest-reviewers,sparky,whimboo
This removes the `@CommandProvider` decorator and the need to implement
mach commands inside subclasses of `MachCommandBase`, and moves all
existing commands out from classes to module level functions.

Differential Revision: https://phabricator.services.mozilla.com/D121512
2021-09-17 19:00:39 +00:00
surajeet310 6cf624ea47 Bug 1714788 - Fixed more Sphinx warnings in 'mach doc' r=sylvestre DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D117419
2021-06-10 19:33:53 +00:00
Nick Alexander a6d8fb5bfc Bug 1713173 - Add --profile-command flag for profiling mach commands. r=firefox-build-system-reviewers,mhentges
I chose to do this at the level of the outer Python invocation because:

1. `python -m cProfile ...` handles writing the file and some other
   details.  It's possible to rebuild the functionality -- the tools
   are there -- but the APIs are awkward.

2. this allows to profile `mach` internals, instead of just the
   invoked command's implementation.

This uses the return code of the `get_command` subshell to transmit
the single bit of information "is the flag present".

The Python-level argument is required in order to have `--help` know
about the option and to avoid the `mach` shell script having to filter
arguments.

Differential Revision: https://phabricator.services.mozilla.com/D116151
2021-06-02 21:28:56 +00:00
Alex Lopez bc8dd276ea Bug 1696251 - Pass MachCommandBase object as first argument for Mach Commands. r=mhentges,remote-protocol-reviewers,marionette-reviewers,webdriver-reviewers,perftest-reviewers
As an intermediate step to allow mach commands as standalone functions, the MachCommandBase
subclass instance that currently corresponds to self has to be made available as a separate
argument (named command_context).

Differential Revision: https://phabricator.services.mozilla.com/D109650
2021-05-17 16:15:58 +00:00
Butkovits Atila 9cdb8e2e2a Backed out 2 changesets (bug 1696251) for causing js-bench-sm failures. CLOSED TREE
Backed out changeset 1c84c9a34575 (bug 1696251)
Backed out changeset e169193b7423 (bug 1696251)
2021-04-23 02:53:36 +03:00
Alex Lopez cb583c215f Bug 1696251 - Pass MachCommandBase object as first argument for Mach Commands. r=mhentges,remote-protocol-reviewers,marionette-reviewers,webdriver-reviewers,perftest-reviewers
As an intermediate step to allow mach commands as standalone functions, the MachCommandBase
subclass instance that currently corresponds to self has to be made available as a separate
argument (named command_context).

Differential Revision: https://phabricator.services.mozilla.com/D109650
2021-04-22 18:56:15 +00:00
Cosmin Sabou 9c545e95b4 Backed out changeset d4a5d8567977 (bug 1696251) for non-unified build bustages. CLOSED TREE 2021-04-19 19:43:31 +03:00
Alex Lopez 4eb9b0babc Bug 1696251 - Pass MachCommandBase object as first argument for Mach Commands. r=mhentges,remote-protocol-reviewers,marionette-reviewers,webdriver-reviewers,perftest-reviewers
As an intermediate step to allow mach commands as standalone functions, the MachCommandBase
subclass instance that currently corresponds to self has to be made available as a separate
argument (named command_context).

Differential Revision: https://phabricator.services.mozilla.com/D109650
2021-04-19 16:15:11 +00:00
Alex Lopez f066b3d2b0 Bug 1696251 - Move metrics_path parameter from @CommandProvider to @Command/@SubCommand . r=mhentges
As a step to remove the need to use @CommandProvider, we are moving
the metrics_path parameter to @Command.

Differential Revision: https://phabricator.services.mozilla.com/D108092
2021-03-17 14:14:14 +00:00
Mitchell Hentges af87a06e91 Bug 1694981: Add missing items to mach telemetry doc r=firefox-build-system-reviewers,glandium,andi
`mach doc mach-telemetry` wasn't run the last time the telemetry
changed. By running it now, the docs are now up-to-date.

Differential Revision: https://phabricator.services.mozilla.com/D106544
2021-03-12 16:07:11 +00:00
Ricky Stewart 37f45d799e Bug 1670977 - Remove errant spaces from expression fpath+=~/.zfunc in zsh mach autocompletion docs r=ahal DONTBUILD
Differential Revision: https://phabricator.services.mozilla.com/D93423
2020-10-13 20:33:17 +00:00
Andrew Halberstadt 5ff6c696f2 Bug 1519990 - [mach] Add ability to generate completion scripts via 'mach mach-completion <shell>', r=mhentges
Supported shells are 'bash', 'zsh' and 'fish'. Here are installation
instructions with various shells and contexts:

### bash

    $ mach mach-completion bash -f _mach
    $ sudo mv _mach /etc/bash_completion.d

### bash (homebrew)

    $ mach mach-completion bash -f $(brew --prefix)/etc/bash_completion.d/mach.bash-completion

### zsh

    $ mkdir ~/.zfunc
    $ mach mach-completion zsh -f ~/.zfunc/_mach

then edit ~/.zshrc and add:

    fpath += ~/.zfunc
    autoload -U compinit && compinit

### zsh (oh-my-zsh)

    $ mkdir $ZSH/plugins/mach
    $ mach mach-completion zsh -f $ZSH/plugins/mach/_mach

then edit ~/.zshrc and add 'mach' to your enabled plugins:

    plugins(mach ...)

### zsh (prezto)

    $ mach mach-completion zsh -f ~/.zprezto/modules/completion/external/src/_mach

### fish

    $ ./mach mach-completion fish -f ~/.config/fish/completions/mach.fish

### fish (homebrew)

    $ ./mach mach-completion fish -f (brew --prefix)/share/fish/vendor_completions.d/mach.fish

Differential Revision: https://phabricator.services.mozilla.com/D90416
2020-10-09 16:03:30 +00:00
Ricky Stewart 7feb0e887b Bug 1667436 - Merge content of docs/setup/mach.rst into existing documentation r=firefox-build-system-reviewers,mhentges DONTBUILD
This document was imported from MDN and contained very outdated/incorrect information, and much of the information here is duplicated from the existing `mach` documentation. For the little content that isn't already expressed in the existing documentation in a better way, merge it into `python/mach/docs`.

The unique content is mainly in the FAQ, so I added a new page for that.

Differential Revision: https://phabricator.services.mozilla.com/D91455
2020-10-05 16:51:41 +00:00
Mitchell Hentges 0d0819ffb2 Bug 1654074: Publish glean handle to mach commands r=firefox-build-system-reviewers,rstewart
Allows mach commands to define their own glean metrics with the `metrics_path` @CommandProvider parameter.
When `metrics_path` is defined:
* A `metrics` kwarg is provided to the decorated class. This `metrics` handle is a Glean instance, so Glean documentation should be consulted for usage information.
* When `mach doc telemetry` is run, metrics docs will be generated from all the registered metrics files.

Note: there was some consideration between making `metrics_path` a @CommandProvider or @Command parameter.
In the end, @CommandProvider seemed like a better fit because:
* Metrics seem to be more associated with the entire class than a specific command/method. This is because a class represents a "domain", and that domain may have different commands that have overlapping metrics.  Accordingly, all the metrics should be defined once as available to the entire class.
* Currently, @Command methods only take parameters that map one-to-one with CLI arguments. It could seem inconsistent to have one exception: the metrics handle

Differential Revision: https://phabricator.services.mozilla.com/D85953
2020-09-15 21:15:20 +00:00
Mitchell Hentges 65b3d4eb22 Bug 1651424: Report build telemetry using Glean r=firefox-build-system-reviewers,Dexter,rstewart
In addition to the existing build telemetry, also gather the stats and
report with Glean. This new telemetry is reported in tandem with the existing
telemetry to allow testing and confidence before a full roll-out.

Additionally, Glean isn't compatible with Python 2, so the new telemetry only runs
on Python 3 mach commands.

Differential Revision: https://phabricator.services.mozilla.com/D83572
2020-09-09 23:51:57 +00:00
Ricky Stewart 10d87a8c7c Bug 1656993: Create and require by default global virtualenvs in ~/.mozbuild for mach r=mhentges,ahal
In two different places we've been encountering issues regarding 1) how we configure the system Python environment and 2) how the system Python environment relates to the `virtualenv`s that we use for building, testing, and other dev tasks. Specifically:

1. With the push to use `glean` for telemetry in `mach`, we are requiring (or rather, strongly encouraging) the `glean_sdk` Python package to be installed with bug 1651424. `mach bootstrap` upgrades the library using your system Python 3 in bug 1654607. We can't vendor it due to the package containing native code. Since we generally vendor all code required for `mach` to function, requiring that the system Python be configured with a certain version of `glean` is an unfortunate change.

2. The build uses the vendored `glean_parser` for a number of build tasks. Since the vendored `glean_parser` conflicts with the globally-installed `glean_sdk` package, we had to add special ad-hoc handling to allow us to circumvent this conflict in bug 1655781.

3. We begin to rely more and more on the `zstandard` package during build tasks, this package again being one that we can't vendor due to containing native code. Bug 1654994 contained more ad-hoc code which subprocesses out from the build system's `virtualenv` to the SYSTEM `python3` binary, assuming that the system `python3` has `zstandard` installed.

As we rely more on `glean_sdk`, `zstandard`, and other packages that are not vendorable, we need to settle on a standard model for how `mach`, the build process, and other `mach` commands that may make their own `virtualenv`s work in the presence of unvendorable packages.

With that in mind, this patch does all the following:

1. Separate out the `mach` `virtualenv_packages` from the in-build `virtualenv_packages`. Refactor the common stuff into `common_virtualenv_packages.txt`. Add functionality to the `virtualenv_packages` manifest parsing to allow the build `virtualenv` to "inherit" from the parent by pointing to the parent's `site-packages`. The `in-virtualenv` feature from bug 1655781 is no longer necessary, so delete it.

2. Add code to `bootstrap`, as well as a new `mach` command `create-mach-environment` to create `virtualenv`s in `~/.mozbuild`.

3. Add code to `mach` to dispatch either to the in-`~/.mozbuild` `virtualenv`s (or to the system Python 3 for commands which cannot run in the `virtualenv`s, namely `bootstrap` and `create-mach-environment`).

4. Remove the "add global argument" feature from `mach`. It isn't used and conflicts with (3).

5. Remove the `--print-command` feature from `mach` which is obsoleted by these changes.

This has the effect of allowing us to install packages that cannot be vendored into a "common" place (namely the global `~/.mozbuild` `virtualenv`s) and use those from the build without requiring us to hit the network. Miscellaneous implementation notes:

1. We allow users to force running `mach` with the system Python if they like. For now it doesn't make any sense to require 100% of people to create these `virtualenv`s when they're allowed to continue on with the old behavior if they like. We also skip this in CI.

2. We needed to duplicate the global-argument logic into the `mach` script to allow for the dispatch behavior. This is something we avoided with the Python 2 -> Python 3 migration with the `--print-command` feature, justifying its use by saying it was only temporarily required until all `mach` commands were running with Python 3. With this change, we'll need to be able to determine the `mach` command from the shell script for the forseeable future, and committing to this forever with the cost that `--print-command` incurs (namely `mach` startup time, an additional .4s on my machine) didn't seem worth it to me. It's not a ton of duplicated code.

Differential Revision: https://phabricator.services.mozilla.com/D85916
2020-08-17 17:21:02 +00:00
Ricky Stewart 34db6aa3b6 Bug 1657650 - Require that Mach command providers subclass MachCommandBase. r=remote-protocol-reviewers,marionette-reviewers,maja_zf,mhentges,froydnj
Today we don't require that `mach` `CommandProvider`s subclass from any particular parent class and we're very lax about the requirements they must meet. While that's convenient in certain circumstances, it has some unfortunate implications for feature development.

Today the only requirements that we have for `CommandProvider`s are that they have an `__init__()` method that takes either 1 or 2 arguments, the second of which must be called `context` and is populated with the `mach` `CommandContext`. Again, while this flexibility is occasionally convenient, it is limiting. As we add features to `mach`, having a better idea what the shape of our `CommandProvider`s are and how we can instantiate them and use them is increasingly important, and this gives us additional control when having `mach` configure `CommandProvider`s based on data that is only available at the `mach` level. In particular, we plan to leverage this in bugs 985141 and 1654074.

Here we add validation to the `CommandProvider` decorator to ensure all classes inherit from `MachCommandBase`, update all `CommandProvider`s in-tree to inherit from `MachCommandBase`, and update source and test code accordingly.

Follow-up work: we now require (de facto) that the `context` be populated with a `topdir` attribute by the `populate_context_handler` function, since instantiating the `MachCommandBase` requires a `topdir` be provided. This is fine for now in the interest of keeping this patch reasonably sized, but some additional refactoring could make this cleaner.

Differential Revision: https://phabricator.services.mozilla.com/D86255
2020-08-07 18:24:59 +00:00
Andrew Halberstadt 608c118c1e Bug 1519968 - [mach] Minor improvements to autocomplete docs, r=jmaher
Differential Revision: https://phabricator.services.mozilla.com/D16495
2019-01-14 19:43:53 +00:00