All of lore.kernel.org
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: "Lénaïc Huard" <lenaic@lhuard.fr>, git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Derrick Stolee" <dstolee@microsoft.com>,
	"Derrick Stolee" <stolee@gmail.com>,
	"Eric Sunshine" <sunshine@sunshineco.com>,
	"Đoàn Trần Công Danh" <congdanhqx@gmail.com>,
	"Felipe Contreras" <felipe.contreras@gmail.com>,
	"Martin Ågren" <martin.agren@gmail.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Bagas Sanjaya" <bagasdotme@gmail.com>,
	"brian m . carlson" <sandals@crustytoothpaste.net>,
	"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
	"Jeff King" <peff@peff.net>
Subject: Re: [PATCH v7 0/3] maintenance: add support for systemd timers on Linux
Date: Tue, 6 Jul 2021 14:18:44 +0100	[thread overview]
Message-ID: <387ad277-a75c-92ca-b7af-163d10d3b4a4@gmail.com> (raw)
In-Reply-To: <20210702142556.99864-1-lenaic@lhuard.fr>

Hi  Lénaïc

On 02/07/2021 15:25, Lénaïc Huard wrote:
> Hello,
> 
> Please find hereafter a new reroll of my patchset to add support for
> systemd timers on Linux for the `git maintenance start` command.
> 
> The changes compared to the previous version address the remarks
> raised during the previous review.
> ... 
> Diff-intervalle contre v6 :
> -:  ---------- > 1:  899b11ed5b cache.h: Introduce a generic "xdg_config_home_for(…)" function
> 1:  604627f347 ! 2:  f3e2f0256b maintenance: `git maintenance run` learned `--scheduler=<scheduler>`
>      @@ Documentation/git-maintenance.txt: OPTIONS
>        
>       +--scheduler=auto|crontab|launchctl|schtasks::
>       +	When combined with the `start` subcommand, specify the scheduler
>      -+	to use to run the hourly, daily and weekly executions of
>      ++	for running the hourly, daily and weekly executions of
>       +	`git maintenance run`.
>      -+	The possible values for `<scheduler>` depend on the system: `crontab`
>      -+	is available on POSIX systems, `launchctl` is available on
>      -+	MacOS and `schtasks` is available on Windows.
>      -+	By default or when `auto` is specified, a suitable scheduler for
>      -+	the system is used. On MacOS, `launchctl` is used. On Windows,
>      -+	`schtasks` is used. On all other systems, `crontab` is used.
>      ++	Possible values for `<scheduler>` are `auto`, `crontab` (POSIX),
>      ++	`launchctl` (macOS), and `schtasks` (Windows).
>      ++	When `auto` is specified, the appropriate platform-specific
>      ++	scheduler is used. Default is `auto`.
>       +
>        
>        TROUBLESHOOTING
>      @@ builtin/gc.c: static const char *get_frequency(enum schedule_priority schedule)
>        	}
>        }
>        
>      ++/*
>      ++ * get_schedule_cmd` reads the GIT_TEST_MAINT_SCHEDULER environment variable
>      ++ * to mock the schedulers that `git maintenance start` rely on.
>      ++ *
>      ++ * For test purpose, GIT_TEST_MAINT_SCHEDULER can be set to a comma-separated
>      ++ * list of colon-separated key/value pairs where each pair contains a scheduler
>      ++ * and its corresponding mock.
>      ++ *
>      ++ * * If $GET_TEST_MAINT_SCHEDULER is not set, return false and leave the
>      ++ *   arguments unmodified.
>      ++ *
>      ++ * * If $GET_TEST_MAINT_SCHEDULER is set, return true.
>      ++ *   In this case, the *cmd value is read as input.
>      ++ *
>      ++ *   * if the input value *cmd is the key of one of the comma-separated list
>      ++ *     item, then *is_available is set to true and *cmd is modified and becomes
>      ++ *     the mock command.
>      ++ *
>      ++ *   * if the input value *cmd isn’t the key of any of the comma-separated list
>      ++ *     item, then *is_available is set to false.
>      ++ *
>      ++ * Ex.:
>      ++ *   GIT_TEST_MAINT_SCHEDULER not set
>      ++ *     ┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
>      ++ *     ┃ Input ┃                     Output                      ┃
>      ++ *     ┃ *cmd  ┃ return code │       *cmd        │ *is_available ┃
>      ++ *     ┣━━━━━━━╋━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━┫
>      ++ *     ┃ "foo" ┃    false    │ "foo" (unchanged) │  (unchanged)  ┃
>      ++ *     ┗━━━━━━━┻━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
>      ++ *
>      ++ *   GIT_TEST_MAINT_SCHEDULER set to “foo:./mock_foo.sh,bar:./mock_bar.sh”
>      ++ *     ┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
>      ++ *     ┃ Input ┃                     Output                      ┃
>      ++ *     ┃ *cmd  ┃ return code │       *cmd        │ *is_available ┃
>      ++ *     ┣━━━━━━━╋━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━┫
>      ++ *     ┃ "foo" ┃    true     │  "./mock.foo.sh"  │     true      ┃
>      ++ *     ┃ "qux" ┃    true     │ "qux" (unchanged) │     false     ┃
>      ++ *     ┗━━━━━━━┻━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
>      ++ */
>       +static int get_schedule_cmd(const char **cmd, int *is_available)
>       +{
>       +	char *item;
>      @@ builtin/gc.c: static int schtasks_schedule_task(const char *exec_path, enum sche
>       +	int is_available;
>       +	struct child_process child = CHILD_PROCESS_INIT;
>       +
>      -+	if (get_schedule_cmd(&cmd, &is_available) && !is_available)
>      -+		return 0;
>      ++	if (get_schedule_cmd(&cmd, &is_available))
>      ++		return is_available;

This fixes the bug that Eric found with the last version - excellent.

>       +
>       +	strvec_split(&child.args, cmd);
>       +	strvec_push(&child.args, "-l");
>      @@ builtin/gc.c: static int crontab_update_schedule(int run_maintenance, int fd, co
>       +	enum scheduler scheduler;
>       +};
>       +
>      -+static void resolve_auto_scheduler(enum scheduler *scheduler)
>      ++static enum scheduler resolve_scheduler(enum scheduler scheduler)
>       +{
>      -+	if (*scheduler != SCHEDULER_AUTO)
>      -+		return;
>      ++	if (scheduler != SCHEDULER_AUTO)
>      ++		return scheduler;
>       +
>        #if defined(__APPLE__)
>       -static const char platform_scheduler[] = "launchctl";
>      -+	*scheduler = SCHEDULER_LAUNCHCTL;
>      -+	return;
>      ++	return SCHEDULER_LAUNCHCTL;
>       +
>        #elif defined(GIT_WINDOWS_NATIVE)
>       -static const char platform_scheduler[] = "schtasks";
>      -+	*scheduler = SCHEDULER_SCHTASKS;
>      -+	return;
>      ++	return SCHEDULER_SCHTASKS;
>       +
>        #else
>       -static const char platform_scheduler[] = "crontab";
>      -+	*scheduler = SCHEDULER_CRON;
>      -+	return;
>      ++	return SCHEDULER_CRON;
>        #endif
>       +}

This is one of the changes that Eric suggested, I agree it improves the 
code.

Thanks for your work on these patches, I've scanned the rest of the 
range-diff and I'd be happy to see this version merged

Best Wishes

Phillip

>      @@ builtin/gc.c: static int crontab_update_schedule(int run_maintenance, int fd, co
>       +	if (scheduler == SCHEDULER_INVALID)
>       +		BUG("invalid scheduler");
>       +	if (scheduler == SCHEDULER_AUTO)
>      -+		BUG("resolve_auto_scheduler should have been called before");
>      ++		BUG("resolve_scheduler should have been called before");
>       +
>       +	if (!scheduler_fn[scheduler].is_available())
>       +		die(_("%s scheduler is not available"),
>      @@ builtin/gc.c: static int crontab_update_schedule(int run_maintenance, int fd, co
>       +	struct option options[] = {
>       +		OPT_CALLBACK_F(
>       +			0, "scheduler", &opts.scheduler, N_("scheduler"),
>      -+			N_("scheduler to use to trigger git maintenance run"),
>      ++			N_("scheduler to trigger git maintenance run"),
>       +			PARSE_OPT_NONEG, maintenance_opt_scheduler),
>       +		OPT_END()
>       +	};
>      @@ builtin/gc.c: static int crontab_update_schedule(int run_maintenance, int fd, co
>       +	if (argc)
>       +		usage_with_options(builtin_maintenance_start_usage, options);
>       +
>      -+	resolve_auto_scheduler(&opts.scheduler);
>      ++	opts.scheduler = resolve_scheduler(opts.scheduler);
>       +	validate_scheduler(opts.scheduler);
>       +
>        	if (maintenance_register())
> 2:  29628b5a92 ! 3:  0ea5b2fc45 maintenance: add support for systemd timers on Linux
>      @@ Documentation/git-maintenance.txt: OPTIONS
>       ---scheduler=auto|crontab|launchctl|schtasks::
>       +--scheduler=auto|crontab|systemd-timer|launchctl|schtasks::
>        	When combined with the `start` subcommand, specify the scheduler
>      - 	to use to run the hourly, daily and weekly executions of
>      + 	for running the hourly, daily and weekly executions of
>        	`git maintenance run`.
>      - 	The possible values for `<scheduler>` depend on the system: `crontab`
>      --	is available on POSIX systems, `launchctl` is available on
>      --	MacOS and `schtasks` is available on Windows.
>      -+	is available on POSIX systems, `systemd-timer` is available on Linux
>      -+	systems, `launchctl` is available on MacOS and `schtasks` is available
>      -+	on Windows.
>      - 	By default or when `auto` is specified, a suitable scheduler for
>      - 	the system is used. On MacOS, `launchctl` is used. On Windows,
>      --	`schtasks` is used. On all other systems, `crontab` is used.
>      -+	`schtasks` is used. On Linux, `systemd-timer` is used if user systemd
>      -+	timers are available, otherwise, `crontab` is used. On all other systems,
>      -+	`crontab` is used.
>      +-	Possible values for `<scheduler>` are `auto`, `crontab` (POSIX),
>      +-	`launchctl` (macOS), and `schtasks` (Windows).
>      +-	When `auto` is specified, the appropriate platform-specific
>      +-	scheduler is used. Default is `auto`.
>      ++	Possible values for `<scheduler>` are `auto`, `crontab`
>      ++	(POSIX), `systemd-timer` (Linux), `launchctl` (macOS), and
>      ++	`schtasks` (Windows). When `auto` is specified, the
>      ++	appropriate platform-specific scheduler is used; on Linux,
>      ++	`systemd-timer` is used if available, otherwise
>      ++	`crontab`. Default is `auto`.
>        
>        
>        TROUBLESHOOTING
>      @@ builtin/gc.c: static enum scheduler parse_scheduler(const char *value)
>        	else if (!strcasecmp(value, "launchctl"))
>        		return SCHEDULER_LAUNCHCTL;
>        	else if (!strcasecmp(value, "schtasks"))
>      -@@ builtin/gc.c: static void resolve_auto_scheduler(enum scheduler *scheduler)
>      - 	*scheduler = SCHEDULER_SCHTASKS;
>      - 	return;
>      +@@ builtin/gc.c: static enum scheduler resolve_scheduler(enum scheduler scheduler)
>      + #elif defined(GIT_WINDOWS_NATIVE)
>      + 	return SCHEDULER_SCHTASKS;
>        
>       +#elif defined(__linux__)
>       +	if (is_systemd_timer_available())
>      -+		*scheduler = SCHEDULER_SYSTEMD;
>      ++		return SCHEDULER_SYSTEMD;
>       +	else if (is_crontab_available())
>      -+		*scheduler = SCHEDULER_CRON;
>      ++		return SCHEDULER_CRON;
>       +	else
>       +		die(_("neither systemd timers nor crontab are available"));
>      -+	return;
>       +
>        #else
>      - 	*scheduler = SCHEDULER_CRON;
>      - 	return;
>      + 	return SCHEDULER_CRON;
>      + #endif
>       
>        ## t/t7900-maintenance.sh ##
>       @@ t/t7900-maintenance.sh: test_xmllint () {
> 


  parent reply	other threads:[~2021-07-06 13:18 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-01 14:52 [PATCH] maintenance: use systemd timers on Linux Lénaïc Huard
2021-05-01 20:02 ` brian m. carlson
2021-05-02  5:28 ` Bagas Sanjaya
2021-05-02  6:49   ` Eric Sunshine
2021-05-02  6:45 ` Eric Sunshine
2021-05-02 14:10   ` Phillip Wood
2021-05-05 12:19     ` Đoàn Trần Công Danh
2021-05-05 14:57       ` Phillip Wood
2021-05-05 12:01   ` Ævar Arnfjörð Bjarmason
2021-05-09 22:34     ` Lénaïc Huard
2021-05-10 13:03       ` Ævar Arnfjörð Bjarmason
2021-05-02 11:12 ` Bagas Sanjaya
2021-05-03 12:04 ` Derrick Stolee
2021-05-09 21:32 ` [PATCH v2 0/1] " Lénaïc Huard
2021-05-09 21:32   ` [PATCH v2 1/1] " Lénaïc Huard
2021-05-10  1:20     ` Đoàn Trần Công Danh
2021-05-10  2:48       ` Eric Sunshine
2021-05-10  6:25         ` Junio C Hamano
2021-05-12  0:29           ` Đoàn Trần Công Danh
2021-05-12  6:59             ` Felipe Contreras
2021-05-12 13:26               ` Phillip Wood
2021-05-12 13:38             ` Phillip Wood
2021-05-12 15:41               ` Đoàn Trần Công Danh
2021-05-10 18:03     ` Phillip Wood
2021-05-10 18:25       ` Eric Sunshine
2021-05-10 20:09         ` Phillip Wood
2021-05-10 20:52           ` Eric Sunshine
2021-06-08 14:55       ` Lénaïc Huard
2021-05-10 19:15     ` Martin Ågren
2021-05-11 14:50     ` Phillip Wood
2021-05-11 17:31     ` Derrick Stolee
2021-05-20 22:13   ` [PATCH v3 0/4] " Lénaïc Huard
2021-05-20 22:13     ` [PATCH v3 1/4] cache.h: rename "xdg_config_home" to "xdg_config_home_git" Lénaïc Huard
2021-05-20 23:44       ` Đoàn Trần Công Danh
2021-05-20 22:13     ` [PATCH v3 2/4] maintenance: introduce ENABLE/DISABLE for code clarity Lénaïc Huard
2021-05-20 22:13     ` [PATCH v3 3/4] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-05-21  9:52       ` Bagas Sanjaya
2021-05-20 22:13     ` [PATCH v3 4/4] maintenance: optionally use systemd timers on Linux Lénaïc Huard
2021-05-21  9:59       ` Bagas Sanjaya
2021-05-21 16:59         ` Derrick Stolee
2021-05-22  6:57           ` Johannes Schindelin
2021-05-23 18:36             ` Felipe Contreras
2021-05-23 23:27               ` brian m. carlson
2021-05-24  1:18                 ` Felipe Contreras
2021-05-24  7:03                 ` Ævar Arnfjörð Bjarmason
2021-05-24 15:51                   ` Junio C Hamano
2021-05-25  1:50                     ` Johannes Schindelin
2021-05-25 11:13                       ` Felipe Contreras
2021-05-26 10:29                       ` CoC, inclusivity etc. (was "Re: [...] systemd timers on Linux") Ævar Arnfjörð Bjarmason
2021-05-26 16:05                         ` Felipe Contreras
2021-05-27 14:24                         ` Jeff King
2021-05-27 17:30                           ` Felipe Contreras
2021-05-27 23:58                           ` Junio C Hamano
2021-05-28 14:44                           ` Phillip Susi
2021-05-30 21:58                             ` Jeff King
2021-05-24 17:52                   ` [PATCH v3 4/4] maintenance: optionally use systemd timers on Linux Felipe Contreras
2021-05-24  7:15     ` [PATCH v4 0/4] add support for " Lénaïc Huard
2021-05-24  7:15       ` [PATCH v4 1/4] cache.h: Introduce a generic "xdg_config_home_for(…)" function Lénaïc Huard
2021-05-24  9:33         ` Phillip Wood
2021-05-24 12:23           ` Đoàn Trần Công Danh
2021-05-24  7:15       ` [PATCH v4 2/4] maintenance: introduce ENABLE/DISABLE for code clarity Lénaïc Huard
2021-05-24  9:41         ` Phillip Wood
2021-05-24 12:36           ` Đoàn Trần Công Danh
2021-05-25  7:18             ` Lénaïc Huard
2021-05-25  8:02               ` Junio C Hamano
2021-05-24  9:47         ` Ævar Arnfjörð Bjarmason
2021-05-24  7:15       ` [PATCH v4 3/4] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-05-24 10:12         ` Phillip Wood
2021-05-30  6:39           ` Lénaïc Huard
2021-05-30 10:16             ` Phillip Wood
2021-05-24  7:15       ` [PATCH v4 4/4] maintenance: add support for systemd timers on Linux Lénaïc Huard
2021-05-24  9:55         ` Ævar Arnfjörð Bjarmason
2021-05-24 16:39           ` Eric Sunshine
2021-05-24 18:08         ` Felipe Contreras
2021-05-26 10:26         ` Phillip Wood
2021-05-24  9:04       ` [PATCH v4 0/4] " Junio C Hamano
2021-06-08 13:39       ` [PATCH v5 0/3] " Lénaïc Huard
2021-06-08 13:39         ` [PATCH v5 1/3] cache.h: Introduce a generic "xdg_config_home_for(…)" function Lénaïc Huard
2021-06-08 13:39         ` [PATCH v5 2/3] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-06-08 13:40         ` [PATCH v5 3/3] maintenance: add support for systemd timers on Linux Lénaïc Huard
2021-06-09  9:34           ` Jeff King
2021-06-09 15:01           ` Phillip Wood
2021-06-09  0:21         ` [PATCH v5 0/3] " Junio C Hamano
2021-06-09 14:54         ` Phillip Wood
2021-06-12 16:50         ` [PATCH v6 0/3] maintenance: " Lénaïc Huard
2021-06-12 16:50           ` [PATCH v6 1/3] cache.h: Introduce a generic "xdg_config_home_for(…)" function Lénaïc Huard
2021-06-12 16:50           ` [PATCH v6 2/3] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-06-14  4:36             ` Eric Sunshine
2021-06-16 18:12               ` Derrick Stolee
2021-06-17  4:11                 ` Eric Sunshine
2021-06-17 14:26               ` Phillip Wood
2021-07-02 15:04               ` Lénaïc Huard
2021-06-12 16:50           ` [PATCH v6 3/3] maintenance: add support for systemd timers on Linux Lénaïc Huard
2021-07-02 14:25           ` [PATCH v7 0/3] " Lénaïc Huard
2021-07-02 14:25             ` [PATCH v7 1/3] cache.h: Introduce a generic "xdg_config_home_for(…)" function Lénaïc Huard
2021-07-02 14:25             ` [PATCH v7 2/3] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-07-06 19:56               ` Ævar Arnfjörð Bjarmason
2021-07-06 20:52                 ` Junio C Hamano
2021-07-13  0:15                   ` Jeff King
2021-07-13  2:22                     ` Eric Sunshine
2021-07-13  3:56                       ` Jeff King
2021-07-13  5:17                         ` Eric Sunshine
2021-07-13  7:04                       ` Bagas Sanjaya
2021-07-06 21:18                 ` Felipe Contreras
2021-08-23 20:06                 ` Lénaïc Huard
2021-08-23 22:30                   ` Junio C Hamano
2021-07-02 14:25             ` [PATCH v7 3/3] maintenance: add support for systemd timers on Linux Lénaïc Huard
2021-07-06 20:03               ` Ævar Arnfjörð Bjarmason
2021-07-02 18:18             ` [PATCH v7 0/3] " Junio C Hamano
2021-07-06 13:18             ` Phillip Wood [this message]
2021-08-23 20:40             ` [PATCH v8 " Lénaïc Huard
2021-08-23 20:40               ` [PATCH v8 1/3] cache.h: Introduce a generic "xdg_config_home_for(…)" function Lénaïc Huard
2021-08-23 20:40               ` [PATCH v8 2/3] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-08-24 17:45                 ` Derrick Stolee
2021-08-23 20:40               ` [PATCH v8 3/3] maintenance: add support for systemd timers on Linux Lénaïc Huard
2021-08-24 17:45                 ` Derrick Stolee
2021-08-24 17:47               ` [PATCH v8 0/3] " Derrick Stolee
2021-08-27 21:02               ` [PATCH v9 " Lénaïc Huard
2021-08-27 21:02                 ` [PATCH v9 1/3] cache.h: Introduce a generic "xdg_config_home_for(…)" function Lénaïc Huard
2021-08-27 21:02                 ` [PATCH v9 2/3] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-08-27 23:54                   ` Ramsay Jones
2021-08-27 21:02                 ` [PATCH v9 3/3] maintenance: add support for systemd timers on Linux Lénaïc Huard
2021-09-04 20:54                 ` [PATCH v10 0/3] " Lénaïc Huard
2021-09-04 20:54                   ` [PATCH v10 1/3] cache.h: Introduce a generic "xdg_config_home_for(…)" function Lénaïc Huard
2021-09-04 20:54                   ` [PATCH v10 2/3] maintenance: `git maintenance run` learned `--scheduler=<scheduler>` Lénaïc Huard
2021-09-04 20:55                   ` [PATCH v10 3/3] maintenance: add support for systemd timers on Linux Lénaïc Huard
2021-09-07 16:48                   ` [PATCH v10 0/3] " Derrick Stolee
2021-09-08 11:44                     ` Derrick Stolee
2021-09-09  5:52                       ` Lénaïc Huard
2021-09-09 19:55                         ` Derrick Stolee
2021-09-27 12:50                           ` Ævar Arnfjörð Bjarmason
2021-09-27 21:44                             ` Lénaïc Huard
2021-08-17 17:22         ` [PATCH v5 0/3] " Derrick Stolee
2021-08-17 19:43           ` Phillip Wood
2021-08-17 20:29             ` Derrick Stolee
2021-08-18  5:56           ` Lénaïc Huard
2021-08-18 13:28             ` Derrick Stolee
2021-08-18 18:23               ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=387ad277-a75c-92ca-b7af-163d10d3b4a4@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=avarab@gmail.com \
    --cc=bagasdotme@gmail.com \
    --cc=congdanhqx@gmail.com \
    --cc=dstolee@microsoft.com \
    --cc=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=lenaic@lhuard.fr \
    --cc=martin.agren@gmail.com \
    --cc=peff@peff.net \
    --cc=sandals@crustytoothpaste.net \
    --cc=stolee@gmail.com \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.