From 3f2c6b629fc0fb6d41ac8511a125fc1c4477c0a1 Mon Sep 17 00:00:00 2001 From: durham Date: Mon, 1 Apr 2013 11:26:17 -0700 Subject: [PATCH] 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 --- .../ArcanistWorkingCopyIdentity.php | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php b/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php index 403c6f72..bf9d4593 100644 --- a/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php +++ b/src/workingcopyidentity/ArcanistWorkingCopyIdentity.php @@ -12,6 +12,7 @@ final class ArcanistWorkingCopyIdentity { protected $localConfig; protected $projectConfig; + protected $runtimeConfig; protected $projectRoot; public static function newDummyWorkingCopy() { @@ -87,6 +88,7 @@ final class ArcanistWorkingCopyIdentity { $this->projectRoot = $root; $this->projectConfig = $config; $this->localConfig = array(); + $this->runtimeConfig = array(); $vc_dirs = array( '.git', @@ -214,8 +216,13 @@ final class ArcanistWorkingCopyIdentity { 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 @@ final class ArcanistWorkingCopyIdentity { } + /** + * 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; + } + }