From patchwork Sat Mar 20 00:03:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152117 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D47FC433C1 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 119D361982 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229780AbhCTAEk (ORCPT ); Fri, 19 Mar 2021 20:04:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229618AbhCTAEA (ORCPT ); Fri, 19 Mar 2021 20:04:00 -0400 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2746FC061760 for ; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id d191so6262332wmd.2 for ; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=skoEo4SWYtUg71kvRBx6/BANdZpAEw7WB2wFqMP+Wc4=; b=WI42uW3UBOsbmzyR7LkJa6Ott1a6lLVIzriHVI4tNw4pey6cvgwdb1slkU9sNCN3AI lAkN/NTO3sWgTCxEyjNfCNDm1ak58XWzDkDB75S5e/o7nEK58nOTdc9frolPnoXM+Nzz 8JMcs3jEoyJtYQA9L6Q4wPjO01fnEiCC0MrBRL4g8TOzI2IIGColzhDJVo5L6IZ8S6f6 PBcM8IQLwbJOEv9F5qPUtsIaW1Oa+ecWpPfctmRX+3PeisIKmwLSRNGOL7CZClLnMvGa /DxDN9dxjOS5/uBkOxC5CpYeozada5zxi1HyZ1Nor2NbNxRbD2y0euZk7zkwggGVm1e9 TOeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=skoEo4SWYtUg71kvRBx6/BANdZpAEw7WB2wFqMP+Wc4=; b=EAPNJXxLfXa0ObJ+fhUnICFsgvYksdUsjFd3s/0op5NXWI1tRwI0YTvosJyeW3v3HG zDVSYT0suvmNpBVWR5X9TADdfh/98NBLFK2aZbDhuRmKJLUZVSqRYWS7nWubETVMSfwK JCWNQwf0ct4WOi2MxnfGKp5K2Py/ASWQIq6N8WeRk2aIJ2o7SLbEUf0PwH7Rpp5h+ytz 4ojTDyoZQOhVC/JK+4D043Rc4b457d3gQluxZRXcP14TyP/x3J5zPe1LXTm0dLbb2VZM /eaOIgrNWKCGGglBr/zxwhUyRYnR7oXAPopQGiS1m2wzZN5ZAXDBSL1JYDu1JY/vLQ/g O+Rw== X-Gm-Message-State: AOAM531NN4uuZ4fLvCft5YUgYQwjQy5Tk/3mDHyHmk2G3qwMAOXdX/KJ McrNNru2+yLcKiZcGecekFlGddU02L4= X-Google-Smtp-Source: ABdhPJzv2MyI8G5E9/EQhzCXqDeTG1B72n1luPcldd2Ht3ZUehdLVN7QJ7Lw6EVaVOqpoIrs8PVdMg== X-Received: by 2002:a1c:7fcd:: with SMTP id a196mr5754937wmd.180.1616198638547; Fri, 19 Mar 2021 17:03:58 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id u9sm7600653wmc.38.2021.03.19.17.03.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:03:58 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:44 +0000 Subject: [PATCH v3 01/13] merge-ort: use STABLE_QSORT instead of QSORT where required Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren rename/rename conflict handling depends on the fact that if both sides renamed the same path, that the one on the MERGE_SIDE1 will appear first in the combined diff_queue_struct passed to process_renames(). Since we add all pairs from MERGE_SIDE1 to combined first, and then all pairs from MERGE_SIDE2, and then sort based on filename, this will only be true if the sort used is stable. This was found due to the fact that Mac, unlike Linux, apparently has a system-defined qsort that is not stable. While we are at it, review the other callers of QSORT and add comments about why they can remain as calls to QSORT instead of being modified to call STABLE_QSORT. Signed-off-by: Elijah Newren --- merge-ort.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/merge-ort.c b/merge-ort.c index 7f5750ce6ab0..34a91c435737 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -2405,7 +2405,7 @@ static int detect_and_process_renames(struct merge_options *opt, clean &= collect_renames(opt, &combined, MERGE_SIDE2, &renames->dir_renames[1], &renames->dir_renames[2]); - QSORT(combined.queue, combined.nr, compare_pairs); + STABLE_QSORT(combined.queue, combined.nr, compare_pairs); trace2_region_leave("merge", "directory renames", opt->repo); trace2_region_enter("merge", "process renames", opt->repo); @@ -2550,6 +2550,7 @@ static void write_tree(struct object_id *result_oid, */ relevant_entries.items = versions->items + offset; relevant_entries.nr = versions->nr - offset; + /* No need for STABLE_QSORT -- filenames must be unique */ QSORT(relevant_entries.items, relevant_entries.nr, tree_entry_order); /* Pre-allocate some space in buf */ @@ -3325,6 +3326,11 @@ static int record_conflicted_index_entries(struct merge_options *opt, * entries we added to the end into their right locations. */ remove_marked_cache_entries(index, 1); + /* + * No need for STABLE_QSORT -- cmp_cache_name_compare sorts primarily + * on filename and secondarily on stage, and (name, stage #) are a + * unique tuple. + */ QSORT(index->cache, index->cache_nr, cmp_cache_name_compare); return errs; From patchwork Sat Mar 20 00:03:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152121 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C2AEC433E0 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 345F161981 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229767AbhCTAEj (ORCPT ); Fri, 19 Mar 2021 20:04:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38308 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229519AbhCTAEA (ORCPT ); Fri, 19 Mar 2021 20:04:00 -0400 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63777C061761 for ; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) Received: by mail-wm1-x334.google.com with SMTP id k128so3864220wmk.4 for ; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=i7t+eJQcgwTX2+yM47HxJduHsS0+Js64QpdHJo4KdIQ=; b=lDuhNpjn3rNG8tKwnE/E93HYs2GUwOhp9ldDeg1vxFfKAmJOJVkxGc/k2lrkVbSEru BuaV426gpv3CGP1u9YLv7UppnvYaAmB2uzt2RlUjHsXP71GfPLFDmBrIKG1YqWBIml7K eumOUI1/TrTUhRlqb9HXjb1YLXpcvPS+RoPrWaQNBOcM3YNTIAn3VimHmqsynlhEZC1O fdDOpBrG7W0x2xoHcCuYrvb+W42Zoqp9ckModyDEWAJ0mLIj6IKLW/7zkZlRjDHlvI8K oOVvebFvxmdKGuWFaVIEbFo9iXpKGox6GuWAgyXoDs21cZOIgwhlKcGoiWaGkHDK29OI jDSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=i7t+eJQcgwTX2+yM47HxJduHsS0+Js64QpdHJo4KdIQ=; b=gy402s1lg3Tymj2Zw8IyqN0y0SElWYAZT5MK8JasGpwJajFa1DBspMCZ7/7GJr6bBF rzncC1LVSFzXGo8j0JZIH96yIXtBlr0vhG2bLbq4s1uw9cN3WceNJn+c+eIOKVmMS/h4 UErj1BWYVtljxFxl3O5wVkbGWqoy+o7eewtWDLEGfyULA7jr8EmTDJ+MWTk4H4GGLNMY kpIBMvaoiLw+i3jLHPqllATIuIguw15CNALJGBD/4IomRL1CJ79Qm5/nF94c5il4etWv nQisU887p8tUA8IWtwtelK4L74/ctF41rp+eX/TG1ySEU81YlXqzrI5A9OIBrW6QHLzs GY8Q== X-Gm-Message-State: AOAM5315hi9YXMHy5aRxstx67w0iddE1JNWtz4hWYm0P/pWA3U6FqkyB eg7FlyXHYyHIm4RElj4j/dapXWjBS9o= X-Google-Smtp-Source: ABdhPJztutXWnwYqNduFebBFCK08Pg8GjHvSef2kovpYC0lRaQcEqPI3ZaQrunEUrx5Cq/p09oC5lg== X-Received: by 2002:a1c:bb0b:: with SMTP id l11mr5854717wmf.150.1616198639081; Fri, 19 Mar 2021 17:03:59 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id h25sm9473937wml.32.2021.03.19.17.03.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:03:58 -0700 (PDT) Message-Id: <6d34cc466bd53e074c690b58ef03391eac10e5d9.1616198636.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:45 +0000 Subject: [PATCH v3 02/13] merge-ort: add a special minimal index just for renormalization Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren renormalize_buffer() requires an index_state, which is something that merge-ort does not operate with. However, all the renormalization code needs is an index with a .gitattributes file...plus a little bit of setup. Create such an index, along with the deallocation and attr_direction handling. A subsequent commit will add a function to finish the initialization of this index. Signed-off-by: Elijah Newren --- merge-ort.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/merge-ort.c b/merge-ort.c index 34a91c435737..3c606fa7e4b3 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -18,6 +18,7 @@ #include "merge-ort.h" #include "alloc.h" +#include "attr.h" #include "blob.h" #include "cache-tree.h" #include "commit.h" @@ -220,6 +221,16 @@ struct merge_options_internal { */ struct rename_info renames; + /* + * attr_index: hacky minimal index used for renormalization + * + * renormalization code _requires_ an index, though it only needs to + * find a .gitattributes file within the index. So, when + * renormalization is important, we create a special index with just + * that one file. + */ + struct index_state attr_index; + /* * current_dir_name, toplevel_dir: temporary vars * @@ -399,6 +410,9 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti, string_list_clear(&opti->paths_to_free, 0); opti->paths_to_free.strdup_strings = 0; + if (opti->attr_index.cache_nr) + discard_index(&opti->attr_index); + /* Free memory used by various renames maps */ for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) { strintmap_func(&renames->dirs_removed[i]); @@ -3407,6 +3421,8 @@ void merge_finalize(struct merge_options *opt, { struct merge_options_internal *opti = result->priv; + if (opt->renormalize) + git_attr_set_direction(GIT_ATTR_CHECKIN); assert(opt->priv == NULL); clear_or_reinit_internal_opts(opti, 0); @@ -3482,6 +3498,10 @@ static void merge_start(struct merge_options *opt, struct merge_result *result) /* Default to histogram diff. Actually, just hardcode it...for now. */ opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF); + /* Handle attr direction stuff for renormalization */ + if (opt->renormalize) + git_attr_set_direction(GIT_ATTR_CHECKOUT); + /* Initialization of opt->priv, our internal merge data */ trace2_region_enter("merge", "allocate/init", opt->repo); if (opt->priv) { From patchwork Sat Mar 20 00:03:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152115 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9A81C433DB for ; Sat, 20 Mar 2021 00:05:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8D1FD6197D for ; Sat, 20 Mar 2021 00:05:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229756AbhCTAEi (ORCPT ); Fri, 19 Mar 2021 20:04:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38310 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229634AbhCTAEB (ORCPT ); Fri, 19 Mar 2021 20:04:01 -0400 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3AA7C061760 for ; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id k8so10733194wrc.3 for ; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=cnf/QEJ8oejThB9c252suJGw0HPP+Uh2G/Edw1V71cM=; b=SLA4gPLBc5622bd+EYNT7ghldV3GTatO5tfPpzi1+xdy02p0ojrBqiMlZkREbdBrz6 025M8vOPSZ3cMK8E5srgkArXlh8Pohvsdj9LWT4XqpT4X6SkP8qSVmU1iB6f15BHVH8L b0n0CMLPnF71p4LkVfKKNdOEd3Ed3XyZWWm7viwOjq1FJIYJqAROCwq9Jw1b8dlWNWaj ZCmWPd0nE8LIIcgQITWGz/ErKjSvcGdcz/sIJK9EE0Zzw76Y3zxX/qqlcCU4U5jjsqT7 pxLcQyjuN/okAQ5WjtPi4G0fDCdS/AuhJbvSdEpJMH2k/y8Fg9a39ZRR5QrO2aGaEq2+ 4biQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=cnf/QEJ8oejThB9c252suJGw0HPP+Uh2G/Edw1V71cM=; b=KcOKN1rv+7zO94i2UAjylcacEzXwhb0B9NiMi9MPZe4ZBXE7fLE9XX8NU3t7J8qxsV uwQQ93RZhRTnwGeOEgSL7iQMna47tsXkLwsK8dhecqMIK6Pid9RG5jpqN+0bA+DBmfrR F3+AbSA8p463mLmtDHZwW04eNINK/9aEXR499s99Jsauk0/GrCeD0iLZ8EfmtYFcESc1 wN1MwAs3w4vGoWpqP8c0ompfT94Q8zAj6avTdNz2SYiE+RftK1GGh4srBS6Bvjm2ieTO E15xi3BQ0PNT84TP8lEdE07Rxir7EqzhGayWLZX/IYkVCvBUxD2nGwk+/ztIxW0dfV7u JSJg== X-Gm-Message-State: AOAM532zHBWeVqIzbjPOfm8LoQEApNyHFyS5l8aeSXc6190XlgvU5RU1 uaPCOZVFpra++How45Zqk17z9gsJSnQ= X-Google-Smtp-Source: ABdhPJwyf8rTvnzoeiKwRhFMTLNWipUWWiju4U8YwkFtYlyTD1WET1Rv+5r8dca2Mz3422+hcCACew== X-Received: by 2002:adf:e809:: with SMTP id o9mr7138605wrm.110.1616198639692; Fri, 19 Mar 2021 17:03:59 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id s83sm8141956wmf.26.2021.03.19.17.03.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:03:59 -0700 (PDT) Message-Id: <4ff23d2f52a0abd41d81076f9dfa3a93319deca5.1616198636.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:46 +0000 Subject: [PATCH v3 03/13] merge-ort: have ll_merge() use a special attr_index for renormalization Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren ll_merge() needs an index when renormalization is requested. Create one specifically for just this purpose with just the one needed entry. This fixes t6418.4 and t6418.5 under GIT_TEST_MERGE_ALGORITHM=ort. NOTE 1: Even if the user has a working copy or a real index (which is not a given as merge-ort can be used in bare repositories), we explicitly ignore any .gitattributes file from either of these locations. merge-ort can be used to merge two branches that are unrelated to HEAD, so .gitattributes from the working copy and current index should not be considered relevant. NOTE 2: Since we are in the middle of merging, there is a risk that .gitattributes itself is conflicted...leaving us with an ill-defined situation about how to perform the rest of the merge. It could be that the .gitattributes file does not even exist on one of the sides of the merge, or that it has been modified on both sides. If it's been modified on both sides, it's possible that it could itself be merged cleanly, though it's also possible that it only merges cleanly if you use the right version of the .gitattributes file to drive the merge. It gets kind of complicated. The only test we ever had that attempted to test behavior in this area was seemingly unaware of the undefined behavior, but knew the test wouldn't work for lack of attribute handling support, marked it as test_expect_failure from the beginning, but managed to fail for several reasons unrelated to attribute handling. See commit 6f6e7cfb52 ("t6038: remove problematic test", 2020-08-03) for details. So there are probably various ways to improve what initialize_attr_index() picks in the case of a conflicted .gitattributes but for now I just implemented something simple -- look for whatever .gitattributes file we can find in any of the higher order stages and use it. Signed-off-by: Elijah Newren --- merge-ort.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/merge-ort.c b/merge-ort.c index 3c606fa7e4b3..cdc1e2fe7a24 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -410,7 +410,7 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti, string_list_clear(&opti->paths_to_free, 0); opti->paths_to_free.strdup_strings = 0; - if (opti->attr_index.cache_nr) + if (opti->attr_index.cache_nr) /* true iff opt->renormalize */ discard_index(&opti->attr_index); /* Free memory used by various renames maps */ @@ -1201,6 +1201,63 @@ static int merge_submodule(struct merge_options *opt, return 0; } +static void initialize_attr_index(struct merge_options *opt) +{ + /* + * The renormalize_buffer() functions require attributes, and + * annoyingly those can only be read from the working tree or from + * an index_state. merge-ort doesn't have an index_state, so we + * generate a fake one containing only attribute information. + */ + struct merged_info *mi; + struct index_state *attr_index = &opt->priv->attr_index; + struct cache_entry *ce; + + attr_index->initialized = 1; + + if (!opt->renormalize) + return; + + mi = strmap_get(&opt->priv->paths, GITATTRIBUTES_FILE); + if (!mi) + return; + + if (mi->clean) { + int len = strlen(GITATTRIBUTES_FILE); + ce = make_empty_cache_entry(attr_index, len); + ce->ce_mode = create_ce_mode(mi->result.mode); + ce->ce_flags = create_ce_flags(0); + ce->ce_namelen = len; + oidcpy(&ce->oid, &mi->result.oid); + memcpy(ce->name, GITATTRIBUTES_FILE, len); + add_index_entry(attr_index, ce, + ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE); + get_stream_filter(attr_index, GITATTRIBUTES_FILE, &ce->oid); + } else { + int stage, len; + struct conflict_info *ci; + + ASSIGN_AND_VERIFY_CI(ci, mi); + for (stage = 0; stage < 3; stage++) { + unsigned stage_mask = (1 << stage); + + if (!(ci->filemask & stage_mask)) + continue; + len = strlen(GITATTRIBUTES_FILE); + ce = make_empty_cache_entry(attr_index, len); + ce->ce_mode = create_ce_mode(ci->stages[stage].mode); + ce->ce_flags = create_ce_flags(stage); + ce->ce_namelen = len; + oidcpy(&ce->oid, &ci->stages[stage].oid); + memcpy(ce->name, GITATTRIBUTES_FILE, len); + add_index_entry(attr_index, ce, + ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE); + get_stream_filter(attr_index, GITATTRIBUTES_FILE, + &ce->oid); + } + } +} + static int merge_3way(struct merge_options *opt, const char *path, const struct object_id *o, @@ -1215,6 +1272,9 @@ static int merge_3way(struct merge_options *opt, char *base, *name1, *name2; int merge_status; + if (!opt->priv->attr_index.initialized) + initialize_attr_index(opt); + ll_opts.renormalize = opt->renormalize; ll_opts.extra_marker_size = extra_marker_size; ll_opts.xdl_opts = opt->xdl_opts; @@ -1253,7 +1313,7 @@ static int merge_3way(struct merge_options *opt, merge_status = ll_merge(result_buf, path, &orig, base, &src1, name1, &src2, name2, - opt->repo->index, &ll_opts); + &opt->priv->attr_index, &ll_opts); free(base); free(name1); From patchwork Sat Mar 20 00:03:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152127 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D46E5C433E3 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A2F6661986 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229811AbhCTAEl (ORCPT ); Fri, 19 Mar 2021 20:04:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38316 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229637AbhCTAEB (ORCPT ); Fri, 19 Mar 2021 20:04:01 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7B8BBC061760 for ; Fri, 19 Mar 2021 17:04:01 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id f22-20020a7bc8d60000b029010c024a1407so8132795wml.2 for ; Fri, 19 Mar 2021 17:04:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=k+yspLm/RWGBF4nOoRv16D5B6QfCBOFG70DbofWSpA0=; b=qf4snRHsGDEmSs5oT/n5dgGI/RXLQKm695dg/7BFrXMirHTW7Ku/HleVvK06EKxNbZ eeQqJrE8Q4NwrsM1tneKTU0OIlBu10rvuP6E5tbB5mphGAdZirYyROqU14ky3hxlpo5S O96G+b1+vVu0X7zGyrvqkYSB4J/moiDUwTJVpx6AuaW5GzZ5J1m6RnyNlE0lKCYT0DYB 2kDFvJTgcfEVhlijegit52ThNXyO7Rdf6nNk0Fq+HdeOOcx0U4uS8lu3pot2S51p2exS sG0Qi9Ar7aUH9mfbUFJIcY4QT3k0IoeWmDl0yjPenXZSHGCSpiz0WIgpyG8HZxTtouJa Yk+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=k+yspLm/RWGBF4nOoRv16D5B6QfCBOFG70DbofWSpA0=; b=L+swBQWV72CWRFcKHIUEIJbBhBS2XuilyBvx94f/18o2eG0zJsjI9fLkwe0ako0/7e zVVNH4n+vwVRc8zx1qNxDbhiOPrJLSAkahXtNYUrcOCjco4RcAoDHCoaU24GnR+lqvf/ 2fUtsoNA/dQpUh2SAbKHh757CrtNJQjL9+ZbWi/xmwAGXBE4ubk8blnxtB6L+DY/jyTM 6iUsMTc1Xco8/SvpSuDzs2xHKaRCSJaBt5YMBszzP0Erui6Uyg5T799vBpWHn15mIbWl e6yyBOdLUIiBZ4hEjcQC+a5Yh0i/6RL7iDepduytu+QxIxkELXrOmQmEsxdJ6Dvo+RMB zDdA== X-Gm-Message-State: AOAM531EbmU/gmRcv2pzroMqLjfkz2kKyI+hFAUlnIimI+5p3Pny+LON GvaJWoqWMUBysh62fg/9TL1NriKaDT0= X-Google-Smtp-Source: ABdhPJzML3AOYoMrCCZGk4+SiVZ6cXkqU04zeV7uEyVOvVchSSkXoI2BZ1ggIjFyYVe9iXrLcjno5w== X-Received: by 2002:a05:600c:4f44:: with SMTP id m4mr5672465wmq.175.1616198640284; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id q9sm10019809wrp.79.2021.03.19.17.03.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:00 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:47 +0000 Subject: [PATCH v3 04/13] merge-ort: let renormalization change modify/delete into clean delete Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren When we have a modify/delete conflict, but the only change to the modification is e.g. change of line endings, then if renormalization is requested then we should be able to recognize such a case as a not-modified/delete and resolve the conflict automatically. This fixes t6418.10 under GIT_TEST_MERGE_ALGORITHM=ort. Signed-off-by: Elijah Newren --- merge-ort.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/merge-ort.c b/merge-ort.c index cdc1e2fe7a24..c7083e3769aa 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -2549,6 +2549,61 @@ static int string_list_df_name_compare(const char *one, const char *two) return onelen - twolen; } +static int read_oid_strbuf(struct merge_options *opt, + const struct object_id *oid, + struct strbuf *dst) +{ + void *buf; + enum object_type type; + unsigned long size; + buf = read_object_file(oid, &type, &size); + if (!buf) + return err(opt, _("cannot read object %s"), oid_to_hex(oid)); + if (type != OBJ_BLOB) { + free(buf); + return err(opt, _("object %s is not a blob"), oid_to_hex(oid)); + } + strbuf_attach(dst, buf, size, size + 1); + return 0; +} + +static int blob_unchanged(struct merge_options *opt, + const struct version_info *base, + const struct version_info *side, + const char *path) +{ + struct strbuf basebuf = STRBUF_INIT; + struct strbuf sidebuf = STRBUF_INIT; + int ret = 0; /* assume changed for safety */ + const struct index_state *idx = &opt->priv->attr_index; + + if (!idx->initialized) + initialize_attr_index(opt); + + if (base->mode != side->mode) + return 0; + if (oideq(&base->oid, &side->oid)) + return 1; + + if (read_oid_strbuf(opt, &base->oid, &basebuf) || + read_oid_strbuf(opt, &side->oid, &sidebuf)) + goto error_return; + /* + * Note: binary | is used so that both renormalizations are + * performed. Comparison can be skipped if both files are + * unchanged since their sha1s have already been compared. + */ + if (renormalize_buffer(idx, path, basebuf.buf, basebuf.len, &basebuf) | + renormalize_buffer(idx, path, sidebuf.buf, sidebuf.len, &sidebuf)) + ret = (basebuf.len == sidebuf.len && + !memcmp(basebuf.buf, sidebuf.buf, basebuf.len)); + +error_return: + strbuf_release(&basebuf); + strbuf_release(&sidebuf); + return ret; +} + struct directory_versions { /* * versions: list of (basename -> version_info) @@ -3136,8 +3191,13 @@ static void process_entry(struct merge_options *opt, modify_branch = (side == 1) ? opt->branch1 : opt->branch2; delete_branch = (side == 1) ? opt->branch2 : opt->branch1; - if (ci->path_conflict && - oideq(&ci->stages[0].oid, &ci->stages[side].oid)) { + if (opt->renormalize && + blob_unchanged(opt, &ci->stages[0], &ci->stages[side], + path)) { + ci->merged.is_null = 1; + ci->merged.clean = 1; + } else if (ci->path_conflict && + oideq(&ci->stages[0].oid, &ci->stages[side].oid)) { /* * This came from a rename/delete; no action to take, * but avoid printing "modify/delete" conflict notice From patchwork Sat Mar 20 00:03:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152119 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 836FAC433E1 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4675B61988 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229805AbhCTAEl (ORCPT ); Fri, 19 Mar 2021 20:04:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38322 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229646AbhCTAEC (ORCPT ); Fri, 19 Mar 2021 20:04:02 -0400 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00F62C061760 for ; Fri, 19 Mar 2021 17:04:02 -0700 (PDT) Received: by mail-wm1-x334.google.com with SMTP id f22-20020a7bc8d60000b029010c024a1407so8132801wml.2 for ; Fri, 19 Mar 2021 17:04:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=ftj6qMkNmrnsXmtUxcUDofo5ZMdWVt4dfoOIo49gQVo=; b=Db3C2AYS2hsGiLS0EefO6Emj/KkHkPWYoFJo6cvxgM4/D/ToH4cCaRWzEb2QwYKirm tqi7QLTwjzZ2sBPyK53Xrrkip4yAGxzp1Q0wcsPfCO+1xWGfY3vWJBU3xMYHuCff/hQO ZiXZl0RrUFl4HbZtP7oiZtvezimLVHVBHLVqqAekYE3IiUf+P0spxb8q8BFaZA0Pvbmb aUcHZvlrtRXdLMQ+jqr5p7NU66iOdSWfHZ+gipab+6xJmhMt4jz4F2OmpEtlywihrXq+ Fjt8Pmrvs7UfwwPiHtlL7fteI3qrowYLpnTtGm+yjpDjbPmVu3VSmOccNg66Akf2AML8 9ouA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=ftj6qMkNmrnsXmtUxcUDofo5ZMdWVt4dfoOIo49gQVo=; b=Y7+9YAnnAW2Or6epnblb82BmiqU9XrmUbOJt7eM4vvT9WyXE6uC/b9yvpjGIW9g6Z6 0fvRlxpjj+Lv9+8CUsMu19c+DYj3mig0xfzs12zTE6JaOJ2gThfWqKnSfD8eZ299XJ2b dGutEf7lq1V9lvYnsWC9ImmM6GXCt0jmwENhv/IRpapuSbeW9J8mk2Aases/y07KB2YP auZm+QtOehKezFEVrH8AucCL1OAcNsOwPohlihvbUcZWlXJgRQ5YE38O//gW/bul7zP2 bdrb8E2K7DSxAZPRkY4CcpziYtSHRok7DvPOS8Ix8A3XJ6E54FY0iE+g7Ce/IcsQGfnf LK1A== X-Gm-Message-State: AOAM533Qip7ASrxFy0juGY1XxfHhV/JWcR4DdOqrJVUzrTKrTjZG3Ykz 4UBBBuVFGhKOWQORmjHXtxrg8S3FcLg= X-Google-Smtp-Source: ABdhPJwSRTGzPg3UsvRTS1apLp0KFHlgICOmib+Oa/LHQYGfyyZIGpEzySrPAVu1xk2OfjBHgfr4yg== X-Received: by 2002:a1c:23c2:: with SMTP id j185mr5271897wmj.54.1616198640815; Fri, 19 Mar 2021 17:04:00 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id b17sm9869223wrt.17.2021.03.19.17.04.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:00 -0700 (PDT) Message-Id: <41fffcdd3b786c460c3a0652108212d8c361159f.1616198636.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:48 +0000 Subject: [PATCH v3 05/13] merge-ort: support subtree shifting Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren merge-recursive has some simple code to support subtree shifting; copy it over to merge-ort. This fixes t6409.12 under GIT_TEST_MERGE_ALGORITHM=ort. Signed-off-by: Elijah Newren --- merge-ort.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/merge-ort.c b/merge-ort.c index c7083e3769aa..c4fe234d8972 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -3551,6 +3551,23 @@ void merge_finalize(struct merge_options *opt, /*** Function Grouping: helper functions for merge_incore_*() ***/ +static struct tree *shift_tree_object(struct repository *repo, + struct tree *one, struct tree *two, + const char *subtree_shift) +{ + struct object_id shifted; + + if (!*subtree_shift) { + shift_tree(repo, &one->object.oid, &two->object.oid, &shifted, 0); + } else { + shift_tree_by(repo, &one->object.oid, &two->object.oid, &shifted, + subtree_shift); + } + if (oideq(&two->object.oid, &shifted)) + return two; + return lookup_tree(repo, &shifted); +} + static inline void set_commit_tree(struct commit *c, struct tree *t) { c->maybe_tree = t; @@ -3680,6 +3697,13 @@ static void merge_ort_nonrecursive_internal(struct merge_options *opt, { struct object_id working_tree_oid; + if (opt->subtree_shift) { + side2 = shift_tree_object(opt->repo, side1, side2, + opt->subtree_shift); + merge_base = shift_tree_object(opt->repo, side1, merge_base, + opt->subtree_shift); + } + trace2_region_enter("merge", "collect_merge_info", opt->repo); if (collect_merge_info(opt, merge_base, side1, side2) != 0) { /* From patchwork Sat Mar 20 00:03:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152131 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5FD4C433E4 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 75D606198D for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229817AbhCTAEm (ORCPT ); Fri, 19 Mar 2021 20:04:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229648AbhCTAEC (ORCPT ); Fri, 19 Mar 2021 20:04:02 -0400 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 980C5C061760 for ; Fri, 19 Mar 2021 17:04:02 -0700 (PDT) Received: by mail-wr1-x42e.google.com with SMTP id e9so10741197wrw.10 for ; Fri, 19 Mar 2021 17:04:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=XXkada0tjiFQqfS5wUUxv6rDq4t4jraSD+9f2/tJEHk=; b=I1uYj36ygVoeGoLxiyWLDBuK6QcAuwzvZk3PejbKI7/1cgQvp05WVFyZkZuPQm8c7q K6qSMjhm59fws14cOppQBHqh3qQNEBOpNBkul63AvZoUiVyfIdzbvRqqZu642xwBnq0v oamFaR+gvWwpTOk1piTLysR11dBu7jztzlPeMRAuW9rXlYYAtSX07vdetKhS7K2pSWYK 5TEtViLbbtSsCn79DJw0IKiivBvCovqWtFZBLareoT4LdjoigvBoDZkc/y1OOx8XImWK gkdG98Uu9+fn+fW2Zi0G5+kI8gLRZjcFlBpHTUIlXkhkUIGeXmochKaWDSk7k/Y4aJ1G 6TNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=XXkada0tjiFQqfS5wUUxv6rDq4t4jraSD+9f2/tJEHk=; b=IpNJ0KJwzc+fXmkWIlo7ep4vJwc/MR1oimXPAHMGyIAq6Vxa8xnrErb1Kiz/StTQVE NjOtZg45TVV2/QHjgLtJoCJApBrjwihLPqKYI3jen1QMQ+DFBElWfcCn0Wo5wIa8oZPm 9FQsPeRtQ4Hyn+z6L1+AbKCg35bbLj6cfJux8AfEKdzmYzbFpMPO64vUUh+H4OUNkCLn zI/GsmEOapG2UOplqam0FcFPCBove+phHj2vhs23M800AUrM8yRSC0U+XWMblyClZE+R hSh3uoSkcSdzrubVjMaEHQOMcO/22nk0BZcSMC94OWHS+fEyE6e0aZFFcIQb94YIPVMa lVCw== X-Gm-Message-State: AOAM533UMUHggInHp7Sv7ACZGK18BOv3hZZ7iRbWEXc222VO9KtKIyu/ qdjO7SfLdXOa1ZuCwIrC+KbAn82QFRE= X-Google-Smtp-Source: ABdhPJzQ4bpsnqk7Sb4bxkyW1IGXI65cIJEOMugwLm9HVNzDgFGUC86k49738XtrxVa6/eYK5Byrpg== X-Received: by 2002:adf:fb05:: with SMTP id c5mr7200274wrr.302.1616198641452; Fri, 19 Mar 2021 17:04:01 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id c8sm8044049wmb.34.2021.03.19.17.04.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:01 -0700 (PDT) Message-Id: <6aec1f499b8068329b81fb1221717c2ee336fd8d.1616198636.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:49 +0000 Subject: [PATCH v3 06/13] t6428: new test for SKIP_WORKTREE handling and conflicts Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren If there is a conflict during a merge for a SKIP_WORKTREE entry, we expect that file to be written to the working copy and have the SKIP_WORKTREE bit cleared in the index. If the user had manually created a file in the working tree despite SKIP_WORKTREE being set, we do not want to clobber their changes to that file, but want to move it out of the way. Add tests that check for these behaviors. Signed-off-by: Elijah Newren --- t/t6428-merge-conflicts-sparse.sh | 158 ++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100755 t/t6428-merge-conflicts-sparse.sh diff --git a/t/t6428-merge-conflicts-sparse.sh b/t/t6428-merge-conflicts-sparse.sh new file mode 100755 index 000000000000..1bb52ff6f38c --- /dev/null +++ b/t/t6428-merge-conflicts-sparse.sh @@ -0,0 +1,158 @@ +#!/bin/sh + +test_description="merge cases" + +# The setup for all of them, pictorially, is: +# +# A +# o +# / \ +# O o ? +# \ / +# o +# B +# +# To help make it easier to follow the flow of tests, they have been +# divided into sections and each test will start with a quick explanation +# of what commits O, A, and B contain. +# +# Notation: +# z/{b,c} means files z/b and z/c both exist +# x/d_1 means file x/d exists with content d1. (Purpose of the +# underscore notation is to differentiate different +# files that might be renamed into each other's paths.) + +. ./test-lib.sh +. "$TEST_DIRECTORY"/lib-merge.sh + + +# Testcase basic, conflicting changes in 'numerals' + +test_setup_numerals () { + test_create_repo numerals_$1 && + ( + cd numerals_$1 && + + >README && + test_write_lines I II III >numerals && + git add README numerals && + test_tick && + git commit -m "O" && + + git branch O && + git branch A && + git branch B && + + git checkout A && + test_write_lines I II III IIII >numerals && + git add numerals && + test_tick && + git commit -m "A" && + + git checkout B && + test_write_lines I II III IV >numerals && + git add numerals && + test_tick && + git commit -m "B" && + + cat <<-EOF >expected-index && + H README + M numerals + M numerals + M numerals + EOF + + cat <<-EOF >expected-merge + I + II + III + <<<<<<< HEAD + IIII + ======= + IV + >>>>>>> B^0 + EOF + + ) +} + +test_expect_merge_algorithm success failure 'conflicting entries written to worktree even if sparse' ' + test_setup_numerals plain && + ( + cd numerals_plain && + + git checkout A^0 && + + test_path_is_file README && + test_path_is_file numerals && + + git sparse-checkout init && + git sparse-checkout set README && + + test_path_is_file README && + test_path_is_missing numerals && + + test_must_fail git merge -s recursive B^0 && + + git ls-files -t >index_files && + test_cmp expected-index index_files && + + test_path_is_file README && + test_path_is_file numerals && + + test_cmp expected-merge numerals && + + # 4 other files: + # * expected-merge + # * expected-index + # * index_files + # * others + git ls-files -o >others && + test_line_count = 4 others + ) +' + +test_expect_merge_algorithm failure failure 'present-despite-SKIP_WORKTREE handled reasonably' ' + test_setup_numerals in_the_way && + ( + cd numerals_in_the_way && + + git checkout A^0 && + + test_path_is_file README && + test_path_is_file numerals && + + git sparse-checkout init && + git sparse-checkout set README && + + test_path_is_file README && + test_path_is_missing numerals && + + echo foobar >numerals && + + test_must_fail git merge -s recursive B^0 && + + git ls-files -t >index_files && + test_cmp expected-index index_files && + + test_path_is_file README && + test_path_is_file numerals && + + test_cmp expected-merge numerals && + + # There should still be a file with "foobar" in it + grep foobar * && + + # 5 other files: + # * expected-merge + # * expected-index + # * index_files + # * others + # * whatever name was given to the numerals file that had + # "foobar" in it + git ls-files -o >others && + test_line_count = 5 others + ) +' + +test_done From patchwork Sat Mar 20 00:03:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152123 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B5703C433E2 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5A8F061989 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229826AbhCTAEm (ORCPT ); Fri, 19 Mar 2021 20:04:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38328 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229649AbhCTAED (ORCPT ); Fri, 19 Mar 2021 20:04:03 -0400 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F010C061760 for ; Fri, 19 Mar 2021 17:04:03 -0700 (PDT) Received: by mail-wr1-x42b.google.com with SMTP id o16so10757416wrn.0 for ; Fri, 19 Mar 2021 17:04:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=eGphsfSLxSih+gC6ig10Nu03y71Itud2yHKKHLi8FMQ=; b=oK2oMPhF4lUk2MiE6WI1Xqp68DOB9x83n5DkehRaGImRUqOfthwsBKhl+sf3m/g9Kl QT8QGITFSQawXNJAyf9aP+vJUDHRynlb06GGC8sthP7qE8GyqTSON34IO/w2LMshIkUy K2Y+HqC//qwB90QBokOEK7Le51q+yBL1SIPwRyNIBxbeowZmL+by9CVEkKCCGJoJsOmR ge58LPw1OAlyRiBf/WTIUQgVFj9qpyiT2nqDbNcdO5Xw6EBVDqdCtHTl9MFEUBawat1v 4jzLdGbSx2BPXoMat669oItZIsWF+bv6TQOJFNO07CG/p/ggOc6NpdFopQttzbfFnT7X WEVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=eGphsfSLxSih+gC6ig10Nu03y71Itud2yHKKHLi8FMQ=; b=U8LQbL/5M2Dxj4vzMVrY1xC6iXQ/XiPcwIC3cAEr7MEO8Vw1oA2/PS/hGyPuyjAdLQ VZ6YqmxgIRZHV5Yu6w4+UWisNxie0/MPrUVIhlYs0j7Seiu4aPEhWp/F/7w9PURcaKxB J99HmEVK9YZvZS9FzwqlqzhrdWSIFd/EvUf92vmXiqaztKkQ7FatBl/nu7ebO/OGgR0e vDeb02bH0QAK4Rk25OPONNLiQnX0KZ0qq0820QqPyRSQqHqyfBRjuX2okM9j0yoOlUJ/ sx/uCL7YmjTfGWNCGh9IASQV/hh3DKu9TutyxAutSX12qbPte9hqyVTVpRgUT/81VFcF b2Iw== X-Gm-Message-State: AOAM53052F+eNuEbJS1OTC7Byg0VeNZ73CJCW/bkt4RjwA6QfvAnOleP R/xpoM0yewtMrLEJ3Uguoh5jocBoUlw= X-Google-Smtp-Source: ABdhPJy6wFcqYjq3kLHeJmkEnf9wj/Nhy+RA+rFATZH56pWd215n2kVh8/0/VbcC/+SbXZwbkAJdmA== X-Received: by 2002:a5d:6ca6:: with SMTP id a6mr6824005wra.179.1616198642026; Fri, 19 Mar 2021 17:04:02 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id j30sm10730663wrj.62.2021.03.19.17.04.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:01 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:50 +0000 Subject: [PATCH v3 07/13] merge-ort: implement CE_SKIP_WORKTREE handling with conflicted entries Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren When merge conflicts occur in paths removed by a sparse-checkout, we need to unsparsify those paths (clear the SKIP_WORKTREE bit), and write out the conflicted file to the working copy. In the very unlikely case that someone manually put a file into the working copy at the location of the SKIP_WORKTREE file, we need to avoid overwriting whatever edits they have made and move that file to a different location first. Signed-off-by: Elijah Newren --- merge-ort.c | 43 +++++++++++++++++++++---------- t/t6428-merge-conflicts-sparse.sh | 4 +-- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/merge-ort.c b/merge-ort.c index c4fe234d8972..303e89414274 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -3369,23 +3369,27 @@ static int checkout(struct merge_options *opt, return ret; } -static int record_conflicted_index_entries(struct merge_options *opt, - struct index_state *index, - struct strmap *paths, - struct strmap *conflicted) +static int record_conflicted_index_entries(struct merge_options *opt) { struct hashmap_iter iter; struct strmap_entry *e; + struct index_state *index = opt->repo->index; + struct checkout state = CHECKOUT_INIT; int errs = 0; int original_cache_nr; - if (strmap_empty(conflicted)) + if (strmap_empty(&opt->priv->conflicted)) return 0; + /* If any entries have skip_worktree set, we'll have to check 'em out */ + state.force = 1; + state.quiet = 1; + state.refresh_cache = 1; + state.istate = index; original_cache_nr = index->cache_nr; /* Put every entry from paths into plist, then sort */ - strmap_for_each_entry(conflicted, &iter, e) { + strmap_for_each_entry(&opt->priv->conflicted, &iter, e) { const char *path = e->key; struct conflict_info *ci = e->value; int pos; @@ -3426,9 +3430,23 @@ static int record_conflicted_index_entries(struct merge_options *opt, * the higher order stages. Thus, we need override * the CE_SKIP_WORKTREE bit and manually write those * files to the working disk here. - * - * TODO: Implement this CE_SKIP_WORKTREE fixup. */ + if (ce_skip_worktree(ce)) { + struct stat st; + + if (!lstat(path, &st)) { + char *new_name = unique_path(&opt->priv->paths, + path, + "cruft"); + + path_msg(opt, path, 1, + _("Note: %s not up to date and in way of checking out conflicted version; old copy renamed to %s"), + path, new_name); + errs |= rename(path, new_name); + free(new_name); + } + errs |= checkout_entry(ce, &state, NULL, NULL); + } /* * Mark this cache entry for removal and instead add @@ -3478,8 +3496,6 @@ void merge_switch_to_result(struct merge_options *opt, { assert(opt->priv == NULL); if (result->clean >= 0 && update_worktree_and_index) { - struct merge_options_internal *opti = result->priv; - trace2_region_enter("merge", "checkout", opt->repo); if (checkout(opt, head, result->tree)) { /* failure to function */ @@ -3489,13 +3505,14 @@ void merge_switch_to_result(struct merge_options *opt, trace2_region_leave("merge", "checkout", opt->repo); trace2_region_enter("merge", "record_conflicted", opt->repo); - if (record_conflicted_index_entries(opt, opt->repo->index, - &opti->paths, - &opti->conflicted)) { + opt->priv = result->priv; + if (record_conflicted_index_entries(opt)) { /* failure to function */ + opt->priv = NULL; result->clean = -1; return; } + opt->priv = NULL; trace2_region_leave("merge", "record_conflicted", opt->repo); } diff --git a/t/t6428-merge-conflicts-sparse.sh b/t/t6428-merge-conflicts-sparse.sh index 1bb52ff6f38c..7e8bf497f821 100755 --- a/t/t6428-merge-conflicts-sparse.sh +++ b/t/t6428-merge-conflicts-sparse.sh @@ -76,7 +76,7 @@ test_setup_numerals () { ) } -test_expect_merge_algorithm success failure 'conflicting entries written to worktree even if sparse' ' +test_expect_success 'conflicting entries written to worktree even if sparse' ' test_setup_numerals plain && ( cd numerals_plain && @@ -112,7 +112,7 @@ test_expect_merge_algorithm success failure 'conflicting entries written to work ) ' -test_expect_merge_algorithm failure failure 'present-despite-SKIP_WORKTREE handled reasonably' ' +test_expect_merge_algorithm failure success 'present-despite-SKIP_WORKTREE handled reasonably' ' test_setup_numerals in_the_way && ( cd numerals_in_the_way && From patchwork Sat Mar 20 00:03:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152133 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 362CAC433E8 for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1395061991 for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229844AbhCTAEn (ORCPT ); Fri, 19 Mar 2021 20:04:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229680AbhCTAEE (ORCPT ); Fri, 19 Mar 2021 20:04:04 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D9D32C061761 for ; Fri, 19 Mar 2021 17:04:03 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id k8so10733274wrc.3 for ; Fri, 19 Mar 2021 17:04:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=RjXqIGfs6xg6JMfPfkR6AO1ReuEMf1tdF6If1ZnSgZM=; b=R7mJs5a0OqDaxOX6HyKYOdUYSbUM2q/W4pgSKeRqmOn/mSi5BI9MdTGvrNljT0Rgwg 8Y9YUw7j9FCnR2D7fhodCaDU2UCJIXUwKlQgbqqYICzj30qHyUtGcyfKt1EHXHwU0OLh 6S+LSQOdsVkWwM9wVkPfHNO3t3dB/vFdVEV3I6igtYxGlQ0yYhwKPtR+TkNvcMSGCEzZ w3CSr8CiUwJEaHIi6WLPx2wPWDk22O4F4WUR6Yw+okSeKe3qGBTnSog6TFGW3YhqP9kq GdwtXK4MrTnmZGf43jG9BsbGsxBUITifLVQSpwv05Lc3cecIlHpRGAf2+II4NxAlOYpt frzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=RjXqIGfs6xg6JMfPfkR6AO1ReuEMf1tdF6If1ZnSgZM=; b=niJAWLPdHu4MQOCY5rAg1ejkWfZeMg+iCKSiY8066zm3iSnr/zyEjBANZWGo3QpG4p L0/bFZuQqkKXlmdW3Ib5qJvmXUyftFFEX+ZQPwmyri9KBWSsU+cEJlJKEgHrPAmVvmT3 TS0SL2LbleiW5PtMp0COFt0R8X7AxM5XQ9NHC6oCfnrYpvj48nwp8ZRFusjHgqnZ6d3I 3Tfz37hWXNEyCnPBceyJvnDwO5hIAq9uhfM8ywvfWmYFovYYX/EOLNY40pPtxyRqiuCj mB2EcuHlbIN2wgdrltaHtwwxE5s3zDzN/fFd+G34AciErY+zlEtT8qiNU0ircNcbeFvC BOVQ== X-Gm-Message-State: AOAM530/tIDZeoYrt3h5RPGqktHiT28jVFkyEJ3BK8ttTxg1e6JfRx/6 c7xXKsX03iW8GCPEFEC2VHOy53EMZzo= X-Google-Smtp-Source: ABdhPJxGhK1Lrircu2+YerirUIFU5hV9p85ywTkfNK+ySkJpSkifV5xZLfBUppQ0i9zH6qbTMWgUxg== X-Received: by 2002:adf:f843:: with SMTP id d3mr6852521wrq.55.1616198642726; Fri, 19 Mar 2021 17:04:02 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id f4sm8783214wrz.4.2021.03.19.17.04.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:02 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:51 +0000 Subject: [PATCH v3 08/13] t: mark several submodule merging tests as fixed under merge-ort Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren merge-ort handles submodules (and directory/file conflicts in general) differently than merge-recursive does; it basically puts all the special handling for different filetypes into one place in the codebase instead of needing special handling for different filetypes in many different code paths. This one code path in merge-ort could perhaps use some work still (there are still test_expect_failure cases in the testsuite), but it passes all the tests that merge-recursive does as well as 12 additional ones that merge-recursive fails. Mark those 12 tests as test_expect_success under merge-ort. Signed-off-by: Elijah Newren --- t/t3512-cherry-pick-submodule.sh | 7 +++++-- t/t3513-revert-submodule.sh | 5 ++++- t/t5572-pull-submodule.sh | 7 +++++-- t/t6437-submodule-merge.sh | 5 +++-- t/t6438-submodule-directory-file-conflicts.sh | 7 +++++-- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/t/t3512-cherry-pick-submodule.sh b/t/t3512-cherry-pick-submodule.sh index 822f2d4bfbd5..c657840db33b 100755 --- a/t/t3512-cherry-pick-submodule.sh +++ b/t/t3512-cherry-pick-submodule.sh @@ -8,8 +8,11 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME . ./test-lib.sh . "$TEST_DIRECTORY"/lib-submodule-update.sh -KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 -KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 +if test "$GIT_TEST_MERGE_ALGORITHM" != ort +then + KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 + KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 +fi test_submodule_switch "cherry-pick" test_expect_success 'unrelated submodule/file conflict is ignored' ' diff --git a/t/t3513-revert-submodule.sh b/t/t3513-revert-submodule.sh index a759f12cbb1d..74cd96e58223 100755 --- a/t/t3513-revert-submodule.sh +++ b/t/t3513-revert-submodule.sh @@ -30,7 +30,10 @@ git_revert () { git revert HEAD } -KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 +if test "$GIT_TEST_MERGE_ALGORITHM" != ort +then + KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 +fi test_submodule_switch_func "git_revert" test_done diff --git a/t/t5572-pull-submodule.sh b/t/t5572-pull-submodule.sh index 29537f4798ef..4f92a116e1f0 100755 --- a/t/t5572-pull-submodule.sh +++ b/t/t5572-pull-submodule.sh @@ -42,8 +42,11 @@ git_pull_noff () { $2 git pull --no-ff } -KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 -KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 +if test "$GIT_TEST_MERGE_ALGORITHM" != ort +then + KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 + KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 +fi test_submodule_switch_func "git_pull_noff" test_expect_success 'pull --recurse-submodule setup' ' diff --git a/t/t6437-submodule-merge.sh b/t/t6437-submodule-merge.sh index 0f92bcf326c8..e5e89c2045e7 100755 --- a/t/t6437-submodule-merge.sh +++ b/t/t6437-submodule-merge.sh @@ -6,6 +6,7 @@ GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-merge.sh # # history @@ -328,7 +329,7 @@ test_expect_success 'setup file/submodule conflict' ' ) ' -test_expect_failure 'file/submodule conflict' ' +test_expect_merge_algorithm failure success 'file/submodule conflict' ' test_when_finished "git -C file-submodule reset --hard" && ( cd file-submodule && @@ -437,7 +438,7 @@ test_expect_failure 'directory/submodule conflict; keep submodule clean' ' ) ' -test_expect_failure !FAIL_PREREQS 'directory/submodule conflict; should not treat submodule files as untracked or in the way' ' +test_expect_merge_algorithm failure success !FAIL_PREREQS 'directory/submodule conflict; should not treat submodule files as untracked or in the way' ' test_when_finished "git -C directory-submodule/path reset --hard" && test_when_finished "git -C directory-submodule reset --hard" && ( diff --git a/t/t6438-submodule-directory-file-conflicts.sh b/t/t6438-submodule-directory-file-conflicts.sh index 04bf4be7d792..8df67a0ef99d 100755 --- a/t/t6438-submodule-directory-file-conflicts.sh +++ b/t/t6438-submodule-directory-file-conflicts.sh @@ -12,8 +12,11 @@ test_submodule_switch "merge --ff" test_submodule_switch "merge --ff-only" -KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 -KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 +if test "$GIT_TEST_MERGE_ALGORITHM" != ort +then + KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 + KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 +fi test_submodule_switch "merge --no-ff" test_done From patchwork Sat Mar 20 00:03:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152125 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED443C433E6 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CADBA61953 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229841AbhCTAEm (ORCPT ); Fri, 19 Mar 2021 20:04:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229708AbhCTAEE (ORCPT ); Fri, 19 Mar 2021 20:04:04 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7AEDCC061760 for ; Fri, 19 Mar 2021 17:04:04 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id k8so10733286wrc.3 for ; Fri, 19 Mar 2021 17:04:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=YnhiuQV/2Wc+3z93qURlauJEUrKVi/jU9n84Rplg354=; b=paUeqpjiHgo4LP4Z0WXf5rebstlyk9U6brawL7J8oOWqjSy97Xeo8p44xxJz13gn7u JVMQPFM3jgYb2QH8kM5fvPhKUM/OVCJGAyr7JCHGUqJenRk9pARctLg83hO/823TIU5s 3Wqa6WmN6X+WPieLTvBQ7dBSHESRwTgtl7XN+uCvqEeSXvtsVTPJfBUB1z7I2XPb5+Xz ysf9F1Lp/feQe74KRg6Yoq4RxZ1s7MnSCmi40QFNWeGu2LLT4MJEFJGtcXgx6fhb+fdT CsU9FADv0F4tDeIlfSUa7uVQZqKUxPS9qv1t3fA0pRpem4q3nADxRb/Y+qtw2SLgQf1g jGhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=YnhiuQV/2Wc+3z93qURlauJEUrKVi/jU9n84Rplg354=; b=aKhevw5gIETGEibi4s+uCfYmA1bg0CZoAZkz9AXF0hAYLKqY6cjy4FrFtfAJ1LwoVM fkPq/PQU4OS/nZ75eRzx7epYZ4WjCljqck5MDzfZ5DKHhHH4mi9k4I6b4JkksoymVZZq UxeNTfOBNusTMBopY0TdI7ySsljZ+SaBjzaJO2UfS/bS38dHfR6EO1KwEYjkIygQZ39M vbpBt6FSuE4XZq4fLqmXjj20LG8sA/1X2BmwCNta9pPjcKxaIsyOCjIMhfyyF7eHQ8gq UZOs22DB7UTfEqZRaQd+rDT2QDsJ2U0v2mMXlKUC0otYU6RS/1ljIwpXvfrjL53B/kkJ 3acg== X-Gm-Message-State: AOAM532sHlv/G0BcnCSBTwVS5PVT02r85Dx0EOg78pz+RAnccuYPR3sn qNAg3KbaNV1dA3+2a6lY4EcgF/i+rrg= X-Google-Smtp-Source: ABdhPJzPg20V7QmoGvsyWHq2BVSIAnkyCxNBRk7yXRKt26HOH1oeFBRllo10G2Ovr+O1gcwtqoHuNw== X-Received: by 2002:adf:e548:: with SMTP id z8mr7134869wrm.246.1616198643274; Fri, 19 Mar 2021 17:04:03 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id a14sm9681857wrn.5.2021.03.19.17.04.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:02 -0700 (PDT) Message-Id: <4a79e61346919291f49885298da4b8c714ee00ff.1616198636.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:52 +0000 Subject: [PATCH v3 09/13] merge-ort: write $GIT_DIR/AUTO_MERGE whenever we hit a conflict Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren There are a variety of questions users might ask while resolving conflicts: * What changes have been made since the previous (first) parent? * What changes are staged? * What is still unstaged? (or what is still conflicted?) * What changes did I make to resolve conflicts so far? The first three of these have simple answers: * git diff HEAD * git diff --cached * git diff There was no way to answer the final question previously. Adding one is trivial in merge-ort, since it works by creating a tree representing what should be written to the working copy complete with conflict markers. Simply write that tree to .git/AUTO_MERGE, allowing users to answer the fourth question with * git diff AUTO_MERGE I avoided using a name like "MERGE_AUTO", because that would be merge-specific (much like MERGE_HEAD, REBASE_HEAD, REVERT_HEAD, CHERRY_PICK_HEAD) and I wanted a name that didn't change depending on which type of operation the merge was part of. Ensure that paths which clean out other temporary operation-specific files (e.g. CHERRY_PICK_HEAD, MERGE_MSG, rebase-merge/ state directory) also clean out this AUTO_MERGE file. Signed-off-by: Elijah Newren --- branch.c | 1 + builtin/rebase.c | 1 + merge-ort.c | 10 ++++++++++ path.c | 1 + path.h | 2 ++ sequencer.c | 5 +++++ 6 files changed, 20 insertions(+) diff --git a/branch.c b/branch.c index 9c9dae1eae32..b71a2de29dbe 100644 --- a/branch.c +++ b/branch.c @@ -344,6 +344,7 @@ void remove_merge_branch_state(struct repository *r) unlink(git_path_merge_rr(r)); unlink(git_path_merge_msg(r)); unlink(git_path_merge_mode(r)); + unlink(git_path_auto_merge(r)); save_autostash(git_path_merge_autostash(r)); } diff --git a/builtin/rebase.c b/builtin/rebase.c index 840dbd7eb777..6c252d62758c 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -737,6 +737,7 @@ static int finish_rebase(struct rebase_options *opts) int ret = 0; delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF); + unlink(git_path_auto_merge(the_repository)); apply_autostash(state_dir_path("autostash", opts)); close_object_store(the_repository->objects); /* diff --git a/merge-ort.c b/merge-ort.c index 303e89414274..e8f1a435f99a 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -3496,6 +3496,9 @@ void merge_switch_to_result(struct merge_options *opt, { assert(opt->priv == NULL); if (result->clean >= 0 && update_worktree_and_index) { + const char *filename; + FILE *fp; + trace2_region_enter("merge", "checkout", opt->repo); if (checkout(opt, head, result->tree)) { /* failure to function */ @@ -3514,6 +3517,13 @@ void merge_switch_to_result(struct merge_options *opt, } opt->priv = NULL; trace2_region_leave("merge", "record_conflicted", opt->repo); + + trace2_region_enter("merge", "write_auto_merge", opt->repo); + filename = git_path_auto_merge(opt->repo); + fp = xfopen(filename, "w"); + fprintf(fp, "%s\n", oid_to_hex(&result->tree->object.oid)); + fclose(fp); + trace2_region_leave("merge", "write_auto_merge", opt->repo); } if (display_update_msgs) { diff --git a/path.c b/path.c index 7b385e5eb282..9e883eb52446 100644 --- a/path.c +++ b/path.c @@ -1534,5 +1534,6 @@ REPO_GIT_PATH_FUNC(merge_rr, "MERGE_RR") REPO_GIT_PATH_FUNC(merge_mode, "MERGE_MODE") REPO_GIT_PATH_FUNC(merge_head, "MERGE_HEAD") REPO_GIT_PATH_FUNC(merge_autostash, "MERGE_AUTOSTASH") +REPO_GIT_PATH_FUNC(auto_merge, "AUTO_MERGE") REPO_GIT_PATH_FUNC(fetch_head, "FETCH_HEAD") REPO_GIT_PATH_FUNC(shallow, "shallow") diff --git a/path.h b/path.h index e7e77da6aaa5..251c78d98000 100644 --- a/path.h +++ b/path.h @@ -176,6 +176,7 @@ struct path_cache { const char *merge_mode; const char *merge_head; const char *merge_autostash; + const char *auto_merge; const char *fetch_head; const char *shallow; }; @@ -191,6 +192,7 @@ const char *git_path_merge_rr(struct repository *r); const char *git_path_merge_mode(struct repository *r); const char *git_path_merge_head(struct repository *r); const char *git_path_merge_autostash(struct repository *r); +const char *git_path_auto_merge(struct repository *r); const char *git_path_fetch_head(struct repository *r); const char *git_path_shallow(struct repository *r); diff --git a/sequencer.c b/sequencer.c index d2332d3e1787..472cdd8c620d 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2096,6 +2096,7 @@ static int do_pick_commit(struct repository *r, refs_delete_ref(get_main_ref_store(r), "", "CHERRY_PICK_HEAD", NULL, 0); unlink(git_path_merge_msg(r)); + unlink(git_path_auto_merge(r)); fprintf(stderr, _("dropping %s %s -- patch contents already upstream\n"), oid_to_hex(&commit->object.oid), msg.subject); @@ -2451,6 +2452,8 @@ void sequencer_post_commit_cleanup(struct repository *r, int verbose) need_cleanup = 1; } + unlink(git_path_auto_merge(r)); + if (!need_cleanup) return; @@ -4111,6 +4114,7 @@ static int pick_commits(struct repository *r, unlink(rebase_path_stopped_sha()); unlink(rebase_path_amend()); unlink(git_path_merge_head(r)); + unlink(git_path_auto_merge(r)); delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF); if (item->command == TODO_BREAK) { @@ -4505,6 +4509,7 @@ static int commit_staged_changes(struct repository *r, return error(_("could not commit staged changes.")); unlink(rebase_path_amend()); unlink(git_path_merge_head(r)); + unlink(git_path_auto_merge(r)); if (final_fixup) { unlink(rebase_path_fixup_msg()); unlink(rebase_path_squash_msg()); From patchwork Sat Mar 20 00:03:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152139 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70F39C433EA for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4EB1961991 for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229870AbhCTAEp (ORCPT ); Fri, 19 Mar 2021 20:04:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38342 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229710AbhCTAEF (ORCPT ); Fri, 19 Mar 2021 20:04:05 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 10164C061761 for ; Fri, 19 Mar 2021 17:04:05 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id g20so6269068wmk.3 for ; Fri, 19 Mar 2021 17:04:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=BUOkwACFk1ATS5lxNPwdjLfxguOc0uEUsQow7Zl+Re4=; b=N0M/CmxsSKhzxvCEHbj3l18KZw+JbuymNG80MzTlYQathgpixYDywDNMG2B7nsG/Fo Gm2LOe3i+/hVSf0MPKBscbHk9o77g61t7IYu7wcuo4SJnncaI13oS58vOivFY4c4ux7O DKvEGueR2H8ckb8ghYBC3NRIdfofXhQ7Q0tJcd0UUeAD+FoGMvTqoPJ9pYzkBjuZHrWz GHt1e0udR8din5WZTYkkRzXb/vIZuggno09x0hkFFz/1pTgMJt/4E320ITggl6X/6vop T/PK6uXnJMExaTKTDvgxicLKLOp9bAL17eKZh0Gj7gjf0cDKSJd05ynJUkG3GUTAAIRF 4Taw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=BUOkwACFk1ATS5lxNPwdjLfxguOc0uEUsQow7Zl+Re4=; b=Si69SGXAg6Yr3NtL/ng2ahqKObI978x7PSzEj0GYbNpSgvhxjdBb3GFsufmXK6DGa8 3695spE2hCfTE0CDkWzWF5UghUuHg4LbiM8qsaioiPwNieAo+R5x5eiID/+DHItkHuO3 AFLd6eynKTDqmkNUo7UeHtoEtFDOIUcUMraPu6zzVnS3T2lb7CZU8PbwlAzB0GrosuqV kfwzZ00kkbobTYTKHXjFu0fg1oZSyWFBEX+OVVf+b6gJYaq4urSC9WsxszjPqw1czBO9 vmf63nHYvJT1DqmSqi6UqEx4/dBZdYFNwxegNQPmLQjfB8ZlOCnLFwfnDBekcS/9k9gi KMTg== X-Gm-Message-State: AOAM532I3pSHgk5iEsmdEjf7JGh3Z5veh+gtZQx2TBv/BQfiWswU2Wv1 IUs/VgcamFKX7oGvXdnj7U8zvZp9LHQ= X-Google-Smtp-Source: ABdhPJx1C5bsZiXajBJq8dFNW0KMSq1OgCCivmXk+OsCkIibZMsA1gUfiyczOodfYAhHPK5ia5axaA== X-Received: by 2002:a1c:1d14:: with SMTP id d20mr5730776wmd.36.1616198643852; Fri, 19 Mar 2021 17:04:03 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id u20sm11054789wru.6.2021.03.19.17.04.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:03 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:53 +0000 Subject: [PATCH v3 10/13] merge-recursive: add a bunch of FIXME comments documenting known bugs Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren The plan is to just delete merge-recursive, but not until everyone is comfortable with merge-ort as a replacement. Given that I haven't switched all callers of merge-recursive over yet (e.g. git-am still uses merge-recursive), maybe there's some value documenting known bugs in the algorithm in case we end up keeping it or someone wants to dig it up in the future. Signed-off-by: Elijah Newren --- merge-recursive.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/merge-recursive.c b/merge-recursive.c index b052974f191c..99a197597db5 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1075,6 +1075,11 @@ static int merge_3way(struct merge_options *opt, read_mmblob(&src1, &a->oid); read_mmblob(&src2, &b->oid); + /* + * FIXME: Using a->path for normalization rules in ll_merge could be + * wrong if we renamed from a->path to b->path. We should use the + * target path for where the file will be written. + */ merge_status = ll_merge(result_buf, a->path, &orig, base, &src1, name1, &src2, name2, opt->repo->index, &ll_opts); @@ -1154,6 +1159,8 @@ static void print_commit(struct commit *commit) struct strbuf sb = STRBUF_INIT; struct pretty_print_context ctx = {0}; ctx.date_mode.type = DATE_NORMAL; + /* FIXME: Merge this with output_commit_title() */ + assert(!merge_remote_util(commit)); format_commit_message(commit, " %h: %m %s", &sb, &ctx); fprintf(stderr, "%s\n", sb.buf); strbuf_release(&sb); @@ -1177,6 +1184,11 @@ static int merge_submodule(struct merge_options *opt, int search = !opt->priv->call_depth; /* store a in result in case we fail */ + /* FIXME: This is the WRONG resolution for the recursive case when + * we need to be careful to avoid accidentally matching either side. + * Should probably use o instead there, much like we do for merging + * binaries. + */ oidcpy(result, a); /* we can not handle deletion conflicts */ @@ -1301,6 +1313,13 @@ static int merge_mode_and_contents(struct merge_options *opt, if ((S_IFMT & a->mode) != (S_IFMT & b->mode)) { result->clean = 0; + /* + * FIXME: This is a bad resolution for recursive case; for + * the recursive case we want something that is unlikely to + * accidentally match either side. Also, while it makes + * sense to prefer regular files over symlinks, it doesn't + * make sense to prefer regular files over submodules. + */ if (S_ISREG(a->mode)) { result->blob.mode = a->mode; oidcpy(&result->blob.oid, &a->oid); @@ -1349,6 +1368,7 @@ static int merge_mode_and_contents(struct merge_options *opt, free(result_buf.ptr); if (ret) return ret; + /* FIXME: bug, what if modes didn't match? */ result->clean = (merge_status == 0); } else if (S_ISGITLINK(a->mode)) { result->clean = merge_submodule(opt, &result->blob.oid, @@ -2664,6 +2684,14 @@ static int process_renames(struct merge_options *opt, struct string_list b_by_dst = STRING_LIST_INIT_NODUP; const struct rename *sre; + /* + * FIXME: As string-list.h notes, it's O(n^2) to build a sorted + * string_list one-by-one, but O(n log n) to build it unsorted and + * then sort it. Note that as we build the list, we do not need to + * check if the existing destination path is already in the list, + * because the structure of diffcore_rename guarantees we won't + * have duplicates. + */ for (i = 0; i < a_renames->nr; i++) { sre = a_renames->items[i].util; string_list_insert(&a_by_dst, sre->pair->two->path)->util @@ -3602,6 +3630,15 @@ static int merge_recursive_internal(struct merge_options *opt, return err(opt, _("merge returned no commit")); } + /* + * FIXME: Since merge_recursive_internal() is only ever called by + * places that ensure the index is loaded first + * (e.g. builtin/merge.c, rebase/sequencer, etc.), in the common + * case where the merge base was unique that means when we get here + * we immediately discard the index and re-read it, which is a + * complete waste of time. We should only be discarding and + * re-reading if we were forced to recurse. + */ discard_index(opt->repo->index); if (!opt->priv->call_depth) repo_read_index(opt->repo); From patchwork Sat Mar 20 00:03:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152129 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10975C433E5 for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E38ED61986 for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229854AbhCTAEo (ORCPT ); Fri, 19 Mar 2021 20:04:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229723AbhCTAEG (ORCPT ); Fri, 19 Mar 2021 20:04:06 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81DE5C061762 for ; Fri, 19 Mar 2021 17:04:05 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id j20-20020a05600c1914b029010f31e15a7fso102222wmq.1 for ; Fri, 19 Mar 2021 17:04:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=vNEoqUX4A42360elOoDcA6cH0Od98QxzvF2EIqCVNu4=; b=IB1mRrJo7u6rMsbhRyzJApoc9prOSUMdzyfCun/KQ+e5DqULYuzeTYgEKHvObKffki b4eO1Y78dG+EhcAS4RMJGyCmwRgwfERbtN7h/ZyQwyKmmsBNlUh4agA0MvmTg2fSsISK FXs0Y1cULL4GZH4FrfXHwHXYAA1uIBDg3neDcG+cblt0xLxOwFORzhqDE9nQlHYittde SUltb0OksGca0bFjbyJwFck36EoML+Na9nDseVFgm4jfuSw+9yTEB1iujemNVJAD5n7Y lE1i5QIavTbQTeZL0Z80upSgL6nIFLosthC1p2ny3flEiPdtWq3XMtdHLgEDFG6tJhGg HzXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=vNEoqUX4A42360elOoDcA6cH0Od98QxzvF2EIqCVNu4=; b=NHrMpKNcAcUyw5/hT3gcdiUBwSbhOTzviuhqCvjEMCrMruTbY67D2a/OYvbvQuj3VX YHBYIqWcbKN8iXg6LcwYs+D/vcngdmepACfjBA4pxDsDrbE869JGHzOgZjcp4vAIi+Mp +bplptI6IlpG9uifcPcYthV18WmHZebVV/jScqnBA0gwKB+rrJpULm4j0yiSR+IeCk0y aZ8aq/u0wdSBfxs80P3EyxxvOd9b5Cce0geFyEr0ZFfvryzzxNeYcQySzyEW3PBS4U0c lP7tZFeMAzPu5NASWPjXtdQ4KYvdK/mnVLMbk7eLrYvF6c3eUHxiv0S4BTFJEBrN81iO NqKw== X-Gm-Message-State: AOAM530m9xRnS67VS8FGBcWGmTeuRo2vay2bNOnFWzP3v9PGRZKV7Ayi OnnP4nVLmQokLqqHhdiKOnQb2N/Jtzk= X-Google-Smtp-Source: ABdhPJylJMN8IRWuFNxSmnpNwOk1ts2LQIedzP37/YbapJsiDpR2wUB1WP7+o17u7GGGy6d6mzNPNg== X-Received: by 2002:a05:600c:4f14:: with SMTP id l20mr5592961wmq.71.1616198644365; Fri, 19 Mar 2021 17:04:04 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id h8sm9873457wrt.94.2021.03.19.17.04.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:04 -0700 (PDT) Message-Id: <6bda855f29806475be14d133e185fec222c8b0be.1616198636.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:54 +0000 Subject: [PATCH v3 11/13] Revert "merge-ort: ignore the directory rename split conflict for now" Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren This reverts commit 5ced7c3da009090c5a926e3123a71314c7f28d42, which was put in place as a temporary measure to avoid optimizations unstably erroring out on no destination having a majority of the necessary renames for directories that had no new files and thus no need for directory rename detection anyway. Now that optimizations are in place to prevent us from trying to compute directory rename count computations for directories that do not need it, we can undo this temporary measure. Signed-off-by: Elijah Newren --- merge-ort.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/merge-ort.c b/merge-ort.c index e8f1a435f99a..8258d3fd621e 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -1636,18 +1636,7 @@ static void get_provisional_directory_renames(struct merge_options *opt, "no destination getting a majority of the " "files."), source_dir); - /* - * We should mark this as unclean IF something attempts - * to use this rename. We do not yet have the logic - * in place to detect if this directory rename is being - * used, and optimizations that reduce the number of - * renames cause this to falsely trigger. For now, - * just disable it, causing t6423 testcase 2a to break. - * We'll later fix the detection, and when we do we - * will re-enable setting *clean to 0 (and thereby fix - * t6423 testcase 2a). - */ - /* *clean = 0; */ + *clean = 0; } else { strmap_put(&renames->dir_renames[side], source_dir, (void*)best); From patchwork Sat Mar 20 00:03:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152135 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1BAE9C433E9 for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 002536198B for ; Sat, 20 Mar 2021 00:05:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229846AbhCTAEo (ORCPT ); Fri, 19 Mar 2021 20:04:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229747AbhCTAEG (ORCPT ); Fri, 19 Mar 2021 20:04:06 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 168B7C061760 for ; Fri, 19 Mar 2021 17:04:06 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id o16so10757486wrn.0 for ; Fri, 19 Mar 2021 17:04:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=X/O9ei5Y/8+fu/a0CsKzzM5LD1f+vsoxe0VE60ZU1dc=; b=idSLknFXTS1XoloM+M4ylLBzOV4eYmE8W972k0jwtXpoykbg2bs9XO+zdvl3Ui3P/p +kfSeD9TQB2FV3COL59i98yWsuTqUDwX1l4WoXvW61CMmiqODH3YLp7CL4yojyWRTFOT fneDAI0NgV7pTEnKJ7V7p7v0gbqxt+DFpz3hcutoJOpDHmpBMR5AC+chNBNKi8MLQSNh MfpWDI9V8LfC4vo3owOqwsCuYefhL1wpSkk1huAXmUxq2B0/sajqHZdyYdYEbP03mfsS u6cb/lNusD6Z527F5lKtCS9kOaElodmm7cAnuCjbrlN6w41Qm/wiskcoXsqRutBNsyXJ Grpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=X/O9ei5Y/8+fu/a0CsKzzM5LD1f+vsoxe0VE60ZU1dc=; b=f/N1JiNY/G6NH/vzLaJ3aQQj/MpXBA39jgJ1MmJ2JPRppqAu+mWSYE4BrcAj1DhuJ5 6RtoMZ89pBdtpeDyqFS7ZRJvRXBAq7pakth+CfpTi8yS4yGvcfn5bb61FRs1cbH4pS9L ypmnCV4C9XUGuPu6D+cuYAVrqiP+zTKde12KAARotBvxi4DMqI6mYtn222qz5MpPJk4V g2qlilR7+8A8IwjKeefue8LAEI+LpAQunzcT686KTSUTit+Z28M5QV+l3UJ7jl9pCdN5 zSAkAOsWGRzjPxfA0qJcwRlVL/zP7PuQKkBZwUPExUl2Yg2+hv0S9vLy7Wrm/QPbSQ78 3E/w== X-Gm-Message-State: AOAM5327ilr9b3elEl/MGn73F+CjACMCr8JnLUM37vi+FOj/oZO+i7/K 0tjI67333CRWuvJ9XlFzvOQqDXhJGyc= X-Google-Smtp-Source: ABdhPJwDGdUbs6509Xn6gE7FqczPDXPKZerZVagv3MNFQr9kfBnYANJfkAwOdGJRhdZVrvIW1UEAjw== X-Received: by 2002:a5d:65cd:: with SMTP id e13mr7079514wrw.334.1616198644874; Fri, 19 Mar 2021 17:04:04 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id h8sm9873466wrt.94.2021.03.19.17.04.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:04 -0700 (PDT) Message-Id: <1c6361c9b88ac5f970054989bae0845ef3b6baee.1616198636.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:55 +0000 Subject: [PATCH v3 12/13] t6423: mark remaining expected failure under merge-ort as such Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren When we started on merge-ort, thousands of tests failed when run with the GIT_TEST_MERGE_ALGORITHM=ort flag; with so many, it didn't make sense to flip all their test expectations. The ones in t6409, t6418, and the submodule tests are being handled by an independent in-flight topic ("Complete merge-ort implemenation...almost"). The ones in t6423 were left out of the other series because other ongoing series that this commit depends upon were addressing those. Now that we only have one remaining test failure in t6423, let's mark it as such. This remaining test will be fixed by a future optimization series, but since merge-recursive doesn't pass this test either, passing it is not necessary for declaring merge-ort ready for general use. Signed-off-by: Elijah Newren --- t/t6423-merge-rename-directories.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/t6423-merge-rename-directories.sh b/t/t6423-merge-rename-directories.sh index 4c568050dd27..4c3d0b95dc5c 100755 --- a/t/t6423-merge-rename-directories.sh +++ b/t/t6423-merge-rename-directories.sh @@ -4797,7 +4797,7 @@ test_setup_12f () { ) } -test_expect_merge_algorithm failure success '12f: Trivial directory resolve, caching, all kinds of fun' ' +test_expect_merge_algorithm failure failure '12f: Trivial directory resolve, caching, all kinds of fun' ' test_setup_12f && ( cd 12f && From patchwork Sat Mar 20 00:03:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 12152137 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5C679C433EB for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2A3D26198B for ; Sat, 20 Mar 2021 00:05:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229873AbhCTAEp (ORCPT ); Fri, 19 Mar 2021 20:04:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229751AbhCTAEH (ORCPT ); Fri, 19 Mar 2021 20:04:07 -0400 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A39FEC061761 for ; Fri, 19 Mar 2021 17:04:06 -0700 (PDT) Received: by mail-wr1-x42f.google.com with SMTP id e9so10741297wrw.10 for ; Fri, 19 Mar 2021 17:04:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=wH3Tr51rGAAE+4nCUAfXiu1KdqwsDLPXqJ0pU11I4ks=; b=S725j1xGqs1dbSHypayRqw96KQVEcOY8/sAli66dsSG7XU4UgqlYay07SRz0BdjQhr rahEvusKhzuxCB1y5D521kNCgVBpAbdBNgenySxYYAfBsEIIwp77hSjSKiH90wC5sOc4 43GjwFhO6n1z+qhplehcIqLYSMDCdS/ptQEyoL+S4NOo1eMN6NgLzlTEfSDH/FArkNyO fYmQeZiMcLswoKw346o8P0NjbXzgAxKJgDBiawdMier2ENvXY/60+vKdicetbS616QzF 7Ul8J/EQRaaZwYTGfCQklAua23ob5g1lWKon0Qw/XOmrqqbN41qDpr+hcTUGF+fLrscb CtRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=wH3Tr51rGAAE+4nCUAfXiu1KdqwsDLPXqJ0pU11I4ks=; b=GhQMD6y+cje8sBU360qpV7zdZ+u997C71/rMk9TDcMd7JH4Sx+b348ONv5Pxkm7+tX vXPXV2rrzVwGwxeFPbmxM6znnIVWa/0cjdQUxMLaxhOsubTiMXa1YHl1pvJ6j5gq9Bnb +TBu90s1D+FxYBTsO2fcvV50v/hwU3gu/0C4ZUduEU6iwcTvFwnnc/WpcxmbjxmBRFTC JBMd7o3pC/LOCXrQzo9r9OISCDDYqyMB1JomhwNCtF3+57u6ze1lAeBHPBuS2jkU+Gfq uJXrAhIUU7k1QDK1Fk04lgpE+8L1CF2meHMTzGRDvzfjSirwO1Bt7INX8Rq1vcbABlzr UOoA== X-Gm-Message-State: AOAM533TMSO8tZsofch+zt2hlJKzpp1ZUwf5p8cAZNeWW+vJiutd6qnm AiQDQFbizt7dQQoqn1EweUPMz7g7G74= X-Google-Smtp-Source: ABdhPJzcBWTygGRoBF8L+VBLxk1/JSNOX5GB+lz0PLuyyCpf31+LazXlB6Db16A1w3bWYoiRIGcKLQ== X-Received: by 2002:a5d:538d:: with SMTP id d13mr7067966wrv.92.1616198645484; Fri, 19 Mar 2021 17:04:05 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id c6sm9858358wri.32.2021.03.19.17.04.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Mar 2021 17:04:05 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sat, 20 Mar 2021 00:03:56 +0000 Subject: [PATCH v3 13/13] Add testing with merge-ort merge strategy Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , =?utf-8?b?w4Z2YXIgQXJuZmrDtnI=?= =?utf-8?b?w7A=?= Bjarmason , Taylor Blau , Jonathan Tan , Jeff King , Jonathan Nieder , Johannes Schindelin , Junio C Hamano , Derrick Stolee , Elijah Newren , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren In preparation for switching from merge-recursive to merge-ort as the default strategy, have the testsuite default to running with merge-ort. Keep coverage of the recursive backend by having the linux-gcc job run with it. Signed-off-by: Elijah Newren --- ci/run-build-and-tests.sh | 1 + t/test-lib.sh | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh index 50e0b90073f1..2279ff70a735 100755 --- a/ci/run-build-and-tests.sh +++ b/ci/run-build-and-tests.sh @@ -16,6 +16,7 @@ linux-gcc) export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main make test export GIT_TEST_SPLIT_INDEX=yes + export GIT_TEST_MERGE_ALGORITHM=recursive export GIT_TEST_FULL_IN_PACK_ARRAY=true export GIT_TEST_OE_SIZE=10 export GIT_TEST_OE_DELTA_SIZE=5 diff --git a/t/test-lib.sh b/t/test-lib.sh index 431adba0fb3f..6f4185037183 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -448,6 +448,8 @@ export EDITOR GIT_DEFAULT_HASH="${GIT_TEST_DEFAULT_HASH:-sha1}" export GIT_DEFAULT_HASH +GIT_TEST_MERGE_ALGORITHM="${GIT_TEST_MERGE_ALGORITHM:-ort}" +export GIT_TEST_MERGE_ALGORITHM # Tests using GIT_TRACE typically don't want : output GIT_TRACE_BARE=1