From: Phillip Wood Date: Sun, 05 Apr 2020 15:18:53 GMT Subject: Re: [PATCH 09/15] job-runner: load repos from config by default 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: > From: Derrick Stolee > > The 'git job-runner' command was introduced with a '--repo=' > 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 > --- > 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 > + > + 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; > } > >