Re: [PATCH 09/15] job-runner: load repos from config by default
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Apr 5, 2020, 15:18 UTC
- Message-ID
- <29e32e80-a546-6e43-8d03-bafca03681ec@gmail.com>
- In-Reply-To
- <9104ae46371a08967805f6ce27586ccade37972a.1585946894.git.gitgitgadget@gmail.com>
Hi Stolee
On 03/04/2020 21:48, Derrick Stolee via GitGitGadget wrote:
Show 58 quoted lines
> From: Derrick Stolee <dstolee@microsoft.com>
>
> The 'git job-runner' command was introduced with a '--repo=<path>'
> option so a user could start a process with an explicit list of
> repos. However, it is more likely that we will want 'git
> job-runner' to start without any arguments and discover the set of
> repos from another source.
>
> A natural source is the Git config. The 'git job-runner' does not
> need to run in a Git repository, but the config could be located in
> the global or system config.
>
> Create the job.repo config setting as a multi-valued config option.
>
> Read all values for job.repo whenever triggering an iteration of
> the job loop. This allows a user to add or remove repos dynamically
> without restarting the job-runner.
>
> Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
> ---
> Documentation/config/job.txt | 7 +++++++
> builtin/job-runner.c | 20 ++++++++++++++++++++
> 2 files changed, 27 insertions(+)
>
> diff --git a/Documentation/config/job.txt b/Documentation/config/job.txt
> index efdb76afad3..2dfed3935fa 100644
> --- a/Documentation/config/job.txt
> +++ b/Documentation/config/job.txt
> @@ -4,3 +4,10 @@ job.pack-files.batchSize::
> part of `git run-job pack-files`. If not specified, then a
> dynamic size calculation is run. See linkgit:git-run-job[1]
> for more details.
> +
> +job.repo::
> + Store an absolute path to a repository that wants background
> + jobs run by `git job-runner`. This is a multi-valued config
> + option, but it must be stored in a config file seen by the
> + background runner. This may be the global or system config
> + depending on how `git job-runner` is launched on your system.
> diff --git a/builtin/job-runner.c b/builtin/job-runner.c
> index 135288bcaae..bed401f94bf 100644
> --- a/builtin/job-runner.c
> +++ b/builtin/job-runner.c
> @@ -20,6 +20,9 @@ static int arg_repos_append(const struct option *opt,
>
> static int load_active_repos(struct string_list *repos)
> {
> + struct string_list_item *item;
> + const struct string_list *config_repos;
> +
> if (arg_repos.nr) {
> struct string_list_item *item;
> for (item = arg_repos.items;
> @@ -29,6 +32,23 @@ static int load_active_repos(struct string_list *repos)
> return 0;
> }
>
> + config_repos = git_config_get_value_multi("job.repo");Does this really re-read the config files as the commit message suggests or just return the cached values? Perhaps the runner could exec itself with a --run-jobs option to actually run the jobs so that it sees any updated config values.
Best Wishes
Phillip
Show 20 quoted lines
> +
> + for (item = config_repos->items;
> + item && item < config_repos->items + config_repos->nr;
> + item++) {
> + DIR *dir = opendir(item->string);
> +
> + if (!dir)
> + continue;
> +
> + closedir(dir);
> + string_list_append(repos, item->string);
> + }
> +
> + string_list_sort(repos);
> + string_list_remove_duplicates(repos, 0);
> +
> return 0;
> }
>
>