From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_PASS, SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by dcvr.yhbt.net (Postfix) with ESMTP id 054DE1F66F for ; Wed, 4 Nov 2020 19:16:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731565AbgKDTQD (ORCPT ); Wed, 4 Nov 2020 14:16:03 -0500 Received: from cloud.peff.net ([104.130.231.41]:47710 "EHLO cloud.peff.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726564AbgKDTQB (ORCPT ); Wed, 4 Nov 2020 14:16:01 -0500 Received: (qmail 10879 invoked by uid 109); 4 Nov 2020 19:16:00 -0000 Received: from Unknown (HELO peff.net) (10.0.1.2) by cloud.peff.net (qpsmtpd/0.94) with ESMTP; Wed, 04 Nov 2020 19:16:00 +0000 Authentication-Results: cloud.peff.net; auth=none Received: (qmail 13811 invoked by uid 111); 4 Nov 2020 19:16:00 -0000 Received: from coredump.intra.peff.net (HELO sigill.intra.peff.net) (10.0.0.2) by peff.net (qpsmtpd/0.94) with (TLS_AES_256_GCM_SHA384 encrypted) ESMTPS; Wed, 04 Nov 2020 14:16:00 -0500 Authentication-Results: peff.net; auth=none Date: Wed, 4 Nov 2020 14:15:59 -0500 From: Jeff King To: Eric Sunshine Cc: Johannes Postler , Git List Subject: Re: [PATCH 3/3] format-patch: support --output option Message-ID: <20201104191559.GA3053889@coredump.intra.peff.net> References: <20201104132428.GA2491189@coredump.intra.peff.net> <20201104132907.GC3030146@coredump.intra.peff.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org On Wed, Nov 04, 2020 at 12:27:30PM -0500, Eric Sunshine wrote: > > diff --git a/builtin/log.c b/builtin/log.c > > @@ -1942,11 +1942,18 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) > > + } else if (rev.diffopt.close_file) { > > + /* > > + * The diff code parsed --output; it has already opened the > > + * file, but but we must instruct it not to close after each > > + * diff. > > + */ > > + rev.diffopt.close_file = 0; > > } else { > > The commit message's justification for supporting --output seems > reasonable. However, my knee-jerk reaction to the implementation was > that it feels overly magical and a bit too hacky. I can see the logic > in it but it also leaves a bad taste when the implementation has to > "undo" a side-effect of some other piece of code, which makes it feel > unplanned and fragile. The question which popped into my mind > immediately was "why not handle --output explicitly via > builtin_format_patch_options[] along with other first-class options?". > This review comment may or may not be actionable; it's just expressing > surprise and a bit of nose-wrinkling I experienced. I agree it's a bit magical. I didn't really consider writing a new "--output" option for format-patch, because I came at it from the angle of "let's unbreak the existing diff --output option". Which isn't necessarily a defense, but just an explanation. FWIW, that unsetting of rev.diffopt.close_file is exactly how git-log does it. So while I agree it's a bit ugly, this is the intended way for --output to be used across multiple diffs, and with log_tree_commit(). I'd prefer to go this way for now, and if somebody wants to make it less ugly, they can clean up all of the callers in one go. Amusingly, 6ea57703f6 (log: prepare log/log-tree to reuse the diffopt.close_file attribute, 2016-06-22) which introduced this code foresaw the format-patch bug here. -Peff