From patchwork Sat Feb 25 02:25:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152003 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA22AC6FA8E for ; Sat, 25 Feb 2023 02:26:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229537AbjBYC0P (ORCPT ); Fri, 24 Feb 2023 21:26:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229510AbjBYC0J (ORCPT ); Fri, 24 Feb 2023 21:26:09 -0500 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 E4EF7126C9 for ; Fri, 24 Feb 2023 18:26:05 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id h14so1055332wru.4 for ; Fri, 24 Feb 2023 18:26:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=+u27gOH9RYe6QyCkl0ejZiHnwquTtRxgSgfFbllh58Y=; b=NUpk/YxO8Rw70s/Gn5NZQ1yX0H6SZcpwyTiX50gqjazw8/W4u1Bwvwhk1g6jJ1jN+D y40Kf8M/UgLc6GqbuyC3sz1FpDvr9ZCUsSwJf63unuzZ2Osu9XAMinDz82dNmqvfnjW/ otPng92VhDX26PPyyEQJAHzuTiOa6kNTbSA1N2mE6yG60T82AzXhN4P26FJndahvTnNN QyfdnQU9s5nwcwOYxKeIOs3cvU9/SLCi4cNdN4l9HBFV9lAxVfgwPSTCmoossBHxgmN7 26on2iLrssq75zhrmX+NYtRgSOLpRU0hsw6RPG/A9Upz/LFKr0Yb11W4bqlSwfbmPHke Zyew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+u27gOH9RYe6QyCkl0ejZiHnwquTtRxgSgfFbllh58Y=; b=kmCvCnB9RwdA7gMujePO8E9r9SIih3KZh7pcBAn4ApxxYr/fMcgZQJSE1qmNDS1gxR Un6NrzAgUQJyZc+5LTe6rXgvtn+l59wKPuKVyzkBTtdGSZy+PHQKTSvBx8dOGq7cyvOw dFPogSu2xv+BnMM1680O568qtY8jwF/uPOdTNyh6o8GAQu4VsYvGzF0+qqpmoIYEEX7z y8I66mg+Hvd8eGpTrdVTBBmrTuO8JDZA4c/UVY92XY/OnqyRrT0HJacYeaKl8BCRv6rk apAfUpivudAPWCr4IbFa2R2BB5XH6v6o69duY0YZxTKKeTVCGAhSYu7tmWAWMiIXe7nG bZQA== X-Gm-Message-State: AO0yUKXWkQdxjmG+wqK2V1cThuFEu5YX3Xx898fv4xX+nYoJuE3yQgSY gIhyKo5/qNgjHVVMR4/bQ8LI3HqG0Fg= X-Google-Smtp-Source: AK7set+hY4fqAotP9Pit/Oge46pGJlC306gLNyMY8nwX0e32WXZJGdzggjIdyUDvbp3NoVQDppQmUQ== X-Received: by 2002:a5d:6092:0:b0:2bf:ee65:b0b0 with SMTP id w18-20020a5d6092000000b002bfee65b0b0mr17490588wrt.41.1677291963766; Fri, 24 Feb 2023 18:26:03 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id l8-20020adff488000000b002c557f82e27sm368525wro.99.2023.02.24.18.26.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:03 -0800 (PST) Message-Id: <7f59ad548d0cbeeffb3917765084418df520ec22.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:50 +0000 Subject: [PATCH v2 01/11] dir: separate public from internal portion of dir_struct Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren In order to make it clearer to callers what portions of dir_struct are public API, and avoid errors from them setting fields that are meant as internal API, split the fields used for internal implementation reasons into a separate embedded struct. Signed-off-by: Elijah Newren --- dir.c | 114 +++++++++++++++++++++++++++++----------------------------- dir.h | 86 +++++++++++++++++++++++--------------------- 2 files changed, 104 insertions(+), 96 deletions(-) diff --git a/dir.c b/dir.c index 4e99f0c868f..7adf242026e 100644 --- a/dir.c +++ b/dir.c @@ -1190,7 +1190,7 @@ struct pattern_list *add_pattern_list(struct dir_struct *dir, struct pattern_list *pl; struct exclude_list_group *group; - group = &dir->exclude_list_group[group_type]; + group = &dir->internal.exclude_list_group[group_type]; ALLOC_GROW(group->pl, group->nr + 1, group->alloc); pl = &group->pl[group->nr++]; memset(pl, 0, sizeof(*pl)); @@ -1211,7 +1211,7 @@ static void add_patterns_from_file_1(struct dir_struct *dir, const char *fname, * differently when dir->untracked is non-NULL. */ if (!dir->untracked) - dir->unmanaged_exclude_files++; + dir->internal.unmanaged_exclude_files++; pl = add_pattern_list(dir, EXC_FILE, fname); if (add_patterns(fname, "", 0, pl, NULL, 0, oid_stat) < 0) die(_("cannot use %s as an exclude file"), fname); @@ -1219,7 +1219,7 @@ static void add_patterns_from_file_1(struct dir_struct *dir, const char *fname, void add_patterns_from_file(struct dir_struct *dir, const char *fname) { - dir->unmanaged_exclude_files++; /* see validate_untracked_cache() */ + dir->internal.unmanaged_exclude_files++; /* see validate_untracked_cache() */ add_patterns_from_file_1(dir, fname, NULL); } @@ -1519,7 +1519,7 @@ static struct path_pattern *last_matching_pattern_from_lists( struct exclude_list_group *group; struct path_pattern *pattern; for (i = EXC_CMDL; i <= EXC_FILE; i++) { - group = &dir->exclude_list_group[i]; + group = &dir->internal.exclude_list_group[i]; for (j = group->nr - 1; j >= 0; j--) { pattern = last_matching_pattern_from_list( pathname, pathlen, basename, dtype_p, @@ -1545,20 +1545,20 @@ static void prep_exclude(struct dir_struct *dir, struct untracked_cache_dir *untracked; int current; - group = &dir->exclude_list_group[EXC_DIRS]; + group = &dir->internal.exclude_list_group[EXC_DIRS]; /* * Pop the exclude lists from the EXCL_DIRS exclude_list_group * which originate from directories not in the prefix of the * path being checked. */ - while ((stk = dir->exclude_stack) != NULL) { + while ((stk = dir->internal.exclude_stack) != NULL) { if (stk->baselen <= baselen && - !strncmp(dir->basebuf.buf, base, stk->baselen)) + !strncmp(dir->internal.basebuf.buf, base, stk->baselen)) break; - pl = &group->pl[dir->exclude_stack->exclude_ix]; - dir->exclude_stack = stk->prev; - dir->pattern = NULL; + pl = &group->pl[dir->internal.exclude_stack->exclude_ix]; + dir->internal.exclude_stack = stk->prev; + dir->internal.pattern = NULL; free((char *)pl->src); /* see strbuf_detach() below */ clear_pattern_list(pl); free(stk); @@ -1566,7 +1566,7 @@ static void prep_exclude(struct dir_struct *dir, } /* Skip traversing into sub directories if the parent is excluded */ - if (dir->pattern) + if (dir->internal.pattern) return; /* @@ -1574,12 +1574,12 @@ static void prep_exclude(struct dir_struct *dir, * memset(dir, 0, sizeof(*dir)) before use. Changing all of * them seems lots of work for little benefit. */ - if (!dir->basebuf.buf) - strbuf_init(&dir->basebuf, PATH_MAX); + if (!dir->internal.basebuf.buf) + strbuf_init(&dir->internal.basebuf, PATH_MAX); /* Read from the parent directories and push them down. */ current = stk ? stk->baselen : -1; - strbuf_setlen(&dir->basebuf, current < 0 ? 0 : current); + strbuf_setlen(&dir->internal.basebuf, current < 0 ? 0 : current); if (dir->untracked) untracked = stk ? stk->ucd : dir->untracked->root; else @@ -1599,32 +1599,33 @@ static void prep_exclude(struct dir_struct *dir, die("oops in prep_exclude"); cp++; untracked = - lookup_untracked(dir->untracked, untracked, + lookup_untracked(dir->untracked, + untracked, base + current, cp - base - current); } - stk->prev = dir->exclude_stack; + stk->prev = dir->internal.exclude_stack; stk->baselen = cp - base; stk->exclude_ix = group->nr; stk->ucd = untracked; pl = add_pattern_list(dir, EXC_DIRS, NULL); - strbuf_add(&dir->basebuf, base + current, stk->baselen - current); - assert(stk->baselen == dir->basebuf.len); + strbuf_add(&dir->internal.basebuf, base + current, stk->baselen - current); + assert(stk->baselen == dir->internal.basebuf.len); /* Abort if the directory is excluded */ if (stk->baselen) { int dt = DT_DIR; - dir->basebuf.buf[stk->baselen - 1] = 0; - dir->pattern = last_matching_pattern_from_lists(dir, + dir->internal.basebuf.buf[stk->baselen - 1] = 0; + dir->internal.pattern = last_matching_pattern_from_lists(dir, istate, - dir->basebuf.buf, stk->baselen - 1, - dir->basebuf.buf + current, &dt); - dir->basebuf.buf[stk->baselen - 1] = '/'; - if (dir->pattern && - dir->pattern->flags & PATTERN_FLAG_NEGATIVE) - dir->pattern = NULL; - if (dir->pattern) { - dir->exclude_stack = stk; + dir->internal.basebuf.buf, stk->baselen - 1, + dir->internal.basebuf.buf + current, &dt); + dir->internal.basebuf.buf[stk->baselen - 1] = '/'; + if (dir->internal.pattern && + dir->internal.pattern->flags & PATTERN_FLAG_NEGATIVE) + dir->internal.pattern = NULL; + if (dir->internal.pattern) { + dir->internal.exclude_stack = stk; return; } } @@ -1647,15 +1648,15 @@ static void prep_exclude(struct dir_struct *dir, */ !is_null_oid(&untracked->exclude_oid))) { /* - * dir->basebuf gets reused by the traversal, but we - * need fname to remain unchanged to ensure the src - * member of each struct path_pattern correctly + * dir->internal.basebuf gets reused by the traversal, + * but we need fname to remain unchanged to ensure the + * src member of each struct path_pattern correctly * back-references its source file. Other invocations * of add_pattern_list provide stable strings, so we * strbuf_detach() and free() here in the caller. */ struct strbuf sb = STRBUF_INIT; - strbuf_addbuf(&sb, &dir->basebuf); + strbuf_addbuf(&sb, &dir->internal.basebuf); strbuf_addstr(&sb, dir->exclude_per_dir); pl->src = strbuf_detach(&sb, NULL); add_patterns(pl->src, pl->src, stk->baselen, pl, istate, @@ -1681,10 +1682,10 @@ static void prep_exclude(struct dir_struct *dir, invalidate_gitignore(dir->untracked, untracked); oidcpy(&untracked->exclude_oid, &oid_stat.oid); } - dir->exclude_stack = stk; + dir->internal.exclude_stack = stk; current = stk->baselen; } - strbuf_setlen(&dir->basebuf, baselen); + strbuf_setlen(&dir->internal.basebuf, baselen); } /* @@ -1704,8 +1705,8 @@ struct path_pattern *last_matching_pattern(struct dir_struct *dir, prep_exclude(dir, istate, pathname, basename-pathname); - if (dir->pattern) - return dir->pattern; + if (dir->internal.pattern) + return dir->internal.pattern; return last_matching_pattern_from_lists(dir, istate, pathname, pathlen, basename, dtype_p); @@ -1742,7 +1743,7 @@ static struct dir_entry *dir_add_name(struct dir_struct *dir, if (index_file_exists(istate, pathname, len, ignore_case)) return NULL; - ALLOC_GROW(dir->entries, dir->nr+1, dir->alloc); + ALLOC_GROW(dir->entries, dir->nr+1, dir->internal.alloc); return dir->entries[dir->nr++] = dir_entry_new(pathname, len); } @@ -1753,7 +1754,7 @@ struct dir_entry *dir_add_ignored(struct dir_struct *dir, if (!index_name_is_other(istate, pathname, len)) return NULL; - ALLOC_GROW(dir->ignored, dir->ignored_nr+1, dir->ignored_alloc); + ALLOC_GROW(dir->ignored, dir->ignored_nr+1, dir->internal.ignored_alloc); return dir->ignored[dir->ignored_nr++] = dir_entry_new(pathname, len); } @@ -2569,7 +2570,7 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir, if (open_cached_dir(&cdir, dir, untracked, istate, &path, check_only)) goto out; - dir->visited_directories++; + dir->internal.visited_directories++; if (untracked) untracked->check_only = !!check_only; @@ -2578,7 +2579,7 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir, /* check how the file or directory should be treated */ state = treat_path(dir, untracked, &cdir, istate, &path, baselen, pathspec); - dir->visited_paths++; + dir->internal.visited_paths++; if (state > dir_state) dir_state = state; @@ -2586,7 +2587,8 @@ static enum path_treatment read_directory_recursive(struct dir_struct *dir, /* recurse into subdir if instructed by treat_path */ if (state == path_recurse) { struct untracked_cache_dir *ud; - ud = lookup_untracked(dir->untracked, untracked, + ud = lookup_untracked(dir->untracked, + untracked, path.buf + baselen, path.len - baselen); subdir_state = @@ -2846,7 +2848,7 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d * condition also catches running setup_standard_excludes() * before setting dir->untracked! */ - if (dir->unmanaged_exclude_files) + if (dir->internal.unmanaged_exclude_files) return NULL; /* @@ -2875,7 +2877,7 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d * EXC_CMDL is not considered in the cache. If people set it, * skip the cache. */ - if (dir->exclude_list_group[EXC_CMDL].nr) + if (dir->internal.exclude_list_group[EXC_CMDL].nr) return NULL; if (!ident_in_untracked(dir->untracked)) { @@ -2935,15 +2937,15 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d /* Validate $GIT_DIR/info/exclude and core.excludesfile */ root = dir->untracked->root; - if (!oideq(&dir->ss_info_exclude.oid, + if (!oideq(&dir->internal.ss_info_exclude.oid, &dir->untracked->ss_info_exclude.oid)) { invalidate_gitignore(dir->untracked, root); - dir->untracked->ss_info_exclude = dir->ss_info_exclude; + dir->untracked->ss_info_exclude = dir->internal.ss_info_exclude; } - if (!oideq(&dir->ss_excludes_file.oid, + if (!oideq(&dir->internal.ss_excludes_file.oid, &dir->untracked->ss_excludes_file.oid)) { invalidate_gitignore(dir->untracked, root); - dir->untracked->ss_excludes_file = dir->ss_excludes_file; + dir->untracked->ss_excludes_file = dir->internal.ss_excludes_file; } /* Make sure this directory is not dropped out at saving phase */ @@ -2969,9 +2971,9 @@ static void emit_traversal_statistics(struct dir_struct *dir, } trace2_data_intmax("read_directory", repo, - "directories-visited", dir->visited_directories); + "directories-visited", dir->internal.visited_directories); trace2_data_intmax("read_directory", repo, - "paths-visited", dir->visited_paths); + "paths-visited", dir->internal.visited_paths); if (!dir->untracked) return; @@ -2993,8 +2995,8 @@ int read_directory(struct dir_struct *dir, struct index_state *istate, struct untracked_cache_dir *untracked; trace2_region_enter("dir", "read_directory", istate->repo); - dir->visited_paths = 0; - dir->visited_directories = 0; + dir->internal.visited_paths = 0; + dir->internal.visited_directories = 0; if (has_symlink_leading_path(path, len)) { trace2_region_leave("dir", "read_directory", istate->repo); @@ -3342,14 +3344,14 @@ void setup_standard_excludes(struct dir_struct *dir) excludes_file = xdg_config_home("ignore"); if (excludes_file && !access_or_warn(excludes_file, R_OK, 0)) add_patterns_from_file_1(dir, excludes_file, - dir->untracked ? &dir->ss_excludes_file : NULL); + dir->untracked ? &dir->internal.ss_excludes_file : NULL); /* per repository user preference */ if (startup_info->have_repository) { const char *path = git_path_info_exclude(); if (!access_or_warn(path, R_OK, 0)) add_patterns_from_file_1(dir, path, - dir->untracked ? &dir->ss_info_exclude : NULL); + dir->untracked ? &dir->internal.ss_info_exclude : NULL); } } @@ -3405,7 +3407,7 @@ void dir_clear(struct dir_struct *dir) struct dir_struct new = DIR_INIT; for (i = EXC_CMDL; i <= EXC_FILE; i++) { - group = &dir->exclude_list_group[i]; + group = &dir->internal.exclude_list_group[i]; for (j = 0; j < group->nr; j++) { pl = &group->pl[j]; if (i == EXC_DIRS) @@ -3422,13 +3424,13 @@ void dir_clear(struct dir_struct *dir) free(dir->ignored); free(dir->entries); - stk = dir->exclude_stack; + stk = dir->internal.exclude_stack; while (stk) { struct exclude_stack *prev = stk->prev; free(stk); stk = prev; } - strbuf_release(&dir->basebuf); + strbuf_release(&dir->internal.basebuf); memcpy(dir, &new, sizeof(*dir)); } diff --git a/dir.h b/dir.h index 8acfc044181..33fd848fc8d 100644 --- a/dir.h +++ b/dir.h @@ -215,14 +215,9 @@ struct dir_struct { /* The number of members in `entries[]` array. */ int nr; - /* Internal use; keeps track of allocation of `entries[]` array.*/ - int alloc; - /* The number of members in `ignored[]` array. */ int ignored_nr; - int ignored_alloc; - /* bit-field of options */ enum { @@ -296,51 +291,62 @@ struct dir_struct { */ struct dir_entry **ignored; + /* Enable/update untracked file cache if set */ + struct untracked_cache *untracked; + /** * The name of the file to be read in each directory for excluded files * (typically `.gitignore`). */ const char *exclude_per_dir; - /* - * We maintain three groups of exclude pattern lists: - * - * EXC_CMDL lists patterns explicitly given on the command line. - * EXC_DIRS lists patterns obtained from per-directory ignore files. - * EXC_FILE lists patterns from fallback ignore files, e.g. - * - .git/info/exclude - * - core.excludesfile - * - * Each group contains multiple exclude lists, a single list - * per source. - */ + struct dir_struct_internal { + /* Keeps track of allocation of `entries[]` array.*/ + int alloc; + + /* Keeps track of allocation of `ignored[]` array. */ + int ignored_alloc; + + /* + * We maintain three groups of exclude pattern lists: + * + * EXC_CMDL lists patterns explicitly given on the command line. + * EXC_DIRS lists patterns obtained from per-directory ignore + * files. + * EXC_FILE lists patterns from fallback ignore files, e.g. + * - .git/info/exclude + * - core.excludesfile + * + * Each group contains multiple exclude lists, a single list + * per source. + */ #define EXC_CMDL 0 #define EXC_DIRS 1 #define EXC_FILE 2 - struct exclude_list_group exclude_list_group[3]; - - /* - * Temporary variables which are used during loading of the - * per-directory exclude lists. - * - * exclude_stack points to the top of the exclude_stack, and - * basebuf contains the full path to the current - * (sub)directory in the traversal. Exclude points to the - * matching exclude struct if the directory is excluded. - */ - struct exclude_stack *exclude_stack; - struct path_pattern *pattern; - struct strbuf basebuf; - - /* Enable untracked file cache if set */ - struct untracked_cache *untracked; - struct oid_stat ss_info_exclude; - struct oid_stat ss_excludes_file; - unsigned unmanaged_exclude_files; + struct exclude_list_group exclude_list_group[3]; - /* Stats about the traversal */ - unsigned visited_paths; - unsigned visited_directories; + /* + * Temporary variables which are used during loading of the + * per-directory exclude lists. + * + * exclude_stack points to the top of the exclude_stack, and + * basebuf contains the full path to the current + * (sub)directory in the traversal. Exclude points to the + * matching exclude struct if the directory is excluded. + */ + struct exclude_stack *exclude_stack; + struct path_pattern *pattern; + struct strbuf basebuf; + + /* Additional metadata related to 'untracked' */ + struct oid_stat ss_info_exclude; + struct oid_stat ss_excludes_file; + unsigned unmanaged_exclude_files; + + /* Stats about the traversal */ + unsigned visited_paths; + unsigned visited_directories; + } internal; }; #define DIR_INIT { 0 } From patchwork Sat Feb 25 02:25:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152000 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 21A26C6FA8E for ; Sat, 25 Feb 2023 02:26:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229520AbjBYC0L (ORCPT ); Fri, 24 Feb 2023 21:26:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229496AbjBYC0I (ORCPT ); Fri, 24 Feb 2023 21:26:08 -0500 Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 651B426CD4 for ; Fri, 24 Feb 2023 18:26:06 -0800 (PST) Received: by mail-wm1-x335.google.com with SMTP id d41-20020a05600c4c2900b003e9e066550fso650810wmp.4 for ; Fri, 24 Feb 2023 18:26:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=tLzl5Nnmpb6ZWi0HOdk5F4kYn6w/3YalLglkZXtyiUs=; b=VozTAqzUDdSxn//bPsQyHE5nPxvMuImdlBKJn25gqh4VYt/iogqcLrXvJVoZKrf411 y9f94s+sVzAn64lQ7cjNGczezoQoX7sy6Yz1Wro1QkD66pch8qr6muMS5jggdWqQETo5 etHIZUFZV9O7O91UDau7S70rz5fhMmli8B46a1TXY9yfaOvLAf6wHnghUvBfc8qhYlqP i3n5cCCULIAp3FmJyTfX3QL5A2U+VJBHYv1ZetDkrPMDghb/HkyBfIBZj6C3c0X7bnrC IYWzmluohlBe9jpInuEqF/zk3TpfBGyW3G0aSl26+C4LVdH03ANc+/yWczf2p/A4FVv+ WdqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tLzl5Nnmpb6ZWi0HOdk5F4kYn6w/3YalLglkZXtyiUs=; b=e7LRFvX76vhrPDrRawA5kirweTh57vATEsFmItH7vCLe9dlUoOYkSICfkTzQ1AL+ef uKsRm/uz0aiAl2Tia2uTxyD5YAVGGUOdxxaOL4/RJGPIu58ZQgqgJG80wNgzypxaZlBn aSsSe3GvDj+wRs13UnWOuyyFmR/9ymc6huOlyXalId8B+G9yPqFEY2F5u1ER9sNVSDje zN6CBIRPea2wErmLxSwRIu1QYdTTrOgNJgm2F2CPbK6aGcLrNtlkCyUqqHPPghCEKkoL UkJuCY+xbXYYFKdV4cFf95d8gV1MFNwhqEwBWQ1nihqBCVufVXicvIflqXqgI9Mw3FOi +WYQ== X-Gm-Message-State: AO0yUKUWv3PU5VwOkA4GazGPlgVtno463b0RPqiBZ5TnUGHcGjx8SCfo 0jsv4g4UiYH2+D27sz4GV8AL9ejGsb8= X-Google-Smtp-Source: AK7set9tpktDQPiriQjXfNCHOTeLqn9rrqCGcqDJ33aqoe+EEvjnzBiSwZUM9/QBxc7YB/yX4w0nsw== X-Received: by 2002:a05:600c:1d09:b0:3ea:d611:f8 with SMTP id l9-20020a05600c1d0900b003ead61100f8mr5095006wms.38.1677291964603; Fri, 24 Feb 2023 18:26:04 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id z19-20020a05600c0a1300b003e4326a6d53sm4603521wmp.35.2023.02.24.18.26.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:04 -0800 (PST) Message-Id: <239b10e11812d99be587265c0a5e283da45ca315.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:51 +0000 Subject: [PATCH v2 02/11] dir: add a usage note to exclude_per_dir Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren Signed-off-by: Elijah Newren --- dir.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dir.h b/dir.h index 33fd848fc8d..2196e12630c 100644 --- a/dir.h +++ b/dir.h @@ -295,8 +295,12 @@ struct dir_struct { struct untracked_cache *untracked; /** - * The name of the file to be read in each directory for excluded files - * (typically `.gitignore`). + * Deprecated: ls-files is the only allowed caller; all other callers + * should leave this as NULL; it pre-dated the + * setup_standard_excludes() mechanism that replaces this. + * + * This field tracks the name of the file to be read in each directory + * for excluded files (typically `.gitignore`). */ const char *exclude_per_dir; From patchwork Sat Feb 25 02:25:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152002 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0ED65C7EE2D for ; Sat, 25 Feb 2023 02:26:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229533AbjBYC0M (ORCPT ); Fri, 24 Feb 2023 21:26:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41480 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229500AbjBYC0J (ORCPT ); Fri, 24 Feb 2023 21:26:09 -0500 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 767A83BD9A for ; Fri, 24 Feb 2023 18:26:07 -0800 (PST) Received: by mail-wr1-x435.google.com with SMTP id bw19so1013812wrb.13 for ; Fri, 24 Feb 2023 18:26:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=NJhOI5pH2/X7Uqaz8J/86RgsSNzaLLs6qLmjlPTEmeM=; b=SBdeRzYGkoiSwvDWVIJttVlRM2T8J6A6w2GYT8v7Jabh8tJx/0zcVm2ZPxiijOrP4U uPJ30FAp93+D5ZywTCVB8VfQKXNOATd3HMgWQSuo/U2OUnWuhh0guMRuGlgdB+FaT7w9 rIEgMtIf2LejY+dhtZ0t8CMw5TLxBPqQ/htIWPePM0xWIwk/LVmjSY+uq1GTv745FOI3 koTT7Y/kvh4tBPMRP/D+CQbVc4Z0CgCf/SQsbZ8yTtjFo+8LRXoFpwn/2aVlOoPWeGbV OoXN/ly9BnF6oqyMC9A+HSBtMEoMSCKfTVlQc8o76yruDaJNcwza4FJHXBbBBomrVyL8 Rt0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NJhOI5pH2/X7Uqaz8J/86RgsSNzaLLs6qLmjlPTEmeM=; b=xAqZ+6Ymx05thL2IO7HK6uXN2lSc/aSHWfEqahSKrT9vPoOLZV2ph4Y81PIY1NANUB X6KUMAXYM6ivHGFXsGDAVi2Wsa3GR2GcyWT4DEEXeeospJrEI2mTQ1QujjdgDyjmGeum mimi1voI9mJoCLMO41qqqmc63togSZOcHFsbBSRXqwd4tVMCt7OEerGY+GOagZBz+RtW gp+TrFwR2VTZV9hq2a2k48G7+d4u4PVnrY1fu2Y7DRgSTJe44uJ1x9+2nxcZ/8UBmQYj wGpUiqKilSVKCDsl6xVJVd1NQj6T1WIBpqiSloqA+H4sLKbRIMw4z1dE2ypsCvAlTu7a /V1A== X-Gm-Message-State: AO0yUKW94+bqT8ElhPnv2EQHUskEGq3pIJ5e18IXzhVl37GN7GLIljIV fn+C4S2A/2+j4Hz7ncvBSjTWg8n0V74= X-Google-Smtp-Source: AK7set9Hr1CsB7KOyAPj3y4HnJPdhMyZYh/z0MyV3GosAUk17R1xIVZpqcP1bA99mE/OASa74ZbcFA== X-Received: by 2002:adf:f883:0:b0:2c7:3f9:7053 with SMTP id u3-20020adff883000000b002c703f97053mr13373992wrp.52.1677291965379; Fri, 24 Feb 2023 18:26:05 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id z3-20020a5d6543000000b002c7b8a0c423sm437451wrv.0.2023.02.24.18.26.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:04 -0800 (PST) Message-Id: In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:52 +0000 Subject: [PATCH v2 03/11] dir: mark output only fields of dir_struct as such Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren While at it, also group these fields together for convenience. Signed-off-by: Elijah Newren --- dir.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dir.h b/dir.h index 2196e12630c..e8106e1ecac 100644 --- a/dir.h +++ b/dir.h @@ -212,12 +212,6 @@ struct untracked_cache { */ struct dir_struct { - /* The number of members in `entries[]` array. */ - int nr; - - /* The number of members in `ignored[]` array. */ - int ignored_nr; - /* bit-field of options */ enum { @@ -282,14 +276,20 @@ struct dir_struct { DIR_SKIP_NESTED_GIT = 1<<9 } flags; + /* The number of members in `entries[]` array. */ + int nr; /* output only */ + + /* The number of members in `ignored[]` array. */ + int ignored_nr; /* output only */ + /* An array of `struct dir_entry`, each element of which describes a path. */ - struct dir_entry **entries; + struct dir_entry **entries; /* output only */ /** * used for ignored paths with the `DIR_SHOW_IGNORED_TOO` and * `DIR_COLLECT_IGNORED` flags. */ - struct dir_entry **ignored; + struct dir_entry **ignored; /* output only */ /* Enable/update untracked file cache if set */ struct untracked_cache *untracked; From patchwork Sat Feb 25 02:25:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152004 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 211E7C64ED8 for ; Sat, 25 Feb 2023 02:26:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229539AbjBYC0Q (ORCPT ); Fri, 24 Feb 2023 21:26:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229513AbjBYC0J (ORCPT ); Fri, 24 Feb 2023 21:26:09 -0500 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9FA219F2D for ; Fri, 24 Feb 2023 18:26:07 -0800 (PST) Received: by mail-wm1-x32e.google.com with SMTP id bg16-20020a05600c3c9000b003eb34e21bdfso117867wmb.0 for ; Fri, 24 Feb 2023 18:26:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=54dRuSmDoDZRSvOtTbEmZzMk9W9OyB/i/B/eNUPRFMY=; b=F/t4QXvy8Cbukt8eL87PwPurGA4DhDwfAYQ1GnrhB1LpUh4MQg+30bxdfjQ34KVRgv wKfj4XliAvLCb1A6ro/Mmwi2lqNzBtq1rK+R5rh4hfzL6meMDYsUDOiM3bTrn39oKxkn PrGvDYDbd3rP4a1l0d2aBW6RGgICM1StvBaw1rWWmRYpEmHpnREHxGKCD512dDiiaHKi URUGf22euFdjfvsTu4mMN4sB6yiVfVpKT8XdMQG2jDjeYjTvwzWHEMmK0OlAOO3/QgA2 Fc4JJTLIvlxxZmyXpWvqOwQJMulWNqQ/yhMwoh33ossHhdKanzVooX78s4Xb/ibGCOFe F4XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=54dRuSmDoDZRSvOtTbEmZzMk9W9OyB/i/B/eNUPRFMY=; b=xmBQDTV+upOQivgHkX+KqU+unSr4S2gXVV6NK8zo2MQrzbOwo349S7WUZg9kS0EVXi XGLMxsXRiuH7co/Lb7zn/1y63vGab3yeCE4QjoSPv40gvYdpervYHIxbpQ+gkvfjSdqJ lPcuatUIINLfiC36SOCmkUYztiEwjqJG/Yn+hsASmWxZte/fBtSvlWp4CGwnD5om+vsz 64Zb+AF2aR6VNCMYA4UOIJS5loR8mZ7BPHg+U/uLyG0WW5KF76DGDxhrWrc6hikdsXz4 GvUwn5AZb/VnLZjZzoPWk8He9qY+0yXzJB1qH06xOT0VIWJPLhMzZZskqb0YXVjUD3gi 7uAw== X-Gm-Message-State: AO0yUKUJmKXMGFWj86ptChirM75BHH1N+No92GJoP7s1NFjh2U+hTVSa SM2o3qf0wJvDYun3/7EbVO0rlB8iuuo= X-Google-Smtp-Source: AK7set8J8vMtZ8bN4o0GkBrJpgqlQt2aEsaN/X5mXGCfFPonuXNiO2/1jSJyUp2qNs/Pa3dtpU4HRA== X-Received: by 2002:a05:600c:34cb:b0:3eb:a4e:a2b2 with SMTP id d11-20020a05600c34cb00b003eb0a4ea2b2mr3733435wmq.4.1677291966267; Fri, 24 Feb 2023 18:26:06 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id s8-20020a5d4ec8000000b002c704271b05sm381992wrv.66.2023.02.24.18.26.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:05 -0800 (PST) Message-Id: In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:53 +0000 Subject: [PATCH v2 04/11] unpack-trees: clean up some flow control Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren The update_sparsity() function was introduced in commit 7af7a25853 ("unpack-trees: add a new update_sparsity() function", 2020-03-27). Prior to that, unpack_trees() was used, but that had a few bugs because the needs of the caller were different, and different enough that unpack_trees() could not easily be modified to handle both usecases. The implementation detail that update_sparsity() was written by copying unpack_trees() and then streamlining it, and then modifying it in the needed ways still shows through in that there are leftover vestiges in both functions that are no longer needed. Clean them up. In particular: * update_sparsity() allows a pattern list to be passed in, but unpack_trees() never should use a different pattern list. Add a check and a BUG() if this gets violated. * update_sparsity() has a check early on that will BUG() if o->skip_sparse_checkout is set; as such, there's no need to check for that condition again later in the code. We can simply remove the check and its corresponding goto label. Signed-off-by: Elijah Newren --- unpack-trees.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index 3d05e45a279..0887d157df4 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1873,6 +1873,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES); if (o->dir) BUG("o->dir is for internal use only"); + if (o->pl) + BUG("o->pl is for internal use only"); trace_performance_enter(); trace2_region_enter("unpack_trees", "unpack_trees", the_repository); @@ -1899,7 +1901,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options if (!core_apply_sparse_checkout || !o->update) o->skip_sparse_checkout = 1; - if (!o->skip_sparse_checkout && !o->pl) { + if (!o->skip_sparse_checkout) { memset(&pl, 0, sizeof(pl)); free_pattern_list = 1; populate_from_existing_patterns(o, &pl); @@ -2113,8 +2115,6 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o) memset(&pl, 0, sizeof(pl)); free_pattern_list = 1; populate_from_existing_patterns(o, &pl); - if (o->skip_sparse_checkout) - goto skip_sparse_checkout; } /* Expand sparse directories as needed */ @@ -2142,7 +2142,6 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o) ret = UPDATE_SPARSITY_WARNINGS; } -skip_sparse_checkout: if (check_updates(o, o->src_index)) ret = UPDATE_SPARSITY_WORKTREE_UPDATE_FAILURES; From patchwork Sat Feb 25 02:25:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152005 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 717F5C6FA8E for ; Sat, 25 Feb 2023 02:26:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229542AbjBYC0S (ORCPT ); Fri, 24 Feb 2023 21:26:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41490 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229515AbjBYC0K (ORCPT ); Fri, 24 Feb 2023 21:26:10 -0500 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8CD923D0BA for ; Fri, 24 Feb 2023 18:26:08 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id 6so1023250wrb.11 for ; Fri, 24 Feb 2023 18:26:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=qbPFkOGqLJfYTC+AoVHTpIIVdv5YX0IKK3PurL7z8Jk=; b=IDLlxuikVoezf18Agr0XSLx328Tx6wv4ZT1xfnXeZhtGaf8RC9xuDKV6mnHpephpPt WEpLbQtOAONUo9VxW67ZDIBGZM2Kj8FaeSKOUCYY+F/g0dsxk7kwZ6SuPD6QoVOKDHwF FMoNqunranyJGErWCw52fx0rNBpmK8cawgRvH1+g0vgwhjP/Qb2ForzlDmGWVR4xDJw/ G0KvhIAgWyi6osErS6TOjG+SFfXFHuaDgYHCkiUvYrQa4+Eqtdo8brQdDQWLMxfbHq7j R6pHwoPGPkGbImVRfazFUsVwnsV9wPZzHTdBc+KGffgeDL8H0dxU9wGhhSD4lFiCbgT6 tx2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qbPFkOGqLJfYTC+AoVHTpIIVdv5YX0IKK3PurL7z8Jk=; b=dUOcqORMlalstuc85FrUbXvB+J5jstafyRcO7oZxe4UlBHURxPdszwFCb+vXazYsfQ i0N4sFUAQGZu41WDVySi/EeUrWBIbFwdEFeOS4JM2+1qbV+2bcVAKnI/QK8JTKlo9+Hw Rp3/ccwBTVhJ8u0T4WbkNefzpk09N2uk4cyan0co1v8hFtMftODbM6mpbOl4exLaYkYI KkcIODdD6+x+yqUxsUoGvWVG5zFr96e1C7SWaaS8PTaBj/tJBY4U5ihvVVxcQzuISh72 3a2MgMxv4OEwbE1ctv7CNMYibjOvjURW1Y6IUZhOoRwTkWCTYPg2uqWvBo2x2GLipMFQ Hwow== X-Gm-Message-State: AO0yUKVg40qhs6bkKdRixF/kyhniXVRq+PDzzOumDCWUGAFEtNZ++QOb tzBO9joRCILQOsH8mAGugxr8nUqwxnY= X-Google-Smtp-Source: AK7set8maj3tdMRycn3WPqnHKBqFJPpsnjt50Y68a1SfYXOTR71sDUFHQ5n7k6LHKGo2Qw/fuTMzjg== X-Received: by 2002:adf:f208:0:b0:2c8:4bca:7fc6 with SMTP id p8-20020adff208000000b002c84bca7fc6mr1564459wro.62.1677291966921; Fri, 24 Feb 2023 18:26:06 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id fl13-20020a05600c0b8d00b003eafc47eb09sm918174wmb.43.2023.02.24.18.26.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:06 -0800 (PST) Message-Id: <975dec0f0ebaf72f0e5f5b5379f3d1b761045d2f.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:54 +0000 Subject: [PATCH v2 05/11] sparse-checkout: avoid using internal API of unpack-trees Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren struct unpack_trees_options has the following field and comment: struct pattern_list *pl; /* for internal use */ Despite the internal-use comment, commit e091228e17 ("sparse-checkout: update working directory in-process", 2019-11-21) starting setting this field from an external caller. At the time, the only way around that would have been to modify unpack_trees() to take an extra pattern_list argument, and there's a lot of callers of that function. However, when we split update_sparsity() off as a separate function, with sparse-checkout being the sole caller, the need to update other callers went away. Fix this API problem by adding a pattern_list argument to update_sparsity() and stop setting the internal o.pl field directly. Signed-off-by: Elijah Newren --- builtin/sparse-checkout.c | 3 +-- unpack-trees.c | 18 +++++++++++------- unpack-trees.h | 3 ++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c index c3738154918..4b7390ce367 100644 --- a/builtin/sparse-checkout.c +++ b/builtin/sparse-checkout.c @@ -219,14 +219,13 @@ static int update_working_directory(struct pattern_list *pl) o.dst_index = r->index; index_state_init(&o.result, r); o.skip_sparse_checkout = 0; - o.pl = pl; setup_work_tree(); repo_hold_locked_index(r, &lock_file, LOCK_DIE_ON_ERROR); setup_unpack_trees_porcelain(&o, "sparse-checkout"); - result = update_sparsity(&o); + result = update_sparsity(&o, pl); clear_unpack_trees_porcelain(&o); if (result == UPDATE_SPARSITY_WARNINGS) diff --git a/unpack-trees.c b/unpack-trees.c index 0887d157df4..639e48cc6bb 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -2091,10 +2091,10 @@ return_failed: * * CE_NEW_SKIP_WORKTREE is used internally. */ -enum update_sparsity_result update_sparsity(struct unpack_trees_options *o) +enum update_sparsity_result update_sparsity(struct unpack_trees_options *o, + struct pattern_list *pl) { enum update_sparsity_result ret = UPDATE_SPARSITY_SUCCESS; - struct pattern_list pl; int i; unsigned old_show_all_errors; int free_pattern_list = 0; @@ -2111,11 +2111,12 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o) trace_performance_enter(); /* If we weren't given patterns, use the recorded ones */ - if (!o->pl) { - memset(&pl, 0, sizeof(pl)); + if (!pl) { free_pattern_list = 1; - populate_from_existing_patterns(o, &pl); + pl = xcalloc(1, sizeof(*pl)); + populate_from_existing_patterns(o, pl); } + o->pl = pl; /* Expand sparse directories as needed */ expand_index(o->src_index, o->pl); @@ -2147,8 +2148,11 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o) display_warning_msgs(o); o->show_all_errors = old_show_all_errors; - if (free_pattern_list) - clear_pattern_list(&pl); + if (free_pattern_list) { + clear_pattern_list(pl); + free(pl); + o->pl = NULL; + } trace_performance_leave("update_sparsity"); return ret; } diff --git a/unpack-trees.h b/unpack-trees.h index 3a7b3e5f007..f3a6e4f90ef 100644 --- a/unpack-trees.h +++ b/unpack-trees.h @@ -112,7 +112,8 @@ enum update_sparsity_result { UPDATE_SPARSITY_WORKTREE_UPDATE_FAILURES = -2 }; -enum update_sparsity_result update_sparsity(struct unpack_trees_options *options); +enum update_sparsity_result update_sparsity(struct unpack_trees_options *options, + struct pattern_list *pl); int verify_uptodate(const struct cache_entry *ce, struct unpack_trees_options *o); From patchwork Sat Feb 25 02:25:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152006 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79407C6FA8E for ; Sat, 25 Feb 2023 02:26:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229563AbjBYC02 (ORCPT ); Fri, 24 Feb 2023 21:26:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229522AbjBYC0L (ORCPT ); Fri, 24 Feb 2023 21:26:11 -0500 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 BC7E526CD4 for ; Fri, 24 Feb 2023 18:26:09 -0800 (PST) Received: by mail-wm1-x333.google.com with SMTP id p16so944078wmq.5 for ; Fri, 24 Feb 2023 18:26:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=nHeljppUIs0/8UhOdXVQYodSdBFtuopxWbZQKEP+H/Y=; b=n31davD77mNhkqH308RBeuZMaA/FP5d3Hraw5XOz9NPymNRILnM+SOR2IuGSwTr/ny 3t3f7YTM+/enzdbexakq5xHMBeHSGweQlqk0pmF8/UheX5kwzJdnF5q8XE90c5jiUPKB Z4ZD+QbKIEN75MU6bDX1r7unhALFEF4tTzQVgh7FbhIihlo5Y8+sM3t9F+gpO214nb64 FOK3w12D9LuSUR6R4RvcIkAve9ORzKSmtrLw6I+FZuKNr4wSVVfi/L84wgGzrWne6XEx Fx9HezhDz3mCOm5goHxSlalIAvVN4FqneYTeLuj5mKgrLUg3xg/U3MqL+3otklZcdWod 6x6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nHeljppUIs0/8UhOdXVQYodSdBFtuopxWbZQKEP+H/Y=; b=Wgi2LjL0rY2xRQJqjRVxjCNCwD0JBMBbxDRXW9GZ5QbQ2ZLcYZGttgd9x3uPB7wk+K bE1QO3ZEZ38oF3iv6a2pMRfD5kpRMpA/KYBpdT7HnilYEqym4cNJWMAYeoU2lQUEOzGl PfISldzk1bQxEXcqkawfQLngeN/drlkD5kfHPVag+L7U85vUTvYwiz3ZVdVOfFgVsDv3 YBXP/vZteCcTvXM/LTcT48EZYhcYuwBhDUjX2YOHtw2x+VZLkGIWweNnQsAM7eBhfpYS +Y9SuRZ8viaeF0vuvbX3WVhPdqPSm9kSVL0/3Kao5OCeO26Nmox66omeScBwAiD14RmU V1eA== X-Gm-Message-State: AO0yUKWnebFseKrSmOMNYgz24Lezdjv3iz6RW4UqzHgf/R1iSFZngY6g E43dk7LZ0RDpjZO+wGmCw5gqiu5h314= X-Google-Smtp-Source: AK7set8yDgRZpKX96XaXmoPn6GQ0V1ItRePR5CtDBlWbwG6YSJVWQ4x0JxBA3eP7dDpEzQKpHeDQyw== X-Received: by 2002:a05:600c:154e:b0:3eb:29fe:f912 with SMTP id f14-20020a05600c154e00b003eb29fef912mr2392669wmg.36.1677291967664; Fri, 24 Feb 2023 18:26:07 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id be6-20020a05600c1e8600b003e89e3284fasm4801298wmb.36.2023.02.24.18.26.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:07 -0800 (PST) Message-Id: <429f195dcfedbe0a54e9a2b7bbbc6c126ca4e485.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:55 +0000 Subject: [PATCH v2 06/11] sparse-checkout: avoid using internal API of unpack-trees, take 2 Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren Commit 2f6b1eb794 ("cache API: add a "INDEX_STATE_INIT" macro/function, add release_index()", 2023-01-12) mistakenly added some initialization of a member of unpack_trees_options that was intended to be internal-only. This initialization should be done within update_sparsity() instead. Note that while o->result is mostly meant for unpack_trees() and update_sparsity() mostly operates without o->result, check_ok_to_remove() does consult it so we need to ensure it is properly initialized. Signed-off-by: Elijah Newren --- builtin/sparse-checkout.c | 1 - unpack-trees.c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c index 4b7390ce367..8d5ae6f2a60 100644 --- a/builtin/sparse-checkout.c +++ b/builtin/sparse-checkout.c @@ -217,7 +217,6 @@ static int update_working_directory(struct pattern_list *pl) o.head_idx = -1; o.src_index = r->index; o.dst_index = r->index; - index_state_init(&o.result, r); o.skip_sparse_checkout = 0; setup_work_tree(); diff --git a/unpack-trees.c b/unpack-trees.c index 639e48cc6bb..4fca051cbea 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -2101,6 +2101,7 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o, old_show_all_errors = o->show_all_errors; o->show_all_errors = 1; + index_state_init(&o->result, o->src_index->repo); /* Sanity checks */ if (!o->update || o->index_only || o->skip_sparse_checkout) From patchwork Sat Feb 25 02:25:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152008 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31C1BC7EE2D for ; Sat, 25 Feb 2023 02:26:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229589AbjBYC0a (ORCPT ); Fri, 24 Feb 2023 21:26:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229524AbjBYC0L (ORCPT ); Fri, 24 Feb 2023 21:26:11 -0500 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CF1C19F2D for ; Fri, 24 Feb 2023 18:26:10 -0800 (PST) Received: by mail-wm1-x32e.google.com with SMTP id m25-20020a7bcb99000000b003e7842b75f2so652281wmi.3 for ; Fri, 24 Feb 2023 18:26:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=DmJLU3lLloiRIzTrFiKr51ibGPmYDkjTwvTmssOhyXM=; b=BgrDaUyeZaT3LPvivgbggaW/tJJA0W11x2MM+s6JPF08xh12/XPMq1ntu+wEt6Ub37 BLz9V5l4IrisI6K8+EgznZ7mPEzbBdzCLGQSBoWTCaUvv0fDC6BWhp6H+LHTB1/LQKRR bOLueP+K8DvTZaq2TlgnULL7HXyNjGWdKZD3flaFkyeWDFfOe5EvFKnRpDIe8l/fY9fF 5GkBZIAKp/8i30J6Pt+Z9/hX7UAnHqFUEeR85fCRYpIoDWq3/5ONjnFwl7TmPxk4paug yTGdacslMwR4GUSBp01K+ac8Fwyf0RSJcX7DUFyrJjbTzu1tldJ60S0IbNsra/9x7jgH RAcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DmJLU3lLloiRIzTrFiKr51ibGPmYDkjTwvTmssOhyXM=; b=iispAPeGaVrFERRxzgpaukuGk86JGfsxK4PJgo6AQiW8xovj+36NRZ8mESC77ZIU7r TgcMuj3ACB56knmF4X8UHM4F6yv6NeZEM/8XkSmloaGgZXugh5C8ruZo+C+mgOmgtArV 7g6FkpBqFSpA/vZUu0cvkjXp8EQF5Fm+u9fGRNs7Z2uKZFynWk7yEeFur3VeDsYpHhCv 66CZws11nfk6VZJWs3sp7C80gIEtga/8UQMjgsbh5NzsnDTu9OtQqqXWa7hdyoCqIpms eec9xWVL+C3dP2itGHNxLbOyfVWDTn0nH8RSjRuecALOYYi8WmT6mKxy7mobJFzj7jme MLmg== X-Gm-Message-State: AO0yUKURDs1khMk1NCm9wvoUlof3JcuumLw07DFxb8OLExBo2zf2eyW6 gfQXkTb3rI7CVse/VrclcBwxHYBFLHI= X-Google-Smtp-Source: AK7set/vOSBDMA02EhnNeMEsAY3U81sPFS9NCzx0+z0qQzKlCWEd5ApHzLA263/x2OyI0y2dWzoM8A== X-Received: by 2002:a05:600c:3420:b0:3e2:c67:1c7f with SMTP id y32-20020a05600c342000b003e20c671c7fmr13642025wmp.10.1677291968449; Fri, 24 Feb 2023 18:26:08 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id h18-20020a05600c351200b003eb192787bfsm958712wmq.25.2023.02.24.18.26.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:08 -0800 (PST) Message-Id: <993da584dbb92b682e86d5ce63451c8203eeecd7.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:56 +0000 Subject: [PATCH v2 07/11] unpack_trees: start splitting internal fields from public API Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren This just splits the two fields already marked as internal-only into a separate internal struct. Future commits will add more fields that were meant to be internal-only but were not explicitly marked as such to the same struct. Signed-off-by: Elijah Newren --- unpack-trees.c | 42 +++++++++++++++++++++--------------------- unpack-trees.h | 7 +++++-- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index 4fca051cbea..c659af67c62 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1809,7 +1809,7 @@ static void populate_from_existing_patterns(struct unpack_trees_options *o, if (get_sparse_checkout_patterns(pl) < 0) o->skip_sparse_checkout = 1; else - o->pl = pl; + o->internal.pl = pl; } static void update_sparsity_for_prefix(const char *prefix, @@ -1871,10 +1871,10 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options if (len > MAX_UNPACK_TREES) die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES); - if (o->dir) - BUG("o->dir is for internal use only"); - if (o->pl) - BUG("o->pl is for internal use only"); + if (o->internal.dir) + BUG("o->internal.dir is for internal use only"); + if (o->internal.pl) + BUG("o->internal.pl is for internal use only"); trace_performance_enter(); trace2_region_enter("unpack_trees", "unpack_trees", the_repository); @@ -1891,9 +1891,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options BUG("UNPACK_RESET_OVERWRITE_UNTRACKED incompatible with preserved ignored files"); if (!o->preserve_ignored) { - o->dir = &dir; - o->dir->flags |= DIR_SHOW_IGNORED; - setup_standard_excludes(o->dir); + o->internal.dir = &dir; + o->internal.dir->flags |= DIR_SHOW_IGNORED; + setup_standard_excludes(o->internal.dir); } if (o->prefix) @@ -1943,7 +1943,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options * Sparse checkout loop #1: set NEW_SKIP_WORKTREE on existing entries */ if (!o->skip_sparse_checkout) - mark_new_skip_worktree(o->pl, o->src_index, 0, + mark_new_skip_worktree(o->internal.pl, o->src_index, 0, CE_NEW_SKIP_WORKTREE, o->verbose_update); if (!dfc) @@ -2009,7 +2009,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options * If they will have NEW_SKIP_WORKTREE, also set CE_SKIP_WORKTREE * so apply_sparse_checkout() won't attempt to remove it from worktree */ - mark_new_skip_worktree(o->pl, &o->result, + mark_new_skip_worktree(o->internal.pl, &o->result, CE_ADDED, CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE, o->verbose_update); @@ -2067,9 +2067,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options done: if (free_pattern_list) clear_pattern_list(&pl); - if (o->dir) { - dir_clear(o->dir); - o->dir = NULL; + if (o->internal.dir) { + dir_clear(o->internal.dir); + o->internal.dir = NULL; } trace2_region_leave("unpack_trees", "unpack_trees", the_repository); trace_performance_leave("unpack_trees"); @@ -2117,14 +2117,14 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o, pl = xcalloc(1, sizeof(*pl)); populate_from_existing_patterns(o, pl); } - o->pl = pl; + o->internal.pl = pl; /* Expand sparse directories as needed */ - expand_index(o->src_index, o->pl); + expand_index(o->src_index, o->internal.pl); /* Set NEW_SKIP_WORKTREE on existing entries. */ mark_all_ce_unused(o->src_index); - mark_new_skip_worktree(o->pl, o->src_index, 0, + mark_new_skip_worktree(o->internal.pl, o->src_index, 0, CE_NEW_SKIP_WORKTREE, o->verbose_update); /* Then loop over entries and update/remove as needed */ @@ -2152,7 +2152,7 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o, if (free_pattern_list) { clear_pattern_list(pl); free(pl); - o->pl = NULL; + o->internal.pl = NULL; } trace_performance_leave("update_sparsity"); return ret; @@ -2340,8 +2340,8 @@ static int verify_clean_subdirectory(const struct cache_entry *ce, pathbuf = xstrfmt("%.*s/", namelen, ce->name); memset(&d, 0, sizeof(d)); - if (o->dir) - d.exclude_per_dir = o->dir->exclude_per_dir; + if (o->internal.dir) + d.exclude_per_dir = o->internal.dir->exclude_per_dir; i = read_directory(&d, o->src_index, pathbuf, namelen+1, NULL); dir_clear(&d); free(pathbuf); @@ -2395,8 +2395,8 @@ static int check_ok_to_remove(const char *name, int len, int dtype, if (ignore_case && icase_exists(o, name, len, st)) return 0; - if (o->dir && - is_excluded(o->dir, o->src_index, name, &dtype)) + if (o->internal.dir && + is_excluded(o->internal.dir, o->src_index, name, &dtype)) /* * ce->name is explicitly excluded, so it is Ok to * overwrite it. diff --git a/unpack-trees.h b/unpack-trees.h index f3a6e4f90ef..5c1a9314a06 100644 --- a/unpack-trees.h +++ b/unpack-trees.h @@ -97,9 +97,12 @@ struct unpack_trees_options { struct index_state *src_index; struct index_state result; - struct pattern_list *pl; /* for internal use */ - struct dir_struct *dir; /* for internal use only */ struct checkout_metadata meta; + + struct unpack_trees_options_internal { + struct pattern_list *pl; + struct dir_struct *dir; + } internal; }; int unpack_trees(unsigned n, struct tree_desc *t, From patchwork Sat Feb 25 02:25:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152011 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D7B90C64ED8 for ; Sat, 25 Feb 2023 02:26:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229595AbjBYC0g (ORCPT ); Fri, 24 Feb 2023 21:26:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229543AbjBYC01 (ORCPT ); Fri, 24 Feb 2023 21:26:27 -0500 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5D0E34617A for ; Fri, 24 Feb 2023 18:26:11 -0800 (PST) Received: by mail-wr1-x432.google.com with SMTP id l1so1029934wry.10 for ; Fri, 24 Feb 2023 18:26:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=dMbb9MPRJd861S/IpqkPMj7e9HmpWFjSVOIHk/6QDEQ=; b=kVo3Mzwjch8Kmk+7HDawzvnPYriYOozsiu7Y00EmlY55b3FFU6W9PJ/bZheMsJgFTt jitPMO+3XaZv6C/HKZtV71IKueaBgmOmh08n4H4nilcOKElzaxKVvCVc50ZXYbWf4yhA IEc74dFOUeVq+MVBQZWhDyt5Gp4AB77CXGRm/Q86otYQmA1fKHu+jD1ZHRRVLL9O+cR+ k0OBDdjz6vVfHaqeDglrpoOtyEaQSqij+IFtChzo34Z0iokwKUdPcS4hmAgMCc7kPtwe H+cG6dSFopkZzagFHPAeXAO+b50nBhNvew+afC/HFplI4OP8mJDuEjIneQ73lUlRpJqI Nt7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dMbb9MPRJd861S/IpqkPMj7e9HmpWFjSVOIHk/6QDEQ=; b=ZUGoY6RcSqOgbiRufeVgX/sYbf7UA+Mp+nAxkx84IRpkfF3ld7jHGj8ihF9ux96rd2 +pRi4eHgeEuMsVCWG25IhUUy5+yiTj1j68FZzYNZxbKwovVmDeik9nUp/j8QA0MekTeo fqI6IY+LraxOutyaBZx3VUSXMIuJnkVALMezHaLdOuT+yX3Lwtl2sSHWfNbxBIEOfjUx Kpml+F8jWcHDkUgeDQX+jLOb810iuW/woV1OwxnjKkrZL8fefDDFzPDIbre1L1Uv94/X 5LQ0QVOZgYoNZYr6z3fSD9P0gUaFEuktzf1hjPI8TAwGVN6NjKHriqud7yrlC9YdjBeJ F53w== X-Gm-Message-State: AO0yUKWCgokp+zTnNIMYOHtk22wufHjzzC1fRaDFx8m7H3bDDg68ZQUf U1woX0DfuaeeuctLb/yBdaX1kbjS5wQ= X-Google-Smtp-Source: AK7set8NcvpaRYzzIrGX/3S2nzAF4OlEGIDVjrBI7xPIP7Zh36OM4yYKTdAi/giIOhAaBdopo5tP7Q== X-Received: by 2002:a05:6000:1008:b0:2c5:7f21:1277 with SMTP id a8-20020a056000100800b002c57f211277mr17448171wrx.68.1677291969195; Fri, 24 Feb 2023 18:26:09 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id o18-20020a05600c4fd200b003eaf666cbe0sm975085wmq.27.2023.02.24.18.26.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:08 -0800 (PST) Message-Id: <8ecb24a45f08e58c081a53557eb147b5e65a42cf.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:57 +0000 Subject: [PATCH v2 08/11] unpack-trees: mark fields only used internally as internal Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren Continue the work from the previous patch by finding additional fields which are only used internally but not yet explicitly marked as such, and include them in the internal fields struct. Signed-off-by: Elijah Newren --- unpack-trees.c | 159 +++++++++++++++++++++++++------------------------ unpack-trees.h | 26 ++++---- 2 files changed, 95 insertions(+), 90 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index c659af67c62..f5294194aa1 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -66,8 +66,8 @@ static const char *unpack_plumbing_errors[NB_UNPACK_TREES_WARNING_TYPES] = { }; #define ERRORMSG(o,type) \ - ( ((o) && (o)->msgs[(type)]) \ - ? ((o)->msgs[(type)]) \ + ( ((o) && (o)->internal.msgs[(type)]) \ + ? ((o)->internal.msgs[(type)]) \ : (unpack_plumbing_errors[(type)]) ) static const char *super_prefixed(const char *path, const char *super_prefix) @@ -108,10 +108,10 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, const char *cmd) { int i; - const char **msgs = opts->msgs; + const char **msgs = opts->internal.msgs; const char *msg; - strvec_init(&opts->msgs_to_free); + strvec_init(&opts->internal.msgs_to_free); if (!strcmp(cmd, "checkout")) msg = advice_enabled(ADVICE_COMMIT_BEFORE_MERGE) @@ -129,7 +129,7 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, "Please commit your changes or stash them before you %s.") : _("Your local changes to the following files would be overwritten by %s:\n%%s"); msgs[ERROR_WOULD_OVERWRITE] = msgs[ERROR_NOT_UPTODATE_FILE] = - strvec_pushf(&opts->msgs_to_free, msg, cmd, cmd); + strvec_pushf(&opts->internal.msgs_to_free, msg, cmd, cmd); msgs[ERROR_NOT_UPTODATE_DIR] = _("Updating the following directories would lose untracked files in them:\n%s"); @@ -153,7 +153,7 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, "Please move or remove them before you %s.") : _("The following untracked working tree files would be removed by %s:\n%%s"); msgs[ERROR_WOULD_LOSE_UNTRACKED_REMOVED] = - strvec_pushf(&opts->msgs_to_free, msg, cmd, cmd); + strvec_pushf(&opts->internal.msgs_to_free, msg, cmd, cmd); if (!strcmp(cmd, "checkout")) msg = advice_enabled(ADVICE_COMMIT_BEFORE_MERGE) @@ -171,7 +171,7 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, "Please move or remove them before you %s.") : _("The following untracked working tree files would be overwritten by %s:\n%%s"); msgs[ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN] = - strvec_pushf(&opts->msgs_to_free, msg, cmd, cmd); + strvec_pushf(&opts->internal.msgs_to_free, msg, cmd, cmd); /* * Special case: ERROR_BIND_OVERLAP refers to a pair of paths, we @@ -189,16 +189,16 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, msgs[WARNING_SPARSE_ORPHANED_NOT_OVERWRITTEN] = _("The following paths were already present and thus not updated despite sparse patterns:\n%s"); - opts->show_all_errors = 1; + opts->internal.show_all_errors = 1; /* rejected paths may not have a static buffer */ - for (i = 0; i < ARRAY_SIZE(opts->unpack_rejects); i++) - opts->unpack_rejects[i].strdup_strings = 1; + for (i = 0; i < ARRAY_SIZE(opts->internal.unpack_rejects); i++) + opts->internal.unpack_rejects[i].strdup_strings = 1; } void clear_unpack_trees_porcelain(struct unpack_trees_options *opts) { - strvec_clear(&opts->msgs_to_free); - memset(opts->msgs, 0, sizeof(opts->msgs)); + strvec_clear(&opts->internal.msgs_to_free); + memset(opts->internal.msgs, 0, sizeof(opts->internal.msgs)); } static int do_add_entry(struct unpack_trees_options *o, struct cache_entry *ce, @@ -210,7 +210,7 @@ static int do_add_entry(struct unpack_trees_options *o, struct cache_entry *ce, set |= CE_WT_REMOVE; ce->ce_flags = (ce->ce_flags & ~clear) | set; - return add_index_entry(&o->result, ce, + return add_index_entry(&o->internal.result, ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE); } @@ -218,7 +218,7 @@ static void add_entry(struct unpack_trees_options *o, const struct cache_entry *ce, unsigned int set, unsigned int clear) { - do_add_entry(o, dup_cache_entry(ce, &o->result), set, clear); + do_add_entry(o, dup_cache_entry(ce, &o->internal.result), set, clear); } /* @@ -233,7 +233,7 @@ static int add_rejected_path(struct unpack_trees_options *o, if (o->quiet) return -1; - if (!o->show_all_errors) + if (!o->internal.show_all_errors) return error(ERRORMSG(o, e), super_prefixed(path, o->super_prefix)); @@ -241,7 +241,7 @@ static int add_rejected_path(struct unpack_trees_options *o, * Otherwise, insert in a list for future display by * display_(error|warning)_msgs() */ - string_list_append(&o->unpack_rejects[e], path); + string_list_append(&o->internal.unpack_rejects[e], path); return -1; } @@ -253,7 +253,7 @@ static void display_error_msgs(struct unpack_trees_options *o) int e; unsigned error_displayed = 0; for (e = 0; e < NB_UNPACK_TREES_ERROR_TYPES; e++) { - struct string_list *rejects = &o->unpack_rejects[e]; + struct string_list *rejects = &o->internal.unpack_rejects[e]; if (rejects->nr > 0) { int i; @@ -281,7 +281,7 @@ static void display_warning_msgs(struct unpack_trees_options *o) unsigned warning_displayed = 0; for (e = NB_UNPACK_TREES_ERROR_TYPES + 1; e < NB_UNPACK_TREES_WARNING_TYPES; e++) { - struct string_list *rejects = &o->unpack_rejects[e]; + struct string_list *rejects = &o->internal.unpack_rejects[e]; if (rejects->nr > 0) { int i; @@ -600,13 +600,14 @@ static void mark_ce_used(struct cache_entry *ce, struct unpack_trees_options *o) { ce->ce_flags |= CE_UNPACKED; - if (o->cache_bottom < o->src_index->cache_nr && - o->src_index->cache[o->cache_bottom] == ce) { - int bottom = o->cache_bottom; + if (o->internal.cache_bottom < o->src_index->cache_nr && + o->src_index->cache[o->internal.cache_bottom] == ce) { + int bottom = o->internal.cache_bottom; + while (bottom < o->src_index->cache_nr && o->src_index->cache[bottom]->ce_flags & CE_UNPACKED) bottom++; - o->cache_bottom = bottom; + o->internal.cache_bottom = bottom; } } @@ -652,7 +653,7 @@ static void mark_ce_used_same_name(struct cache_entry *ce, static struct cache_entry *next_cache_entry(struct unpack_trees_options *o) { const struct index_state *index = o->src_index; - int pos = o->cache_bottom; + int pos = o->internal.cache_bottom; while (pos < index->cache_nr) { struct cache_entry *ce = index->cache[pos]; @@ -711,7 +712,7 @@ static void restore_cache_bottom(struct traverse_info *info, int bottom) if (o->diff_index_cached) return; - o->cache_bottom = bottom; + o->internal.cache_bottom = bottom; } static int switch_cache_bottom(struct traverse_info *info) @@ -721,13 +722,13 @@ static int switch_cache_bottom(struct traverse_info *info) if (o->diff_index_cached) return 0; - ret = o->cache_bottom; + ret = o->internal.cache_bottom; pos = find_cache_pos(info->prev, info->name, info->namelen); if (pos < -1) - o->cache_bottom = -2 - pos; + o->internal.cache_bottom = -2 - pos; else if (pos < 0) - o->cache_bottom = o->src_index->cache_nr; + o->internal.cache_bottom = o->src_index->cache_nr; return ret; } @@ -873,9 +874,9 @@ static int traverse_trees_recursive(int n, unsigned long dirmask, * save and restore cache_bottom anyway to not miss * unprocessed entries before 'pos'. */ - bottom = o->cache_bottom; + bottom = o->internal.cache_bottom; ret = traverse_by_cache_tree(pos, nr_entries, n, info); - o->cache_bottom = bottom; + o->internal.cache_bottom = bottom; return ret; } @@ -1212,7 +1213,7 @@ static int unpack_single_entry(int n, unsigned long mask, * cache entry from the index aware logic. */ src[i + o->merge] = create_ce_entry(info, names + i, stage, - &o->result, o->merge, + &o->internal.result, o->merge, bit & dirmask); } @@ -1237,7 +1238,7 @@ static int unpack_single_entry(int n, unsigned long mask, static int unpack_failed(struct unpack_trees_options *o, const char *message) { - discard_index(&o->result); + discard_index(&o->internal.result); if (!o->quiet && !o->exiting_early) { if (message) return error("%s", message); @@ -1260,7 +1261,7 @@ static int find_cache_pos(struct traverse_info *info, struct index_state *index = o->src_index; int pfxlen = info->pathlen; - for (pos = o->cache_bottom; pos < index->cache_nr; pos++) { + for (pos = o->internal.cache_bottom; pos < index->cache_nr; pos++) { const struct cache_entry *ce = index->cache[pos]; const char *ce_name, *ce_slash; int cmp, ce_len; @@ -1271,8 +1272,8 @@ static int find_cache_pos(struct traverse_info *info, * we can never match it; don't check it * again. */ - if (pos == o->cache_bottom) - ++o->cache_bottom; + if (pos == o->internal.cache_bottom) + ++o->internal.cache_bottom; continue; } if (!ce_in_traverse_path(ce, info)) { @@ -1450,7 +1451,7 @@ static int unpack_sparse_callback(int n, unsigned long mask, unsigned long dirma */ if (!is_null_oid(&names[0].oid)) { src[0] = create_ce_entry(info, &names[0], 0, - &o->result, 1, + &o->internal.result, 1, dirmask & (1ul << 0)); src[0]->ce_flags |= (CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE); } @@ -1560,7 +1561,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str * in 'mark_ce_used()' */ if (!src[0] || !S_ISSPARSEDIR(src[0]->ce_mode)) - o->cache_bottom += matches; + o->internal.cache_bottom += matches; return mask; } } @@ -1907,37 +1908,37 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options populate_from_existing_patterns(o, &pl); } - index_state_init(&o->result, o->src_index->repo); - o->result.initialized = 1; - o->result.timestamp.sec = o->src_index->timestamp.sec; - o->result.timestamp.nsec = o->src_index->timestamp.nsec; - o->result.version = o->src_index->version; + index_state_init(&o->internal.result, o->src_index->repo); + o->internal.result.initialized = 1; + o->internal.result.timestamp.sec = o->src_index->timestamp.sec; + o->internal.result.timestamp.nsec = o->src_index->timestamp.nsec; + o->internal.result.version = o->src_index->version; if (!o->src_index->split_index) { - o->result.split_index = NULL; + o->internal.result.split_index = NULL; } else if (o->src_index == o->dst_index) { /* * o->dst_index (and thus o->src_index) will be discarded - * and overwritten with o->result at the end of this function, + * and overwritten with o->internal.result at the end of this function, * so just use src_index's split_index to avoid having to * create a new one. */ - o->result.split_index = o->src_index->split_index; - o->result.split_index->refcount++; + o->internal.result.split_index = o->src_index->split_index; + o->internal.result.split_index->refcount++; } else { - o->result.split_index = init_split_index(&o->result); + o->internal.result.split_index = init_split_index(&o->internal.result); } - oidcpy(&o->result.oid, &o->src_index->oid); + oidcpy(&o->internal.result.oid, &o->src_index->oid); o->merge_size = len; mark_all_ce_unused(o->src_index); - o->result.fsmonitor_last_update = + o->internal.result.fsmonitor_last_update = xstrdup_or_null(o->src_index->fsmonitor_last_update); - o->result.fsmonitor_has_run_once = o->src_index->fsmonitor_has_run_once; + o->internal.result.fsmonitor_has_run_once = o->src_index->fsmonitor_has_run_once; if (!o->src_index->initialized && !repo->settings.command_requires_full_index && - is_sparse_index_allowed(&o->result, 0)) - o->result.sparse_index = 1; + is_sparse_index_allowed(&o->internal.result, 0)) + o->internal.result.sparse_index = 1; /* * Sparse checkout loop #1: set NEW_SKIP_WORKTREE on existing entries @@ -1957,7 +1958,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options setup_traverse_info(&info, prefix); info.fn = unpack_callback; info.data = o; - info.show_all_errors = o->show_all_errors; + info.show_all_errors = o->internal.show_all_errors; info.pathspec = o->pathspec; if (o->prefix) { @@ -1998,7 +1999,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options } mark_all_ce_unused(o->src_index); - if (o->trivial_merges_only && o->nontrivial_merge) { + if (o->trivial_merges_only && o->internal.nontrivial_merge) { ret = unpack_failed(o, "Merge requires file-level merging"); goto done; } @@ -2009,13 +2010,13 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options * If they will have NEW_SKIP_WORKTREE, also set CE_SKIP_WORKTREE * so apply_sparse_checkout() won't attempt to remove it from worktree */ - mark_new_skip_worktree(o->internal.pl, &o->result, + mark_new_skip_worktree(o->internal.pl, &o->internal.result, CE_ADDED, CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE, o->verbose_update); ret = 0; - for (i = 0; i < o->result.cache_nr; i++) { - struct cache_entry *ce = o->result.cache[i]; + for (i = 0; i < o->internal.result.cache_nr; i++) { + struct cache_entry *ce = o->internal.result.cache[i]; /* * Entries marked with CE_ADDED in merged_entry() do not have @@ -2029,7 +2030,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options verify_absent(ce, WARNING_SPARSE_ORPHANED_NOT_OVERWRITTEN, o)) ret = 1; - if (apply_sparse_checkout(&o->result, ce, o)) + if (apply_sparse_checkout(&o->internal.result, ce, o)) ret = 1; } if (ret == 1) { @@ -2037,30 +2038,30 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options * Inability to sparsify or de-sparsify individual * paths is not an error, but just a warning. */ - if (o->show_all_errors) + if (o->internal.show_all_errors) display_warning_msgs(o); ret = 0; } } - ret = check_updates(o, &o->result) ? (-2) : 0; + ret = check_updates(o, &o->internal.result) ? (-2) : 0; if (o->dst_index) { - move_index_extensions(&o->result, o->src_index); + move_index_extensions(&o->internal.result, o->src_index); if (!ret) { if (git_env_bool("GIT_TEST_CHECK_CACHE_TREE", 0)) - cache_tree_verify(the_repository, &o->result); + cache_tree_verify(the_repository, &o->internal.result); if (!o->skip_cache_tree_update && - !cache_tree_fully_valid(o->result.cache_tree)) - cache_tree_update(&o->result, + !cache_tree_fully_valid(o->internal.result.cache_tree)) + cache_tree_update(&o->internal.result, WRITE_TREE_SILENT | WRITE_TREE_REPAIR); } - o->result.updated_workdir = 1; + o->internal.result.updated_workdir = 1; discard_index(o->dst_index); - *o->dst_index = o->result; + *o->dst_index = o->internal.result; } else { - discard_index(&o->result); + discard_index(&o->internal.result); } o->src_index = NULL; @@ -2076,7 +2077,7 @@ done: return ret; return_failed: - if (o->show_all_errors) + if (o->internal.show_all_errors) display_error_msgs(o); mark_all_ce_unused(o->src_index); ret = unpack_failed(o, NULL); @@ -2099,9 +2100,9 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o, unsigned old_show_all_errors; int free_pattern_list = 0; - old_show_all_errors = o->show_all_errors; - o->show_all_errors = 1; - index_state_init(&o->result, o->src_index->repo); + old_show_all_errors = o->internal.show_all_errors; + o->internal.show_all_errors = 1; + index_state_init(&o->internal.result, o->src_index->repo); /* Sanity checks */ if (!o->update || o->index_only || o->skip_sparse_checkout) @@ -2148,7 +2149,7 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o, ret = UPDATE_SPARSITY_WORKTREE_UPDATE_FAILURES; display_warning_msgs(o); - o->show_all_errors = old_show_all_errors; + o->internal.show_all_errors = old_show_all_errors; if (free_pattern_list) { clear_pattern_list(pl); free(pl); @@ -2248,15 +2249,15 @@ static int verify_uptodate_sparse(const struct cache_entry *ce, } /* - * TODO: We should actually invalidate o->result, not src_index [1]. + * TODO: We should actually invalidate o->internal.result, not src_index [1]. * But since cache tree and untracked cache both are not copied to - * o->result until unpacking is complete, we invalidate them on + * o->internal.result until unpacking is complete, we invalidate them on * src_index instead with the assumption that they will be copied to * dst_index at the end. * * [1] src_index->cache_tree is also used in unpack_callback() so if - * we invalidate o->result, we need to update it to use - * o->result.cache_tree as well. + * we invalidate o->internal.result, we need to update it to use + * o->internal.result.cache_tree as well. */ static void invalidate_ce_path(const struct cache_entry *ce, struct unpack_trees_options *o) @@ -2424,7 +2425,7 @@ static int check_ok_to_remove(const char *name, int len, int dtype, * delete this path, which is in a subdirectory that * is being replaced with a blob. */ - result = index_file_exists(&o->result, name, len, 0); + result = index_file_exists(&o->internal.result, name, len, 0); if (result) { if (result->ce_flags & CE_REMOVE) return 0; @@ -2525,7 +2526,7 @@ static int merged_entry(const struct cache_entry *ce, struct unpack_trees_options *o) { int update = CE_UPDATE; - struct cache_entry *merge = dup_cache_entry(ce, &o->result); + struct cache_entry *merge = dup_cache_entry(ce, &o->internal.result); if (!old) { /* @@ -2620,7 +2621,7 @@ static int merged_sparse_dir(const struct cache_entry * const *src, int n, setup_traverse_info(&info, src[0]->name); info.fn = unpack_sparse_callback; info.data = o; - info.show_all_errors = o->show_all_errors; + info.show_all_errors = o->internal.show_all_errors; info.pathspec = o->pathspec; /* Get the tree descriptors of the sparse directory in each of the merging trees */ @@ -2838,7 +2839,7 @@ int threeway_merge(const struct cache_entry * const *stages, return -1; } - o->nontrivial_merge = 1; + o->internal.nontrivial_merge = 1; /* #2, #3, #4, #6, #7, #9, #10, #11. */ count = 0; diff --git a/unpack-trees.h b/unpack-trees.h index 5c1a9314a06..0335c89bc75 100644 --- a/unpack-trees.h +++ b/unpack-trees.h @@ -59,7 +59,6 @@ struct unpack_trees_options { preserve_ignored, clone, index_only, - nontrivial_merge, trivial_merges_only, verbose_update, aggressive, @@ -70,22 +69,13 @@ struct unpack_trees_options { skip_sparse_checkout, quiet, exiting_early, - show_all_errors, dry_run, skip_cache_tree_update; enum unpack_trees_reset_type reset; const char *prefix; const char *super_prefix; - int cache_bottom; struct pathspec *pathspec; merge_fn_t fn; - const char *msgs[NB_UNPACK_TREES_WARNING_TYPES]; - struct strvec msgs_to_free; - /* - * Store error messages in an array, each case - * corresponding to a error message type - */ - struct string_list unpack_rejects[NB_UNPACK_TREES_WARNING_TYPES]; int head_idx; int merge_size; @@ -95,11 +85,25 @@ struct unpack_trees_options { struct index_state *dst_index; struct index_state *src_index; - struct index_state result; struct checkout_metadata meta; struct unpack_trees_options_internal { + unsigned int nontrivial_merge, + show_all_errors; + + int cache_bottom; + const char *msgs[NB_UNPACK_TREES_WARNING_TYPES]; + struct strvec msgs_to_free; + + /* + * Store error messages in an array, each case + * corresponding to a error message type + */ + struct string_list unpack_rejects[NB_UNPACK_TREES_WARNING_TYPES]; + + struct index_state result; + struct pattern_list *pl; struct dir_struct *dir; } internal; From patchwork Sat Feb 25 02:25:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152007 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D03BDC64ED8 for ; Sat, 25 Feb 2023 02:26:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229581AbjBYC03 (ORCPT ); Fri, 24 Feb 2023 21:26:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229525AbjBYC0L (ORCPT ); Fri, 24 Feb 2023 21:26:11 -0500 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 9D44141094 for ; Fri, 24 Feb 2023 18:26:10 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id h14so1055442wru.4 for ; Fri, 24 Feb 2023 18:26:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=KcWN0y3xpOfOqMBy6AjaImaPeMb1HRl0zQd1eTyjsNA=; b=nlBMafh5jCYpuDneTBnbxkEriME8o752GmPJYxxT3wOsxUqw8tmPtbTuDB6h23ubIK Px79TQO3QED0+iB50B4YZ7SdYI98+SgfH5raz4Tkhf4wNLgkeSA3qFJ9gKO3mZEhUbgr CiUjgd/Hy+tc9bFzlFSOGN01thoGVqYohIJzyH8iuec9nT7bSbEA270zcabHFYX2u7Jx sWy7Wo1SK5Tqy2y6+nhqg9H26K2y7GQrKKFEV9Alf/rAuL84m8Tanzmo3qM0CTVnTw3X 7E8jfIbjhByd939/KfGWTcP6jCGQBUVUMlP3M6VEWX6B5+zZIhMd4FpamK5vq8z1MbQ0 8XYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KcWN0y3xpOfOqMBy6AjaImaPeMb1HRl0zQd1eTyjsNA=; b=w1azbZ5SHSu3DbCUyk99pV0ciaoMtnhNuf9k9qLJmA65Wq51qnPYaGAFkLpILeruT2 HdF3z/oQsgqjIEcCboNBbR2AJG1AOdGQBugSvAgwNCAdOJjEOfLpyh4zMyjQELhcNd1z Q+RPtEd0akOKA3T9qCAXIj4TqXOU1uQQiQU2R3RI8TbPvXAkuNWgHBnhwLZHLZlorzaI 9lLBot+lHsFosaN8pH5+BJ2bZTGrPyrFBV9Vv6b9kEVRbroBTfCniWF+2fd/J3N2LdBu Evd6qzRccc19/GCaI6XMang+/RuMXjIMfS44OwGf5iUQTf9FFq9LVNEoqOMwoJZL2trd LuDA== X-Gm-Message-State: AO0yUKULfRSnU62p7K89NjnzGWqzVB7YulOPr+bbi9XjrPHFZXI+4L8f HgxgeXXuXrzptzFCAbGbSk43K5I0JhQ= X-Google-Smtp-Source: AK7set9XYdrL5W+zcqWIZrKCKUblIZrputfNirpDio3HQLFg9VR+EqHoItxjjfhClpGhyqTLvQv9Xg== X-Received: by 2002:adf:ffc7:0:b0:2c8:6fea:21b1 with SMTP id x7-20020adfffc7000000b002c86fea21b1mr1647037wrs.62.1677291969943; Fri, 24 Feb 2023 18:26:09 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id a13-20020a056000100d00b002c6e84cadcbsm387873wrx.72.2023.02.24.18.26.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:09 -0800 (PST) Message-Id: <36ca49c36242384a74c288389c27e5690fc73565.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:58 +0000 Subject: [PATCH v2 09/11] unpack-trees: rewrap a few overlong lines from previous patch Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren The previous patch made many lines a little longer, resulting in four becoming a bit too long. They were left as-is for the previous patch to facilitate reviewers verifying that we were just adding "internal." in a bunch of places, but rewrap them now. Signed-off-by: Elijah Newren --- unpack-trees.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index f5294194aa1..985896d6af6 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1213,8 +1213,8 @@ static int unpack_single_entry(int n, unsigned long mask, * cache entry from the index aware logic. */ src[i + o->merge] = create_ce_entry(info, names + i, stage, - &o->internal.result, o->merge, - bit & dirmask); + &o->internal.result, + o->merge, bit & dirmask); } if (o->merge) { @@ -1918,14 +1918,15 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options } else if (o->src_index == o->dst_index) { /* * o->dst_index (and thus o->src_index) will be discarded - * and overwritten with o->internal.result at the end of this function, - * so just use src_index's split_index to avoid having to - * create a new one. + * and overwritten with o->internal.result at the end of + * this function, so just use src_index's split_index to + * avoid having to create a new one. */ o->internal.result.split_index = o->src_index->split_index; o->internal.result.split_index->refcount++; } else { - o->internal.result.split_index = init_split_index(&o->internal.result); + o->internal.result.split_index = + init_split_index(&o->internal.result); } oidcpy(&o->internal.result.oid, &o->src_index->oid); o->merge_size = len; @@ -2049,7 +2050,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options move_index_extensions(&o->internal.result, o->src_index); if (!ret) { if (git_env_bool("GIT_TEST_CHECK_CACHE_TREE", 0)) - cache_tree_verify(the_repository, &o->internal.result); + cache_tree_verify(the_repository, + &o->internal.result); if (!o->skip_cache_tree_update && !cache_tree_fully_valid(o->internal.result.cache_tree)) cache_tree_update(&o->internal.result, From patchwork Sat Feb 25 02:25:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152010 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44FF4C6FA8E for ; Sat, 25 Feb 2023 02:26:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229492AbjBYC0e (ORCPT ); Fri, 24 Feb 2023 21:26:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229515AbjBYC01 (ORCPT ); Fri, 24 Feb 2023 21:26:27 -0500 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A0BFE68693 for ; Fri, 24 Feb 2023 18:26:12 -0800 (PST) Received: by mail-wr1-x435.google.com with SMTP id bt28so1040572wrb.8 for ; Fri, 24 Feb 2023 18:26:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=as+x1b3MsWKauOgDqZQuTNqTJkOTVUMhmysHQsKXQOA=; b=mmsx8sLMEQUtEMcpDemwpWLzJRuydP/wpliwxOg5NQD8FxvVugbTdLtbfBM2uaHYPB XCNPa04RZmcpCK9yUdRTkWJSuFNmKvZ7cvPZ1WTwKAAVFjQuLuJrKPDBHsSeImN7ZDgs m2Fzw9DZOSbBR3/m/HqcpjOzojzfsl7IZczJk9yBSs3iVR1yWIk4KF15FvAAFcB3ewMb SNcZ4h1ItZjJniXcNPkf+dr1j7NRBehqVKBCkO2DDWVeP1XiGclrt5xUIxj8o3tsN2gV IcuIj8Fo2JJpQqVBCQlZJDh6n2L7sc1mwQKOePhV7nZsR7MGMNqnoo+5Mxw+N57L/ZT4 q6mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=as+x1b3MsWKauOgDqZQuTNqTJkOTVUMhmysHQsKXQOA=; b=PL5l5QxJV7N8QuEx0e/JE9zYe+jgAiAhBX9mLMyWuFaSyU0mweRPOqbI8oPYztGsTd gXhQ/TKyfY4XJ8dQsMtUt0x+qH/ChDA6P5EYyX15ngS8jTvpMaHnGx7nNUha4wvdRTCY IHWdcn6f/0V+97S5w8EcJ1BfKhb/3QE6QRjfTKMxjwS/ZoyLUip+Qf8hSD7/sPbK+4Kd mPSrLHz6XDw2mnV7uR+dDPUzoXpwyHK+6DGAfbxQk0uWX6OchGfOc3Z2RdH+yNXDuse9 XqcR7/kPCb+7fMOmyR931j5jf102/vlR0xquruSu4PPslrPC76GOqnLmGIapMSHTfcEg lO2g== X-Gm-Message-State: AO0yUKUIT/bZoVVHcl2bPLiMheGfD8adWQaDyZXeEe0o66Nte7sZzKvO SzPGzF3ewHGm/T19VtavlFmiYp3GUmU= X-Google-Smtp-Source: AK7set+7/Acb0EGGGnABNw5b1cfNTS0bXcU/tgKwyXEeT/S9audLdux8kkUcp0BNmFZpWq/IyPzC6Q== X-Received: by 2002:a05:6000:108a:b0:2c5:9fb3:ec0a with SMTP id y10-20020a056000108a00b002c59fb3ec0amr17050471wrw.34.1677291970755; Fri, 24 Feb 2023 18:26:10 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id y18-20020adffa52000000b002c55efa9cbesm397266wrr.39.2023.02.24.18.26.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:10 -0800 (PST) Message-Id: <5af04d7fe2334d426dc0ba59f74ce2b082436773.1677291961.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sat, 25 Feb 2023 02:25:59 +0000 Subject: [PATCH v2 10/11] unpack-trees: special case read-tree debugging as internal usage Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren builtin/read-tree.c has some special functionality explicitly designed for debugging unpack-trees.[ch]. Associated with that is two fields that no other external caller would or should use. Mark these as internal to unpack-trees, but allow builtin/read-tree to read or write them for this special case. Signed-off-by: Elijah Newren --- builtin/read-tree.c | 10 +++++----- unpack-trees.c | 22 +++++++++++----------- unpack-trees.h | 6 +++--- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/builtin/read-tree.c b/builtin/read-tree.c index 3ce75417833..6034408d486 100644 --- a/builtin/read-tree.c +++ b/builtin/read-tree.c @@ -87,9 +87,9 @@ static int debug_merge(const struct cache_entry * const *stages, { int i; - printf("* %d-way merge\n", o->merge_size); + printf("* %d-way merge\n", o->internal.merge_size); debug_stage("index", stages[0], o); - for (i = 1; i <= o->merge_size; i++) { + for (i = 1; i <= o->internal.merge_size; i++) { char buf[24]; xsnprintf(buf, sizeof(buf), "ent#%d", i); debug_stage(buf, stages[i], o); @@ -144,7 +144,7 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix) OPT__DRY_RUN(&opts.dry_run, N_("don't update the index or the work tree")), OPT_BOOL(0, "no-sparse-checkout", &opts.skip_sparse_checkout, N_("skip applying sparse checkout filter")), - OPT_BOOL(0, "debug-unpack", &opts.debug_unpack, + OPT_BOOL(0, "debug-unpack", &opts.internal.debug_unpack, N_("debug unpack-trees")), OPT_CALLBACK_F(0, "recurse-submodules", NULL, "checkout", "control recursive updating of submodules", @@ -247,7 +247,7 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix) opts.head_idx = 1; } - if (opts.debug_unpack) + if (opts.internal.debug_unpack) opts.fn = debug_merge; /* If we're going to prime_cache_tree later, skip cache tree update */ @@ -263,7 +263,7 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix) if (unpack_trees(nr_trees, t, &opts)) return 128; - if (opts.debug_unpack || opts.dry_run) + if (opts.internal.debug_unpack || opts.dry_run) return 0; /* do not write the index out */ /* diff --git a/unpack-trees.c b/unpack-trees.c index 985896d6af6..e58f0f6a867 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -839,7 +839,7 @@ static int traverse_by_cache_tree(int pos, int nr_entries, int nr_names, mark_ce_used(src[0], o); } free(tree_ce); - if (o->debug_unpack) + if (o->internal.debug_unpack) printf("Unpacked %d entries from %s to %s using cache-tree\n", nr_entries, o->src_index->cache[pos]->name, @@ -1488,7 +1488,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str while (!p->mode) p++; - if (o->debug_unpack) + if (o->internal.debug_unpack) debug_unpack_callback(n, mask, dirmask, names, info); /* Are we supposed to look at the index too? */ @@ -1929,7 +1929,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options init_split_index(&o->internal.result); } oidcpy(&o->internal.result.oid, &o->src_index->oid); - o->merge_size = len; + o->internal.merge_size = len; mark_all_ce_unused(o->src_index); o->internal.result.fsmonitor_last_update = @@ -2882,9 +2882,9 @@ int twoway_merge(const struct cache_entry * const *src, const struct cache_entry *oldtree = src[1]; const struct cache_entry *newtree = src[2]; - if (o->merge_size != 2) + if (o->internal.merge_size != 2) return error("Cannot do a twoway merge of %d trees", - o->merge_size); + o->internal.merge_size); if (oldtree == o->df_conflict_entry) oldtree = NULL; @@ -2964,9 +2964,9 @@ int bind_merge(const struct cache_entry * const *src, const struct cache_entry *old = src[0]; const struct cache_entry *a = src[1]; - if (o->merge_size != 1) + if (o->internal.merge_size != 1) return error("Cannot do a bind merge of %d trees", - o->merge_size); + o->internal.merge_size); if (a && old) return o->quiet ? -1 : error(ERRORMSG(o, ERROR_BIND_OVERLAP), @@ -2990,9 +2990,9 @@ int oneway_merge(const struct cache_entry * const *src, const struct cache_entry *old = src[0]; const struct cache_entry *a = src[1]; - if (o->merge_size != 1) + if (o->internal.merge_size != 1) return error("Cannot do a oneway merge of %d trees", - o->merge_size); + o->internal.merge_size); if (!a || a == o->df_conflict_entry) return deleted_entry(old, old, o); @@ -3027,8 +3027,8 @@ int stash_worktree_untracked_merge(const struct cache_entry * const *src, const struct cache_entry *worktree = src[1]; const struct cache_entry *untracked = src[2]; - if (o->merge_size != 2) - BUG("invalid merge_size: %d", o->merge_size); + if (o->internal.merge_size != 2) + BUG("invalid merge_size: %d", o->internal.merge_size); if (worktree && untracked) return error(_("worktree and untracked commit have duplicate entries: %s"), diff --git a/unpack-trees.h b/unpack-trees.h index 0335c89bc75..e8737adfeda 100644 --- a/unpack-trees.h +++ b/unpack-trees.h @@ -65,7 +65,6 @@ struct unpack_trees_options { skip_unmerged, initial_checkout, diff_index_cached, - debug_unpack, skip_sparse_checkout, quiet, exiting_early, @@ -78,7 +77,6 @@ struct unpack_trees_options { merge_fn_t fn; int head_idx; - int merge_size; struct cache_entry *df_conflict_entry; void *unpack_data; @@ -90,8 +88,10 @@ struct unpack_trees_options { struct unpack_trees_options_internal { unsigned int nontrivial_merge, - show_all_errors; + show_all_errors, + debug_unpack; /* used by read-tree debugging */ + int merge_size; /* used by read-tree debugging */ int cache_bottom; const char *msgs[NB_UNPACK_TREES_WARNING_TYPES]; struct strvec msgs_to_free; From patchwork Sat Feb 25 02:26:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Elijah Newren X-Patchwork-Id: 13152009 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3226CC6FA8E for ; Sat, 25 Feb 2023 02:26:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229592AbjBYC0c (ORCPT ); Fri, 24 Feb 2023 21:26:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229445AbjBYC01 (ORCPT ); Fri, 24 Feb 2023 21:26:27 -0500 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0BC6765CDC for ; Fri, 24 Feb 2023 18:26:12 -0800 (PST) Received: by mail-wm1-x32e.google.com with SMTP id bg16-20020a05600c3c9000b003eb34e21bdfso117925wmb.0 for ; Fri, 24 Feb 2023 18:26:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:from:to:cc:subject:date :message-id:reply-to; bh=wIyk4EcpxCfWVZ94yemBZYXo/BPVimx3khZEZfuK7HI=; b=cWXjN/s09CMM5hztAbzpEtBa79sBTNSzaJyDI+hleW7g1kEBbFchEEaeK2qifD78G0 ItuSKL1nyUFYA2ZshzunulJaHmSVLvgGrVjZ37J58Ah8+mCeU5eubnaGAsv6Ov7qTOle tvKBeK+ceUF3xhd8SWKh/4vXoes689HkULU2hL68S6hfdap9QtxJpN1/Otu04rAepNi2 yZY+EWIB9E5VMU506yQCfhSEr842ItVhtnmCfAevlkY+rMPPLWsB6LP0m/SQCmnkdNsG LcHf0oUflq9nyZeewh9QmTwOx44yT5DGTTHLnmji1Nk0MVhCYMf538WjnW63xwiUwB7a yt6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date:from :references:in-reply-to:message-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wIyk4EcpxCfWVZ94yemBZYXo/BPVimx3khZEZfuK7HI=; b=Lg4mpwX90MsvozIzIACUEK6/0VY9oVGfg2f14pHpbSPLMELX2CV57Un26xEnDMq7Sw CotqBF8IDnE4GgRPUoz5zER70XfLyOmHiLZ7BQrGYjiowLto0yMjnm0PoNQnk0rvnBzr 8QbbsY2q+oWBLa1Ez9x8UYblZwjytTOG4G7K/VameeRIblC13TvybR/rqna/y+ijzxoc +/7EdCDeKO0c1N88clF62uG8xCvDpEDPTsQE/DXe9bFtASP14EWijmj0mz1BY/5+kxXV M9EVO+a9ja8MWjzL3CU1nX5WWvvmJgSwokZlP6b988exZcLcE2gNa2BWI2zE0kVrKFix hyVQ== X-Gm-Message-State: AO0yUKU+t/NjRGDocuUuKoop1VtCTnT2gCOaaolE2mVudyN0iPWtCzON m/FlJ6Ra/GpYhrGQ0dYXkRB0ztRBaXY= X-Google-Smtp-Source: AK7set/jT5hj21FiLrw3N21zu8VfKU5lLXIhRwYcrP71kktH7Gwz8ynJ1Mk7w8BNt7QhYyxpLpx18w== X-Received: by 2002:a05:600c:a293:b0:3eb:29fe:7baa with SMTP id hu19-20020a05600ca29300b003eb29fe7baamr2795179wmb.34.1677291971470; Fri, 24 Feb 2023 18:26:11 -0800 (PST) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id o6-20020a05600c510600b003e20a6fd604sm1044164wms.4.2023.02.24.18.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Feb 2023 18:26:11 -0800 (PST) Message-Id: In-Reply-To: References: Date: Sat, 25 Feb 2023 02:26:00 +0000 Subject: [PATCH v2 11/11] unpack-trees: add usage notices around df_conflict_entry Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: Derrick Stolee , Elijah Newren , Jacob Keller , Jonathan Tan , Elijah Newren , Elijah Newren Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Elijah Newren From: Elijah Newren Avoid making users believe they need to initialize df_conflict_entry to something (as happened with other output only fields before) with a quick comment and a small sanity check. Signed-off-by: Elijah Newren --- unpack-trees.c | 2 ++ unpack-trees.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/unpack-trees.c b/unpack-trees.c index e58f0f6a867..aafc5eca791 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1876,6 +1876,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options BUG("o->internal.dir is for internal use only"); if (o->internal.pl) BUG("o->internal.pl is for internal use only"); + if (o->df_conflict_entry) + BUG("o->df_conflict_entry is an output only field"); trace_performance_enter(); trace2_region_enter("unpack_trees", "unpack_trees", the_repository); diff --git a/unpack-trees.h b/unpack-trees.h index e8737adfeda..61c06eb7c50 100644 --- a/unpack-trees.h +++ b/unpack-trees.h @@ -78,7 +78,7 @@ struct unpack_trees_options { int head_idx; - struct cache_entry *df_conflict_entry; + struct cache_entry *df_conflict_entry; /* output only */ void *unpack_data; struct index_state *dst_index;