From patchwork Wed Jul 29 21:31:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: pudinha X-Patchwork-Id: 11691731 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0309D6C1 for ; Wed, 29 Jul 2020 21:32:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DE006206D7 for ; Wed, 29 Jul 2020 21:32:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=skylittlesystem-org.20150623.gappssmtp.com header.i=@skylittlesystem-org.20150623.gappssmtp.com header.b="tquuZ3I1" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727078AbgG2Vcu (ORCPT ); Wed, 29 Jul 2020 17:32:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbgG2Vct (ORCPT ); Wed, 29 Jul 2020 17:32:49 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6481DC061794 for ; Wed, 29 Jul 2020 14:32:49 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id z18so19404682wrm.12 for ; Wed, 29 Jul 2020 14:32:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skylittlesystem-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nVN70BfKPTDYe1i9iW9mYQSbcYLtR6qqcYw0E7xz2mw=; b=tquuZ3I1GpPzgyYSp4T1VMK3fmTG/Kl+qBE7Ta5buMW+VcuXKHeumW4W8KVHZJKijz niEsbvPfvpWIjDoJNK8Fg9Aj9138YsDlK8JoW19qm7MpY18Bwa9LH9ot9rC2O6QPQsgn kubT1CihGHMX1arEfrMrTeSZ8Azwc0vkE+s+5Z6K8ZBL1pxzAFHRWGlPtUCZw/e9LQiV f+WLpNC6A+2yE5sks1P2JFWI/4u9mUIC88/djdj51kEtKtuVGt9Wr6OpJjpKkGcDk5Hr A5un0FFlsYm05Cz682tThrTD1u7FkjvmlHlvDBgMamHYrhOdh6rem13piZRCxWJaB2DR 8FFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nVN70BfKPTDYe1i9iW9mYQSbcYLtR6qqcYw0E7xz2mw=; b=T6C4iNjSinH9oOuW24HKMU9c63woElfSZhdD22AxZJzyGaCSbLSQjuW9eoMH70FDuw aTO7dXqVkt0/RUkC6o4D0Ns1urQlPc+VEDrkE8rOwASM/gBT8OjwR+L41arXPODVLCOI SrGr/DTBtguiaIXjYI1Pwxiqlbnd7Y693RQwq2mkB09OLqM8V/StIRqnvJIJizE8dldH OU8KfJuWKqy+xuuXLDB9wTbcujvs1TtDKJmY8HuIp00d9jvSBUFMjR0wUGcG+R2BTA3+ tGBbVUIn5VJnbN844ZOSWmu8Tagxi8tXzJ99hQFcnjaakqgfnLo6ho0hEP8b8n60lC+F M2Ug== X-Gm-Message-State: AOAM532yTy/AOYvJycJkkVCS3+h66UYJ7Bd3WrUgWxnCUq8N6qlagdma sr03qS6JSlDiRcHs61I1mzDtfpFkJ+c= X-Google-Smtp-Source: ABdhPJzbS0+LJYgAHToXeknnVuMvJ/OPN49pf5YaRUM6SBw7FEkTSRCer+OYz/isr29yY/nfvRHVUQ== X-Received: by 2002:adf:bbc1:: with SMTP id z1mr30810587wrg.173.1596058367795; Wed, 29 Jul 2020 14:32:47 -0700 (PDT) Received: from localhost.localdomain (cpc110667-lewi19-2-0-cust284.2-4.cable.virginm.net. [80.7.253.29]) by smtp.gmail.com with ESMTPSA id z8sm6402057wmf.42.2020.07.29.14.32.47 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Jul 2020 14:32:47 -0700 (PDT) From: pudinha To: git@vger.kernel.org Cc: Junio C Hamano , pudinha Subject: [PATCH v3 1/2] mergetool--lib: improve support for vimdiff-style tool variants Date: Wed, 29 Jul 2020 22:31:12 +0100 Message-Id: <20200729213113.15927-2-rogi@skylittlesystem.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200729213113.15927-1-rogi@skylittlesystem.org> References: <20200719042335.3913-1-rogi@skylittlesystem.org> <20200729213113.15927-1-rogi@skylittlesystem.org> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The merge tools vimdiff2, vimdiff3, gvimdiff2, gvimdiff3 and bc3 are all variants of the main tools vimdiff and bc. They are implemented in the main and a one-liner script that just sources it exist for each. Allow variants ending in [0-9] to be correctly wired without the need for such one-liners, so instead of 5 scripts, only 1 (gvimdiff) is needed. Signed-off-by: pudinha --- git-mergetool--lib.sh | 28 +++++++++++++++++++++++----- mergetools/bc | 5 +++++ mergetools/bc3 | 1 - mergetools/gvimdiff2 | 1 - mergetools/gvimdiff3 | 1 - mergetools/vimdiff | 8 ++++++++ mergetools/vimdiff2 | 1 - mergetools/vimdiff3 | 1 - 8 files changed, 36 insertions(+), 10 deletions(-) delete mode 100644 mergetools/bc3 delete mode 100644 mergetools/gvimdiff2 delete mode 100644 mergetools/gvimdiff3 delete mode 100644 mergetools/vimdiff2 delete mode 100644 mergetools/vimdiff3 diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index 204a5acd66..29fecc340f 100644 --- a/git-mergetool--lib.sh +++ b/git-mergetool--lib.sh @@ -43,7 +43,14 @@ show_tool_names () { shown_any= ( cd "$MERGE_TOOLS_DIR" && ls ) | { - while read toolname + while read scriptname + do + setup_tool "$scriptname" 2>/dev/null + variants="$variants$(list_tool_variants)\n" + done + variants="$(echo "$variants" | sort | uniq)" + + for toolname in $variants do if setup_tool "$toolname" 2>/dev/null && (eval "$condition" "$toolname") @@ -157,6 +164,10 @@ setup_tool () { echo "$1" } + list_tool_variants () { + echo "$tool" + } + # Most tools' exit codes cannot be trusted, so By default we ignore # their exit code and check the merged file's modification time in # check_unchanged() to determine whether or not the merge was @@ -178,19 +189,26 @@ setup_tool () { false } - - if ! test -f "$MERGE_TOOLS_DIR/$tool" + if test -f "$MERGE_TOOLS_DIR/$tool" then + . "$MERGE_TOOLS_DIR/$tool" + elif test -f "$MERGE_TOOLS_DIR/${tool%[0-9]}" + then + . "$MERGE_TOOLS_DIR/${tool%[0-9]}" + else setup_user_tool return $? fi - # Load the redefined functions - . "$MERGE_TOOLS_DIR/$tool" # Now let the user override the default command for the tool. If # they have not done so then this will return 1 which we ignore. setup_user_tool + if ! list_tool_variants | grep -q "^$tool$" + then + return 1 + fi + if merge_mode && ! can_merge then echo "error: '$tool' can not be used to resolve merges" >&2 diff --git a/mergetools/bc b/mergetools/bc index 3a69e60faa..a89086ee72 100644 --- a/mergetools/bc +++ b/mergetools/bc @@ -21,3 +21,8 @@ translate_merge_tool_path() { echo bcompare fi } + +list_tool_variants () { + echo bc + echo bc3 +} diff --git a/mergetools/bc3 b/mergetools/bc3 deleted file mode 100644 index 5d8dd48184..0000000000 --- a/mergetools/bc3 +++ /dev/null @@ -1 +0,0 @@ -. "$MERGE_TOOLS_DIR/bc" diff --git a/mergetools/gvimdiff2 b/mergetools/gvimdiff2 deleted file mode 100644 index 04a5bb0ea8..0000000000 --- a/mergetools/gvimdiff2 +++ /dev/null @@ -1 +0,0 @@ -. "$MERGE_TOOLS_DIR/vimdiff" diff --git a/mergetools/gvimdiff3 b/mergetools/gvimdiff3 deleted file mode 100644 index 04a5bb0ea8..0000000000 --- a/mergetools/gvimdiff3 +++ /dev/null @@ -1 +0,0 @@ -. "$MERGE_TOOLS_DIR/vimdiff" diff --git a/mergetools/vimdiff b/mergetools/vimdiff index 10d86f3e19..3925e1fc3e 100644 --- a/mergetools/vimdiff +++ b/mergetools/vimdiff @@ -46,3 +46,11 @@ translate_merge_tool_path() { exit_code_trustable () { true } + +list_tool_variants () { + for prefix in '' g; do + for suffix in '' 2 3; do + echo "${prefix}vimdiff${suffix}" + done + done +} diff --git a/mergetools/vimdiff2 b/mergetools/vimdiff2 deleted file mode 100644 index 04a5bb0ea8..0000000000 --- a/mergetools/vimdiff2 +++ /dev/null @@ -1 +0,0 @@ -. "$MERGE_TOOLS_DIR/vimdiff" diff --git a/mergetools/vimdiff3 b/mergetools/vimdiff3 deleted file mode 100644 index 04a5bb0ea8..0000000000 --- a/mergetools/vimdiff3 +++ /dev/null @@ -1 +0,0 @@ -. "$MERGE_TOOLS_DIR/vimdiff" From patchwork Wed Jul 29 21:31:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: pudinha X-Patchwork-Id: 11691733 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DF2CA913 for ; Wed, 29 Jul 2020 21:33:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C8A922082E for ; Wed, 29 Jul 2020 21:33:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=skylittlesystem-org.20150623.gappssmtp.com header.i=@skylittlesystem-org.20150623.gappssmtp.com header.b="cy+/kk45" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726628AbgG2Vdw (ORCPT ); Wed, 29 Jul 2020 17:33:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726476AbgG2Vdv (ORCPT ); Wed, 29 Jul 2020 17:33:51 -0400 Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50AB3C061794 for ; Wed, 29 Jul 2020 14:33:51 -0700 (PDT) Received: by mail-wm1-x342.google.com with SMTP id 184so4375096wmb.0 for ; Wed, 29 Jul 2020 14:33:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skylittlesystem-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kbGZmLUaYkjPxv+rShzBRAgdGE8Aq2UjFjR/ZwYxJTE=; b=cy+/kk45h5xzPX4rpeIRj7nY16+g2gG/aCFexxpp3R3sTp/ZXcxktWUzKZzuziSaIy 9WCY75sZwrJYd7pRtFl+xfD1h475+AWwge3ynO2sZllYLNiDWZgoJFzObYaFZT20tPAP 6C5/VB49jX7/EKw98V9I5Fag5RTrScvcp+9cDiijYeDUeJfsaPQXOpA1bv9lBQ0zCcPV 704GLGWeH1jw4YPcCiQtpxiJd5z3te+rvbEckS5sbJBzIzKoDAtwBFLqbcVzJoPoaVEz ZyjtSTmYYiXLNYFLUFxQojtTPiJ3B6+mUwEZn4vaaVnpfn68wuUEYxeeV0aJig0xAwKt cznQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kbGZmLUaYkjPxv+rShzBRAgdGE8Aq2UjFjR/ZwYxJTE=; b=lJYZk7MVuHeY0+vaE/cewc0JCWeVetDQovTm0Vi6irO+WuBbuGEx+Kj1nG0fgDs+om y+IgUYzG4TyNdK1bVZyMJknrWfl5jqhPD/xMVU8PiFG2zO7h9iVMh2/kGOYZGvjEf65b YPepKpIZDw5JDm+s30duQyLUW2HS2tzuk0M8akzzLWHYd0Peo0V3s8RD6vvnDvGD6MVH F7TXfN1qAispfwm4aiNuAsn4c0FlzS1JO2slEu8XMfB5kUJnrnyRE5seec/Mdwsd5zlr RTF1qYKka8jy5saz3Q5ywe+0XblFqgFMkZTzSzdnSm0j8toF2hDwPRIAR711cY9aY8H/ Mg7Q== X-Gm-Message-State: AOAM533N5PQ9SZyi8a97RkUZDg7Y8sh02BNBZCmtTS2yemdI/ZLbeLzL 5wIA0CvUWMTKyc94u3dpomlftDjzSbI= X-Google-Smtp-Source: ABdhPJyd2pWZZszlkYRRJC21MZ3KA9KFYcKPltGL6HqjUkMvAM5Fd0hWpNBYbqnoNooncdmVm7K0lg== X-Received: by 2002:a1c:6604:: with SMTP id a4mr10140983wmc.81.1596058429680; Wed, 29 Jul 2020 14:33:49 -0700 (PDT) Received: from localhost.localdomain (cpc110667-lewi19-2-0-cust284.2-4.cable.virginm.net. [80.7.253.29]) by smtp.gmail.com with ESMTPSA id z8sm6402057wmf.42.2020.07.29.14.33.48 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Jul 2020 14:33:49 -0700 (PDT) From: pudinha To: git@vger.kernel.org Cc: Junio C Hamano , pudinha Subject: [PATCH v3 2/2] mergetools: add support for nvimdiff (neovim) family Date: Wed, 29 Jul 2020 22:31:13 +0100 Message-Id: <20200729213113.15927-3-rogi@skylittlesystem.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200729213113.15927-1-rogi@skylittlesystem.org> References: <20200719042335.3913-1-rogi@skylittlesystem.org> <20200729213113.15927-1-rogi@skylittlesystem.org> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Signed-off-by: pudinha --- contrib/completion/git-completion.bash | 4 ++-- git-mergetool--lib.sh | 7 +++++-- mergetools/nvimdiff | 1 + mergetools/vimdiff | 15 +++++++++------ 4 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 mergetools/nvimdiff diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index ee468ea3b0..aed08f8df5 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1712,8 +1712,8 @@ _git_diff () } __git_mergetools_common="diffuse diffmerge ecmerge emerge kdiff3 meld opendiff - tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc - codecompare smerge + tkdiff vimdiff nvimdiff gvimdiff xxdiff araxis p4merge + bc codecompare smerge " _git_difftool () diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index 29fecc340f..2defef28cd 100644 --- a/git-mergetool--lib.sh +++ b/git-mergetool--lib.sh @@ -304,11 +304,14 @@ list_merge_tool_candidates () { tools="$tools smerge" fi case "${VISUAL:-$EDITOR}" in + *nvim*) + tools="$tools nvimdiff vimdiff emerge" + ;; *vim*) - tools="$tools vimdiff emerge" + tools="$tools vimdiff nvimdiff emerge" ;; *) - tools="$tools emerge vimdiff" + tools="$tools emerge vimdiff nvimdiff" ;; esac } diff --git a/mergetools/nvimdiff b/mergetools/nvimdiff new file mode 100644 index 0000000000..04a5bb0ea8 --- /dev/null +++ b/mergetools/nvimdiff @@ -0,0 +1 @@ +. "$MERGE_TOOLS_DIR/vimdiff" diff --git a/mergetools/vimdiff b/mergetools/vimdiff index 3925e1fc3e..abc8ce4ec4 100644 --- a/mergetools/vimdiff +++ b/mergetools/vimdiff @@ -5,7 +5,7 @@ diff_cmd () { merge_cmd () { case "$1" in - gvimdiff|vimdiff) + *vimdiff) if $base_present then "$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \ @@ -15,11 +15,11 @@ merge_cmd () { "$LOCAL" "$MERGED" "$REMOTE" fi ;; - gvimdiff2|vimdiff2) + *vimdiff2) "$merge_tool_path" -f -d -c 'wincmd l' \ "$LOCAL" "$MERGED" "$REMOTE" ;; - gvimdiff3|vimdiff3) + *vimdiff3) if $base_present then "$merge_tool_path" -f -d -c 'hid | hid | hid' \ @@ -34,10 +34,13 @@ merge_cmd () { translate_merge_tool_path() { case "$1" in - gvimdiff|gvimdiff2|gvimdiff3) + nvimdiff*) + echo nvim + ;; + gvimdiff*) echo gvim ;; - vimdiff|vimdiff2|vimdiff3) + vimdiff*) echo vim ;; esac @@ -48,7 +51,7 @@ exit_code_trustable () { } list_tool_variants () { - for prefix in '' g; do + for prefix in '' g n; do for suffix in '' 2 3; do echo "${prefix}vimdiff${suffix}" done