From patchwork Thu Sep 30 17:01:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Aguilar X-Patchwork-Id: 12528889 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82722C433F5 for ; Thu, 30 Sep 2021 17:01:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 690E761216 for ; Thu, 30 Sep 2021 17:01:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352487AbhI3RDh (ORCPT ); Thu, 30 Sep 2021 13:03:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350626AbhI3RDf (ORCPT ); Thu, 30 Sep 2021 13:03:35 -0400 Received: from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com [IPv6:2607:f8b0:4864:20::1029]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E2D9C061770 for ; Thu, 30 Sep 2021 10:01:51 -0700 (PDT) Received: by mail-pj1-x1029.google.com with SMTP id me5-20020a17090b17c500b0019af76b7bb4so7241783pjb.2 for ; Thu, 30 Sep 2021 10:01:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=yp+S3YXJbiSTiiNQG123ymRkO0FMviVKplqovkp0nM0=; b=mo6qjE4/J7ZoB7A7YWu6q+t3cNR9H4wOtqjkSAfKdiP0vzzIEVe2m9hD6xRjU/v7eG 4p/ZArxWPfK6gbSTKQDjYifggEOL0CNODw7zSS0Q6b0auzULEvP8OYW6xMZLEcGEoXp0 vZy+JRraJ+FfF4ZZ8nc/6NZZi5U0SmoQtZLJ0PMaQIHosfBpODtzRu1sCoeZa+tfI/hL ZdhGu7GhhccKEFYNNHGolmW9GI1Xw7DJuDHCuyadpsdtkNzb/dJUU6N7mm5fYCY9Kfk5 9/QCisjYsoEjpQpv0+Rc2XUEQXQdad2n1Kwk6rDjJGk33F8qfCBSomyK+e6f04T5WpKL TX6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=yp+S3YXJbiSTiiNQG123ymRkO0FMviVKplqovkp0nM0=; b=PKmEHrnQdVC/dhtXgi5Bho2L/fY2dqcOKPVP3uNcMnPRkL8h5l0AtjpBAmOKvwEXwR eKhfSdXDw9bcz4nBKiAcd0fYztSbxcFIqJx6N3dtwY4kQMO0A3lXRGmjgwMMDOQ4do3K NFg4s1MPnQ1DQtttGkg+2HnFoGqq8O1no9efA+cobLc3PKjRTxxR/HeRM4SDPaesDsY6 mWu0onpEREEXf6FDFHTC3uc/VDOC9OYxKBcpba4J8c68urKV3PbAq2LF6ignzL7+SGSa bN26TIUUhVsckY2otGxIxgAy4HxsyrQMmz0FMYXL2ZxyTqo/w2fYyLTjQAZeovm7XrA5 uUHQ== X-Gm-Message-State: AOAM5322HE1m0N1UDdACG92syXtHNaiRAE+t9ar9JZMppN/OZdfzHgKB K0pUecHURN2G8OEXax8G++uZSrVTBIc= X-Google-Smtp-Source: ABdhPJzTCAb5k+vx6y99Pd38OaNAmUEEW2Udv1MhMkK86AOvB9SxAPtLG3NAhZmgA42JxC2rKZIjjA== X-Received: by 2002:a17:902:d88d:b0:13e:807b:d52b with SMTP id b13-20020a170902d88d00b0013e807bd52bmr391032plz.69.1633021310028; Thu, 30 Sep 2021 10:01:50 -0700 (PDT) Received: from sarawiggum.fas.fa.disney.com ([198.187.190.10]) by smtp.gmail.com with ESMTPSA id p4sm2740678pjo.0.2021.09.30.10.01.48 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Sep 2021 10:01:49 -0700 (PDT) From: David Aguilar To: Git Mailing List Cc: Junio C Hamano , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= , Johannes Schindelin Subject: [PATCH v6 1/5] difftool: create a tmpdir path without repeated slashes Date: Thu, 30 Sep 2021 10:01:42 -0700 Message-Id: <20210930170146.61489-1-davvid@gmail.com> X-Mailer: git-send-email 2.33.0.887.g8db6ae3373 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The paths generated by difftool are passed to user-facing diff tools. Using paths with repeated slashes in them is a cosmetic blemish that is exposed to users and can be avoided. Use a strbuf to create the buffer used for the dir-diff tmpdir. Strip trailing slashes from the value read from TMPDIR to avoid repeated slashes in the generated paths. Adjust the error handling to avoid leaking strbufs. Signed-off-by: David Aguilar --- This patch is a resend based off of "next" so that this series can be tracked together. This patch is unchanged since the v5 was submitted, but there are new related patches that proceed it. builtin/difftool.c | 48 ++++++++++++++++++++++----------------------- t/t7800-difftool.sh | 7 +++++++ 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/builtin/difftool.c b/builtin/difftool.c index 210da03908..9d2dfd3361 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -252,16 +252,6 @@ static void changed_files(struct hashmap *result, const char *index_path, strbuf_release(&buf); } -static NORETURN void exit_cleanup(const char *tmpdir, int exit_code) -{ - struct strbuf buf = STRBUF_INIT; - strbuf_addstr(&buf, tmpdir); - remove_dir_recursively(&buf, 0); - if (exit_code) - warning(_("failed: %d"), exit_code); - exit(exit_code); -} - static int ensure_leading_directories(char *path) { switch (safe_create_leading_directories(path)) { @@ -333,16 +323,16 @@ static int checkout_path(unsigned mode, struct object_id *oid, static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct child_process *child) { - char tmpdir[PATH_MAX]; struct strbuf info = STRBUF_INIT, lpath = STRBUF_INIT; struct strbuf rpath = STRBUF_INIT, buf = STRBUF_INIT; struct strbuf ldir = STRBUF_INIT, rdir = STRBUF_INIT; struct strbuf wtdir = STRBUF_INIT; - char *lbase_dir, *rbase_dir; + struct strbuf tmpdir = STRBUF_INIT; + char *lbase_dir = NULL, *rbase_dir = NULL; size_t ldir_len, rdir_len, wtdir_len; const char *workdir, *tmp; int ret = 0, i; - FILE *fp; + FILE *fp = NULL; struct hashmap working_tree_dups = HASHMAP_INIT(working_tree_entry_cmp, NULL); struct hashmap submodules = HASHMAP_INIT(pair_cmp, NULL); @@ -351,7 +341,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct pair_entry *entry; struct index_state wtindex; struct checkout lstate, rstate; - int rc, flags = RUN_GIT_CMD, err = 0; + int flags = RUN_GIT_CMD, err = 0; const char *helper_argv[] = { "difftool--helper", NULL, NULL, NULL }; struct hashmap wt_modified, tmp_modified; int indices_loaded = 0; @@ -360,11 +350,15 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, /* Setup temp directories */ tmp = getenv("TMPDIR"); - xsnprintf(tmpdir, sizeof(tmpdir), "%s/git-difftool.XXXXXX", tmp ? tmp : "/tmp"); - if (!mkdtemp(tmpdir)) - return error("could not create '%s'", tmpdir); - strbuf_addf(&ldir, "%s/left/", tmpdir); - strbuf_addf(&rdir, "%s/right/", tmpdir); + strbuf_add_absolute_path(&tmpdir, tmp ? tmp : "/tmp"); + strbuf_trim_trailing_dir_sep(&tmpdir); + strbuf_addstr(&tmpdir, "/git-difftool.XXXXXX"); + if (!mkdtemp(tmpdir.buf)) { + ret = error("could not create '%s'", tmpdir.buf); + goto finish; + } + strbuf_addf(&ldir, "%s/left/", tmpdir.buf); + strbuf_addf(&rdir, "%s/right/", tmpdir.buf); strbuf_addstr(&wtdir, workdir); if (!wtdir.len || !is_dir_sep(wtdir.buf[wtdir.len - 1])) strbuf_addch(&wtdir, '/'); @@ -580,7 +574,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, flags = 0; } else setenv("GIT_DIFFTOOL_DIRDIFF", "true", 1); - rc = run_command_v_opt(helper_argv, flags); + ret = run_command_v_opt(helper_argv, flags); /* TODO: audit for interaction with sparse-index. */ ensure_full_index(&wtindex); @@ -614,7 +608,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, if (!indices_loaded) { struct lock_file lock = LOCK_INIT; strbuf_reset(&buf); - strbuf_addf(&buf, "%s/wtindex", tmpdir); + strbuf_addf(&buf, "%s/wtindex", tmpdir.buf); if (hold_lock_file_for_update(&lock, buf.buf, 0) < 0 || write_locked_index(&wtindex, &lock, COMMIT_LOCK)) { ret = error("could not write %s", buf.buf); @@ -644,11 +638,14 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, } if (err) { - warning(_("temporary files exist in '%s'."), tmpdir); + warning(_("temporary files exist in '%s'."), tmpdir.buf); warning(_("you may want to cleanup or recover these.")); - exit(1); - } else - exit_cleanup(tmpdir, rc); + ret = 1; + } else { + remove_dir_recursively(&tmpdir, 0); + if (ret) + warning(_("failed: %d"), ret); + } finish: if (fp) @@ -660,6 +657,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, strbuf_release(&rdir); strbuf_release(&wtdir); strbuf_release(&buf); + strbuf_release(&tmpdir); return ret; } diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh index 528e0dabf0..096456292c 100755 --- a/t/t7800-difftool.sh +++ b/t/t7800-difftool.sh @@ -453,6 +453,13 @@ run_dir_diff_test 'difftool --dir-diff' ' grep "^file$" output ' +run_dir_diff_test 'difftool --dir-diff avoids repeated slashes in TMPDIR' ' + TMPDIR="${TMPDIR:-/tmp}////" \ + git difftool --dir-diff $symlinks --extcmd echo branch >output && + grep -v // output >actual && + test_line_count = 1 actual +' + run_dir_diff_test 'difftool --dir-diff ignores --prompt' ' git difftool --dir-diff $symlinks --prompt --extcmd ls branch >output && grep "^sub$" output && From patchwork Thu Sep 30 17:01:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Aguilar X-Patchwork-Id: 12528891 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5E286C433FE for ; Thu, 30 Sep 2021 17:01:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 425C561216 for ; Thu, 30 Sep 2021 17:01:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352483AbhI3RDi (ORCPT ); Thu, 30 Sep 2021 13:03:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44278 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352475AbhI3RDf (ORCPT ); Thu, 30 Sep 2021 13:03:35 -0400 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 62BACC061776 for ; Thu, 30 Sep 2021 10:01:52 -0700 (PDT) Received: by mail-pj1-x1035.google.com with SMTP id ce20-20020a17090aff1400b0019f13f6a749so6975167pjb.4 for ; Thu, 30 Sep 2021 10:01:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A5Xel3ExkB+C0/nXPTgnGFF1CIQPY7WoHSwf2uT/Bsc=; b=VsdadnbRLWJv8gxVVO98uW1y8sSINbsJ+k9Vtt02oB8VWGZho6mvP36+5/xxpgnKNe bvlrDDbrg/DBpMFZmzBneCSljmru2E1IHxm8ihIC2xnx5IFBwzF0HouhHS5MTS/68JWE tCe0aBlU0+RRX2NQnYxHzNTHC2sM/Qu824k6oaHpjCV/iujCigkzseS1y4bu/2hj9Dvv 59LlI6TMENGcMSNW9pe+ezxzECabNJ68atMzFV+lyr78mgngF26um3gRzRP5pFg0cwIe E7gPgd4scvmlKIkROZdR3Ipscr3MHlTyA0kJr9k2WLLEc8FCBrxyM7B0suiuwnDbr6pv 2jmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=A5Xel3ExkB+C0/nXPTgnGFF1CIQPY7WoHSwf2uT/Bsc=; b=zrtqokFgCqrqrvr7AvzcRfLBH7H5bQLsSkjwyIDFy67qA4eO2sM1w92eg3v8kiXUbc HDIStV02Tq2vlMvjTB/GqAW2tV6m5zBESYO966J4zDznekDVWK7KVy0/bDbpT7okhyl+ Z27Sy4NwecDeE9m81gN5A6BG/DeGhHaXHHphcOSE6aImON+HqH9jHU5uZOSCvxqC8zOi r3XfmgKb7ZT2sTP8VkfXMBFmoQeFzRggBDVALVQvqc7XBola8zJho+kXf5F5+jW86f7R r+9Auu9xGLxr5FdJuhg0h9FKFnhxGgNaLuiHs4TXkE6rqYWWEAXgF/zPxyOJhNpHUtBU ulIQ== X-Gm-Message-State: AOAM532GjSHW0QgG690jT3YvjzLgiFV8m0cfIlaskKu6s2W3YpbjhxKT bTqi0ixkAXdvYA9qH99KckSD+PVTcrE= X-Google-Smtp-Source: ABdhPJxNDMzZXf3khdtotj3LFtLtH6Qktrpa+26+2pkP+b7wn2LTY+z+tnMBsk8o79pRhRRFZwtu9w== X-Received: by 2002:a17:90a:8413:: with SMTP id j19mr7637884pjn.181.1633021311603; Thu, 30 Sep 2021 10:01:51 -0700 (PDT) Received: from sarawiggum.fas.fa.disney.com ([198.187.190.10]) by smtp.gmail.com with ESMTPSA id p4sm2740678pjo.0.2021.09.30.10.01.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Sep 2021 10:01:51 -0700 (PDT) From: David Aguilar To: Git Mailing List Cc: Junio C Hamano , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= , Johannes Schindelin Subject: [PATCH v6 2/5] difftool: add a missing space to the run_dir_diff() comments Date: Thu, 30 Sep 2021 10:01:43 -0700 Message-Id: <20210930170146.61489-2-davvid@gmail.com> X-Mailer: git-send-email 2.33.0.887.g8db6ae3373 In-Reply-To: <20210930170146.61489-1-davvid@gmail.com> References: <20210930170146.61489-1-davvid@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Signed-off-by: David Aguilar --- Trivial tweak. Unchanged but resubmitted for ease of application. builtin/difftool.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/difftool.c b/builtin/difftool.c index 9d2dfd3361..fdaaa86bff 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -542,7 +542,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, } /* - * Symbolic links require special treatment.The standard "git diff" + * Symbolic links require special treatment. The standard "git diff" * shows only the link itself, not the contents of the link target. * This loop replicates that behavior. */ From patchwork Thu Sep 30 17:01:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Aguilar X-Patchwork-Id: 12528893 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ECC55C433EF for ; Thu, 30 Sep 2021 17:01:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CAE8F61216 for ; Thu, 30 Sep 2021 17:01:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352476AbhI3RDi (ORCPT ); Thu, 30 Sep 2021 13:03:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352479AbhI3RDg (ORCPT ); Thu, 30 Sep 2021 13:03:36 -0400 Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CD638C06176C for ; Thu, 30 Sep 2021 10:01:53 -0700 (PDT) Received: by mail-pj1-x102c.google.com with SMTP id r7so4636677pjo.3 for ; Thu, 30 Sep 2021 10:01:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YVbJ9jnvgsvfNkzebOvnWIRfVgI6Qul6aa559+zbb30=; b=CeKq5vOEl7o0WoXJmsA4ckVxKw4xge0+OPSeQY7kh8BPOimWgb5DXBSYgfxhHdxWz9 WQmk+NDJG8pIHzpsvgMze1ZwixEakibnaI74dE+CLTWqiNZ2m9ZscvNhzAI5S3+08qiL TGEtEYMKJLZBhdMOnsBae7qf9JStj3zKh+grYSlirkv3YjUcfw0+QF8/VMyCMHn4f0VO l/YUx76nvOfM4tPYMAI0cYR03uL0EpiWxaOThB660ZBSRYyj+4UAZ7gkZYChzaznBk/D fjtypN/QbIk+knABHF6x435wyveF28EtM1U0TPJW3S3H9biT3zb3FcECp+VCgaUr1xjA H9ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YVbJ9jnvgsvfNkzebOvnWIRfVgI6Qul6aa559+zbb30=; b=s6yJmLA3QiuPLLgRYkRKuXAjZW6MJ1pY6msUBVtIWrs2HZOHuQJES5C/fWV5zXe6Eq BCgOQjsgeuhM5kM7kmIIZy8hX9T+tt1vwfU2MytXCrVnhTvRDZS4kgy1WU2bzHoYvS6H u7BwVRRn7IBafhZkW34lk4snRpEDQqtxairS/zJdfJKxfnll+DDYiTnIBijms7t/s7Jo mE08A5H4EuawdTiiUdaOSbOFwYZvf/riGjvvaBcb2SsH8mmkPazmwFoheToZII0EoYew 3ZarW/W+YquZE13rQ4nukxxY4DxX+tIR/IF3rRxx1e2fIymKGrgGR7k6Z5dWtkfylgNY X+gQ== X-Gm-Message-State: AOAM531UrbcZf4ZjyBhMB/bG9hWE20gZ4fUwH8FsxCOjUNTCWq3EPk3T 2D64RrsQm98pFFwYd6w2H1dbmFl4zAs= X-Google-Smtp-Source: ABdhPJwuq0KKd5BGPnDtROBJqwXI+ixLiMTXlc4wBErIS8lxSc1TdTWu6Y2N351oiRx12LMy9lUx5A== X-Received: by 2002:a17:90a:718c:: with SMTP id i12mr14380399pjk.182.1633021313073; Thu, 30 Sep 2021 10:01:53 -0700 (PDT) Received: from sarawiggum.fas.fa.disney.com ([198.187.190.10]) by smtp.gmail.com with ESMTPSA id p4sm2740678pjo.0.2021.09.30.10.01.51 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Sep 2021 10:01:52 -0700 (PDT) From: David Aguilar To: Git Mailing List Cc: Junio C Hamano , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= , Johannes Schindelin Subject: [PATCH v6 3/5] difftool: avoid returning -1 to cmd_main() from run_dir_diff() Date: Thu, 30 Sep 2021 10:01:44 -0700 Message-Id: <20210930170146.61489-3-davvid@gmail.com> X-Mailer: git-send-email 2.33.0.887.g8db6ae3373 In-Reply-To: <20210930170146.61489-1-davvid@gmail.com> References: <20210930170146.61489-1-davvid@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org difftool was forwarding the -1 result from error() to cmd_main(), which is implementation-defined since it is outside of the 0-255 range specified by POSIX for program exit codes. Stop assigning the result of error() to `ret`. Assign a value of 1 whenever internal errors are detected instead. Signed-off-by: David Aguilar --- This patch addresses the note from Ævar about returning -1 to cmd_main(). builtin/difftool.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/builtin/difftool.c b/builtin/difftool.c index fdaaa86bff..e419bd3cd1 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -447,7 +447,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, if (lmode && status != 'C') { if (checkout_path(lmode, &loid, src_path, &lstate)) { - ret = error("could not write '%s'", src_path); + ret = 1; + error("could not write '%s'", src_path); goto finish; } } @@ -468,8 +469,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, if (!use_wt_file(workdir, dst_path, &roid)) { if (checkout_path(rmode, &roid, dst_path, &rstate)) { - ret = error("could not write '%s'", - dst_path); + ret = 1; + error("could not write '%s'", dst_path); goto finish; } } else if (!is_null_oid(&roid)) { @@ -487,15 +488,16 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, add_path(&rdir, rdir_len, dst_path); if (ensure_leading_directories(rdir.buf)) { - ret = error("could not create " - "directory for '%s'", - dst_path); + ret = 1; + error("could not create directory for '%s'", + dst_path); goto finish; } add_path(&wtdir, wtdir_len, dst_path); if (symlinks) { if (symlink(wtdir.buf, rdir.buf)) { - ret = error_errno("could not symlink '%s' to '%s'", wtdir.buf, rdir.buf); + ret = 1; + error_errno("could not symlink '%s' to '%s'", wtdir.buf, rdir.buf); goto finish; } } else { @@ -504,7 +506,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, st.st_mode = 0644; if (copy_file(rdir.buf, wtdir.buf, st.st_mode)) { - ret = error("could not copy '%s' to '%s'", wtdir.buf, rdir.buf); + ret = 1; + error("could not copy '%s' to '%s'", wtdir.buf, rdir.buf); goto finish; } } @@ -515,7 +518,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, fclose(fp); fp = NULL; if (finish_command(child)) { - ret = error("error occurred running diff --raw"); + ret = 1; + error("error occurred running diff --raw"); goto finish; } From patchwork Thu Sep 30 17:01:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Aguilar X-Patchwork-Id: 12528895 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA53BC433F5 for ; Thu, 30 Sep 2021 17:01:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9DF9C61881 for ; Thu, 30 Sep 2021 17:01:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352482AbhI3RDj (ORCPT ); Thu, 30 Sep 2021 13:03:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352478AbhI3RDi (ORCPT ); Thu, 30 Sep 2021 13:03:38 -0400 Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 59C73C06176A for ; Thu, 30 Sep 2021 10:01:55 -0700 (PDT) Received: by mail-pj1-x1032.google.com with SMTP id r7so4636724pjo.3 for ; Thu, 30 Sep 2021 10:01:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vqWBem/sC0ubBy22X5nYFj2VzyRwmznXXHCFxvbtNbc=; b=qIYJcCz2xsrQbIgmRpNJ+LeEQ3wfYYzqGS6R7+cFEvDzFTStz2BYAHTKuS8ONHlITZ w3oPKJvozsEHdwOSeVZUM6v7pQmTYtcKov1LdibXtem4f94AFGkxmb1UYZ4hJoZUwazk zlenshtYDrQz19qk1+5HJIbMvKMM5KlYq5V7qM3d96dIzKp1FvTLI+mMXuBnlmuAUOto c1rXvYlX+1NCgsxFz9GaIT55NsnDExn3ah/mygJv47b3pbi/bf4gLEdDV1VrZokFQ8dM TSBDRwpCk3IfVnQ4GFnd8fNs6DLhK9v0hBQxxAyqg4iOStPwyYf0CwHSvT0USzkR5Zno cmmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vqWBem/sC0ubBy22X5nYFj2VzyRwmznXXHCFxvbtNbc=; b=ktWWyCiyWZT6fwS+Ae3ofDSnM9wUIRV7r5d9oVhytWLj6CRjSptCdFKkCesaCCAV0x Pyjb7VhcNs/T9VXCwbjm/m0rBpjGuL0mM+ndxBMKiS/RjJ4GZVqMxzdFvNbDyPM1iA+b k9dKXLId54jbWUOndFeEd7BKLTrNSfYgfG1L0toBr4Zp8JvWRHrJDZIb1eD7lAQiG5Ax fo4+VXdXKXjTh7HZRdZhqD6mrJncwO45CfPsx3nMf+XzMVvSX32w27mz889UV93dctMp 0PVM2/W6ankpcTrMmF1qa17Gn8h1hdWaY4XPaG9wc56yhTAdXDjAm7KmONdKh3Nu5zDt Bp5A== X-Gm-Message-State: AOAM530scxpJ7bXU3A3l1uqfCZG+pNwGTC8ZFG7EtAVCDl3wjzLoKVmE WDa6RJH2TTv9tUHHtgb0ldWi8smKvF8= X-Google-Smtp-Source: ABdhPJx7rLAXKRhyLW/6DS8auZ08wMFXdk3LTdb48wqse1RwI/bX0BBF8ezKKTTf2RpGoWr0Gc64XA== X-Received: by 2002:a17:90a:351:: with SMTP id 17mr7771817pjf.145.1633021314491; Thu, 30 Sep 2021 10:01:54 -0700 (PDT) Received: from sarawiggum.fas.fa.disney.com ([198.187.190.10]) by smtp.gmail.com with ESMTPSA id p4sm2740678pjo.0.2021.09.30.10.01.53 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Sep 2021 10:01:54 -0700 (PDT) From: David Aguilar To: Git Mailing List Cc: Junio C Hamano , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= , Johannes Schindelin Subject: [PATCH v6 4/5] difftool: refactor dir-diff to write files using a helper function Date: Thu, 30 Sep 2021 10:01:45 -0700 Message-Id: <20210930170146.61489-4-davvid@gmail.com> X-Mailer: git-send-email 2.33.0.887.g8db6ae3373 In-Reply-To: <20210930170146.61489-1-davvid@gmail.com> References: <20210930170146.61489-1-davvid@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Add a write_entry() helper function to handle the unlinking and writing of the dir-diff submodule and symlink stand-in files. Use write_entry() inside of the hashmap loops to eliminate duplicate code and to safeguard the submodules hashmap loop against the symlink-chasing behavior that 5bafb3576a (difftool: fix symlink-file writing in dir-diff mode, 2021-09-22) addressed. The submodules loop should not strictly require the unlink() call that this is introducing to them, but it does not necessarily hurt them either beyond the cost of the extra unlink(). Signed-off-by: David Aguilar --- This is cleanup refactoring that Junio suggested when 5bafb3576a (difftool: fix symlink-file writing in dir-diff mode, 2021-09-22) touched this area of the code. builtin/difftool.c | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/builtin/difftool.c b/builtin/difftool.c index e419bd3cd1..bbb8b399c2 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -320,6 +320,17 @@ static int checkout_path(unsigned mode, struct object_id *oid, return ret; } +static void write_entry(const char *path, const char *content, + struct strbuf *buf, size_t len) +{ + if (!*content) + return; + add_path(buf, len, path); + ensure_leading_directories(buf->buf); + unlink(buf->buf); + write_file(buf->buf, "%s", content); +} + static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct child_process *child) { @@ -533,16 +544,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, */ hashmap_for_each_entry(&submodules, &iter, entry, entry /* member name */) { - if (*entry->left) { - add_path(&ldir, ldir_len, entry->path); - ensure_leading_directories(ldir.buf); - write_file(ldir.buf, "%s", entry->left); - } - if (*entry->right) { - add_path(&rdir, rdir_len, entry->path); - ensure_leading_directories(rdir.buf); - write_file(rdir.buf, "%s", entry->right); - } + write_entry(entry->path, entry->left, &ldir, ldir_len); + write_entry(entry->path, entry->right, &rdir, rdir_len); } /* @@ -552,18 +555,9 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, */ hashmap_for_each_entry(&symlinks2, &iter, entry, entry /* member name */) { - if (*entry->left) { - add_path(&ldir, ldir_len, entry->path); - ensure_leading_directories(ldir.buf); - unlink(ldir.buf); - write_file(ldir.buf, "%s", entry->left); - } - if (*entry->right) { - add_path(&rdir, rdir_len, entry->path); - ensure_leading_directories(rdir.buf); - unlink(rdir.buf); - write_file(rdir.buf, "%s", entry->right); - } + + write_entry(entry->path, entry->left, &ldir, ldir_len); + write_entry(entry->path, entry->right, &rdir, rdir_len); } strbuf_release(&buf); From patchwork Thu Sep 30 17:01:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Aguilar X-Patchwork-Id: 12528897 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6CE2C433F5 for ; Thu, 30 Sep 2021 17:02:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BC85160FC2 for ; Thu, 30 Sep 2021 17:02:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352490AbhI3RDm (ORCPT ); Thu, 30 Sep 2021 13:03:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352481AbhI3RDj (ORCPT ); Thu, 30 Sep 2021 13:03:39 -0400 Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3B97C06176C for ; Thu, 30 Sep 2021 10:01:56 -0700 (PDT) Received: by mail-pl1-x62b.google.com with SMTP id bb10so4507914plb.2 for ; Thu, 30 Sep 2021 10:01:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5O8+bp9+rAeUi4F6Ug6kV5ONwx5ys4jpUyuCyTVICws=; b=cdPngq3mKO3jPV4VqN8ReXn0q+8q/gUnl52IcD7+hKLHPMuVThd6amYpPKmdbmfqPy JmF26Lpw2+OwrjOAMVP6zmZQJIGUyA9qF180875LcPhQjj+g1hA4KGg66sbJ/34zDrYs pu14IzEnifTMR/n6odBcHvHxwYN6Dl9atqy97KGFd3fWABt0Yta73nrHtJnX771BK1aA q5mpZegRV7eW/yPeMzwI0qbj3PHdrHmp18kh7mnLevaGHPVidSvTsGElW0NZUohFf36L J4DvoI55BgWERQBRoAeLudHOlP/Fvu1BlT3cCQRvPwltBJ9Gwy/yKrhr0PJSBWzTWRbq KOXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5O8+bp9+rAeUi4F6Ug6kV5ONwx5ys4jpUyuCyTVICws=; b=mB0yOBHN1TVd2g8FzUVKFKwTrfTvzlOM/tNXZNPzoMIvK51PN7SKqkgojiDcEylGiT CKBcXj5F+KV1/lvaMYiV/1xpsHbbMvndpo3pxYJpYnM0A9NO5xdekyG0OJhUeiUMnCuM w8gKL/Ip2/w3MV3wrZXLHew2ATwCRkDyI6gTZuXBj60d/2qZUIJcUc2T7IgWB9wdKCHU dFcfcnKIB/RwtAKf1Im0NP5xfO/V3nfCBzMp+abYtdABEggNNKBhSFti01r9AL+8jxFt mEiPEZ902/07RoW46NlzSpMMSTs6h3zUKILMn8Ie4XjhuREbEb8w5wRhdxgpaufR78JX UTfA== X-Gm-Message-State: AOAM532F8xA/b5FPCbLK78C2kQFRmHcixWvfuo3wm7Z+WZVGANNVdYa/ HLQv0Xxcq6KqEyTqWU2CML8Yo7Jtge8= X-Google-Smtp-Source: ABdhPJyf6BGCv4dMzaXGrvU20sKHmJfrC0CnFYx3ohSVSef8aOLM6T6ZM2iha6SkigKdKVqZCZQtTw== X-Received: by 2002:a17:90a:de16:: with SMTP id m22mr7749025pjv.54.1633021315968; Thu, 30 Sep 2021 10:01:55 -0700 (PDT) Received: from sarawiggum.fas.fa.disney.com ([198.187.190.10]) by smtp.gmail.com with ESMTPSA id p4sm2740678pjo.0.2021.09.30.10.01.54 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Sep 2021 10:01:55 -0700 (PDT) From: David Aguilar To: Git Mailing List Cc: Junio C Hamano , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= , Johannes Schindelin Subject: [PATCH v6 5/5] difftool: remove an unnecessary call to strbuf_release() Date: Thu, 30 Sep 2021 10:01:46 -0700 Message-Id: <20210930170146.61489-5-davvid@gmail.com> X-Mailer: git-send-email 2.33.0.887.g8db6ae3373 In-Reply-To: <20210930170146.61489-1-davvid@gmail.com> References: <20210930170146.61489-1-davvid@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The `buf` strbuf is reused again later in the same function, so there is no benefit to calling strbuf_release(). The subsequent usage is already using strbuf_reset() to reset the buffer, so releasing it early is only going to lead to a wasteful reallocation. Remove the early call to strbuf_release(). The same strbuf is already cleaned up in the "finish:" section so nothing is leaked, either. Signed-off-by: David Aguilar --- This is a small cleanup that I noticed while working on the new patches. There are no previous versions of this patch. builtin/difftool.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/builtin/difftool.c b/builtin/difftool.c index bbb8b399c2..859ccc6db3 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -560,8 +560,6 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, write_entry(entry->path, entry->right, &rdir, rdir_len); } - strbuf_release(&buf); - strbuf_setlen(&ldir, ldir_len); helper_argv[1] = ldir.buf; strbuf_setlen(&rdir, rdir_len);