From: Junio C Hamano <gitster@pobox.com>
To: Avishay Matayev <me@avishay.dev>
Cc: git@vger.kernel.org, code@tpope.net
Subject: Re: [PATCH 1/3] Change isatty's parameter to a *_FILENO define
Date: Tue, 06 Jul 2021 14:59:14 -0700 [thread overview]
Message-ID: <xmqqfswrgl3h.fsf@gitster.g> (raw)
In-Reply-To: <20210706210317.706313-2-me@avishay.dev> (Avishay Matayev's message of "Wed, 7 Jul 2021 00:03:16 +0300")
Avishay Matayev <me@avishay.dev> writes:
> This isn't a functional change.
This does not seem to make the code any easier to follow, though.
Is this amount of code churn really needed?
>
> The next patch in this series will rename all isatty calls anyway so I
> figured it is a good time to change the same calls to consistently use
> STD[IN|OUT|ERR]_FILENO.
>
> Signed-off-by: Avishay Matayev <me@avishay.dev>
> ---
> builtin/am.c | 2 +-
> builtin/bisect--helper.c | 2 +-
> builtin/blame.c | 2 +-
> builtin/checkout.c | 2 +-
> builtin/commit-graph.c | 4 ++--
> builtin/commit.c | 2 +-
> builtin/fsck.c | 2 +-
> builtin/gc.c | 2 +-
> builtin/log.c | 2 +-
> builtin/merge.c | 4 ++--
> builtin/multi-pack-index.c | 2 +-
> builtin/pack-objects.c | 2 +-
> builtin/pack-redundant.c | 2 +-
> builtin/prune-packed.c | 2 +-
> builtin/prune.c | 2 +-
> builtin/rebase.c | 2 +-
> builtin/repack.c | 2 +-
> builtin/send-pack.c | 2 +-
> builtin/shortlog.c | 4 ++--
> builtin/sparse-checkout.c | 2 +-
> builtin/unpack-objects.c | 2 +-
> column.c | 2 +-
> date.c | 2 +-
> editor.c | 2 +-
> pager.c | 4 ++--
> preload-index.c | 2 +-
> read-cache.c | 2 +-
> remote-curl.c | 2 +-
> sequencer.c | 4 ++--
> sideband.c | 2 +-
> transport.c | 6 +++---
> transport.h | 2 +-
> 32 files changed, 39 insertions(+), 39 deletions(-)
>
> diff --git a/builtin/am.c b/builtin/am.c
> index 0b2d886c81..2230c3e94d 100644
> --- a/builtin/am.c
> +++ b/builtin/am.c
> @@ -2394,7 +2394,7 @@ int cmd_am(int argc, const char **argv, const char *prefix)
> * intend to feed us a patch but wanted to continue
> * unattended.
> */
> - if (argc || (resume.mode == RESUME_FALSE && !isatty(0)))
> + if (argc || (resume.mode == RESUME_FALSE && !isatty(STDIN_FILENO)))
> die(_("previous rebase directory %s still exists but mbox given."),
> state.dir);
>
> diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
> index 9d9540a0ab..5d42c75a46 100644
> --- a/builtin/bisect--helper.c
> +++ b/builtin/bisect--helper.c
> @@ -346,7 +346,7 @@ static int decide_next(const struct bisect_terms *terms,
> * although this is less optimum.
> */
> warning(_("bisecting only with a %s commit"), terms->term_bad);
> - if (!isatty(0))
> + if (!isatty(STDIN_FILENO))
> return 0;
> /*
> * TRANSLATORS: Make sure to include [Y] and [n] in your
> diff --git a/builtin/blame.c b/builtin/blame.c
> index 641523ff9a..1b674b2f52 100644
> --- a/builtin/blame.c
> +++ b/builtin/blame.c
> @@ -945,7 +945,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
> die(_("--progress can't be used with --incremental or porcelain formats"));
> show_progress = 0;
> } else if (show_progress < 0)
> - show_progress = isatty(2);
> + show_progress = isatty(STDERR_FILENO);
>
> if (0 < abbrev && abbrev < hexsz)
> /* one more abbrev length is needed for the boundary commit */
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index f4cd7747d3..e3bd31449b 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -1607,7 +1607,7 @@ static int checkout_main(int argc, const char **argv, const char *prefix,
> if (opts->quiet)
> opts->show_progress = 0;
> else
> - opts->show_progress = isatty(2);
> + opts->show_progress = isatty(STDERR_FILENO);
> }
>
> if (opts->conflict_style) {
> diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
> index cd86315221..461f1a2a65 100644
> --- a/builtin/commit-graph.c
> +++ b/builtin/commit-graph.c
> @@ -87,7 +87,7 @@ static int graph_verify(int argc, const char **argv)
>
> trace2_cmd_mode("verify");
>
> - opts.progress = isatty(2);
> + opts.progress = isatty(STDERR_FILENO);
> argc = parse_options(argc, argv, NULL,
> builtin_commit_graph_verify_options,
> builtin_commit_graph_verify_usage, 0);
> @@ -236,7 +236,7 @@ static int graph_write(int argc, const char **argv)
> OPT_END(),
> };
>
> - opts.progress = isatty(2);
> + opts.progress = isatty(STDERR_FILENO);
> opts.enable_changed_paths = -1;
> write_opts.size_multiple = 2;
> write_opts.max_commits = 0;
> diff --git a/builtin/commit.c b/builtin/commit.c
> index 190d215d43..d364ce6a39 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -754,7 +754,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
> strbuf_addbuf(&sb, &message);
> hook_arg1 = "message";
> } else if (logfile && !strcmp(logfile, "-")) {
> - if (isatty(0))
> + if (isatty(STDIN_FILENO))
> fprintf(stderr, _("(reading log message from standard input)\n"));
> if (strbuf_read(&sb, 0, 0) < 0)
> die_errno(_("could not read log from standard input"));
> diff --git a/builtin/fsck.c b/builtin/fsck.c
> index b42b6fe21f..4e65c823e4 100644
> --- a/builtin/fsck.c
> +++ b/builtin/fsck.c
> @@ -790,7 +790,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
> fsck_obj_options.strict = 1;
>
> if (show_progress == -1)
> - show_progress = isatty(2);
> + show_progress = isatty(STDERR_FILENO);
> if (verbose)
> show_progress = 0;
>
> diff --git a/builtin/gc.c b/builtin/gc.c
> index f05d2f0a1a..4566754427 100644
> --- a/builtin/gc.c
> +++ b/builtin/gc.c
> @@ -1425,7 +1425,7 @@ static int maintenance_run(int argc, const char **argv, const char *prefix)
> };
> memset(&opts, 0, sizeof(opts));
>
> - opts.quiet = !isatty(2);
> + opts.quiet = !isatty(STDERR_FILENO);
>
> for (i = 0; i < TASK__COUNT; i++)
> tasks[i].selected_order = -1;
> diff --git a/builtin/log.c b/builtin/log.c
> index 6102893fcc..5bb9f4194a 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -69,7 +69,7 @@ struct line_opt_callback_data {
>
> static int session_is_interactive(void)
> {
> - return isatty(1) || pager_in_use();
> + return isatty(STDOUT_FILENO) || pager_in_use();
> }
>
> static int auto_decoration_style(void)
> diff --git a/builtin/merge.c b/builtin/merge.c
> index a8a843b1f5..88f53c03b5 100644
> --- a/builtin/merge.c
> +++ b/builtin/merge.c
> @@ -734,7 +734,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
> o.subtree_shift = "";
>
> o.show_rename_progress =
> - show_progress == -1 ? isatty(2) : show_progress;
> + show_progress == -1 ? isatty(STDERR_FILENO) : show_progress;
>
> for (x = 0; x < xopts_nr; x++)
> if (parse_merge_opt(&o, xopts[x]))
> @@ -1073,7 +1073,7 @@ static int default_edit_option(void)
> /* Use editor if stdin and stdout are the same and is a tty */
> return (!fstat(0, &st_stdin) &&
> !fstat(1, &st_stdout) &&
> - isatty(0) && isatty(1) &&
> + isatty(STDIN_FILENO) && isatty(STDOUT_FILENO) &&
> st_stdin.st_dev == st_stdout.st_dev &&
> st_stdin.st_ino == st_stdout.st_ino &&
> st_stdin.st_mode == st_stdout.st_mode);
> diff --git a/builtin/multi-pack-index.c b/builtin/multi-pack-index.c
> index 5d3ea445fd..8e329b8b22 100644
> --- a/builtin/multi-pack-index.c
> +++ b/builtin/multi-pack-index.c
> @@ -154,7 +154,7 @@ int cmd_multi_pack_index(int argc, const char **argv,
>
> git_config(git_default_config, NULL);
>
> - if (isatty(2))
> + if (isatty(STDERR_FILENO))
> opts.flags |= MIDX_PROGRESS;
> argc = parse_options(argc, argv, prefix,
> builtin_multi_pack_index_options,
> diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
> index de00adbb9e..74536fa5a4 100644
> --- a/builtin/pack-objects.c
> +++ b/builtin/pack-objects.c
> @@ -4016,7 +4016,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
> if (git_env_bool(GIT_TEST_WRITE_REV_INDEX, 0))
> pack_idx_opts.flags |= WRITE_REV;
>
> - progress = isatty(2);
> + progress = isatty(STDERR_FILENO);
> argc = parse_options(argc, argv, prefix, pack_objects_options,
> pack_usage, 0);
>
> diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
> index 8bf5c0acad..acf1edba3a 100644
> --- a/builtin/pack-redundant.c
> +++ b/builtin/pack-redundant.c
> @@ -621,7 +621,7 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
>
> /* ignore objects given on stdin */
> llist_init(&ignore);
> - if (!isatty(0)) {
> + if (!isatty(STDIN_FILENO)) {
> while (fgets(buf, sizeof(buf), stdin)) {
> oid = xmalloc(sizeof(*oid));
> if (get_oid_hex(buf, oid))
> diff --git a/builtin/prune-packed.c b/builtin/prune-packed.c
> index b7b9281a8c..5d476316a5 100644
> --- a/builtin/prune-packed.c
> +++ b/builtin/prune-packed.c
> @@ -9,7 +9,7 @@ static const char * const prune_packed_usage[] = {
>
> int cmd_prune_packed(int argc, const char **argv, const char *prefix)
> {
> - int opts = isatty(2) ? PRUNE_PACKED_VERBOSE : 0;
> + int opts = isatty(STDERR_FILENO) ? PRUNE_PACKED_VERBOSE : 0;
> const struct option prune_packed_options[] = {
> OPT_BIT('n', "dry-run", &opts, N_("dry run"),
> PRUNE_PACKED_DRY_RUN),
> diff --git a/builtin/prune.c b/builtin/prune.c
> index 02c6ab7cba..36b9fed1bf 100644
> --- a/builtin/prune.c
> +++ b/builtin/prune.c
> @@ -165,7 +165,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
> }
>
> if (show_progress == -1)
> - show_progress = isatty(2);
> + show_progress = isatty(STDERR_FILENO);
> if (exclude_promisor_objects) {
> fetch_if_missing = 0;
> revs.exclude_promisor_objects = 1;
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 12f093121d..97e8c8cbf8 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -1745,7 +1745,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> if (options.root && !options.onto_name)
> imply_merge(&options, "--root without --onto");
>
> - if (isatty(2) && options.flags & REBASE_NO_QUIET)
> + if (isatty(STDERR_FILENO) && options.flags & REBASE_NO_QUIET)
> strbuf_addstr(&options.git_format_patch_opt, " --progress");
>
> if (options.git_am_opts.nr || options.type == REBASE_APPLY) {
> diff --git a/builtin/repack.c b/builtin/repack.c
> index 5f9bc74adc..4eb21e8e98 100644
> --- a/builtin/repack.c
> +++ b/builtin/repack.c
> @@ -710,7 +710,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
> }
> strbuf_release(&buf);
> }
> - if (!po_args.quiet && isatty(2))
> + if (!po_args.quiet && isatty(STDERR_FILENO))
> opts |= PRUNE_PACKED_VERBOSE;
> prune_packed_objects(opts);
>
> diff --git a/builtin/send-pack.c b/builtin/send-pack.c
> index a7e01667b0..c168c03a26 100644
> --- a/builtin/send-pack.c
> +++ b/builtin/send-pack.c
> @@ -261,7 +261,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
> }
>
> if (progress == -1)
> - progress = !args.quiet && isatty(2);
> + progress = !args.quiet && isatty(STDERR_FILENO);
> args.progress = progress;
>
> if (args.stateless_rpc) {
> diff --git a/builtin/shortlog.c b/builtin/shortlog.c
> index 3e7ab1ca82..a3612e3f72 100644
> --- a/builtin/shortlog.c
> +++ b/builtin/shortlog.c
> @@ -406,10 +406,10 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
> string_list_sort(&log.trailers);
>
> /* assume HEAD if from a tty */
> - if (!nongit && !rev.pending.nr && isatty(0))
> + if (!nongit && !rev.pending.nr && isatty(STDIN_FILENO))
> add_head_to_pending(&rev);
> if (rev.pending.nr == 0) {
> - if (isatty(0))
> + if (isatty(STDIN_FILENO))
> fprintf(stderr, _("(reading log message from standard input)\n"));
> read_from_stdin(&log);
> }
> diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
> index a4bdd7c494..63e79c7520 100644
> --- a/builtin/sparse-checkout.c
> +++ b/builtin/sparse-checkout.c
> @@ -114,7 +114,7 @@ static int update_working_directory(struct pattern_list *pl)
> r->index->sparse_checkout_patterns = pl;
>
> memset(&o, 0, sizeof(o));
> - o.verbose_update = isatty(2);
> + o.verbose_update = isatty(STDERR_FILENO);
> o.update = 1;
> o.head_idx = -1;
> o.src_index = r->index;
> diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
> index 4a9466295b..1a86e2e606 100644
> --- a/builtin/unpack-objects.c
> +++ b/builtin/unpack-objects.c
> @@ -522,7 +522,7 @@ int cmd_unpack_objects(int argc, const char **argv, const char *prefix)
>
> git_config(git_default_config, NULL);
>
> - quiet = !isatty(2);
> + quiet = !isatty(STDERR_FILENO);
>
> for (i = 1 ; i < argc; i++) {
> const char *arg = argv[i];
> diff --git a/column.c b/column.c
> index 1261e18a72..375869e848 100644
> --- a/column.c
> +++ b/column.c
> @@ -211,7 +211,7 @@ int finalize_colopts(unsigned int *colopts, int stdout_is_tty)
> {
> if ((*colopts & COL_ENABLE_MASK) == COL_AUTO) {
> if (stdout_is_tty < 0)
> - stdout_is_tty = isatty(1);
> + stdout_is_tty = isatty(STDOUT_FILENO);
> *colopts &= ~COL_ENABLE_MASK;
> if (stdout_is_tty || pager_in_use())
> *colopts |= COL_ENABLED;
> diff --git a/date.c b/date.c
> index f9ea807b3a..6dd6c37c22 100644
> --- a/date.c
> +++ b/date.c
> @@ -969,7 +969,7 @@ void parse_date_format(const char *format, struct date_mode *mode)
>
> /* "auto:foo" is "if tty/pager, then foo, otherwise normal" */
> if (skip_prefix(format, "auto:", &p)) {
> - if (isatty(1) || pager_in_use())
> + if (isatty(STDOUT_FILENO) || pager_in_use())
> format = p;
> else
> format = "default";
> diff --git a/editor.c b/editor.c
> index 6303ae0ab0..13521f05cf 100644
> --- a/editor.c
> +++ b/editor.c
> @@ -58,7 +58,7 @@ static int launch_specified_editor(const char *editor, const char *path,
> const char *args[] = { editor, NULL, NULL };
> struct child_process p = CHILD_PROCESS_INIT;
> int ret, sig;
> - int print_waiting_for_editor = advice_waiting_for_editor && isatty(2);
> + int print_waiting_for_editor = advice_waiting_for_editor && isatty(STDERR_FILENO);
>
> if (print_waiting_for_editor) {
> /*
> diff --git a/pager.c b/pager.c
> index 3d37dd7ada..3c4664ebed 100644
> --- a/pager.c
> +++ b/pager.c
> @@ -101,7 +101,7 @@ void prepare_pager_args(struct child_process *pager_process, const char *pager)
>
> void setup_pager(void)
> {
> - const char *pager = git_pager(isatty(1));
> + const char *pager = git_pager(isatty(STDOUT_FILENO));
>
> if (!pager)
> return;
> @@ -128,7 +128,7 @@ void setup_pager(void)
>
> /* original process continues, but writes to the pipe */
> dup2(pager_process.in, 1);
> - if (isatty(2))
> + if (isatty(STDERR_FILENO))
> dup2(pager_process.in, 2);
> close(pager_process.in);
>
> diff --git a/preload-index.c b/preload-index.c
> index e5529a5863..28707d9bee 100644
> --- a/preload-index.c
> +++ b/preload-index.c
> @@ -121,7 +121,7 @@ void preload_index(struct index_state *index,
> memset(&data, 0, sizeof(data));
>
> memset(&pd, 0, sizeof(pd));
> - if (refresh_flags & REFRESH_PROGRESS && isatty(2)) {
> + if (refresh_flags & REFRESH_PROGRESS && isatty(STDERR_FILENO)) {
> pd.progress = start_delayed_progress(_("Refreshing index"), index->cache_nr);
> pthread_mutex_init(&pd.mutex, NULL);
> }
> diff --git a/read-cache.c b/read-cache.c
> index 77961a3885..a8063fefe6 100644
> --- a/read-cache.c
> +++ b/read-cache.c
> @@ -1568,7 +1568,7 @@ int refresh_index(struct index_state *istate, unsigned int flags,
> int t2_sum_lstat = 0;
> int t2_sum_scan = 0;
>
> - if (flags & REFRESH_PROGRESS && isatty(2))
> + if (flags & REFRESH_PROGRESS && isatty(STDERR_FILENO))
> progress = start_delayed_progress(_("Refresh index"),
> istate->cache_nr);
>
> diff --git a/remote-curl.c b/remote-curl.c
> index 9d432c299a..843a287680 100644
> --- a/remote-curl.c
> +++ b/remote-curl.c
> @@ -1483,7 +1483,7 @@ int cmd_main(int argc, const char **argv)
> }
>
> options.verbosity = 1;
> - options.progress = !!isatty(2);
> + options.progress = !!isatty(STDERR_FILENO);
> options.thin = 1;
> string_list_init(&options.deepen_not, 1);
> string_list_init(&options.push_options, 1);
> diff --git a/sequencer.c b/sequencer.c
> index 0bec01cf38..d1311eecc1 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -2040,7 +2040,7 @@ static int should_edit(struct replay_opts *opts) {
> * commits; continue_single_pick() handles the conflicted
> * commits itself instead of calling this function.
> */
> - return (opts->action == REPLAY_REVERT && isatty(0)) ? 1 : 0;
> + return (opts->action == REPLAY_REVERT && isatty(STDIN_FILENO)) ? 1 : 0;
> return opts->edit;
> }
>
> @@ -4589,7 +4589,7 @@ static int continue_single_pick(struct repository *r, struct replay_opts *opts)
> * we want to edit if the user asked for it, or if they didn't specify
> * and stdin is a tty.
> */
> - if (!opts->edit || (opts->edit < 0 && !isatty(0)))
> + if (!opts->edit || (opts->edit < 0 && !isatty(STDIN_FILENO)))
> /*
> * Include --cleanup=strip as well because we don't want the
> * "# Conflicts:" messages.
> diff --git a/sideband.c b/sideband.c
> index 6f9e026732..a5dcb971f5 100644
> --- a/sideband.c
> +++ b/sideband.c
> @@ -126,7 +126,7 @@ int demultiplex_sideband(const char *me, int status,
> int band;
>
> if (!suffix) {
> - if (isatty(2) && !is_terminal_dumb())
> + if (isatty(STDERR_FILENO) && !is_terminal_dumb())
> suffix = ANSI_SUFFIX;
> else
> suffix = DUMB_SUFFIX;
> diff --git a/transport.c b/transport.c
> index 50f5830eb6..ab8f297afa 100644
> --- a/transport.c
> +++ b/transport.c
> @@ -1051,7 +1051,7 @@ struct transport *transport_get(struct remote *remote, const char *url)
> const char *helper;
> struct transport *ret = xcalloc(1, sizeof(*ret));
>
> - ret->progress = isatty(2);
> + ret->progress = isatty(STDERR_FILENO);
> string_list_init(&ret->pack_lockfiles, 1);
>
> if (!remote)
> @@ -1168,12 +1168,12 @@ void transport_set_verbosity(struct transport *transport, int verbosity,
> * . Report progress, if force_progress is 1 (ie. --progress).
> * . Don't report progress, if force_progress is 0 (ie. --no-progress).
> * . Don't report progress, if verbosity < 0 (ie. -q/--quiet ).
> - * . Report progress if isatty(2) is 1.
> + * . Report progress if isatty(STDERR_FILENO) is 1.
> **/
> if (force_progress >= 0)
> transport->progress = !!force_progress;
> else
> - transport->progress = verbosity >= 0 && isatty(2);
> + transport->progress = verbosity >= 0 && isatty(STDERR_FILENO);
> }
>
> static void die_with_unpushed_submodules(struct string_list *needs_pushing)
> diff --git a/transport.h b/transport.h
> index 1cbab11373..4630d42755 100644
> --- a/transport.h
> +++ b/transport.h
> @@ -110,7 +110,7 @@ struct transport {
> signed verbose : 3;
> /**
> * Transports should not set this directly, and should use this
> - * value without having to check isatty(2), -q/--quiet
> + * value without having to check isatty(STDERR_FILENO), -q/--quiet
> * (transport->verbose < 0), etc. - checking has already been done
> * in transport_set_verbosity().
> **/
next prev parent reply other threads:[~2021-07-06 21:59 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-06 21:03 [PATCH 0/3] Override isatty with GIT_FORCE_TTY Avishay Matayev
2021-07-06 21:03 ` [PATCH 1/3] Change isatty's parameter to a *_FILENO define Avishay Matayev
2021-07-06 21:59 ` Junio C Hamano [this message]
2021-07-09 14:41 ` Avishay Matayev
2021-07-06 21:03 ` [PATCH 2/3] Allow isatty to be overriden with GIT_FORCE_TTY Avishay Matayev
2021-07-06 22:03 ` Junio C Hamano
2021-07-09 14:49 ` Avishay Matayev
2021-07-09 17:21 ` Junio C Hamano
2021-07-09 17:24 ` Avishay Matayev
2021-07-09 18:41 ` Junio C Hamano
2021-07-09 19:56 ` Avishay Matayev
2021-07-06 21:03 ` [PATCH 3/3] Add tests for GIT_FORCE_TTY Avishay Matayev
2021-07-30 12:04 ` [PATCH 0/3] Override isatty with GIT_FORCE_TTY Avishay Matayev
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=xmqqfswrgl3h.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=code@tpope.net \
--cc=git@vger.kernel.org \
--cc=me@avishay.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).