Skip to content

Commit

Permalink
Add hook for runtime config settings.
Browse files Browse the repository at this point in the history
Summary:
This adds a hook to allow external parties to provide config settings at runtime.
The hook is technically for when a RepositoryAPI is created, but that moment can
be used to set new config settings using the new setRuntimeConfig() api.

For example you could have a external hook that looks for keys like 'git:foo.bar'
or 'hg:foo.bar' and writes the value of 'foo.bar' based on whether the repo is a
git or a hg repo.

Test Plan:
Created a hook that looks for hg/git prefix versions of config keys.
Set hg:arc.feature.start.default to be "master" and set arc.feature.start.default
to be "trunk".
Ran arc feature in the hg repo.  It made a bookmark on master.
Ran arc feature in the git repo.  It made a branch on trunk.

Did it again, but with git:arc.feature... set instead.

Reviewers: epriestley

Reviewed By: epriestley

CC: nh, wez, aran, Korvin

Differential Revision: https://secure.phabricator.com/D5357
  • Loading branch information
DurhamG committed Apr 1, 2013
1 parent b7a2766 commit 3f2c6b6
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions src/workingcopyidentity/ArcanistWorkingCopyIdentity.php
Expand Up @@ -12,6 +12,7 @@ final class ArcanistWorkingCopyIdentity {

protected $localConfig;
protected $projectConfig;
protected $runtimeConfig;
protected $projectRoot;

public static function newDummyWorkingCopy() {
Expand Down Expand Up @@ -87,6 +88,7 @@ protected function __construct($root, array $config) {
$this->projectRoot = $root;
$this->projectConfig = $config;
$this->localConfig = array();
$this->runtimeConfig = array();

$vc_dirs = array(
'.git',
Expand Down Expand Up @@ -214,8 +216,13 @@ public function getLocalConfig($key, $default=null) {
public function getConfigFromAnySource($key, $default = null) {
$settings = new ArcanistSettings();

// try local config first
$pval = $this->getLocalConfig($key);
// try runtime config first
$pval = idx($this->runtimeConfig, $key);

// try local config
if ($pval === null) {
$pval = $this->getLocalConfig($key);
}

// then per-project config
if ($pval === null) {
Expand Down Expand Up @@ -244,4 +251,19 @@ public function getConfigFromAnySource($key, $default = null) {

}

/**
* Sets a runtime config value that takes precedence over any static
* config values.
*
* @param key Key to set.
* @param value The value of the key.
*
* @task config
*/
public function setRuntimeConfig($key, $value) {
$this->runtimeConfig[$key] = $value;

return $this;
}

}

0 comments on commit 3f2c6b6

Please sign in to comment.