Permalink
Browse files

Add hook for runtime config settings.

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...
1 parent b7a2766 commit 3f2c6b629fc0fb6d41ac8511a125fc1c4477c0a1 @DurhamG DurhamG committed Apr 1, 2013
Showing with 24 additions and 2 deletions.
  1. +24 −2 src/workingcopyidentity/ArcanistWorkingCopyIdentity.php
View
26 src/workingcopyidentity/ArcanistWorkingCopyIdentity.php
@@ -12,6 +12,7 @@
protected $localConfig;
protected $projectConfig;
+ protected $runtimeConfig;
protected $projectRoot;
public static function newDummyWorkingCopy() {
@@ -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',
@@ -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) {
@@ -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.