mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-12 00:26:13 +01:00
8f2f841d17
Summary: Fixes T9483. This bookname is `phabcontrib`, not `contributor`. Test Plan: `grep` / clicked these links. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9483 Differential Revision: https://secure.phabricator.com/D14195
223 lines
9.6 KiB
Text
223 lines
9.6 KiB
Text
@title Arcanist User Guide: Configuring a New Project
|
|
@group userguide
|
|
|
|
Explains how to configure Arcanist projects with `.arcconfig` files.
|
|
|
|
= Overview =
|
|
|
|
In most cases, you should be able to use `arc` without specifically configuring
|
|
your project for it. If you want to adjust `arc` behaviors, you can create a
|
|
`.arcconfig` file in your project to provide project-specific settings.
|
|
|
|
= .arcconfig Basics =
|
|
|
|
An `.arcconfig` file is a JSON file which you check into your project's root.
|
|
|
|
Arcanist uses `.arcconfig` files to customize a number of things about its
|
|
behavior. The first thing you're likely to want to configure is the URI
|
|
for your Phabricator install. A simple, valid file looks something like this:
|
|
|
|
name=.arcconfig
|
|
{
|
|
"phabricator.uri" : "https://phabricator.example.com/"
|
|
}
|
|
|
|
For details on available options, see below.
|
|
|
|
NOTE: You should commit your `.arcconfig` file! It contains project
|
|
configuration, not user configuration.
|
|
|
|
= Advanced .arcconfig =
|
|
|
|
Common options are:
|
|
|
|
- **phabricator.uri**: the URI for the Phabricator install that `arc` should
|
|
connect to when run in this project. This option was previously called
|
|
`conduit_uri`.
|
|
- **repository.callsign**: The callsign of this repository in Diffusion.
|
|
Normally, `arc` can detect this automatically, but if it can't figure it out
|
|
you can specify it explicitly. Use `arc which` to understand the detection
|
|
process.
|
|
- **history.immutable**: Configures `arc` to use workflows which never rewrite
|
|
history in the working copy. By default, `arc` will perform some rewriting
|
|
of unpublished history (amending commit messages, squash merging) on some
|
|
workflows in Git. The distinctions are covered in detail below.
|
|
|
|
Other options include:
|
|
|
|
- **load**: list of additional Phutil libraries to load at startup.
|
|
See below for details about path resolution, or see
|
|
@{article@phabcontrib:Adding New Classes} for a general introduction to
|
|
libphutil libraries.
|
|
- **https.cabundle**: specifies the path to an alternate certificate bundle
|
|
for use when making HTTPS connections.
|
|
- **lint.engine**: the name of a subclass of
|
|
@{class@arcanist:ArcanistLintEngine}, which should be used to apply lint
|
|
rules to this project. See @{article:Arcanist User Guide: Lint}.
|
|
- **unit.engine**: the name of a subclass of
|
|
@{class@arcanist:ArcanistUnitTestEngine}, which should be used to apply
|
|
unit test rules to this project. See
|
|
@{article:Arcanist User Guide: Customizing Lint, Unit Tests and Workflows}.
|
|
|
|
These options are supported, but their use is discouraged:
|
|
|
|
- **http.basicauth.user**: specify an HTTP basic auth username for use when
|
|
connecting to Phabricator.
|
|
- **http.basicauth.pass**: specify an HTTP basic auth password for use when
|
|
connecting to Phabricator.
|
|
- **https.blindly-trust-domains**: a list of domains to trust blindly over
|
|
HTTPS, even if their certificates are invalid. This is a brute force
|
|
solution to certificate validity problems, and is discouraged. Instead,
|
|
use valid certificates.
|
|
|
|
For a complete list of options, run `arc get-config`. Although all
|
|
options can be set in `.arcconfig`, some options (like `editor`) usually do not
|
|
make sense to set here because they're likely to vary from user to user.
|
|
|
|
= History Mutability =
|
|
|
|
Arcanist workflows run in two broad modes: either history is //mutable// or
|
|
//immutable//. Under a //mutable// history, `arc` commands may rewrite the
|
|
working copy history; under an //immutable// history, they may not.
|
|
|
|
You control history mutability by setting `history.immutable` to `true` or
|
|
`false` in your configuration. By default, it is `false` in Git (i.e.,
|
|
//mutable//) and `true` in Mercurial (i.e., //immutable//). The sections below
|
|
explain how these settings affect workflows.
|
|
|
|
== History Mutability: Git ==
|
|
|
|
In a workflow with //mutable// history, you rewrite local history. You develop
|
|
in feature branches, but squash or amend before pushing by using `git commit
|
|
--amend`, `git rebase -i`, or `git merge --squash`. Generally, one idea in
|
|
the remote is represented by one commit.
|
|
|
|
In a workflow with //immutable// history, you do not rewrite local history. You
|
|
develop in feature branches and push them without squashing commits. You do not
|
|
use `git commit --amend` or `git rebase -i`. Generally, one idea in the
|
|
remote is represented by many commits.
|
|
|
|
Practically, these are the differences you'll see based on your setting:
|
|
|
|
- **Mutable**
|
|
- `arc diff` will prompt you to amend lint changes into HEAD.
|
|
- `arc diff` will amend the commit message in HEAD after creating a
|
|
revision.
|
|
- `arc land` will default to the `--squash` strategy.
|
|
- `arc amend` will amend the commit message in HEAD with information from
|
|
the corresponding or specified Differential revision.
|
|
- **Immutable**
|
|
- `arc diff` will abort if it makes lint changes.
|
|
- `arc diff` will not amend the commit message in HEAD after creating a
|
|
revision.
|
|
- `arc land` will default to the `--merge` strategy.
|
|
- `arc amend` will exit with an error message.
|
|
|
|
== History Mutability: Mercurial ==
|
|
|
|
Before version 2.2, stock Mercurial has no history mutation commands, so
|
|
this setting has no effect. With Mercurial 2.2. or newer, making history
|
|
//mutable// means:
|
|
|
|
- **Mutable** (versions 2.2 and newer)
|
|
- `arc diff` will amend the commit message in `.` after creating a
|
|
revision.
|
|
- `arc amend` will amend the commit message in `.` with information from
|
|
the corresponding or specified Differential revision.
|
|
- **Immutable** (or versions prior to 2.2)
|
|
- `arc diff` will not amend the commit message in `.` after creating a
|
|
revision.
|
|
- `arc amend` will exit with an error message.
|
|
|
|
= How Libraries Are Located =
|
|
|
|
If you specify an external library to load, like 'examplelib', and use a
|
|
relative path like this:
|
|
|
|
{
|
|
...
|
|
"load": [
|
|
"examplelib/src"
|
|
],
|
|
...
|
|
}
|
|
|
|
...arc looks for it by trying these paths:
|
|
|
|
- `path/to/root/examplelib/src/` First, arc looks in the project's root
|
|
directory (where the `.arcconfig` lives) to see if the library is part of
|
|
the project. This makes it easy to just put project-specific code in a
|
|
project.
|
|
- `path/to/root/../examplelib/src/` Next, arc looks //next to// the project's
|
|
root directory to see if the library is in a sibling directory. If you
|
|
work with several repositories, this makes it easy to put all the `arc`
|
|
code in one repository and just check it out in the same directory as
|
|
everything else.
|
|
- `php/include/path/examplelib/src` Finally, arc falls back to PHP, which
|
|
will look in paths described in the `include_path` php.ini setting. This
|
|
allows you to install libraries in some global location if you prefer.
|
|
|
|
You can alternately supply an absolute path, like `/var/arc/examplelib/src`, but
|
|
then everyone will need to install the library at that exact location.
|
|
|
|
NOTE: Specify the path to the directory which includes
|
|
`__phutil_library_init__.php`. For example, if your init file is in
|
|
`examplelib/src/__phutil_library_init__.php`, specify `examplelib/src`,
|
|
not just `examplelib/`.
|
|
|
|
The general intent here is:
|
|
|
|
- Put project-specific code in some directory in the project, like
|
|
`support/arc/src/`.
|
|
- Put shared code (e.g., which enforces general coding standards or hooks
|
|
up to unit tests or whatever) in a separate repository and check it out
|
|
next to other repositories.
|
|
- Or put everything in some standard location and add it to `include_path`.
|
|
|
|
= Running Without .arcconfig =
|
|
|
|
Although you don't need to set up `.arcconfig`, and you can run `arc` command
|
|
that require a working copy in any Git, Subversion or Mercurial working copy,
|
|
some features won't work unless you set up an `.arcconfig` file.
|
|
|
|
Without `.arcconfig`:
|
|
|
|
- You will need to set a default Phabricator URI with
|
|
`arc set-config default <uri>`, or specify an explicit URI
|
|
with `--conduit-uri` each time you run a command.
|
|
- You will not be able to run linters through arc unless you pass `--engine`
|
|
explicitly.
|
|
- You will not be able to customize certain linter parameters even with
|
|
`--engine`.
|
|
- You will not be able to run unit tests through arc unless you pass
|
|
`--engine` explicitly.
|
|
- You will not be able to trigger lint and unit integration through
|
|
`arc diff`.
|
|
- You will not be able to put Git working copies into immutable history mode
|
|
(see below).
|
|
- You will not be able to specify a repository encoding. UTF-8 will be assumed
|
|
if you do not pass `--encoding`.
|
|
- You will not be able to add plugins to arc to modify existing workflows or
|
|
add new ones.
|
|
- You will not be able to load additional libraries unless you specify them
|
|
explicitly with `--load-phutil-library`.
|
|
- Symbol index integration, which allows users to click function or class
|
|
names in Differential and jump to their definitions, will not work.
|
|
- `arc patch` will be unable to detect that you are applying changes to the
|
|
wrong project.
|
|
- In Subversion, `arc` will be unable to determine the canonical root
|
|
of a project, and will assume it is the working directory (in Subversion
|
|
prior to 1.7) or the root of the checkout (in Subversion after 1.7). This
|
|
means the paths of files in diffs won't be anchored to the same place,
|
|
and will have different amounts of path context, which may be confusing for
|
|
reviewers and will sometimes prevent patches from applying properly if they
|
|
are applied against a different directory than they were generated from.
|
|
- In Subversion, `arc` will be unable to guess that you intend to update
|
|
an existing revision; you must use `--update` explicitly or `--preview`
|
|
and attach diffs via the web interface.
|
|
|
|
= Next Steps =
|
|
|
|
Continue by:
|
|
|
|
- returning to @{article:Arcanist User Guide}.
|