Skip to content

Rebase to v2.46.0 #679

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 231 commits into from
Jul 30, 2024
Merged

Rebase to v2.46.0 #679

merged 231 commits into from
Jul 30, 2024

Conversation

dscho
Copy link
Member

@dscho dscho commented Jul 17, 2024

Range-diff relative to clean/vfs-2.45.2
  • 1: 9d4453e (upstream: 9d4453e) < -: ------------ ci: drop mention of BREW_INSTALL_PACKAGES variable

  • 2: 3c295c8 (upstream: 3c295c8) < -: ------------ mingw: drop bogus (and unneeded) declaration of _pgmptr

  • 3: 9256695 = 1: 9256695 advice: warn when sparse index expands

  • 4: fa9d858 = 2: fa9d858 Revert "midx-write.c: use --stdin-packs when repacking"

  • 5: 43daded = 3: 43daded t: remove advice from some tests

  • 6: 9fa03ce = 4: d493e7b survey: stub in new experimental git-survey command

  • 7: 19db94a = 5: 891929e survey: add command line opts to select references

  • 8: a49a5cd ! 6: 0e33f37 survey: collect the set of requested refs

    @@ builtin/survey.c: static void survey_load_config(void)
     + * Theoretically, this data is independent of the on-disk representation
     + * (e.g. independent of packing concerns).
     + */
    -+static void survey_phase_refs(void)
    ++static void survey_phase_refs(struct repository *r)
     +{
     +	struct ref_array ref_array = { 0 };
     +
    @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix
      		survey_opts.show_progress = isatty(2);
      	fixup_refs_wanted();
      
    -+	survey_phase_refs();
    ++	survey_phase_refs(the_repository);
     +
     +	strvec_clear(&survey_vec_refs_wanted);
     +
  • 9: 937d231 ! 7: 02c2b1e survey: calculate stats on refs and print results

    @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array)
     +/*
     + * If we want this type of ref, increment counters and return 1.
     + */
    -+static int maybe_count_ref(struct ref_array_item *p)
    ++static int maybe_count_ref(struct repository *r, struct ref_array_item *p)
     +{
     +	struct survey_refs_wanted *rw = &survey_opts.refs;
     +	struct survey_stats_refs *prs = &survey_stats.refs;
    @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array)
     +			 */
     +			strintmap_incr(&prs->refsmap, "refs/tags/", 1);
     +
    -+			if (!peel_iterated_oid(&p->objectname, &peeled))
    ++			if (!peel_iterated_oid(r, &p->objectname, &peeled))
     +				prs->cnt_annotated_tags++;
     +			else
     +				prs->cnt_lightweight_tags++;
    @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array)
     +/*
     + * Calculate stats on the set of refs that we found.
     + */
    -+static void do_calc_stats_refs(struct ref_array *ref_array)
    ++static void do_calc_stats_refs(struct repository *r, struct ref_array *ref_array)
     +{
     +	struct survey_stats_refs *prs = &survey_stats.refs;
     +	int k;
    @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array)
     +		struct ref_array_item *p = ref_array->items[k];
     +		size_t len;
     +
    -+		if (!maybe_count_ref(p))
    ++		if (!maybe_count_ref(r, p))
     +			continue;
     +
     +		prs->cnt_total++;
    @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array)
      /*
       * The REFS phase:
       *
    -@@ builtin/survey.c: static void survey_phase_refs(void)
    +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r)
      	do_load_refs(&ref_array);
      	trace2_region_leave("survey", "phase/refs", the_repository);
      
     +	trace2_region_enter("survey", "phase/calcstats", the_repository);
    -+	do_calc_stats_refs(&ref_array);
    ++	do_calc_stats_refs(r, &ref_array);
     +	trace2_region_leave("survey", "phase/calcstats", the_repository);
     +
      	ref_array_clear(&ref_array);
    @@ builtin/survey.c: static void survey_phase_refs(void)
      	survey_load_config();
     @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
      
    - 	survey_phase_refs();
    + 	survey_phase_refs(the_repository);
      
     +	survey_emit_trace2();
     +	survey_print_json();
  • 10: 90588ad ! 8: 46d0691 survey: stub in treewalk of reachable commits and objects

    @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array)
     +
     +		switch (p->kind) {
     +		case FILTER_REFS_TAGS:
    -+			if (!peel_iterated_oid(&p->objectname, &peeled))
    ++			if (!peel_iterated_oid(rev_info->repo, &p->objectname, &peeled))
     +				add_pending_oid(rev_info, NULL, &peeled, add_flags);
     +			else
     +				add_pending_oid(rev_info, NULL, &p->objectname, add_flags);
    @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array)
      /*
       * If we want this type of ref, increment counters and return 1.
       */
    -@@ builtin/survey.c: static void survey_phase_refs(void)
    +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r)
      	do_load_refs(&ref_array);
      	trace2_region_leave("survey", "phase/refs", the_repository);
      
    @@ builtin/survey.c: static void survey_phase_refs(void)
     +	trace2_region_leave("survey", "phase/treewalk", the_repository);
     +
      	trace2_region_enter("survey", "phase/calcstats", the_repository);
    - 	do_calc_stats_refs(&ref_array);
    + 	do_calc_stats_refs(r, &ref_array);
      	trace2_region_leave("survey", "phase/calcstats", the_repository);
  • 11: 9897239 = 9: 44a41d0 survey: add traverse callback for commits

  • 12: d90ba6a ! 10: 38f5aec survey: add vector of largest objects for various scaling dimensions

    @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix
     +				"size",
     +				survey_opts.show_largest_blobs_by_size_bytes);
     +
    - 	survey_phase_refs();
    + 	survey_phase_refs(the_repository);
      
      	survey_emit_trace2();
      	survey_print_json();
  • 13: 617deae = 11: acf22c6 survey: add pathname of blob or tree to large_item_vec

  • 14: 1de055f = 12: 09c93cc survey: add commit-oid to large_item detail

  • 15: 2bc37ef ! 13: 9d24f68 survey: add commit name-rev lookup to each large_item

    @@ builtin/survey.c: static void maybe_insert_large_item(struct large_item_vec *vec
      /*
       * Common fields for any type of object.
       */
    -@@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array)
    +@@ builtin/survey.c: static void do_calc_stats_refs(struct repository *r, struct ref_array *ref_array
      	}
      }
      
    @@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array)
      /*
       * The REFS phase:
       *
    -@@ builtin/survey.c: static void survey_phase_refs(void)
    - 	do_calc_stats_refs(&ref_array);
    +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r)
    + 	do_calc_stats_refs(r, &ref_array);
      	trace2_region_leave("survey", "phase/calcstats", the_repository);
      
     +	trace2_region_enter("survey", "phase/namerev", the_repository);
  • 16: 3713eae ! 14: f4a94db survey: add --json option and setup for pretty output

    @@ builtin/survey.c: static void survey_emit_trace2(void)
      {
      	survey_load_config();
     @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix)
    - 	survey_phase_refs();
    + 	survey_phase_refs(the_repository);
      
      	survey_emit_trace2();
     -	survey_print_json();
  • 17: de268cd ! 15: ecef306 survey: add pretty printing of stats

    @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix
     +	alloc_tree_by_size();
     +	alloc_blob_by_size();
      
    - 	survey_phase_refs();
    + 	survey_phase_refs(the_repository);
      
  • 18: c7ab70c = 16: 67a115d t8100: create test for git-survey

  • 19: d06b3ff ! 17: e210d30 survey: add --no-name-rev option

    @@ builtin/survey.c: static int survey_load_config_cb(const char *var, const char *
      
      	if (!strcmp(var, "survey.showcommitparents")) {
      		survey_opts.show_largest_commits_by_nr_parents = git_config_ulong(var, value, ctx->kvi);
    -@@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array)
    +@@ builtin/survey.c: static void do_calc_stats_refs(struct repository *r, struct ref_array *ref_array
      
      static void do_lookup_name_rev(void)
      {
    @@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array)
      	if (survey_opts.show_progress) {
      		survey_progress_total = 0;
      		survey_progress = start_progress(_("Resolving name-revs..."), 0);
    -@@ builtin/survey.c: static void survey_phase_refs(void)
    - 	do_calc_stats_refs(&ref_array);
    +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r)
    + 	do_calc_stats_refs(r, &ref_array);
      	trace2_region_leave("survey", "phase/calcstats", the_repository);
      
     -	trace2_region_enter("survey", "phase/namerev", the_repository);
  • 20: ec39557 = 18: 95f6cde survey: started TODO list at bottom of source file

  • 21: 28549b1 = 19: aecf6ec survey: expanded TODO list at the bottom of the source file

  • 22: 3d885d0 = 20: 79f3731 survey: expanded TODO with more notes

  • 23: d81c8ad (upstream: 12c2ee5) < -: ------------ for-each-repo: optionally keep going on an error

  • 24: 2ef315a (upstream: c75662b) < -: ------------ maintenance: running maintenance should not stop on errors

  • 198: 3be470a = 21: d0ae24c survey: clearly note the experimental nature in the output

  • 25: 8b5ff37 = 22: 5f1879c reset --stdin: trim carriage return from the paths

  • 26: de0e08c ! 23: bb17814 Identify microsoft/git via a distinct version suffix

    @@ Commit message
      ## GIT-VERSION-GEN ##
     @@
      GVF=GIT-VERSION-FILE
    - DEF_VER=v2.45.2
    + DEF_VER=v2.46.0-rc0
      
     +# Identify microsoft/git via a distinct version suffix
     +DEF_VER=$DEF_VER.vfs.0.0
  • 27: 44873f8 = 24: 462b375 gvfs: ensure that the version is based on a GVFS tag

  • 28: 29d46d7 = 25: 13619bc gvfs: add a GVFS-specific header file

  • 29: d4c7891 ! 26: 6c9e6d9 gvfs: add the core.gvfs config setting

    @@ environment.h: int get_shared_repository(void);
     
      ## gvfs.c (new) ##
     @@
    ++#define USE_THE_REPOSITORY_VARIABLE
     +#include "git-compat-util.h"
     +#include "environment.h"
     +#include "gvfs.h"
  • 30: e2fcd93 = 27: 663af32 gvfs: add the feature to skip writing the index' SHA-1

  • 31: f74478b ! 28: 0de65b9 gvfs: add the feature that blobs may be missing

    @@ cache-tree.c: static int update_one(struct cache_tree *it,
     
      ## commit.c ##
     @@
    + #define USE_THE_REPOSITORY_VARIABLE
    + 
      #include "git-compat-util.h"
     +#include "gvfs.h"
      #include "tag.h"
  • 32: 2750fd4 ! 29: d3efbf0 gvfs: prevent files to be deleted outside the sparse checkout

    @@ t/t1090-sparse-checkout-scope.sh: test_expect_success 'in partial clone, sparse
     
      ## unpack-trees.c ##
     @@
    + 
      #include "git-compat-util.h"
      #include "advice.h"
     +#include "gvfs.h"
  • 33: 56146c3 = 30: b182882 gvfs: optionally skip reachability checks/upload pack during fetch

  • 34: 298844d ! 31: fdf68f8 gvfs: ensure all filters and EOL conversions are blocked

    @@ Documentation/config/core.txt: core.gvfs::
     
      ## convert.c ##
     @@
    + 
      #include "git-compat-util.h"
      #include "advice.h"
     +#include "gvfs.h"
  • 35: 9290d8c ! 32: 1673b6c gvfs: allow "virtualizing" objects

    @@ config.c: int git_default_core_config(const char *var, const char *value,
     
      ## connected.c ##
     @@
    + #define USE_THE_REPOSITORY_VARIABLE
    + 
      #include "git-compat-util.h"
     +#include "environment.h"
      #include "gettext.h"
  • 36: b1d92ce = 33: 818d82e Hydrate missing loose objects in check_and_freshen()

  • 37: 091dc10 = 34: 2d7a9dc sha1_file: when writing objects, skip the read_object_hook

  • 38: 90f1631 ! 35: 4bee1df gvfs: add global command pre and post hook procs

    @@ hook.c
     +				   const struct config_context *ctx, void *cb)
     +{
     +	if (!strcmp(var, "core.hookspath"))
    -+		return git_config_pathname((const char **)cb, var, value);
    ++		return git_config_pathname((char **)cb, var, value);
     +
     +	return 0;
     +}
    @@ hook.c
     +
     +	if (!initialized) {
     +		struct strbuf gitdir = STRBUF_INIT, commondir = STRBUF_INIT;
    -+		const char *early_hooks_dir = NULL;
    ++		char *early_hooks_dir = NULL;
     +
     +		if (discover_git_directory(&commondir, &gitdir) < 0) {
     +			strbuf_release(&gitdir);
    @@ hook.c
     +			strbuf_addf(&hooks_dir, "%s/hooks/", commondir.buf);
     +		else {
     +			strbuf_add_absolute_path(&hooks_dir, early_hooks_dir);
    -+			free((void *)early_hooks_dir);
    ++			free(early_hooks_dir);
     +			strbuf_addch(&hooks_dir, '/');
     +		}
     +
  • 39: 81a39e7 = 36: 585cc63 t0400: verify that the hook is called correctly from a subdirectory

  • 40: 69c187b = 37: 04b3614 Pass PID of git process to hooks.

  • 41: f224aa5 = 38: 6dc796c pre-command: always respect core.hooksPath

  • 42: 899ad7e = 39: 1beb06a sparse-checkout: update files with a modify/delete conflict

  • 43: c32183f = 40: 2e74640 sparse-checkout: avoid writing entries with the skip-worktree bit

  • 44: 326aa6c = 41: 47b22d8 Do not remove files outside the sparse-checkout

  • 45: 54634b1 = 42: 1b457f9 send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 46: 0ed17f0 = 43: 7969d78 cache-tree: remove use of strbuf_addf in update_one

  • 47: 116dbce ! 44: f2eae33 gvfs: block unsupported commands when running in a GVFS repo

    @@ builtin/gc.c: int cmd_gc(int argc, const char **argv, const char *prefix)
      ## builtin/update-index.c ##
     @@
       */
    - #define USE_THE_INDEX_VARIABLE
    + 
      #include "builtin.h"
     +#include "gvfs.h"
      #include "bulk-checkin.h"
    @@ builtin/update-index.c: int cmd_update_index(int argc, const char **argv, const
     +			die(_("changing the index version is not supported on a GVFS repo"));
     +
      		if (preferred_index_format < 0) {
    - 			printf(_("%d\n"), the_index.version);
    + 			printf(_("%d\n"), the_repository->index->version);
      		} else if (preferred_index_format < INDEX_FORMAT_LB ||
     @@ builtin/update-index.c: int cmd_update_index(int argc, const char **argv, const char *prefix)
      	end_odb_transaction();
    @@ builtin/update-index.c: int cmd_update_index(int argc, const char **argv, const
     
      ## git.c ##
     @@
    + #define USE_THE_REPOSITORY_VARIABLE
    + 
      #include "builtin.h"
     +#include "gvfs.h"
      #include "config.h"
  • 48: deeb420 = 45: a08a89d worktree: allow in Scalar repositories

  • 49: 7fc02f9 = 46: 7227b52 gvfs: allow overriding core.gvfs

  • 50: 1fb74c0 = 47: 5733f8e BRANCHES.md: Add explanation of branches and using forks

  • 145: 0cb2146 = 48: 84d0024 git_config_set_multivar_in_file_gently(): add a lock timeout

  • 146: 3d94588 = 49: 5ebaf3f scalar: set the config write-lock timeout to 150ms

  • 147: 225409d = 50: 2521c6e scalar: add docs from microsoft/scalar

  • 148: 6391ce0 = 51: 8474a8c scalar (Windows): use forward slashes as directory separators

  • 149: 4dbcf6f ! 52: fced4b6 scalar: add retry logic to run_git()

    @@ scalar.c: static void setup_enlistment_directory(int argc, const char **argv,
      
     +static int git_retries = 3;
     +
    + LAST_ARG_MUST_BE_NULL
      static int run_git(const char *arg, ...)
      {
     -	struct child_process cmd = CHILD_PROCESS_INIT;
  • 150: 7903a9a = 53: 98e3445 scalar: support the config command for backwards compatibility

  • 177: f21079b = 54: 45d1ce3 sequencer: avoid progress when stderr is redirected

  • 51: 8e5b270 ! 55: f51ea9b Add virtual file system settings and hook proc

    @@ config.c: int git_config_get_max_percent_split_change(void)
      	int is_bool, val;
     
      ## config.h ##
    -@@ config.h: int git_config_get_pathname(const char *key, const char **dest);
    +@@ config.h: int git_config_get_pathname(const char *key, char **dest);
      int git_config_get_index_threads(int *dest);
      int git_config_get_split_index(void);
      int git_config_get_max_percent_split_change(void);
    @@ config.h: int git_config_get_pathname(const char *key, const char **dest);
     
      ## dir.c ##
     @@
    -  */
    + 
      #include "git-compat-util.h"
      #include "abspath.h"
     +#include "virtualfilesystem.h"
    @@ environment.c: int core_apply_sparse_checkout;
      int core_sparse_checkout_cone;
      int sparse_expect_files_outside_of_patterns;
      int core_gvfs;
    -+const char *core_virtualfilesystem;
    ++char *core_virtualfilesystem;
      int merge_log_config = -1;
      int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
      unsigned long pack_size_limit_cfg;
    @@ environment.h: int get_shared_repository(void);
      void reset_shared_repository(void);
      
      extern int core_preload_index;
    -+extern const char *core_virtualfilesystem;
    ++extern char *core_virtualfilesystem;
      extern int core_gvfs;
      extern int precomposed_unicode;
      extern int protect_hfs;
     
      ## read-cache.c ##
     @@
    -  */
    + 
      #include "git-compat-util.h"
      #include "bulk-checkin.h"
     +#include "virtualfilesystem.h"
    @@ sparse-index.c: void expand_index(struct index_state *istate, struct pattern_lis
      
      		if (!S_ISSPARSEDIR(ce->ce_mode)) {
      			set_index_entry(full, full->cache_nr++, ce);
    -@@ sparse-index.c: void clear_skip_worktree_from_present_files(struct index_state *istate)
    - 	int restarted = 0;
    - 
    +@@ sparse-index.c: static void clear_skip_worktree_from_present_files_full(struct index_state *ista
    + void clear_skip_worktree_from_present_files(struct index_state *istate)
    + {
      	if (!core_apply_sparse_checkout ||
     +	    core_virtualfilesystem ||
      	    sparse_expect_files_outside_of_patterns)
  • 52: 47fb1b2 = 56: 8e22f06 virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 53: f998e1d = 57: bd9e9d9 virtualfilesystem: check if directory is included

  • 54: 95436e4 = 58: 214b081 backwards-compatibility: support the post-indexchanged hook

  • 55: 91e8518 = 59: 858040a gvfs: verify that the built-in FSMonitor is disabled

  • 56: e9609a8 ! 60: b9c892c status: add status serialization mechanism

    @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix
     +		/* deserialize failed, so force the initialization we skipped above. */
     +		enable_fscache(1);
     +		repo_read_index_preload(the_repository, &s.pathspec, 0);
    -+		refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
    ++		refresh_index(the_repository->index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL);
     +
     +		if (use_optional_locks())
     +			fd = repo_hold_locked_index(the_repository, &index_lock, 0);
    @@ t/t7523-status-complete-untracked.sh (new)
     
      ## wt-status-deserialize.c (new) ##
     @@
    ++#define USE_THE_REPOSITORY_VARIABLE
     +#include "git-compat-util.h"
     +#include "environment.h"
     +#include "hex.h"
    @@ wt-status-deserialize.c (new)
     +#include "pkt-line.h"
     +#include "trace.h"
     +#include "statinfo.h"
    ++#include "hex.h"
     +
     +static struct trace_key trace_deserialize = TRACE_KEY_INIT(DESERIALIZE);
     +
  • 57: b3e7505 = 61: 7405e5e Teach ahead-behind and serialized status to play nicely together

  • 58: 8407c36 = 62: 44d03e8 status: serialize to path

  • 59: 28d3839 = 63: ce47f12 status: reject deserialize in V2 and conflicts

  • 60: 1d82aa2 ! 64: fe42bdd serialize-status: serialize global and repo-local exclude file metadata

    @@ Commit message
     
      ## wt-status-deserialize.c ##
     @@
    - #include "pkt-line.h"
      #include "trace.h"
      #include "statinfo.h"
    + #include "hex.h"
     +#include "path.h"
      
      static struct trace_key trace_deserialize = TRACE_KEY_INIT(DESERIALIZE);
  • 61: 3ff191a = 65: c1d5d31 status: deserialization wait

  • 62: c5e4ee0 = 66: 11d838d merge-recursive: avoid confusing logic in was_dirty()

  • 63: 47d58ff = 67: 1bc8f66 merge-recursive: add some defensive coding to was_dirty()

  • 64: cc07a28 ! 68: dad640b merge-recursive: teach was_dirty() about the virtualfilesystem

    @@ Commit message
     
      ## merge-recursive.c ##
     @@
    -  */
    + 
      #include "git-compat-util.h"
      #include "merge-recursive.h"
     +#include "virtualfilesystem.h"
  • 65: 72ea807 = 69: 3026a1e status: deserialize with -uno does not print correct hint

  • 66: abb2796 = 70: f974331 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 67: aaab24e = 71: 0ad0d0f fsmonitor: add script for debugging and update script for tests

  • 68: c156980 ! 72: 907a53a status: disable deserialize when verbose output requested.

    @@ Commit message
     
      ## builtin/commit.c ##
     @@
    - #include "commit-reach.h"
      #include "commit-graph.h"
      #include "pretty.h"
    + #include "trailer.h"
     +#include "trace2.h"
      
      static const char * const builtin_commit_usage[] = {
  • 69: 81f271c = 73: ba4aaf9 t7524: add test for verbose status deserialzation

  • 70: 4262315 = 74: a4bbd5d deserialize-status: silently fallback if we cannot read cache file

  • 71: 9d211c4 = 75: c8c93ae gvfs:trace2:data: add trace2 tracing around read_object_process

  • 72: a41a3ca ! 76: cded777 gvfs:trace2:data: status deserialization information

    @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix
     
      ## wt-status-deserialize.c ##
     @@
    - #include "trace.h"
      #include "statinfo.h"
    + #include "hex.h"
      #include "path.h"
     +#include "trace2.h"
     +
  • 73: aa452a0 ! 77: 03952fa gvfs:trace2:data: status serialization

    @@ Commit message
         Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
     
      ## wt-status-serialize.c ##
    +@@
    ++#define USE_THE_REPOSITORY_VARIABLE
    + #include "git-compat-util.h"
    + #include "environment.h"
    + #include "hex.h"
     @@
      #include "trace.h"
      #include "read-cache-ll.h"
  • 74: cc0a9c5 ! 78: 31fcdac gvfs:trace2:data: add vfs stats

    @@ Commit message
     
      ## virtualfilesystem.c ##
     @@
    ++#define USE_THE_REPOSITORY_VARIABLE
      #include "git-compat-util.h"
      #include "environment.h"
      #include "gettext.h"
  • 75: dea7ca4 = 79: abbea49 trace2: refactor setting process starting time

  • 76: b276ce0 = 80: afc4a0a trace2:gvfs:experiment: clear_ce_flags_1

  • 77: f002535 = 81: 5ce6558 trace2:gvfs:experiment: report_tracking

  • 78: a3b1d7e = 82: 4ec2e67 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 79: 3449130 = 83: c1c64db trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 80: 6eb56cb = 84: ffcbc28 trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 81: 7bdb055 = 85: 4957e88 trace2:gvfs:experiment: add region around unpack_trees()

  • 82: 90a8fbc = 86: 6366b0e trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 83: 79acfe9 = 87: 9212637 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 84: f7c6c30 = 88: 801e01f trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 85: 5d4fb1a = 89: bf54c3f trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 86: bcaa51d = 90: 4148a39 Trace2:gvfs:experiment: capture more 'tracking' details

  • 87: 8d15da7 = 91: 2f076d1 credential: set trace2_child_class for credential manager children

  • 88: 42702c9 = 92: 1ecd577 sub-process: do not borrow cmd pointer from caller

  • 89: 82c64b8 = 93: 678c1e1 sub-process: add subprocess_start_argv()

  • 90: b5111c7 = 94: ad46269 sha1-file: add function to update existing loose object cache

  • 91: 826c0d6 = 95: 4c7f6da packfile: add install_packed_git_and_mru()

  • 92: 638ebe9 = 96: 80e302e index-pack: avoid immediate object fetch while parsing packfile

  • 93: d8a6be6 ! 97: fd83445 gvfs-helper: create tool to fetch objects using the GVFS Protocol

    @@ config.c: static int git_default_mailmap_config(const char *var, const char *val
     +static int git_default_gvfs_config(const char *var, const char *value)
     +{
     +	if (!strcmp(var, "gvfs.cache-server")) {
    -+		const char *v2 = NULL;
    ++		char *v2 = NULL;
     +
     +		if (!git_config_string(&v2, var, value) && v2 && *v2)
     +			gvfs_cache_server_url = transport_anonymize_url(v2);
    -+		free((char*)v2);
    ++		free(v2);
     +		return 0;
     +	}
     +
    @@ config.c: static int git_default_mailmap_config(const char *var, const char *val
     +
      static int git_default_attr_config(const char *var, const char *value)
      {
    - 	if (!strcmp(var, "attr.tree"))
    + 	if (!strcmp(var, "attr.tree")) {
     @@ config.c: int git_default_config(const char *var, const char *value,
      	if (starts_with(var, "sparse."))
      		return git_default_sparse_config(var, value);
    @@ environment.h: extern int core_gvfs;
     
      ## gvfs-helper-client.c (new) ##
     @@
    ++#define USE_THE_REPOSITORY_VARIABLE
     +#include "git-compat-util.h"
     +#include "hex.h"
     +#include "strvec.h"
    @@ gvfs-helper.c (new)
     +//
     +//////////////////////////////////////////////////////////////////
     +
    ++#define USE_THE_REPOSITORY_VARIABLE
     +#include "git-compat-util.h"
     +#include "git-curl-compat.h"
     +#include "environment.h"
    @@ gvfs-helper.c (new)
     +		gh__cmd_opts.remote_name = "origin";
     +
     +	gh__global.remote = remote_get(gh__cmd_opts.remote_name);
    -+	if (!gh__global.remote->url[0] || !*gh__global.remote->url[0])
    ++	if (!gh__global.remote->url.v[0] || !*gh__global.remote->url.v[0])
     +		die("unknown remote '%s'", gh__cmd_opts.remote_name);
     +
     +	/*
    @@ gvfs-helper.c (new)
     +	 *
     +	 * Break that so that we can force the use of a PAT.
     +	 */
    -+	gh__global.main_url = transport_anonymize_url(gh__global.remote->url[0]);
    ++	gh__global.main_url = transport_anonymize_url(gh__global.remote->url.v[0]);
     +
     +	trace2_data_string("gvfs-helper", NULL, "remote/url", gh__global.main_url);
     +}
    @@ gvfs-helper.c (new)
     +		return;
     +
     +	credential_from_url(&gh__global.main_creds, gh__global.main_url);
    -+	credential_fill(&gh__global.main_creds);
    ++	credential_fill(&gh__global.main_creds, 0);
     +	gh__global.main_creds_need_approval = 1;
     +}
     +
    @@ object-file.c: static int do_oid_object_info_extended(struct repository *r,
     
      ## promisor-remote.c ##
     @@
    + #define USE_THE_REPOSITORY_VARIABLE
    + 
      #include "git-compat-util.h"
     +#include "environment.h"
      #include "gettext.h"
  • 94: cdd7cfe ! 98: b574c17 sha1-file: create shared-cache directory if it doesn't exist

    @@ environment.h: extern int protect_hfs;
     
      ## gvfs-helper-client.c ##
     @@
    + #define USE_THE_REPOSITORY_VARIABLE
      #include "git-compat-util.h"
     +#include "environment.h"
      #include "hex.h"
  • 95: a038c3c = 99: 4d22d1b gvfs-helper: better handling of network errors

  • 96: 2910aff ! 100: b569887 gvfs-helper-client: properly update loose cache with fetched OID

    @@ Commit message
         Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
     
      ## gvfs-helper-client.c ##
    +@@
    + #include "pkt-line.h"
    + #include "quote.h"
    + #include "packfile.h"
    ++#include "hex.h"
    + 
    + static struct oidset gh_client__oidset_queued = OIDSET_INIT;
    + static unsigned long gh_client__oidset_count;
     @@ gvfs-helper-client.c: static void gh_client__update_loose_cache(const char *line)
      	if (!skip_prefix(line, "loose ", &v1_oid))
      		BUG("update_loose_cache: invalid line '%s'", line);
  • 97: b97808a = 101: be0e9bb gvfs-helper: V2 robust retry and throttling

  • 98: 2106050 ! 102: cbcc517 gvfs-helper: expose gvfs/objects GET and POST semantics

    @@ gvfs-helper.c
     -//
      //////////////////////////////////////////////////////////////////
      
    - #include "git-compat-util.h"
    + #define USE_THE_REPOSITORY_VARIABLE
     @@
      static const char * const main_usage[] = {
      	N_("git gvfs-helper [<main_options>] config      [<options>]"),
    @@ gvfs-helper.c: static unsigned long build_json_payload__gvfs_objects(
     +		if (k == 1)
     +			oidcpy(oid_out, oid_prev);
     +		else
    -+			oidclr(oid_out);
    ++			oidclr(oid_out, the_repository->hash_algo);
     +	}
     +
      	return k;
  • 99: 22f0423 = 103: 6db4130 gvfs-helper: dramatically reduce progress noise

  • 100: 501670e = 104: 06ba59c gvfs-helper-client.h: define struct object_id

  • 101: faff4f0 = 105: f50d849 gvfs-helper: handle pack-file after single POST request

  • 102: 078ef69 ! 106: a089606 test-gvfs-prococol, t5799: tests for gvfs-helper

    @@ gvfs-helper.c: static void do__http_post__gvfs_objects(struct gh__response_statu
     
      ## t/helper/test-gvfs-protocol.c (new) ##
     @@
    ++#define USE_THE_REPOSITORY_VARIABLE
     +#include "git-compat-util.h"
     +#include "environment.h"
     +#include "hex.h"
    @@ t/helper/test-gvfs-protocol.c (new)
     +
     +#ifndef NO_IPV6
     +
    -+static int setup_named_sock(char *listen_addr, int listen_port, struct socketlist *socklist)
    ++static int setup_named_sock(const char *listen_addr, int listen_port, struct socketlist *socklist)
     +{
     +	int socknum = 0;
     +	char pbuf[NI_MAXSERV];
  • 103: 4f6ba78 = 107: e1f2825 gvfs-helper: move result-list construction into install functions

  • 104: a413cb5 = 108: 0465ea0 t5799: add support for POST to return either a loose object or packfile

  • 105: 5b79aa8 = 109: e4df844 t5799: cleanup wc-l and grep-c lines

  • 106: 669ad33 = 110: f0cfe9c gvfs-helper: verify loose objects after write

  • 107: be74d21 = 111: 2491b1e t7599: create corrupt blob test

  • 108: 96f1bca ! 112: e6cc930 gvfs-helper: add prefetch support

    @@ gvfs-helper.c: static void gh__run_one_slot(struct active_request_slot *slot,
      }
     @@ gvfs-helper.c: static void lookup_main_url(void)
      	 */
    - 	gh__global.main_url = transport_anonymize_url(gh__global.remote->url[0]);
    + 	gh__global.main_url = transport_anonymize_url(gh__global.remote->url.v[0]);
      
     -	trace2_data_string("gvfs-helper", NULL, "remote/url", gh__global.main_url);
     +	trace2_data_string(TR2_CAT, NULL, "remote/url", gh__global.main_url);
  • 109: 3d89f61 = 113: b93feac gvfs-helper: add prefetch .keep file for last packfile

  • 110: 814f0c2 = 114: 4cf4fc7 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 111: 5b292e5 = 115: dc478bf gvfs-helper: move content-type warning for prefetch packs

  • 112: b9530af = 116: 9a86242 fetch: use gvfs-helper prefetch under config

  • 113: 26017bd = 117: 88744c5 gvfs-helper: better support for concurrent packfile fetches

  • 114: 2d6625d = 118: 2e12c33 remote-curl: do not call fetch-pack when using gvfs-helper

  • 115: c4b3dc4 = 119: 1ab9c63 fetch: reprepare packs before checking connectivity

  • 116: bf38a3a = 120: 8fee068 gvfs-helper: retry when creating temp files

  • 117: de22e15 = 121: 407fb5c sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 118: ed719c0 = 122: 5f1daad gvfs-helper: add --max-retries to prefetch verb

  • 122: 5118ec2 = 123: 8bee033 t5799: add tests to detect corrupt pack/idx files in prefetch

  • 124: 88e914c = 124: c519fa5 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 119: a3a331f = 125: 79d4ae3 maintenance: care about gvfs.sharedCache config

  • 120: c356384 = 126: 31932ba unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 121: fa34db9 = 127: 38f795c homebrew: add GitHub workflow to release Cask

  • 123: 75e7179 = 128: d4466b1 Adding winget workflows

  • 125: 359e3ea ! 129: c1819bc Disable the monitor-components workflow in msft-git

    @@ .github/workflows/monitor-components.yml (deleted)
     -            feed: https://github.com/PCRE2Project/pcre2/tags.atom
     -          - label: mingw-w64-llvm
     -            feed: https://github.com/msys2/MINGW-packages/commits/master/mingw-w64-llvm.atom
    +-          - label: innosetup
    +-            feed: https://github.com/jrsoftware/issrc/tags.atom
     -      fail-fast: false
     -    steps:
     -      - uses: git-for-windows/rss-to-issues@v0
  • 126: 8112927 = 130: 33b280c .github: enable windows builds on microsoft fork

  • 127: 0a1b186 = 131: ee013f9 release: create initial Windows installer build workflow

  • 128: d3284e4 = 132: 84dc668 help: special-case HOST_CPU universal

  • 129: adc0dc6 = 133: 5aa01da release: add Mac OSX installer build

  • 130: 20b196b = 134: 4898f63 release: build unsigned Ubuntu .deb package

  • 131: ce98293 = 135: 336ac3f release: add signing step for .deb package

  • 132: 2168e21 = 136: 88fc5e0 release: create draft GitHub release with packages & installers

  • 133: 61cbd89 = 137: a070a17 build-git-installers: publish gpg public key

  • 134: b748af6 = 138: 280848e release: continue pestering until user upgrades

  • 135: 4c2a29f = 139: c29db06 Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 139: 81a3a97 = 140: 60880fa update-microsoft-git: create barebones builtin

  • 136: 697df23 = 141: adca1a5 dist: archive HEAD instead of HEAD^{tree}

  • 140: 34d9e20 = 142: 6b8190b update-microsoft-git: Windows implementation

  • 137: 6487ff0 = 143: 20f8694 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 141: 24bfc6f = 144: 571ebb6 update-microsoft-git: use brew on macOS

  • 138: 7f25f3c = 145: 70b2c7c release: add installer validation

  • 142: bab57f6 = 146: ef8aba1 .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 143: 533f117 = 147: de761fe .github: update PULL_REQUEST_TEMPLATE.md

  • 144: bee22b6 = 148: e202255 Adjust README.md for microsoft/git

  • 151: 16260a6 = 149: 855f8ec scalar: implement a minimal JSON parser

  • 152: 68145ff = 150: 6365f7c scalar clone: support GVFS-enabled remote repositories

  • 153: f34bc0a ! 151: 92057b3 test-gvfs-protocol: also serve smart protocol

    @@ Commit message
     
      ## t/helper/test-gvfs-protocol.c ##
     @@
    + #define USE_THE_REPOSITORY_VARIABLE
      #include "git-compat-util.h"
      #include "environment.h"
     +#include "gettext.h"
  • 154: 156e684 ! 152: 8411cdc gvfs-helper: add the endpoint command

    @@ gvfs-helper.c
     +//
      //////////////////////////////////////////////////////////////////
      
    - #include "git-compat-util.h"
    + #define USE_THE_REPOSITORY_VARIABLE
     @@ gvfs-helper.c: static void do_req__with_fallback(const char *url_component,
       *
       * Return server's response buffer.  This is probably a raw JSON string.
  • 155: f0c7192 = 153: cf20ad0 dir_inside_of(): handle directory separators correctly

  • 156: 37a1679 = 154: 1ccd926 scalar: disable authentication in unattended mode

  • 157: e4c9fb2 = 155: 3a523b3 scalar: do initialize gvfs.sharedCache

  • 158: fdfccaa = 156: a9a22f3 scalar diagnose: include shared cache info

  • 159: 1fcf783 = 157: bc76060 scalar: only try GVFS protocol on https:// URLs

  • 160: 13db4b2 = 158: e455e68 scalar: verify that we can use a GVFS-enabled repository

  • 161: de44bdb ! 159: b8db558 scalar: add the cache-server command

    @@ scalar.c: static int cmd_version(int argc, const char **argv)
     +				error("no such remote: '%s'", name);
     +				return 1;
     +			}
    -+			if (!remote->url) {
    ++			if (!remote->url.nr) {
     +				return error(_("remote '%s' has no URLs"),
     +					     name);
     +			}
    -+			url = remote->url[0];
    ++			url = remote->url.v[0];
     +		}
     +		res = supports_gvfs_protocol(url, NULL);
     +	} else if (set) {
  • 162: bc1f931 = 160: da1d056 scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 163: 82a620f = 161: eac9d48 scalar: adjust documentation to the microsoft/git fork

  • 164: 8c62847 = 162: e1ca251 scalar: enable untracked cache unconditionally

  • 165: dc53c3d = 163: a2e90b7 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 166: fd4a81f = 164: c5d70c0 scalar diagnose: accommodate Scalar's Functional Tests

  • 167: 48961e3 = 165: 2f5f734 ci: run Scalar's Functional Tests

  • 168: 39ceaeb = 166: e814dff scalar: upgrade to newest FSMonitor config setting

  • 169: 6a72129 = 167: d9c8469 abspath: make strip_last_path_component() global

  • 170: 265c748 = 168: 108fc64 scalar: .scalarCache should live above enlistment

  • 171: 10dd178 ! 169: 10049eb add/rm: allow adding sparse entries when virtual

    @@ Commit message
      ## builtin/add.c ##
     @@
       */
    - #define USE_THE_INDEX_VARIABLE
    + 
      #include "builtin.h"
     +#include "environment.h"
      #include "advice.h"
    @@ builtin/add.c: static int chmod_pathspec(struct pathspec *pathspec, char flip, i
      		if (!include_sparse &&
     +		    !core_virtualfilesystem &&
      		    (ce_skip_worktree(ce) ||
    - 		     !path_in_sparse_checkout(ce->name, &the_index)))
    + 		     !path_in_sparse_checkout(ce->name, the_repository->index)))
      			continue;
     @@ builtin/add.c: static int refresh(int verbose, const struct pathspec *pathspec)
      		if (!seen[i]) {
      			const char *path = pathspec->items[i].original;
      
     -			if (matches_skip_worktree(pathspec, i, &skip_worktree_seen) ||
    --			    !path_in_sparse_checkout(path, &the_index)) {
    +-			    !path_in_sparse_checkout(path, the_repository->index)) {
     +			if (!core_virtualfilesystem &&
     +			    (matches_skip_worktree(pathspec, i, &skip_worktree_seen) ||
    -+			     !path_in_sparse_checkout(path, &the_index))) {
    ++			     !path_in_sparse_checkout(path, the_repository->index))) {
      				string_list_append(&only_match_skip_worktree,
      						   pathspec->items[i].original);
      			} else {
    @@ builtin/add.c: int cmd_add(int argc, const char **argv, const char *prefix)
      ## builtin/rm.c ##
     @@
       */
    - #define USE_THE_INDEX_VARIABLE
    + 
      #include "builtin.h"
     +#include "environment.h"
      #include "advice.h"
      #include "config.h"
      #include "lockfile.h"
     @@ builtin/rm.c: int cmd_rm(int argc, const char **argv, const char *prefix)
    - 	for (i = 0; i < the_index.cache_nr; i++) {
    - 		const struct cache_entry *ce = the_index.cache[i];
    + 	for (i = 0; i < the_repository->index->cache_nr; i++) {
    + 		const struct cache_entry *ce = the_repository->index->cache[i];
      
     -		if (!include_sparse &&
     +		if (!include_sparse && !core_virtualfilesystem &&
      		    (ce_skip_worktree(ce) ||
    - 		     !path_in_sparse_checkout(ce->name, &the_index)))
    + 		     !path_in_sparse_checkout(ce->name, the_repository->index)))
      			continue;
     @@ builtin/rm.c: int cmd_rm(int argc, const char **argv, const char *prefix)
      				    *original ? original : ".");
  • 172: e00dddb = 170: 911894d sparse-checkout: add config to disable deleting dirs

  • 173: e082cb8 = 171: de33ebe diff: ignore sparse paths in diffstat

  • 174: df6a787 = 172: d3d3691 repo-settings: enable sparse index by default

  • 175: 26babbf = 173: 3b11321 diff(sparse-index): verify with partially-sparse

  • 176: 40ea561 = 174: 2719642 stash: expand testing for git stash -u

  • 178: 9008be1 = 175: 6859862 sparse: add vfs-specific precautions

  • 179: 994a008 ! 176: 0f906d1 reset: fix mixed reset when using virtual filesystem

    @@ builtin/reset.c: static void update_index_from_diff(struct diff_queue_struct *q,
     +		if (core_virtualfilesystem && !file_exists(two->path))
     +		{
     +			respect_skip_worktree = 0;
    -+			pos = index_name_pos(&the_index, two->path, strlen(two->path));
    ++			pos = index_name_pos(the_repository->index, two->path, strlen(two->path));
     +
    -+			if ((pos >= 0 && ce_skip_worktree(the_index.cache[pos])) &&
    ++			if ((pos >= 0 && ce_skip_worktree(the_repository->index->cache[pos])) &&
     +			    (is_missing || !was_missing))
     +			{
     +				state.force = 1;
     +				state.refresh_cache = 1;
    -+				state.istate = &the_index;
    -+				ceBefore = make_cache_entry(&the_index, two->mode,
    ++				state.istate = the_repository->index;
    ++				ceBefore = make_cache_entry(the_repository->index, two->mode,
     +							    &two->oid, two->path,
     +							    0, 0);
     +				if (!ceBefore)
    @@ builtin/reset.c: static void update_index_from_diff(struct diff_queue_struct *q,
     +		}
      
      		if (!is_in_reset_tree && !intent_to_add) {
    - 			remove_file_from_index(&the_index, one->path);
    + 			remove_file_from_index(the_repository->index, one->path);
     @@ builtin/reset.c: static void update_index_from_diff(struct diff_queue_struct *q,
      		 * to properly construct the reset sparse directory.
      		 */
    - 		pos = index_name_pos(&the_index, one->path, strlen(one->path));
    --		if ((pos >= 0 && ce_skip_worktree(the_index.cache[pos])) ||
    --		    (pos < 0 && !path_in_sparse_checkout(one->path, &the_index)))
    + 		pos = index_name_pos(the_repository->index, one->path, strlen(one->path));
    +-		if ((pos >= 0 && ce_skip_worktree(the_repository->index->cache[pos])) ||
    +-		    (pos < 0 && !path_in_sparse_checkout(one->path, the_repository->index)))
     +
     +		/*
     +		 * Do not add the SKIP_WORKTREE bit back if we populated the
     +		 * file on purpose in a virtual filesystem scenario.
     +		 */
     +		if (respect_skip_worktree &&
    -+		    ((pos >= 0 && ce_skip_worktree(the_index.cache[pos])) ||
    -+		     (pos < 0 && !path_in_sparse_checkout(one->path, &the_index))))
    ++		    ((pos >= 0 && ce_skip_worktree(the_repository->index->cache[pos])) ||
    ++		     (pos < 0 && !path_in_sparse_checkout(one->path, the_repository->index))))
      			ce->ce_flags |= CE_SKIP_WORKTREE;
      
      		if (!ce)
  • 180: faab0ce ! 177: a79fae6 credential: add new interactive config option

    @@ Documentation/config/credential.txt: credential.helper::
      	or https URL to be important. Defaults to false. See
     
      ## credential.c ##
    +@@
    ++#define USE_THE_REPOSITORY_VARIABLE
    + #include "git-compat-util.h"
    + #include "abspath.h"
    + #include "config.h"
     @@
      #include "strbuf.h"
      #include "urlmatch.h"
    @@ credential.c: static char *credential_ask_one(const char *what, struct credentia
     +	return 0;
      }
      
    - int credential_read(struct credential *c, FILE *fp)
    -@@ credential.c: void credential_fill(struct credential *c)
    + int credential_has_capability(const struct credential_capability *capa,
    +@@ credential.c: void credential_fill(struct credential *c, int all_capabilities)
      			    c->helpers.items[i].string);
      	}
      
     -	credential_getpass(c);
    --	if (!c->username && !c->password)
    +-	if (!c->username && !c->password && !c->credential)
     +	if (credential_getpass(c) ||
    -+	    (!c->username && !c->password))
    ++	    (!c->username && !c->password && !c->credential))
      		die("unable to get password from user");
      }
      
  • 181: 238ecde = 178: 75a97b3 maintenance: add custom config to background jobs

  • 182: 9b6f619 ! 179: 5ca9725 scalar: configure maintenance during 'reconfigure'

    @@ Commit message
     
      ## scalar.c ##
     @@ scalar.c: static int cmd_reconfigure(int argc, const char **argv)
    - 		r.commondir = commondir.buf;
    - 		r.gitdir = gitdir.buf;
    + 		old_repo = the_repository;
    + 		the_repository = &r;
      
     -		if (set_recommended_config(1) >= 0)
     +		if (set_recommended_config(1) >= 0 &&
     +		    toggle_maintenance(1) >= 0)
      			succeeded = 1;
      
    - loop_end:
    + 		the_repository = old_repo;
     
      ## t/t9210-scalar.sh ##
     @@ t/t9210-scalar.sh: test_expect_success 'scalar reconfigure' '
    @@ t/t9210-scalar.sh: test_expect_success 'scalar reconfigure' '
     +	test_subcommand git maintenance start <reconfigure
      '
      
    - test_expect_success '`reconfigure -a` removes stale config entries' '
    + test_expect_success 'scalar reconfigure --all with includeIf.onbranch' '
  • 183: f9506f8 (upstream: b64b0df) < -: ------------ scalar: avoid segfault in reconfigure --all

  • 184: 918d0a0 = 180: 7bbade9 scalar: make GVFS Protocol a forced choice

  • 185: 1304aa1 = 181: 4dfc839 t5300: confirm failure of git index-pack when non-idx suffix requested

  • 186: ef4f090 = 182: 8088fcd index-pack: disable rev-index if index file has non .idx suffix

  • 187: 84ee4f9 = 183: 714b6a5 sparse-index.c: fix use of index hashes in expand_index

  • 188: aad6134 = 184: 5a97876 t1092: add test for untracked files and directories

  • 189: fd33009 = 185: 90ce5dc wt-status: add trace2 data for sparse-checkout percentage

  • 190: 4ff4abe = 186: 5bfd759 wt-status: add VFS hydration percentage to normal git status output

  • 191: 12b09dd = 187: dc9a3b5 scalar-functional-tests.yml: update macos-11 to macos-13

  • 192: 8a7f3f4 = 188: 2e9909b github: use federated auth for Azure login

  • 193: 080a634 = 189: 0d6d04b trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup

  • 194: 7fdf949 = 190: e717a31 t5799: explicitly test gvfs-helper --fallback and --no-fallback

  • 195: 0b0286c ! 191: c2df878 gvfs-helper: don't fallback with new config

    @@ Documentation/config/gvfs.txt: gvfs.cache-server::
     
      ## gvfs-helper-client.c ##
     @@
    - #include "pkt-line.h"
      #include "quote.h"
      #include "packfile.h"
    + #include "hex.h"
     +#include "config.h"
      
      static struct oidset gh_client__oidset_queued = OIDSET_INIT;
  • 196: 138a74b = 192: 151da77 test-gvfs-protocol: add cache_http_503 to mayhem

  • 197: 3f0abb7 = 193: c457a81 t5799: add unit tests for new gvfs.fallback config setting

The differences pointed out by the range-diff are explained thusly:

  • Quite a few patches are upstream, either because they have been upstreamed in this cycle or because they had needed to be backported.
  • Lots of context changes, i.e. upstream changes in the vicinity of the lines modified in the microsoft/git fork.
  • Some functions (such as peel_iterated_oid()) now require a struct repository * parameter, which in some cases has to be passed down from their callers by adding the same new parameter to the function signatures.
  • All files that use the_repository (even implicitly, e.g. through the_hash_algo) need to #define USE_THE_REPOSITORY_VARIABLE before the #includes.
  • The type of the first parameter of git_config_pathname() (and of git_config_string(), too) has changed from const char ** to char **, to reflect that the caller now owns that memory and needs to take care of releasing it.
  • the_index is no more. It must be written as the_repository->index now.
  • get_oid_hex() is now declared in hex.h, which needs to be #included explicitly.
  • oidclr() now takes the hash algorithm explicitly as a second parameter.
  • The credential_fill() function now expects a second parameter to indicate whether the caller can deal with the new credential capabilities feature or not (which gvfs-helper can not).
  • The type of the url attribute of struct remote has changed from a char ** to a struct strvec, hence the URLs have to be accessed slightly differently.
  • Git for Windows' monitor-components workflow was modified; We still want to delete it in the microsoft/git fork to disable it.

@dscho dscho self-assigned this Jul 17, 2024
@dscho dscho requested a review from derrickstolee July 17, 2024 19:55
@dscho dscho force-pushed the tentative/vfs-2.46.0 branch from c7b4931 to 1a4ad41 Compare July 18, 2024 14:34
@dscho
Copy link
Member Author

dscho commented Jul 18, 2024

I finished fixing those new CI failures. Essentially, the leak checks are now much more stringent and pointed out many an issue in the gvfs-helper-related code. Also, the lint-docs Makefile target was really unhappy that neither gvfs-helper nor update-microsoft-git are documented, and since I disagree, I told it to accept that as-is.

After that, I also used the fine opportunity to reorder a couple of commits to tell a cleaner story (and hopefully make upstreaming a couple of the patches easier). I also squashed a couple of patches that were basically fixups, most notably in the GitHub workflows (such as updating the macos pool or using federated authentication).

Range-diff relative to first-iteration
  • 1: 9256695 = 1: 9256695 advice: warn when sparse index expands

  • 2: fa9d858 = 2: fa9d858 Revert "midx-write.c: use --stdin-packs when repacking"

  • 3: 43daded = 3: 43daded t: remove advice from some tests

  • 4: d493e7b = 4: d493e7b survey: stub in new experimental git-survey command

  • 5: 891929e = 5: 891929e survey: add command line opts to select references

  • 6: 0e33f37 = 6: 0e33f37 survey: collect the set of requested refs

  • 7: 02c2b1e = 7: 02c2b1e survey: calculate stats on refs and print results

  • 8: 46d0691 = 8: 46d0691 survey: stub in treewalk of reachable commits and objects

  • 9: 44a41d0 = 9: 44a41d0 survey: add traverse callback for commits

  • 10: 38f5aec = 10: 38f5aec survey: add vector of largest objects for various scaling dimensions

  • 11: acf22c6 = 11: acf22c6 survey: add pathname of blob or tree to large_item_vec

  • 12: 09c93cc = 12: 09c93cc survey: add commit-oid to large_item detail

  • 13: 9d24f68 = 13: 9d24f68 survey: add commit name-rev lookup to each large_item

  • 14: f4a94db = 14: f4a94db survey: add --json option and setup for pretty output

  • 15: ecef306 = 15: ecef306 survey: add pretty printing of stats

  • 16: 67a115d = 16: 67a115d t8100: create test for git-survey

  • 17: e210d30 = 17: e210d30 survey: add --no-name-rev option

  • 18: 95f6cde = 18: 95f6cde survey: started TODO list at bottom of source file

  • 19: aecf6ec = 19: aecf6ec survey: expanded TODO list at the bottom of the source file

  • 20: 79f3731 = 20: 79f3731 survey: expanded TODO with more notes

  • 21: d0ae24c = 21: d0ae24c survey: clearly note the experimental nature in the output

  • 183: 714b6a5 = 22: 9502191 sparse-index.c: fix use of index hashes in expand_index

  • 184: 5a97876 = 23: 6fdbc50 t1092: add test for untracked files and directories

  • 181: 4dfc839 = 24: 9c50334 t5300: confirm failure of git index-pack when non-idx suffix requested

  • 182: 8088fcd = 25: 133fc3f index-pack: disable rev-index if index file has non .idx suffix

  • 189: 0d6d04b = 26: 005f8c5 trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup

  • 22: 5f1879c = 27: 08dd799 reset --stdin: trim carriage return from the paths

  • 23: bb17814 = 28: 79167e0 Identify microsoft/git via a distinct version suffix

  • 24: 462b375 = 29: 4070838 gvfs: ensure that the version is based on a GVFS tag

  • 25: 13619bc = 30: 2d54d84 gvfs: add a GVFS-specific header file

  • 26: 6c9e6d9 = 31: bc6375e gvfs: add the core.gvfs config setting

  • 27: 663af32 = 32: e7a44d0 gvfs: add the feature to skip writing the index' SHA-1

  • 28: 0de65b9 = 33: ea206fe gvfs: add the feature that blobs may be missing

  • 29: d3efbf0 = 34: 62f4583 gvfs: prevent files to be deleted outside the sparse checkout

  • 30: b182882 = 35: ea21f8c gvfs: optionally skip reachability checks/upload pack during fetch

  • 31: fdf68f8 = 36: 723b285 gvfs: ensure all filters and EOL conversions are blocked

  • 32: 1673b6c = 37: 094a557 gvfs: allow "virtualizing" objects

  • 33: 818d82e = 38: 4113ebd Hydrate missing loose objects in check_and_freshen()

  • 34: 2d7a9dc = 39: 82a8cb0 sha1_file: when writing objects, skip the read_object_hook

  • 35: 4bee1df = 40: 65bbe74 gvfs: add global command pre and post hook procs

  • 36: 585cc63 = 41: 84fa870 t0400: verify that the hook is called correctly from a subdirectory

  • 37: 04b3614 = 42: 5bff5d7 Pass PID of git process to hooks.

  • 38: 6dc796c = 43: 2401e24 pre-command: always respect core.hooksPath

  • 39: 1beb06a = 44: 409ab49 sparse-checkout: update files with a modify/delete conflict

  • 40: 2e74640 = 45: c73dd2d sparse-checkout: avoid writing entries with the skip-worktree bit

  • 41: 47b22d8 = 46: 545b37b Do not remove files outside the sparse-checkout

  • 42: 1b457f9 = 47: 02cbf15 send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 43: 7969d78 = 48: 5731fb0 cache-tree: remove use of strbuf_addf in update_one

  • 44: f2eae33 = 49: 6b79912 gvfs: block unsupported commands when running in a GVFS repo

  • 45: a08a89d = 50: 2da5195 worktree: allow in Scalar repositories

  • 46: 7227b52 = 51: 20677e3 gvfs: allow overriding core.gvfs

  • 47: 5733f8e = 52: 812c876 BRANCHES.md: Add explanation of branches and using forks

  • 55: f51ea9b = 53: dea3c78 Add virtual file system settings and hook proc

  • 56: 8e22f06 = 54: 9aae04e virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 57: bd9e9d9 = 55: 3fca8dd virtualfilesystem: check if directory is included

  • 58: 214b081 = 56: 5c66ee8 backwards-compatibility: support the post-indexchanged hook

  • 59: 858040a = 57: 5778ef4 gvfs: verify that the built-in FSMonitor is disabled

  • 185: 90ce5dc = 58: a03b1e0 wt-status: add trace2 data for sparse-checkout percentage

  • 186: 5bfd759 = 59: 9327918 wt-status: add VFS hydration percentage to normal git status output

  • 60: b9c892c = 60: 1966bb6 status: add status serialization mechanism

  • 61: 7405e5e = 61: 59b78f3 Teach ahead-behind and serialized status to play nicely together

  • 62: 44d03e8 = 62: c14e228 status: serialize to path

  • 63: ce47f12 = 63: 61da650 status: reject deserialize in V2 and conflicts

  • 64: fe42bdd = 64: 4d3d214 serialize-status: serialize global and repo-local exclude file metadata

  • 65: c1d5d31 = 65: 99cdd81 status: deserialization wait

  • 66: 11d838d = 66: b3b9840 merge-recursive: avoid confusing logic in was_dirty()

  • 67: 1bc8f66 = 67: d708139 merge-recursive: add some defensive coding to was_dirty()

  • 68: dad640b = 68: ee784db merge-recursive: teach was_dirty() about the virtualfilesystem

  • 69: 3026a1e = 69: 8a22ddd status: deserialize with -uno does not print correct hint

  • 70: f974331 = 70: 8c06ea9 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 71: 0ad0d0f = 71: ea8bdfe fsmonitor: add script for debugging and update script for tests

  • 72: 907a53a = 72: e4eac46 status: disable deserialize when verbose output requested.

  • 73: ba4aaf9 = 73: a56b134 t7524: add test for verbose status deserialzation

  • 74: a4bbd5d = 74: 7030468 deserialize-status: silently fallback if we cannot read cache file

  • 75: c8c93ae = 75: 9317315 gvfs:trace2:data: add trace2 tracing around read_object_process

  • 76: cded777 = 76: 840e796 gvfs:trace2:data: status deserialization information

  • 77: 03952fa = 77: 7c0d80d gvfs:trace2:data: status serialization

  • 78: 31fcdac = 78: 2b63cd3 gvfs:trace2:data: add vfs stats

  • 79: abbea49 = 79: 8fd35f3 trace2: refactor setting process starting time

  • 80: afc4a0a = 80: 2ce216b trace2:gvfs:experiment: clear_ce_flags_1

  • 81: 5ce6558 = 81: b6b033b trace2:gvfs:experiment: report_tracking

  • 82: 4ec2e67 = 82: ff6a410 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 83: c1c64db = 83: 58c9819 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 84: ffcbc28 = 84: 0cba03a trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 85: 4957e88 = 85: 62fc488 trace2:gvfs:experiment: add region around unpack_trees()

  • 86: 6366b0e = 86: a8a4e87 trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 87: 9212637 = 87: dd5e92b trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 88: 801e01f = 88: 92aba5b trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 89: bf54c3f = 89: dc529a8 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 90: 4148a39 = 90: 1cf9c5e Trace2:gvfs:experiment: capture more 'tracking' details

  • 91: 2f076d1 = 91: b92805e credential: set trace2_child_class for credential manager children

  • 92: 1ecd577 = 92: 7ff046b sub-process: do not borrow cmd pointer from caller

  • 93: 678c1e1 = 93: 0dd2684 sub-process: add subprocess_start_argv()

  • 94: ad46269 = 94: fee8146 sha1-file: add function to update existing loose object cache

  • 95: 4c7f6da = 95: cbb6a3b packfile: add install_packed_git_and_mru()

  • 96: 80e302e = 96: 2ea6aae index-pack: avoid immediate object fetch while parsing packfile

  • 97: fd83445 ! 97: d558565 gvfs-helper: create tool to fetch objects using the GVFS Protocol

    @@ Documentation/config/gvfs.txt (new)
     +gvfs.sharedcache::
     +	TODO
     
    + ## Documentation/lint-manpages.sh ##
    +@@ Documentation/lint-manpages.sh: check_missing_docs () (
    + 		git-init-db) continue;;
    + 		git-remote-*) continue;;
    + 		git-stage) continue;;
    ++		git-gvfs-helper) continue;;
    + 		git-legacy-*) continue;;
    + 		git-?*--?* ) continue ;;
    + 		esac
    +
      ## Makefile ##
     @@ Makefile: LIB_OBJS += gpg-interface.o
      LIB_OBJS += graph.o
    @@ config.c: static int git_default_mailmap_config(const char *var, const char *val
     +	if (!strcmp(var, "gvfs.cache-server")) {
     +		char *v2 = NULL;
     +
    -+		if (!git_config_string(&v2, var, value) && v2 && *v2)
    ++		if (!git_config_string(&v2, var, value) && v2 && *v2) {
    ++			free(gvfs_cache_server_url);
     +			gvfs_cache_server_url = transport_anonymize_url(v2);
    ++		}
     +		free(v2);
     +		return 0;
     +	}
    @@ environment.c: int protect_hfs = PROTECT_HFS_DEFAULT;
      #endif
      int protect_ntfs = PROTECT_NTFS_DEFAULT;
     +int core_use_gvfs_helper;
    -+const char *gvfs_cache_server_url;
    ++char *gvfs_cache_server_url;
     +const char *gvfs_shared_cache_pathname;
      
      /*
    @@ environment.h: extern int core_gvfs;
      extern int protect_hfs;
      extern int protect_ntfs;
     +extern int core_use_gvfs_helper;
    -+extern const char *gvfs_cache_server_url;
    ++extern char *gvfs_cache_server_url;
     +extern const char *gvfs_shared_cache_pathname;
      
      extern int core_apply_sparse_checkout;
    @@ gvfs-helper.c (new)
     +			count++;
     +	} while (1);
     +
    ++	strbuf_release(&buf_stdin);
     +	return count;
     +}
     +
    @@ gvfs-helper.c (new)
     +	}
     +
     +	gh__run_one_slot(slot, params, status);
    ++	strbuf_release(&rest_url);
     +}
     +
     +static void do_req__to_main(const char *url_component,
  • 98: b574c17 ! 98: 886f31f sha1-file: create shared-cache directory if it doesn't exist

    @@ environment.c
     @@ environment.c: int protect_hfs = PROTECT_HFS_DEFAULT;
      int protect_ntfs = PROTECT_NTFS_DEFAULT;
      int core_use_gvfs_helper;
    - const char *gvfs_cache_server_url;
    + char *gvfs_cache_server_url;
     -const char *gvfs_shared_cache_pathname;
     +struct strbuf gvfs_shared_cache_pathname = STRBUF_INIT;
      
    @@ environment.h
     @@ environment.h: extern int protect_hfs;
      extern int protect_ntfs;
      extern int core_use_gvfs_helper;
    - extern const char *gvfs_cache_server_url;
    + extern char *gvfs_cache_server_url;
     -extern const char *gvfs_shared_cache_pathname;
     +extern struct strbuf gvfs_shared_cache_pathname;
      
  • 99: 4d22d1b = 99: 9743c4a gvfs-helper: better handling of network errors

  • 100: b569887 = 100: 4b64bd2 gvfs-helper-client: properly update loose cache with fetched OID

  • 101: be0e9bb ! 101: 48773f0 gvfs-helper: V2 robust retry and throttling

    @@ gvfs-helper.c: static void do_req(const char *url_base,
      	else
      		set_cache_server_creds_on_slot(slot, creds);
     @@ gvfs-helper.c: static void do_req(const char *url_base,
    - 	gh__run_one_slot(slot, params, status);
    + 	strbuf_release(&rest_url);
      }
      
     +/*
  • 102: cbcc517 = 102: 7876b32 gvfs-helper: expose gvfs/objects GET and POST semantics

  • 103: 6db4130 = 103: 913343a gvfs-helper: dramatically reduce progress noise

  • 104: 06ba59c = 104: 135469e gvfs-helper-client.h: define struct object_id

  • 105: f50d849 = 105: 044c2a9 gvfs-helper: handle pack-file after single POST request

  • 106: a089606 ! 106: bdd85c6 test-gvfs-prococol, t5799: tests for gvfs-helper

    @@ t/helper/test-gvfs-protocol.c (new)
     +	.gvfs_api = STRBUF_INIT, \
     +	.slash_args = STRBUF_INIT, \
     +	.quest_args = STRBUF_INIT, \
    -+	.header_list = STRING_LIST_INIT_NODUP, \
    ++	.header_list = STRING_LIST_INIT_DUP, \
     +	}
     +
     +static void req__release(struct req *req)
    @@ t/helper/test-gvfs-protocol.c (new)
     +
     +	if (write_in_full(fd, response_header.buf, response_header.len) < 0) {
     +		logerror("unable to write response header");
    ++		free(content);
     +		return WR_IO_ERROR;
     +	}
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +
     +	if (string_list_has_string(&mayhem_list, "close_write")) {
     +		logmayhem("close_write");
    ++		free(content);
     +		return WR_MAYHEM | WR_HANGUP;
     +	}
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +					  (uintmax_t)*oi->sizep);
     +
     +	/* [2] */
    ++	memset(&oid_check, 0, sizeof(oid_check));
     +	the_hash_algo->init_fn(&c);
     +	the_hash_algo->update_fn(&c, object_header, object_header_len);
     +	the_hash_algo->update_fn(&c, *oi->contentp, *oi->sizep);
    @@ t/helper/test-gvfs-protocol.c (new)
     +
     +		/* [5] */
     +		wr = send_chunk(fd, compressed, stream.next_out - compressed);
    -+		if (wr & WR_STOP_THE_MUSIC)
    ++		if (wr & WR_STOP_THE_MUSIC) {
    ++			free(content);
     +			return wr;
    ++		}
     +
     +		stream.next_out = compressed;
     +		stream.avail_out = sizeof(compressed);
    @@ t/helper/test-gvfs-protocol.c (new)
     +		    oid_to_hex(oid), oid_to_hex(&oid_check));
     +
     +	/* [5] */
    ++	free(content);
     +	return send_final_chunk(fd);
     +}
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +		if (!h.len)
     +			goto done; /* a blank line ends the header */
     +
    -+		string_list_append(&req->header_list,
    -+				   strbuf_detach(&h, NULL));
    ++		string_list_append(&req->header_list, h.buf);
     +	}
     +
     +	/*
    @@ t/helper/test-gvfs-protocol.c (new)
     +			trace2_printf("%s: Hdrs: %s", TR2_CAT, item->string);
     +	}
     +
    ++	strbuf_release(&h);
    ++
     +	return WR_OK;
     +}
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +int cmd_main(int argc, const char **argv)
     +{
     +	int listen_port = 0;
    -+	struct string_list listen_addr = STRING_LIST_INIT_NODUP;
    ++	static struct string_list listen_addr = STRING_LIST_INIT_NODUP;
     +	int worker_mode = 0;
     +	int i;
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +		const char *v;
     +
     +		if (skip_prefix(arg, "--listen=", &v)) {
    -+			string_list_append(&listen_addr, xstrdup_tolower(v));
    ++			string_list_append_nodup(&listen_addr, xstrdup_tolower(v));
     +			continue;
     +		}
     +		if (skip_prefix(arg, "--port=", &v)) {
  • 107: e1f2825 = 107: 3ce0a7d gvfs-helper: move result-list construction into install functions

  • 108: 0465ea0 ! 108: 314d49d t5799: add support for POST to return either a loose object or packfile

    @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const
     +
     +	if (oid_object_info_extended(the_repository, oid, &oi, flags)) {
     +		logerror("Could not find OID: '%s'", oid_to_hex(oid));
    ++		free(content);
     +		return send_http_error(1, 404, "Not Found", -1, WR_OK);
     +	}
     +
     +	if (string_list_has_string(&mayhem_list, "http_404")) {
     +		logmayhem("http_404");
    ++		free(content);
     +		return send_http_error(1, 404, "Not Found", -1, WR_MAYHEM);
     +	}
     +
    @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const
     +					  (uintmax_t)*oi.sizep);
      
      	/* [2] */
    + 	memset(&oid_check, 0, sizeof(oid_check));
      	the_hash_algo->init_fn(&c);
      	the_hash_algo->update_fn(&c, object_header, object_header_len);
     -	the_hash_algo->update_fn(&c, *oi->contentp, *oi->sizep);
  • 109: e4df844 = 109: 0508d3e t5799: cleanup wc-l and grep-c lines

  • 110: f0cfe9c ! 110: eeabb30 gvfs-helper: verify loose objects after write

    @@ gvfs-helper.c: static void install_packfile(struct gh__request_params *params,
     +	ret = read_loose_object(path, expected_oid, &real_oid, &contents, &oi);
     +	if (!ret)
     +		free(contents);
    ++	strbuf_release(&type_name);
     +
     +	return ret;
     +}
  • 111: 2491b1e = 111: fa94716 t7599: create corrupt blob test

  • 112: e6cc930 ! 112: 66a156c gvfs-helper: add prefetch support

    @@ t/helper/test-gvfs-protocol.c: static enum worker_result req__read(struct req *r
      	}
     +#endif
      
    - 	return WR_OK;
    - }
    + 	strbuf_release(&h);
    + 
     @@ t/helper/test-gvfs-protocol.c: static enum worker_result dispatch(struct req *req)
      			return do__gvfs_config__get(req);
      	}
  • 113: b93feac = 113: ac4306b gvfs-helper: add prefetch .keep file for last packfile

  • 114: 4cf4fc7 = 114: eec2cb3 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 115: dc478bf = 115: 3eac7e5 gvfs-helper: move content-type warning for prefetch packs

  • 116: 9a86242 = 116: 75daf91 fetch: use gvfs-helper prefetch under config

  • 117: 88744c5 = 117: 807e68c gvfs-helper: better support for concurrent packfile fetches

  • 118: 2e12c33 = 118: 15c3689 remote-curl: do not call fetch-pack when using gvfs-helper

  • 119: 1ab9c63 = 119: 11fc179 fetch: reprepare packs before checking connectivity

  • 120: 8fee068 = 120: daed941 gvfs-helper: retry when creating temp files

  • 121: 407fb5c = 121: e438434 sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 122: 5f1daad = 122: d3e2705 gvfs-helper: add --max-retries to prefetch verb

  • 123: 8bee033 = 123: bf18802 t5799: add tests to detect corrupt pack/idx files in prefetch

  • 124: c519fa5 = 124: f79bc92 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 190: e717a31 = 125: 56ecd8c t5799: explicitly test gvfs-helper --fallback and --no-fallback

  • 191: c2df878 = 126: bf3c128 gvfs-helper: don't fallback with new config

  • 125: 79d4ae3 = 127: 332d207 maintenance: care about gvfs.sharedCache config

  • 192: 151da77 = 128: 06e0f21 test-gvfs-protocol: add cache_http_503 to mayhem

  • 126: 31932ba = 129: ad15587 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 193: c457a81 = 130: b93a4b2 t5799: add unit tests for new gvfs.fallback config setting

  • 127: 38f795c = 131: 341eed0 homebrew: add GitHub workflow to release Cask

  • 128: d4466b1 = 132: d2e6e6d Adding winget workflows

  • 129: c1819bc = 133: 2b69fd5 Disable the monitor-components workflow in msft-git

  • 130: 33b280c = 134: acaedf5 .github: enable windows builds on microsoft fork

  • 131: ee013f9 = 135: ce86657 release: create initial Windows installer build workflow

  • 132: 84dc668 = 136: 84fae4b help: special-case HOST_CPU universal

  • 133: 5aa01da = 137: aaae0bd release: add Mac OSX installer build

  • 134: 4898f63 = 138: 3ef8fd7 release: build unsigned Ubuntu .deb package

  • 140: 60880fa ! 139: 7e34f98 update-microsoft-git: create barebones builtin

    @@ Documentation/git-update-microsoft-git.txt (new)
     +---
     +Part of the linkgit:git[1] suite
     
    + ## Documentation/lint-manpages.sh ##
    +@@ Documentation/lint-manpages.sh: check_missing_docs () (
    + 		git-remote-*) continue;;
    + 		git-stage) continue;;
    + 		git-gvfs-helper) continue;;
    ++		git-update-microsoft-git) continue;;
    + 		git-legacy-*) continue;;
    + 		git-?*--?* ) continue ;;
    + 		esac
    +
      ## Makefile ##
     @@ Makefile: BUILTIN_OBJS += builtin/tag.o
      BUILTIN_OBJS += builtin/unpack-file.o
  • 142: 6b8190b = 140: de3b31f update-microsoft-git: Windows implementation

  • 144: 571ebb6 = 141: 0537212 update-microsoft-git: use brew on macOS

  • 146: ef8aba1 = 142: 29a37b9 .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 147: de761fe = 143: 23ed79f .github: update PULL_REQUEST_TEMPLATE.md

  • 148: e202255 = 144: bc2279a Adjust README.md for microsoft/git

  • 48: 84d0024 = 145: a094803 git_config_set_multivar_in_file_gently(): add a lock timeout

  • 49: 5ebaf3f = 146: 800d4f2 scalar: set the config write-lock timeout to 150ms

  • 50: 2521c6e = 147: 7903f00 scalar: add docs from microsoft/scalar

  • 51: 8474a8c = 148: 2b4a99b scalar (Windows): use forward slashes as directory separators

  • 52: fced4b6 = 149: 41656b7 scalar: add retry logic to run_git()

  • 53: 98e3445 = 150: 266249c scalar: support the config command for backwards compatibility

  • 149: 855f8ec = 151: e253f20 scalar: implement a minimal JSON parser

  • 150: 6365f7c = 152: c3ac61e scalar clone: support GVFS-enabled remote repositories

  • 151: 92057b3 = 153: 242bfe7 test-gvfs-protocol: also serve smart protocol

  • 152: 8411cdc = 154: d86f59d gvfs-helper: add the endpoint command

  • 153: cf20ad0 = 155: ff64723 dir_inside_of(): handle directory separators correctly

  • 154: 1ccd926 = 156: 88ec714 scalar: disable authentication in unattended mode

  • 155: 3a523b3 = 157: 919a401 scalar: do initialize gvfs.sharedCache

  • 156: a9a22f3 = 158: b400930 scalar diagnose: include shared cache info

  • 157: bc76060 = 159: 5f5992b scalar: only try GVFS protocol on https:// URLs

  • 158: e455e68 = 160: 7ca006e scalar: verify that we can use a GVFS-enabled repository

  • 159: b8db558 = 161: c7a6725 scalar: add the cache-server command

  • 160: da1d056 = 162: b11236d scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 161: eac9d48 = 163: 2a1cef4 scalar: adjust documentation to the microsoft/git fork

  • 162: e1ca251 = 164: ad37180 scalar: enable untracked cache unconditionally

  • 163: a2e90b7 = 165: b46b1f0 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 180: 7bbade9 = 166: 1344274 scalar: make GVFS Protocol a forced choice

  • 164: c5d70c0 = 167: 8b9c6ee scalar diagnose: accommodate Scalar's Functional Tests

  • 165: 2f5f734 ! 168: c1134a0 ci: run Scalar's Functional Tests

    @@ .github/workflows/scalar-functional-tests.yml (new)
     +      fail-fast: false
     +      matrix:
     +        # Order by runtime (in descending order)
    -+        os: [windows-2019, macos-11, ubuntu-20.04, ubuntu-22.04]
    ++        os: [windows-2019, macos-13, ubuntu-20.04, ubuntu-22.04]
     +        # Scalar.NET used to be tested using `features: [false, experimental]`
     +        # But currently, Scalar/C ignores `feature.scalar` altogether, so let's
     +        # save some electrons and run only one of them...
  • 166: e814dff = 169: dd310a4 scalar: upgrade to newest FSMonitor config setting

  • 177: a79fae6 = 170: b5a5e89 credential: add new interactive config option

  • 178: 75a97b3 = 171: 00dcfb6 maintenance: add custom config to background jobs

  • 167: d9c8469 = 172: 6ab7d3d abspath: make strip_last_path_component() global

  • 179: 5ca9725 = 173: 284c2bb scalar: configure maintenance during 'reconfigure'

  • 168: 108fc64 = 174: 54e9db2 scalar: .scalarCache should live above enlistment

  • 169: 10049eb = 175: c20327d add/rm: allow adding sparse entries when virtual

  • 170: 911894d = 176: aead9a7 sparse-checkout: add config to disable deleting dirs

  • 171: de33ebe = 177: 1619be4 diff: ignore sparse paths in diffstat

  • 172: d3d3691 = 178: b3df962 repo-settings: enable sparse index by default

  • 173: 3b11321 = 179: aa578f8 diff(sparse-index): verify with partially-sparse

  • 174: 2719642 = 180: 4301124 stash: expand testing for git stash -u

  • 54: 45d1ce3 = 181: 9e6ce2e sequencer: avoid progress when stderr is redirected

  • 175: 6859862 = 182: 203ebbe sparse: add vfs-specific precautions

  • 176: 0f906d1 = 183: 10668eb reset: fix mixed reset when using virtual filesystem

  • 135: 336ac3f ! 184: 81f5237 release: add signing step for .deb package

    @@ Commit message
         Co-authored-by: Lessley Dennington <ldennington@github.com>
     
      ## .github/workflows/build-git-installers.yml ##
    +@@ .github/workflows/build-git-installers.yml: on:
    +     tags:
    +       - 'v[0-9]*vfs*' # matches "v<number><any characters>vfs<any characters>"
    + 
    ++permissions:
    ++  id-token: write # required for Azure login via OIDC
    ++
    + jobs:
    +   # Check prerequisites for the workflow
    +   prereqs:
     @@ .github/workflows/build-git-installers.yml: jobs:
                  git/.github/macos-installer/*.pkg
        # End build and sign Mac OSX installers
    @@ .github/workflows/build-git-installers.yml: jobs:
     +      - name: Log into Azure
     +        uses: azure/login@v1
     +        with:
    -+          creds: ${{ secrets.AZURE_CREDENTIALS }}
    ++          client-id: ${{ secrets.AZURE_CLIENT_ID }}
    ++          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
    ++          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
     +
     +      - name: Prepare for GPG signing
     +        env:
  • 136: 88fc5e0 = 185: 7162807 release: create draft GitHub release with packages & installers

  • 137: a070a17 ! 186: 3b6fd52 build-git-installers: publish gpg public key

    @@ Commit message
     
      ## .github/workflows/build-git-installers.yml ##
     @@ .github/workflows/build-git-installers.yml: jobs:
    +     runs-on: ubuntu-latest
    +     permissions:
    +       contents: write
    ++      id-token: write # required for Azure login via OIDC
    +     needs:
    +       - create-linux-artifacts
            - create-macos-artifacts
            - windows_artifacts
            - prereqs
    @@ .github/workflows/build-git-installers.yml: jobs:
     +      - name: Log into Azure
     +        uses: azure/login@v1
     +        with:
    -+          creds: ${{ secrets.AZURE_CREDENTIALS }}
    ++          client-id: ${{ secrets.AZURE_CLIENT_ID }}
    ++          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
    ++          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
     +
     +      - name: Download GPG public key signature file
     +        run: |
  • 138: 280848e = 187: c60fc5f release: continue pestering until user upgrades

  • 139: c29db06 = 188: 37fd5ba Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 141: adca1a5 = 189: b249793 dist: archive HEAD instead of HEAD^{tree}

  • 143: 20f8694 = 190: 4538255 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 145: 70b2c7c ! 191: 43d5637 release: add installer validation

    @@ .github/workflows/build-git-installers.yml: jobs:
          runs-on: ubuntu-latest
          permissions:
            contents: write
    +       id-token: write # required for Azure login via OIDC
          needs:
     +      - validate-installers
            - create-linux-artifacts
  • 187: dc9a3b5 < -: ------------ scalar-functional-tests.yml: update macos-11 to macos-13

  • 188: 2e9909b < -: ------------ github: use federated auth for Azure login

Copy link

@derrickstolee derrickstolee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving the latest update. Thanks for the detailed range-diff between versions, @dscho!

@mjcheetham mjcheetham force-pushed the tentative/vfs-2.46.0 branch from 1a4ad41 to 4d79f9c Compare July 23, 2024 21:26
@mjcheetham
Copy link
Member

Range diff relative to rc0
  1:  92566955ce <   -:  ---------- advice: warn when sparse index expands

Already upstream.

  2:  fa9d858ce9 =   1:  df06595f2a Revert "midx-write.c: use `--stdin-packs` when repacking"
  4:  d493e7b971 =   2:  3563c4ca76 survey: stub in new experimental `git-survey` command
  5:  891929e0cb =   3:  86e3aa8aec survey: add command line opts to select references
  6:  0e33f37886 =   4:  93a8f3dfe2 survey: collect the set of requested refs
 22:  950219171d =   5:  0f90e81af0 sparse-index.c: fix use of index hashes in expand_index
 24:  9c5033454b =   6:  7faf39ec38 t5300: confirm failure of git index-pack when non-idx suffix requested
  7:  02c2b1eef4 =   7:  7efb1ef685 survey: calculate stats on refs and print results
  3:  43daded4fa =   8:  4dad0cebed t: remove advice from some tests
 23:  6fdbc50aeb =   9:  fa782dee4c t1092: add test for untracked files and directories
 25:  133fc3f114 =  10:  661e96b902 index-pack: disable rev-index if index file has non .idx suffix
 26:  005f8c5d57 =  11:  c0d0db0b0b trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup
  8:  46d069164f =  12:  72fd844ffe survey: stub in treewalk of reachable commits and objects
  9:  44a41d0027 =  13:  cc01b30466 survey: add traverse callback for commits
 10:  38f5aecd6c =  14:  58c40117c3 survey: add vector of largest objects for various scaling dimensions
 11:  acf22c612e =  15:  fdb0634305 survey: add pathname of blob or tree to large_item_vec
 12:  09c93cc0d1 =  16:  de9f560f9d survey: add commit-oid to large_item detail
 13:  9d24f68692 =  17:  d8f37cdfc1 survey: add commit name-rev lookup to each large_item
 14:  f4a94db23d =  18:  dbb8b59a59 survey: add --json option and setup for pretty output
 15:  ecef306aae =  19:  bda82ed7c5 survey: add pretty printing of stats
 16:  67a115d6eb =  20:  2b62b9b7e9 t8100: create test for git-survey
 17:  e210d30ed3 =  21:  7febb585d8 survey: add --no-name-rev option
 18:  95f6cde2f8 =  22:  a3f6b46199 survey: started TODO list at bottom of source file
 19:  aecf6ec64d =  23:  9397140c0e survey: expanded TODO list at the bottom of the source file
 20:  79f3731e02 =  24:  b5648914c2 survey: expanded TODO with more notes
 21:  d0ae24c9d2 =  25:  14a92b5ead survey: clearly note the experimental nature in the output
 27:  08dd799c53 =  26:  3c5f0946b7 reset --stdin: trim carriage return from the paths
 28:  79167e014c !  27:  5ab768cfd1 Identify microsoft/git via a distinct version suffix
    @@ Commit message
      ## GIT-VERSION-GEN ##
     @@
      GVF=GIT-VERSION-FILE
    - DEF_VER=v2.46.0-rc0
    + DEF_VER=v2.46.0-rc1
      
     +# Identify microsoft/git via a distinct version suffix
     +DEF_VER=$DEF_VER.vfs.0.0
 29:  40708385cc =  28:  0cde5ec2ea gvfs: ensure that the version is based on a GVFS tag
 30:  2d54d840b1 =  29:  cb798ed4a1 gvfs: add a GVFS-specific header file
 31:  bc6375e4d8 =  30:  e4c400ef86 gvfs: add the core.gvfs config setting
 32:  e7a44d04f0 =  31:  602843c0d3 gvfs: add the feature to skip writing the index' SHA-1
 33:  ea206fe4dc =  32:  92ba3cfea0 gvfs: add the feature that blobs may be missing
 34:  62f4583d2b =  33:  cdc2aa5977 gvfs: prevent files to be deleted outside the sparse checkout
 35:  ea21f8c799 =  34:  99902e24e1 gvfs: optionally skip reachability checks/upload pack during fetch
 36:  723b285426 =  35:  17f1eb5cd3 gvfs: ensure all filters and EOL conversions are blocked
 37:  094a557594 =  36:  23d6dd0345 gvfs: allow "virtualizing" objects
 38:  4113ebd051 =  37:  cfac01828c Hydrate missing loose objects in check_and_freshen()
 39:  82a8cb09e9 =  38:  2e77a626ae sha1_file: when writing objects, skip the read_object_hook
 40:  65bbe74854 =  39:  54410cc296 gvfs: add global command pre and post hook procs
 41:  84fa8701d8 =  40:  1fe3795039 t0400: verify that the hook is called correctly from a subdirectory
 42:  5bff5d735a =  41:  e6858931a1 Pass PID of git process to hooks.
 43:  2401e24bef =  42:  d5d5c66fed pre-command: always respect core.hooksPath
 44:  409ab49d5c =  43:  2a8a732a71 sparse-checkout: update files with a modify/delete conflict
 45:  c73dd2d8d1 =  44:  6f78a3d2c0 sparse-checkout: avoid writing entries with the skip-worktree bit
 46:  545b37b9f1 =  45:  0e245d14bd Do not remove files outside the sparse-checkout
 47:  02cbf157a9 =  46:  0f960b852f send-pack: do not check for sha1 file when GVFS_MISSING_OK set
 48:  5731fb0947 =  47:  6031f32297 cache-tree: remove use of strbuf_addf in update_one
 49:  6b7991276b =  48:  d16829be04 gvfs: block unsupported commands when running in a GVFS repo
 50:  2da5195324 =  49:  cea1222281 worktree: allow in Scalar repositories
 51:  20677e35db =  50:  23a95fb838 gvfs: allow overriding core.gvfs
 52:  812c87658e =  51:  632cebbbee BRANCHES.md: Add explanation of branches and using forks
 53:  dea3c78556 =  52:  7184be1ddd Add virtual file system settings and hook proc
 54:  9aae04e2de =  53:  aa30cd8111 virtualfilesystem: don't run the virtual file system hook if the index has been redirected
 55:  3fca8ddbdf =  54:  e6a87f3a58 virtualfilesystem: check if directory is included
 56:  5c66ee85dd =  55:  b8338c1a5b backwards-compatibility: support the post-indexchanged hook
 57:  5778ef45b5 =  56:  18886ac465 gvfs: verify that the built-in FSMonitor is disabled
 58:  a03b1e0a63 =  57:  74b1f33870 wt-status: add trace2 data for sparse-checkout percentage
 59:  9327918509 =  58:  a49d01a60e wt-status: add VFS hydration percentage to normal `git status` output
 60:  1966bb6025 =  59:  c5bb373475 status: add status serialization mechanism
 61:  59b78f31a4 =  60:  35e18b8221 Teach ahead-behind and serialized status to play nicely together
 62:  c14e228cab =  61:  4da43b03ac status: serialize to path
 63:  61da650cca =  62:  db07d40536 status: reject deserialize in V2 and conflicts
 64:  4d3d214e5a =  63:  f61fd21144 serialize-status: serialize global and repo-local exclude file metadata
 65:  99cdd81bd4 =  64:  07da99264d status: deserialization wait
 66:  b3b9840439 =  65:  5cc6d7a862 merge-recursive: avoid confusing logic in was_dirty()
 67:  d708139f7b =  66:  cb76211423 merge-recursive: add some defensive coding to was_dirty()
 68:  ee784dbbf8 =  67:  b5c1fdb696 merge-recursive: teach was_dirty() about the virtualfilesystem
 69:  8a22ddd977 =  68:  dc0c647b7f status: deserialize with -uno does not print correct hint
 70:  8c06ea9999 =  69:  5339acee22 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate
 71:  ea8bdfe5be =  70:  7a3bfb1158 fsmonitor: add script for debugging and update script for tests
 72:  e4eac460a6 =  71:  07bbfcc5af status: disable deserialize when verbose output requested.
 73:  a56b134517 =  72:  a08f41f70b t7524: add test for verbose status deserialzation
 74:  70304688f5 =  73:  480e9e989a deserialize-status: silently fallback if we cannot read cache file
 75:  9317315371 =  74:  daf492bfae gvfs:trace2:data: add trace2 tracing around read_object_process
 76:  840e7966f9 =  75:  267ff7c07c gvfs:trace2:data: status deserialization information
 77:  7c0d80dd55 =  76:  fa956c111f gvfs:trace2:data: status serialization
 78:  2b63cd3f98 =  77:  2ca98e7594 gvfs:trace2:data: add vfs stats
 79:  8fd35f3e8a =  78:  f7d022e50e trace2: refactor setting process starting time
 80:  2ce216bb35 =  79:  b7920cfcd2 trace2:gvfs:experiment: clear_ce_flags_1
 81:  b6b033b0fa =  80:  0ca43b3aaf trace2:gvfs:experiment: report_tracking
 82:  ff6a410041 =  81:  c88123de58 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache
 83:  58c9819067 =  82:  9dcde580e6 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension
 84:  0cba03a684 =  83:  2a0520316f trace2:gvfs:experiment: add region to apply_virtualfilesystem()
 85:  62fc488239 =  84:  b8de77d6a5 trace2:gvfs:experiment: add region around unpack_trees()
 86:  a8a4e87378 =  85:  64f920fe53 trace2:gvfs:experiment: add region to cache_tree_fully_valid()
 87:  dd5e92b410 =  86:  4b95ad9a45 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()
 88:  92aba5b37b =  87:  e03d099e38 trace2:gvfs:experiment: increase default event depth for unpack-tree data
 89:  dc529a8720 =  88:  1121372830 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()
 90:  1cf9c5eb97 =  89:  16b0edb5ef Trace2:gvfs:experiment: capture more 'tracking' details
 91:  b92805e780 =  90:  58bdeae303 credential: set trace2_child_class for credential manager children
 92:  7ff046b962 =  91:  5469cc2a08 sub-process: do not borrow cmd pointer from caller
 93:  0dd26841ca =  92:  ff03061906 sub-process: add subprocess_start_argv()
 94:  fee8146394 =  93:  73cdb6baa5 sha1-file: add function to update existing loose object cache
 95:  cbb6a3b794 =  94:  11164e4e42 packfile: add install_packed_git_and_mru()
 96:  2ea6aae499 =  95:  bff7c394ee index-pack: avoid immediate object fetch while parsing packfile
 97:  d558565078 =  96:  83fd9cd7af gvfs-helper: create tool to fetch objects using the GVFS Protocol
 98:  886f31f17f =  97:  2a62e82b83 sha1-file: create shared-cache directory if it doesn't exist
 99:  9743c4a6fc =  98:  208ee6f366 gvfs-helper: better handling of network errors
100:  4b64bd2afc =  99:  16f54c4d86 gvfs-helper-client: properly update loose cache with fetched OID
101:  48773f09b0 = 100:  05402c4fe2 gvfs-helper: V2 robust retry and throttling
102:  7876b32ccb = 101:  51b5aa6ad9 gvfs-helper: expose gvfs/objects GET and POST semantics
103:  913343a570 = 102:  88945668cc gvfs-helper: dramatically reduce progress noise
104:  135469e2d9 = 103:  a6fe884b26 gvfs-helper-client.h: define struct object_id
105:  044c2a9a48 = 104:  045e86f14d gvfs-helper: handle pack-file after single POST request
106:  bdd85c67a1 ! 105:  90a644427b test-gvfs-prococol, t5799: tests for gvfs-helper
    @@ t/helper/test-gvfs-protocol.c (new)
     +
     +	if (write_in_full(fd, response_header.buf, response_header.len) < 0) {
     +		logerror("unable to write response header");
    -+		free(content);
     +		return WR_IO_ERROR;
     +	}
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +
     +	if (string_list_has_string(&mayhem_list, "close_write")) {
     +		logmayhem("close_write");
    -+		free(content);
     +		return WR_MAYHEM | WR_HANGUP;
     +	}
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +		/* [5] */
     +		wr = send_chunk(fd, compressed, stream.next_out - compressed);
     +		if (wr & WR_STOP_THE_MUSIC) {
    -+			free(content);
     +			return wr;
     +		}
     +
    @@ t/helper/test-gvfs-protocol.c (new)
     +		    oid_to_hex(oid), oid_to_hex(&oid_check));
     +
     +	/* [5] */
    -+	free(content);
     +	return send_final_chunk(fd);
     +}
     +

These free(content) lines were added to the wrong commit.. void *content isn't introduced until later.

107:  3ce0a7d819 = 106:  4d0afd5d5d gvfs-helper: move result-list construction into install functions
108:  314d49d7f4 ! 107:  063f19ac56 t5799: add support for POST to return either a loose object or packfile
    @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const
      	/*
      	 * We are blending several somewhat independent concepts here:
     @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi,
    + 
    + 	if (write_in_full(fd, response_header.buf, response_header.len) < 0) {
    + 		logerror("unable to write response header");
    ++		free(content);
    + 		return WR_IO_ERROR;
    + 	}
    + 
    +@@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi,
    + 
    + 	if (string_list_has_string(&mayhem_list, "close_write")) {
    + 		logmayhem("close_write");
    ++		free(content);
    + 		return WR_MAYHEM | WR_HANGUP;
    + 	}
    + 
      	/* [1a] */
      	object_header_len = 1 + xsnprintf(object_header, MAX_HEADER_LEN,
      					  "%s %"PRIuMAX,
    @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const
      	do {
      		enum worker_result wr;
      		unsigned char *in0 = stream.next_in;
    +@@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi,
    + 		/* [5] */
    + 		wr = send_chunk(fd, compressed, stream.next_out - compressed);
    + 		if (wr & WR_STOP_THE_MUSIC) {
    ++			free(content);
    + 			return wr;
    + 		}
    + 
    +@@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi,
    + 		    oid_to_hex(oid), oid_to_hex(&oid_check));
    + 
    + 	/* [5] */
    ++	free(content);
    + 	return send_final_chunk(fd);
    + }
    + 
     @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi,
      static enum worker_result do__gvfs_objects__get(struct req *req)
      {

Here are the free(content) calls that now live in the commit that added the *content.

109:  0508d3e2ce = 108:  ace3ea7097 t5799: cleanup wc-l and grep-c lines
110:  eeabb303df = 109:  b3974d854c gvfs-helper: verify loose objects after write
111:  fa94716fc8 = 110:  e6674f3994 t7599: create corrupt blob test
112:  66a156cfd8 = 111:  906ecd9fa7 gvfs-helper: add prefetch support
113:  ac4306bc46 = 112:  8829873d49 gvfs-helper: add prefetch .keep file for last packfile
114:  eec2cb38d3 = 113:  475b597dbd gvfs-helper: do one read in my_copy_fd_len_tail()
115:  3eac7e5725 = 114:  f85f47f7a7 gvfs-helper: move content-type warning for prefetch packs
116:  75daf91a8e = 115:  c86d0d8280 fetch: use gvfs-helper prefetch under config
117:  807e68c96e = 116:  e5296c7dcb gvfs-helper: better support for concurrent packfile fetches
118:  15c3689267 = 117:  a3934592f7 remote-curl: do not call fetch-pack when using gvfs-helper
119:  11fc1795fa = 118:  5d7744b059 fetch: reprepare packs before checking connectivity
120:  daed94191a = 119:  a56cf97d1b gvfs-helper: retry when creating temp files
121:  e438434aa2 = 120:  e75a40ff4f sparse: avoid warnings about known cURL issues in gvfs-helper.c
122:  d3e2705893 = 121:  86c5780213 gvfs-helper: add --max-retries to prefetch verb
123:  bf18802dc7 = 122:  f692b2e58e t5799: add tests to detect corrupt pack/idx files in prefetch
124:  f79bc92086 = 123:  e979daee96 gvfs-helper: ignore .idx files in prefetch multi-part responses
127:  332d207293 = 124:  ef29598c99 maintenance: care about gvfs.sharedCache config
129:  ad15587492 = 125:  bd4b42af7e unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags
131:  341eed043a = 126:  ea3d46623f homebrew: add GitHub workflow to release Cask
125:  56ecd8c4fd = 127:  bccc49129d t5799: explicitly test gvfs-helper --fallback and --no-fallback
132:  d2e6e6dd5e = 128:  42b11562fe Adding winget workflows
126:  bf3c128b04 = 129:  a3049b5ba0 gvfs-helper: don't fallback with new config
133:  2b69fd5ba4 = 130:  6c6e55f5fa Disable the `monitor-components` workflow in msft-git
128:  06e0f2141c = 131:  e1b6ce7e58 test-gvfs-protocol: add cache_http_503 to mayhem
134:  acaedf5732 = 132:  1cc18c0502 .github: enable windows builds on microsoft fork
130:  b93a4b2e0b = 133:  25d4af2c6c t5799: add unit tests for new `gvfs.fallback` config setting
135:  ce866579e5 = 134:  562fd02ce2 release: create initial Windows installer build workflow
136:  84fae4b107 = 135:  6e615dfcd0 help: special-case HOST_CPU `universal`
137:  aaae0bdec4 = 136:  70f340519e release: add Mac OSX installer build
138:  3ef8fd774a = 137:  97dfa03000 release: build unsigned Ubuntu .deb package
184:  81f5237405 = 138:  00d71d7e84 release: add signing step for .deb package
185:  7162807e9b = 139:  66dd2efaff release: create draft GitHub release with packages & installers
186:  3b6fd52085 = 140:  ac147343c8 build-git-installers: publish gpg public key
187:  c60fc5ff81 = 141:  2592a29ba4 release: continue pestering until user upgrades
188:  37fd5ba3e5 = 142:  b0ca78b281 Makefile: allow specifying GIT_BUILT_FROM_COMMIT
189:  b249793a49 = 143:  4f4c1b7182 dist: archive HEAD instead of HEAD^{tree}
139:  7e34f98d1f = 144:  c2eba6a672 update-microsoft-git: create barebones builtin
140:  de3b31fb9d = 145:  08b7512cea update-microsoft-git: Windows implementation
141:  053721286b = 146:  dc54770821 update-microsoft-git: use brew on macOS
142:  29a37b9a7b = 147:  334f64577a .github: update ISSUE_TEMPLATE.md for microsoft/git
143:  23ed79f2f8 = 148:  6c9cda8200 .github: update PULL_REQUEST_TEMPLATE.md
190:  45382555ec = 149:  2c5792a083 release: include GIT_BUILT_FROM_COMMIT in MacOS build
144:  bc2279a38e = 150:  bd130cbde7 Adjust README.md for microsoft/git
191:  43d5637274 = 151:  4803709be0 release: add installer validation
145:  a094803c5d = 152:  3ed9c0a8ff git_config_set_multivar_in_file_gently(): add a lock timeout
146:  800d4f2379 = 153:  8fa1caefdc scalar: set the config write-lock timeout to 150ms
147:  7903f0089f = 154:  f6cf7175bc scalar: add docs from microsoft/scalar
148:  2b4a99bf93 = 155:  6d6cb91235 scalar (Windows): use forward slashes as directory separators
149:  41656b76b8 = 156:  7b4a5877ab scalar: add retry logic to run_git()
150:  266249c46e = 157:  f21384dfb8 scalar: support the `config` command for backwards compatibility
151:  e253f20dc7 = 158:  7c6efb90a5 scalar: implement a minimal JSON parser
152:  c3ac61ed28 = 159:  5b06fe83cf scalar clone: support GVFS-enabled remote repositories
153:  242bfe7820 = 160:  41f5b68284 test-gvfs-protocol: also serve smart protocol
154:  d86f59d66b = 161:  567182f6da gvfs-helper: add the `endpoint` command
155:  ff64723fa3 = 162:  0621c86245 dir_inside_of(): handle directory separators correctly
156:  88ec7148cc = 163:  29ea86c404 scalar: disable authentication in unattended mode
157:  919a401598 = 164:  a8515437a6 scalar: do initialize `gvfs.sharedCache`
158:  b4009303c1 = 165:  20fb120d02 scalar diagnose: include shared cache info
159:  5f5992b8f2 = 166:  b13391cea8 scalar: only try GVFS protocol on https:// URLs
160:  7ca006ebd0 = 167:  e1dec1b4bb scalar: verify that we can use a GVFS-enabled repository
161:  c7a6725202 = 168:  7eb416c8d7 scalar: add the `cache-server` command
162:  b11236d25b = 169:  840c3d0127 scalar: add a test toggle to skip accessing the vsts/info endpoint
163:  2a1cef43d7 = 170:  1ea4ca77b8 scalar: adjust documentation to the microsoft/git fork
164:  ad37180019 = 171:  b97767f8c7 scalar: enable untracked cache unconditionally
165:  b46b1f0faa = 172:  34e6b7deb1 scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility
166:  13442741ef = 173:  6bf6f9fb43 scalar: make GVFS Protocol a forced choice
167:  8b9c6eea8e = 174:  0d608a443c scalar diagnose: accommodate Scalar's Functional Tests
168:  c1134a06df = 175:  491d786d00 ci: run Scalar's Functional Tests
170:  b5a5e898c3 = 176:  966cd6a538 credential: add new interactive config option
169:  dd310a45d5 = 177:  a757c4e64f scalar: upgrade to newest FSMonitor config setting
171:  00dcfb6380 = 178:  c6529cd574 maintenance: add custom config to background jobs
172:  6ab7d3d90a = 179:  399e15da72 abspath: make strip_last_path_component() global
173:  284c2bb800 = 180:  f53adb17de scalar: configure maintenance during 'reconfigure'
174:  54e9db2a69 = 181:  ead648bae3 scalar: .scalarCache should live above enlistment
175:  c20327d06c = 182:  09edaa7c27 add/rm: allow adding sparse entries when virtual
176:  aead9a7ae4 = 183:  9f8f66d829 sparse-checkout: add config to disable deleting dirs
177:  1619be42c0 = 184:  c92731b6f7 diff: ignore sparse paths in diffstat
178:  b3df962510 = 185:  a17261c8ed repo-settings: enable sparse index by default
179:  aa578f893d = 186:  a66e0aa4ba diff(sparse-index): verify with partially-sparse
180:  4301124460 = 187:  9186a9048d stash: expand testing for `git stash -u`
181:  9e6ce2e249 = 188:  13d6b4d6fe sequencer: avoid progress when stderr is redirected
182:  203ebbe007 = 189:  3e0ce613de sparse: add vfs-specific precautions
183:  10668eb6f0 = 190:  661b9ef03b reset: fix mixed reset when using virtual filesystem

@dscho dscho force-pushed the tentative/vfs-2.46.0 branch from 4d79f9c to 24d11a5 Compare July 25, 2024 08:51
@dscho
Copy link
Member Author

dscho commented Jul 25, 2024

Range-diff relative to v2.46.0-rc1
  • 1: df06595 (upstream: 8fb6d11) < -: ------------ Revert "midx-write.c: use --stdin-packs when repacking"

  • 8: 4dad0ce = 1: 6c42db8 t: remove advice from some tests

  • 5: 0f90e81 = 2: cfa160c sparse-index.c: fix use of index hashes in expand_index

  • 6: 7faf39e = 3: 68c1ea5 t5300: confirm failure of git index-pack when non-idx suffix requested

  • 2: 3563c4c = 4: 50fecde survey: stub in new experimental git-survey command

  • 9: fa782de = 5: c8f4733 t1092: add test for untracked files and directories

  • 10: 661e96b = 6: 0c9dd70 index-pack: disable rev-index if index file has non .idx suffix

  • 11: c0d0db0 = 7: 643444b trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup

  • 3: 86e3aa8 = 8: 437ba3f survey: add command line opts to select references

  • 4: 93a8f3d = 9: b97d0e0 survey: collect the set of requested refs

  • 7: 7efb1ef = 10: 5f4f384 survey: calculate stats on refs and print results

  • 12: 72fd844 = 11: 2bb0a3c survey: stub in treewalk of reachable commits and objects

  • 13: cc01b30 = 12: 28db8cd survey: add traverse callback for commits

  • 14: 58c4011 = 13: cbb69a8 survey: add vector of largest objects for various scaling dimensions

  • 15: fdb0634 = 14: 86de058 survey: add pathname of blob or tree to large_item_vec

  • 16: de9f560 = 15: 069236b survey: add commit-oid to large_item detail

  • 17: d8f37cd = 16: e9cb47d survey: add commit name-rev lookup to each large_item

  • 18: dbb8b59 = 17: f049a9a survey: add --json option and setup for pretty output

  • 19: bda82ed = 18: bbc24b7 survey: add pretty printing of stats

  • 20: 2b62b9b = 19: 36e7be9 t8100: create test for git-survey

  • 21: 7febb58 = 20: 49e58e5 survey: add --no-name-rev option

  • 22: a3f6b46 = 21: 8fba2e8 survey: started TODO list at bottom of source file

  • 23: 9397140 = 22: 05e3193 survey: expanded TODO list at the bottom of the source file

  • 24: b564891 = 23: cdc2cad survey: expanded TODO with more notes

  • 25: 14a92b5 = 24: e8430a0 survey: clearly note the experimental nature in the output

  • 26: 3c5f094 = 25: 0a389f9 reset --stdin: trim carriage return from the paths

  • 27: 5ab768c ! 26: 9e88ba2 Identify microsoft/git via a distinct version suffix

    @@ Commit message
      ## GIT-VERSION-GEN ##
     @@
      GVF=GIT-VERSION-FILE
    - DEF_VER=v2.46.0-rc1
    + DEF_VER=v2.46.0-rc2
      
     +# Identify microsoft/git via a distinct version suffix
     +DEF_VER=$DEF_VER.vfs.0.0
  • 28: 0cde5ec = 27: 62b9d3e gvfs: ensure that the version is based on a GVFS tag

  • 29: cb798ed = 28: bc1c8b0 gvfs: add a GVFS-specific header file

  • 30: e4c400e = 29: 974120d gvfs: add the core.gvfs config setting

  • 31: 602843c = 30: cc65107 gvfs: add the feature to skip writing the index' SHA-1

  • 32: 92ba3cf = 31: 235d45b gvfs: add the feature that blobs may be missing

  • 33: cdc2aa5 = 32: 1ea9ac7 gvfs: prevent files to be deleted outside the sparse checkout

  • 34: 99902e2 = 33: 03d2431 gvfs: optionally skip reachability checks/upload pack during fetch

  • 35: 17f1eb5 = 34: 3f35a06 gvfs: ensure all filters and EOL conversions are blocked

  • 36: 23d6dd0 = 35: 0841615 gvfs: allow "virtualizing" objects

  • 37: cfac018 = 36: 1d56fde Hydrate missing loose objects in check_and_freshen()

  • 38: 2e77a62 = 37: f8eb818 sha1_file: when writing objects, skip the read_object_hook

  • 39: 54410cc = 38: 52627c4 gvfs: add global command pre and post hook procs

  • 40: 1fe3795 = 39: dfe708c t0400: verify that the hook is called correctly from a subdirectory

  • 41: e685893 = 40: 5dda729 Pass PID of git process to hooks.

  • 42: d5d5c66 = 41: 7c2bffd pre-command: always respect core.hooksPath

  • 43: 2a8a732 = 42: 6d9e5fb sparse-checkout: update files with a modify/delete conflict

  • 44: 6f78a3d = 43: 8bca145 sparse-checkout: avoid writing entries with the skip-worktree bit

  • 45: 0e245d1 = 44: 5fea5e1 Do not remove files outside the sparse-checkout

  • 46: 0f960b8 = 45: 299a286 send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 47: 6031f32 = 46: 432864e cache-tree: remove use of strbuf_addf in update_one

  • 48: d16829b = 47: 641a794 gvfs: block unsupported commands when running in a GVFS repo

  • 49: cea1222 = 48: 62890f1 worktree: allow in Scalar repositories

  • 50: 23a95fb = 49: 504769b gvfs: allow overriding core.gvfs

  • 51: 632cebb = 50: 4a74e2d BRANCHES.md: Add explanation of branches and using forks

  • 52: 7184be1 = 51: fc5074e Add virtual file system settings and hook proc

  • 53: aa30cd8 = 52: 88e2239 virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 54: e6a87f3 = 53: 7e2bafb virtualfilesystem: check if directory is included

  • 55: b8338c1 = 54: 34bfc04 backwards-compatibility: support the post-indexchanged hook

  • 56: 18886ac = 55: 6343ad2 gvfs: verify that the built-in FSMonitor is disabled

  • 57: 74b1f33 = 56: 0738ce5 wt-status: add trace2 data for sparse-checkout percentage

  • 58: a49d01a = 57: 30adc4f wt-status: add VFS hydration percentage to normal git status output

  • 59: c5bb373 = 58: 693c0e7 status: add status serialization mechanism

  • 60: 35e18b8 = 59: ef72419 Teach ahead-behind and serialized status to play nicely together

  • 61: 4da43b0 = 60: b010c87 status: serialize to path

  • 62: db07d40 = 61: c2bb72a status: reject deserialize in V2 and conflicts

  • 63: f61fd21 = 62: 96868af serialize-status: serialize global and repo-local exclude file metadata

  • 64: 07da992 = 63: e0e3b51 status: deserialization wait

  • 65: 5cc6d7a = 64: 8818d32 merge-recursive: avoid confusing logic in was_dirty()

  • 66: cb76211 = 65: de4e9a8 merge-recursive: add some defensive coding to was_dirty()

  • 67: b5c1fdb = 66: ccfc651 merge-recursive: teach was_dirty() about the virtualfilesystem

  • 68: dc0c647 = 67: e82bc34 status: deserialize with -uno does not print correct hint

  • 69: 5339ace = 68: 99f42bb fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 70: 7a3bfb1 = 69: a98411e fsmonitor: add script for debugging and update script for tests

  • 71: 07bbfcc = 70: 5da2a27 status: disable deserialize when verbose output requested.

  • 72: a08f41f = 71: c8065f6 t7524: add test for verbose status deserialzation

  • 73: 480e9e9 = 72: 976877c deserialize-status: silently fallback if we cannot read cache file

  • 74: daf492b = 73: 0623ceb gvfs:trace2:data: add trace2 tracing around read_object_process

  • 75: 267ff7c = 74: 6212a56 gvfs:trace2:data: status deserialization information

  • 76: fa956c1 = 75: 16ae594 gvfs:trace2:data: status serialization

  • 77: 2ca98e7 = 76: 9ff030e gvfs:trace2:data: add vfs stats

  • 78: f7d022e = 77: 8068560 trace2: refactor setting process starting time

  • 79: b7920cf = 78: 1af07f5 trace2:gvfs:experiment: clear_ce_flags_1

  • 80: 0ca43b3 = 79: ed916bb trace2:gvfs:experiment: report_tracking

  • 81: c88123d = 80: 6d1f2e1 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 82: 9dcde58 = 81: 11b6945 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 83: 2a05203 = 82: c14df9b trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 84: b8de77d = 83: a798db1 trace2:gvfs:experiment: add region around unpack_trees()

  • 85: 64f920f = 84: 9a573b7 trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 86: 4b95ad9 = 85: 7d871c9 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 87: e03d099 = 86: 7d77fdb trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 88: 1121372 = 87: 85ef186 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 89: 16b0edb = 88: de0c755 Trace2:gvfs:experiment: capture more 'tracking' details

  • 90: 58bdeae = 89: 1db678d credential: set trace2_child_class for credential manager children

  • 91: 5469cc2 = 90: cfac25f sub-process: do not borrow cmd pointer from caller

  • 92: ff03061 = 91: da08da8 sub-process: add subprocess_start_argv()

  • 93: 73cdb6b = 92: d75502d sha1-file: add function to update existing loose object cache

  • 94: 11164e4 = 93: af091cc packfile: add install_packed_git_and_mru()

  • 95: bff7c39 = 94: bc2551a index-pack: avoid immediate object fetch while parsing packfile

  • 96: 83fd9cd = 95: e773bed gvfs-helper: create tool to fetch objects using the GVFS Protocol

  • 97: 2a62e82 = 96: 13acae8 sha1-file: create shared-cache directory if it doesn't exist

  • 98: 208ee6f = 97: 55d3aea gvfs-helper: better handling of network errors

  • 99: 16f54c4 = 98: 19f0ff1 gvfs-helper-client: properly update loose cache with fetched OID

  • 100: 05402c4 = 99: 776c0fe gvfs-helper: V2 robust retry and throttling

  • 101: 51b5aa6 = 100: 93bff99 gvfs-helper: expose gvfs/objects GET and POST semantics

  • 102: 8894566 = 101: 70c3a5a gvfs-helper: dramatically reduce progress noise

  • 103: a6fe884 = 102: 44a7630 gvfs-helper-client.h: define struct object_id

  • 104: 045e86f = 103: 4b87405 gvfs-helper: handle pack-file after single POST request

  • 105: 90a6444 = 104: 7af9092 test-gvfs-prococol, t5799: tests for gvfs-helper

  • 106: 4d0afd5 = 105: f3aeba9 gvfs-helper: move result-list construction into install functions

  • 107: 063f19a = 106: edca271 t5799: add support for POST to return either a loose object or packfile

  • 108: ace3ea7 = 107: 891516e t5799: cleanup wc-l and grep-c lines

  • 109: b3974d8 = 108: c46c8ea gvfs-helper: verify loose objects after write

  • 110: e6674f3 = 109: b1fb35f t7599: create corrupt blob test

  • 111: 906ecd9 = 110: 9b63baa gvfs-helper: add prefetch support

  • 112: 8829873 = 111: b6b3c8e gvfs-helper: add prefetch .keep file for last packfile

  • 113: 475b597 = 112: bc4cb6c gvfs-helper: do one read in my_copy_fd_len_tail()

  • 114: f85f47f = 113: 309af99 gvfs-helper: move content-type warning for prefetch packs

  • 115: c86d0d8 = 114: 902ed05 fetch: use gvfs-helper prefetch under config

  • 116: e5296c7 = 115: 0b3dd78 gvfs-helper: better support for concurrent packfile fetches

  • 117: a393459 = 116: 47e3d99 remote-curl: do not call fetch-pack when using gvfs-helper

  • 118: 5d7744b = 117: 91c856a fetch: reprepare packs before checking connectivity

  • 119: a56cf97 = 118: 06264e4 gvfs-helper: retry when creating temp files

  • 120: e75a40f = 119: 4ec29bb sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 121: 86c5780 = 120: 47b2da8 gvfs-helper: add --max-retries to prefetch verb

  • 122: f692b2e = 121: 4da061b t5799: add tests to detect corrupt pack/idx files in prefetch

  • 123: e979dae = 122: 503d7f4 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 127: bccc491 = 123: 14b4a3e t5799: explicitly test gvfs-helper --fallback and --no-fallback

  • 129: a3049b5 = 124: 4a36292 gvfs-helper: don't fallback with new config

  • 131: e1b6ce7 = 125: c9adb1b test-gvfs-protocol: add cache_http_503 to mayhem

  • 124: ef29598 = 126: d2c5b40 maintenance: care about gvfs.sharedCache config

  • 133: 25d4af2 = 127: 5193664 t5799: add unit tests for new gvfs.fallback config setting

  • 125: bd4b42a = 128: c48a427 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 126: ea3d466 = 129: eeed729 homebrew: add GitHub workflow to release Cask

  • 128: 42b1156 = 130: c243eac Adding winget workflows

  • 130: 6c6e55f = 131: 6fc6509 Disable the monitor-components workflow in msft-git

  • 132: 1cc18c0 = 132: ea70314 .github: enable windows builds on microsoft fork

  • 134: 562fd02 = 133: a1e84bd release: create initial Windows installer build workflow

  • 135: 6e615df = 134: e53a8b9 help: special-case HOST_CPU universal

  • 136: 70f3405 = 135: 54df748 release: add Mac OSX installer build

  • 137: 97dfa03 = 136: f7fe8ba release: build unsigned Ubuntu .deb package

  • 138: 00d71d7 = 137: bc73b6a release: add signing step for .deb package

  • 139: 66dd2ef = 138: b0aa37d release: create draft GitHub release with packages & installers

  • 140: ac14734 = 139: 7948423 build-git-installers: publish gpg public key

  • 141: 2592a29 = 140: 1cace8d release: continue pestering until user upgrades

  • 142: b0ca78b = 141: 514615b Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 144: c2eba6a = 142: cd72c39 update-microsoft-git: create barebones builtin

  • 143: 4f4c1b7 = 143: af5ddee dist: archive HEAD instead of HEAD^{tree}

  • 145: 08b7512 = 144: 8c405db update-microsoft-git: Windows implementation

  • 149: 2c5792a = 145: 39e232b release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 146: dc54770 = 146: ee019f5 update-microsoft-git: use brew on macOS

  • 151: 4803709 = 147: deeac5f release: add installer validation

  • 147: 334f645 = 148: 6ff4e14 .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 148: 6c9cda8 = 149: 65b7f54 .github: update PULL_REQUEST_TEMPLATE.md

  • 152: 3ed9c0a = 150: eab406f git_config_set_multivar_in_file_gently(): add a lock timeout

  • 150: bd130cb = 151: 58840bf Adjust README.md for microsoft/git

  • 153: 8fa1cae = 152: 10e49d8 scalar: set the config write-lock timeout to 150ms

  • 154: f6cf717 = 153: de28266 scalar: add docs from microsoft/scalar

  • 155: 6d6cb91 = 154: 8d0dc7c scalar (Windows): use forward slashes as directory separators

  • 156: 7b4a587 = 155: b3692fd scalar: add retry logic to run_git()

  • 157: f21384d = 156: 1ea9dd7 scalar: support the config command for backwards compatibility

  • 158: 7c6efb9 = 157: fc083f4 scalar: implement a minimal JSON parser

  • 159: 5b06fe8 = 158: 014b506 scalar clone: support GVFS-enabled remote repositories

  • 160: 41f5b68 = 159: e980635 test-gvfs-protocol: also serve smart protocol

  • 161: 567182f = 160: c6ad354 gvfs-helper: add the endpoint command

  • 162: 0621c86 = 161: 35a78cc dir_inside_of(): handle directory separators correctly

  • 163: 29ea86c = 162: 66a2764 scalar: disable authentication in unattended mode

  • 164: a851543 = 163: 91af888 scalar: do initialize gvfs.sharedCache

  • 165: 20fb120 = 164: 33671b8 scalar diagnose: include shared cache info

  • 166: b13391c = 165: ac2fcc9 scalar: only try GVFS protocol on https:// URLs

  • 167: e1dec1b = 166: 433c062 scalar: verify that we can use a GVFS-enabled repository

  • 168: 7eb416c = 167: 3ae1f3a scalar: add the cache-server command

  • 169: 840c3d0 = 168: 62d89ce scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 170: 1ea4ca7 = 169: 44fd956 scalar: adjust documentation to the microsoft/git fork

  • 171: b97767f = 170: c63aa82 scalar: enable untracked cache unconditionally

  • 172: 34e6b7d = 171: 9c7f199 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 173: 6bf6f9f = 172: 4646749 scalar: make GVFS Protocol a forced choice

  • 174: 0d608a4 = 173: b80da13 scalar diagnose: accommodate Scalar's Functional Tests

  • 175: 491d786 = 174: e529447 ci: run Scalar's Functional Tests

  • 176: 966cd6a = 175: 95096d2 credential: add new interactive config option

  • 177: a757c4e = 176: b895eee scalar: upgrade to newest FSMonitor config setting

  • 178: c6529cd = 177: bb11be9 maintenance: add custom config to background jobs

  • 179: 399e15d = 178: dcd5c00 abspath: make strip_last_path_component() global

  • 180: f53adb1 = 179: b6917b7 scalar: configure maintenance during 'reconfigure'

  • 181: ead648b = 180: 747eca4 scalar: .scalarCache should live above enlistment

  • 182: 09edaa7 = 181: 6e1c321 add/rm: allow adding sparse entries when virtual

  • 183: 9f8f66d = 182: a348b01 sparse-checkout: add config to disable deleting dirs

  • 184: c92731b = 183: 86a4d00 diff: ignore sparse paths in diffstat

  • 185: a17261c = 184: 1654002 repo-settings: enable sparse index by default

  • 186: a66e0aa = 185: f2c62dc diff(sparse-index): verify with partially-sparse

  • 187: 9186a90 = 186: dd7000c stash: expand testing for git stash -u

  • 188: 13d6b4d = 187: 0440915 sequencer: avoid progress when stderr is redirected

  • 189: 3e0ce61 = 188: dd7b8b9 sparse: add vfs-specific precautions

  • 190: 661b9ef = 189: f794bcb reset: fix mixed reset when using virtual filesystem

Copy link

@derrickstolee derrickstolee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! (I'm also very happy with the 15-minute functional test runs ;) )

derrickstolee and others added 20 commits July 29, 2024 13:28
These seem to be custom tests to microsoft/git as they break without
these changes, but these changes are not needed upstream.

Signed-off-by: Derrick Stolee <stolee@gmail.com>
In ac8acb4 (sparse-index: complete partial expansion, 2022-05-23),
'expand_index()' was updated to expand the index to a given pathspec.
However, the 'path_matches_pattern_list()' method used to facilitate this
has the side effect of initializing or updating the index hash variables
('name_hash', 'dir_hash', and 'name_hash_initialized'). This operation is
performed on 'istate', though, not 'full'; as a result, the initialized
hashes are later overwritten when copied from 'full'. To ensure the correct
hashes are in 'istate' after the index expansion, change the arg used in
'path_matches_pattern_list()' from 'istate' to 'full'.

Note that this does not fully solve the problem. If 'istate' does not have
an initialized 'name_hash' when its contents are copied to 'full',
initialized hashes will be copied back into 'istate' but
'name_hash_initialized' will be 0. Therefore, we also need to copy
'full->name_hash_initialized' back to 'istate' after the index expansion is
complete.

Signed-off-by: Victoria Dye <vdye@github.com>
Add a test verifying that sparse-checkout (with and without sparse index
enabled) treat untracked files & directories correctly when changing sparse
patterns. Specifically, it ensures that 'git sparse-checkout set'

* deletes empty directories outside the sparse cone
* does _not_ delete untracked files outside the sparse cone

Signed-off-by: Victoria Dye <vdye@github.com>
Add test case to demonstrate that `git index-pack -o <idx-path> pack-path`
fails if <idx-path> does not end in ".idx" when `--rev-index` is
enabled.

In e37d0b8 (builtin/index-pack.c: write reverse indexes, 2021-01-25)
we learned to create `.rev` reverse indexes in addition to `.idx` index
files.  The `.rev` file pathname is constructed by replacing the suffix
on the `.idx` file.  The code assumes a hard-coded "idx" suffix.

In a8dd7e0 (config: enable `pack.writeReverseIndex` by default, 2023-04-12)
reverse indexes were enabled by default.

If the `-o <idx-path>` argument is used, the index file may have a
different suffix.  This causes an error when it tries to create the
reverse index pathname.

The test here demonstrates the failure.  (The test forces `--rev-index`
to avoid interaction with `GIT_TEST_NO_WRITE_REV_INDEX` during CI runs.)

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Teach index-pack to silently omit the reverse index if the
index file does not have the standard ".idx" suffix.

In e37d0b8 (builtin/index-pack.c: write reverse indexes, 2021-01-25)
we learned to create `.rev` reverse indexes in addition to `.idx` index
files.  The `.rev` file pathname is constructed by replacing the suffix
on the `.idx` file.  The code assumes a hard-coded "idx" suffix.

In a8dd7e0 (config: enable `pack.writeReverseIndex` by default, 2023-04-12)
reverse indexes were enabled by default.

If the `-o <idx-path>` argument is used, the index file may have a
different suffix.  This causes an error when it tries to create the
reverse index pathname.

Since we do not know why the user requested a non-standard suffix for
the index, we cannot guess what the proper corresponding suffix should
be for the reverse index.  So we disable it.

The t5300 test has been updated to verify that we no longer error
out and that the .rev file is not created.

TODO We could warn the user that we skipped it (perhaps only if they
TODO explicitly requested `--rev-index` on the command line).
TODO
TODO Ideally, we should add an `--rev-index-path=<path>` argument
TODO or change `--rev-index` to take a pathname.
TODO
TODO I'll leave these questions for a future series.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Prefetch the value of GIT_TRACE2_DST_DEBUG during startup and before
we try to open any Trace2 destination pathnames.

Normally, Trace2 always silently fails if a destination target
cannot be opened so that it doesn't affect the execution of a
Git command.  The command should run normally, but just not
generate any trace data.  This can make it difficult to debug
a telemetry setup, since the user doesn't know why telemetry
isn't being generated.  If the environment variable
GIT_TRACE2_DST_DEBUG is true, the Trace2 startup will print
a warning message with the `errno` to make debugging easier.

However, on Windows, looking up the env variable resets `errno`
so the warning message always ends with `...tracing: No error`
which is not very helpful.

Prefetch the env variable at startup.  This avoids the need
to update each call-site to capture `errno` in the usual
`saved-errno` variable.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Start work on a new `git survey` command to scan the repository
for monorepo performance and scaling problems.  The goal is to
measure the various known "dimensions of scale" and serve as a
foundation for adding additional measurements as we learn more
about Git monorepo scaling problems.

Results will be logged to the console and to Trace2.

The initial goal is to complement the scanning and analysis performed
by the GO-based `git-sizer` (https://github.com/github/git-sizer) tool.
It is hoped that by creating a builtin command, we may be able to take
advantage of internal Git data structures and code that is not
accessible from GO to gain further insight into potential scaling
problems.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
By default we will scan all references in "refs/heads/", "refs/tags/"
and "refs/remotes/".

Add command line opts let the use ask for all refs or a subset of them
and to include a detached HEAD.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Collect the set of requested branches, tags, and etc into a
ref_array and collect the set of requested patterns into a
strvec.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Calculate stats on the set of refs. This includes the number of
branches, plain and annotated tags, remotes, and etc.  Calculate
the number of packed vs loose refs.  Calculate the size of the
set of refnames.

Print results on the console in JSON format.

Add Trace2 logging of the results as a data_json event.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Add treewalk on the commits and objects reachable from the set
of refs.

This commit sets up the treewalk, but only stubs in the traverse
callbacks.  We'll actually look at the commit and object data
in the next commit.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Add callback to handle commit objects during the treewalk. Count the
number of commits and group them by the number of parents.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Create `struct large_item` and `struct large_item_vec` to capture the
n largest commits, trees, and blobs under various scaling dimensions,
such as size in bytes, number of commit parents, or number of entries
in a tree.

Each of these have a command line option to set them independently.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Include the pathname of each blob or tree in the large_item_vec
to help identify the file or directory associated with the OID
and size information.

This pathname is computed during the treewalk, so it reflects the
first observed pathname seen for that OID during the traversal over
all of the refs.  Since the file or directory could have moved
(without being modified), there may be multiple "correct" pathnames
for a particular OID.  Since we do not control the ref traversal
order, we should consider it to be a "suggested pathname" for the OID.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Computing `git name-rev` on each commit, tree, and blob in each
of the various large_item_vec can be very expensive if there are
too many refs, especially if the user doesn't need the result.
Lets make it optional.

The `--no-name-rev` option can save 50 calls to `git name-rev`
since we have 5 large_item_vec's and each defaults to 10 items.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
jeffhostetler and others added 15 commits July 29, 2024 14:19
Includes gvfs-specific commits from these pull requests:

	#158
	#159
	#160
	#164

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Includes commits from these pull requests:

	#191
	#205
	#206
	#207
	#208
	#215
	#220
	#221

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Includes these pull requests:

 #227
 #228
 #229
 #231
 #240

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
…response (#571)

Teach `gvfs-helper` to ignore the optional `.idx` files that may be
included in a `prefetch` response and always use `git index-pack` to
create them from the `.pack` files received in the data stream.

This is a little wasteful in terms of client-side compute and of the
network bandwidth, but allows us to use the full packfile verification
code contained within `git index-pack` to ensure that the received
packfiles are valid.
By default, GVFS Protocol-enabled Scalar clones will fall back to the
origin server if there is a network issue with the cache servers.
However (and especially for the prefetch endpoint) this may be a very
expensive operation for the origin server, leading to the user being
throttled. This shows up later in cases such as 'git push' or other web
operations.

To avoid this, create a new config option, 'gvfs.fallback', which
defaults to true. When set to 'false', pass '--no-fallback' from the
gvfs-helper client to the child gvfs-helper server process.

This will allow users who have hit this problem to avoid it in the
future. In case this becomes a more widespread problem, engineering
systems can enable the config option more broadly.

Enabling the config will of course lead to immediate failures for users,
but at least that will help diagnose the problem when it occurs instead
of later when the throttling shows up and the server load has already
passed, damage done.

 This change only applies to interactions with Azure DevOps and the
GVFS Protocol.

---

* [x] This change only applies to interactions with Azure DevOps and the
      GVFS Protocol.
This PR updates our `vfs-2.29.0` branch's version of `git maintenance` to match the latest in upstream. Unfortunately, not all of these commits made it to the `2.30` release candidate, but there are more commits from the series making it in. They will cause a conflict in the `vfs-2.30.0` rebase, so merge them in here. This also includes the `fixup!` reverts of the earlier versions.

Finally, I also noticed that we started depending on `git maintenance start` in Scalar for macOS, but we never checked that this worked with the shared object cache. It doesn't! 😨  The very tip commit of this PR includes logic to make `git maintenance run` care about `gvfs.sharedCache`. Functional test updates in Scalar will follow.
…ciency of clear_ce_flags

When the virtualfilesystem is enabled the previous implementation of
clear_ce_flags would iterate all of the cache entries and query whether
each one is in the virtual filesystem to determine whether to clear one
of the SKIP_WORKTREE bits. For each cache entry, we would do a hash
lookup for each parent directory in the is_included_in_virtualfilesystem
function.

The former approach is slow for a typical Windows OS enlistment with
3 million files where only a small percentage is in the virtual
filesystem. The cost is
O(n_index_entries * n_chars_per_path * n_parent_directories_per_path).

In this change, we use the same approach as apply_virtualfilesystem,
which iterates the set of entries in the virtualfilesystem and searches
in the cache for the corresponding entries in order to clear their
flags. This approach has a cost of
O(n_virtual_filesystem_entries * n_chars_per_path * log(n_index_entries)).

The apply_virtualfilesystem code was refactored a bit and modified to
clear flags for all names that 'alias' a given virtual filesystem name
when ignore_case is set.

n_virtual_filesystem_entries is typically much less than
n_index_entries, in which case the new approach is much faster. We wind
up building the name hash for the index, but this occurs quickly thanks
to the multi-threading.
Adding a few workflows to publish releases! 🥳
This disables the `monitor-components` workflow in msft-git, and
re-enables the `win+VS` tests in this repository, too.
Implement workflow to create GitHub release with attached `git` installers
Fixes for MacOS release build & build options
This adds a new builtin, `git update-microsoft-git`, that executes the platform-specific upgrade steps to get the latest version of `microsoft-git`.

On Windows, this means running `git update-git-for-windows` which was updated to use the `microsoft/git` releases page, when appropriate. See #321 for details.

On macOS, this means running a sequence of `brew` commands. These are adapted from the `UpgradeVerb` in `microsoft/scalar`, with an important simplification: we don't need to differentiate between the `scalar` and `scalar-azrepos` cask.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
…x-built-in-fsmonitor

Fix the built-in FSMonitor, and run Scalar's Functional Tests as part of the automated builds
This is random stuff that probably all got upstream in the meantime.
@mjcheetham mjcheetham force-pushed the tentative/vfs-2.46.0 branch from 24d11a5 to 081a80e Compare July 29, 2024 21:26
@mjcheetham
Copy link
Member

mjcheetham commented Jul 29, 2024

Range-diff relative to v2.46.0-rc2
  1:  6c42db87ca =   1:  d2d403516c t: remove advice from some tests
  2:  cfa160cd59 =   2:  5ee9c43698 sparse-index.c: fix use of index hashes in expand_index
  5:  c8f4733a41 =   3:  ad14bf428b t1092: add test for untracked files and directories
  3:  68c1ea5ef4 =   4:  8530990de7 t5300: confirm failure of git index-pack when non-idx suffix requested
  6:  0c9dd7070c =   5:  abc86813b9 index-pack: disable rev-index if index file has non .idx suffix
  7:  643444b074 =   6:  50c7799704 trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup
  4:  50fecde369 =   7:  ec811a004a survey: stub in new experimental `git-survey` command
  8:  437ba3f1ba =   8:  93e532cb45 survey: add command line opts to select references
  9:  b97d0e0172 =   9:  80b37d2acc survey: collect the set of requested refs
 10:  5f4f384f89 =  10:  a9edb5a1ec survey: calculate stats on refs and print results
 11:  2bb0a3c819 =  11:  cc84ca6c33 survey: stub in treewalk of reachable commits and objects
 12:  28db8cd871 =  12:  8276f9bde3 survey: add traverse callback for commits
 13:  cbb69a829e =  13:  95144256ad survey: add vector of largest objects for various scaling dimensions
 14:  86de0580d4 =  14:  57d85c343d survey: add pathname of blob or tree to large_item_vec
 15:  069236ba7c =  15:  753a4360bc survey: add commit-oid to large_item detail
 16:  e9cb47d435 =  16:  145b957bbd survey: add commit name-rev lookup to each large_item
 17:  f049a9a000 =  17:  bb75fa6157 survey: add --json option and setup for pretty output
 18:  bbc24b7153 =  18:  f3098cb31c survey: add pretty printing of stats
 19:  36e7be9d1b =  19:  a5febc9157 t8100: create test for git-survey
 20:  49e58e5f6e =  20:  f5d1032214 survey: add --no-name-rev option
 21:  8fba2e8158 =  21:  923582c574 survey: started TODO list at bottom of source file
 22:  05e3193faa =  22:  6ad83b74b1 survey: expanded TODO list at the bottom of the source file
 23:  cdc2cade9e =  23:  b9e50f76b3 survey: expanded TODO with more notes
 24:  e8430a0fb9 =  24:  891f502ed4 survey: clearly note the experimental nature in the output
 25:  0a389f9667 =  25:  97af85518b reset --stdin: trim carriage return from the paths
 26:  9e88ba23b6 !  26:  250cbe1e7c Identify microsoft/git via a distinct version suffix
    @@ Commit message
      ## GIT-VERSION-GEN ##
     @@
      GVF=GIT-VERSION-FILE
    - DEF_VER=v2.46.0-rc2
    + DEF_VER=v2.46.0
      
     +# Identify microsoft/git via a distinct version suffix
     +DEF_VER=$DEF_VER.vfs.0.0
 27:  62b9d3e9a9 =  27:  a7f73ee637 gvfs: ensure that the version is based on a GVFS tag
 28:  bc1c8b0789 =  28:  c165478e12 gvfs: add a GVFS-specific header file
 29:  974120d01d =  29:  cea7ec791f gvfs: add the core.gvfs config setting
 30:  cc65107a27 =  30:  3648554b6a gvfs: add the feature to skip writing the index' SHA-1
 31:  235d45b928 =  31:  08b42f2551 gvfs: add the feature that blobs may be missing
 32:  1ea9ac76ba =  32:  86ee5ec96c gvfs: prevent files to be deleted outside the sparse checkout
 33:  03d24318cb =  33:  d0b5dcf550 gvfs: optionally skip reachability checks/upload pack during fetch
 34:  3f35a06268 =  34:  fcc15b369c gvfs: ensure all filters and EOL conversions are blocked
 35:  08416150ae =  35:  c6dc4e5a31 gvfs: allow "virtualizing" objects
 36:  1d56fde181 =  36:  a0db91fbab Hydrate missing loose objects in check_and_freshen()
 37:  f8eb818c62 =  37:  b9e1fc6d11 sha1_file: when writing objects, skip the read_object_hook
 38:  52627c45ef =  38:  6805073569 gvfs: add global command pre and post hook procs
 39:  dfe708c141 =  39:  18705c3221 t0400: verify that the hook is called correctly from a subdirectory
 40:  5dda729386 =  40:  63eab821e5 Pass PID of git process to hooks.
 41:  7c2bffde5b =  41:  922a8cf013 pre-command: always respect core.hooksPath
 42:  6d9e5fb628 =  42:  78b96ea9ce sparse-checkout: update files with a modify/delete conflict
 43:  8bca145d89 =  43:  98f77732cc sparse-checkout: avoid writing entries with the skip-worktree bit
 44:  5fea5e172c =  44:  e5d4c1d8af Do not remove files outside the sparse-checkout
 45:  299a286bda =  45:  9f1b23e9cd send-pack: do not check for sha1 file when GVFS_MISSING_OK set
 46:  432864e53b =  46:  48ba4c2d49 cache-tree: remove use of strbuf_addf in update_one
 47:  641a794940 =  47:  c15e53e54e gvfs: block unsupported commands when running in a GVFS repo
 48:  62890f136d =  48:  e90bfb5040 worktree: allow in Scalar repositories
 49:  504769b292 =  49:  8400e33f22 gvfs: allow overriding core.gvfs
 50:  4a74e2dfc5 =  50:  233bf5291a BRANCHES.md: Add explanation of branches and using forks
 51:  fc5074e413 =  51:  af81bfc22a Add virtual file system settings and hook proc
 52:  88e22399eb =  52:  905318f95a virtualfilesystem: don't run the virtual file system hook if the index has been redirected
 53:  7e2bafb229 =  53:  090c57e12c virtualfilesystem: check if directory is included
 54:  34bfc04aa3 =  54:  fb00b667c3 backwards-compatibility: support the post-indexchanged hook
 55:  6343ad253d =  55:  bbff50a3be gvfs: verify that the built-in FSMonitor is disabled
 56:  0738ce5794 =  56:  f7476e9fc3 wt-status: add trace2 data for sparse-checkout percentage
 57:  30adc4fde0 =  57:  be104c6545 wt-status: add VFS hydration percentage to normal `git status` output
 58:  693c0e7b94 =  58:  520f402d17 status: add status serialization mechanism
 59:  ef724196cb =  59:  790b937b78 Teach ahead-behind and serialized status to play nicely together
 60:  b010c87f0e =  60:  cdd2535306 status: serialize to path
 61:  c2bb72aec7 =  61:  453d80030f status: reject deserialize in V2 and conflicts
 62:  96868afbd0 =  62:  a9aa37c1fc serialize-status: serialize global and repo-local exclude file metadata
 63:  e0e3b5159b =  63:  29d774622c status: deserialization wait
 64:  8818d326f3 =  64:  87570dbbed merge-recursive: avoid confusing logic in was_dirty()
 65:  de4e9a88a7 =  65:  2872f85623 merge-recursive: add some defensive coding to was_dirty()
 66:  ccfc651e55 =  66:  d53d1ae57c merge-recursive: teach was_dirty() about the virtualfilesystem
 67:  e82bc34252 =  67:  6b02fcdcd5 status: deserialize with -uno does not print correct hint
 68:  99f42bba07 =  68:  775d8815c1 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate
 69:  a98411ef4a =  69:  195695673a fsmonitor: add script for debugging and update script for tests
 70:  5da2a27318 =  70:  3284d55ab0 status: disable deserialize when verbose output requested.
 71:  c8065f6026 =  71:  2103d34c37 t7524: add test for verbose status deserialzation
 72:  976877cc7f =  72:  9a4b9e9332 deserialize-status: silently fallback if we cannot read cache file
 73:  0623cebacf =  73:  e665d87e03 gvfs:trace2:data: add trace2 tracing around read_object_process
 74:  6212a56f9e =  74:  4d814a713d gvfs:trace2:data: status deserialization information
 75:  16ae5941b3 =  75:  f50b605685 gvfs:trace2:data: status serialization
 76:  9ff030e977 =  76:  5869b3fbd6 gvfs:trace2:data: add vfs stats
 77:  8068560045 =  77:  a3e8249a45 trace2: refactor setting process starting time
 78:  1af07f560e =  78:  31624c42ba trace2:gvfs:experiment: clear_ce_flags_1
 79:  ed916bb582 =  79:  33bae12bbd trace2:gvfs:experiment: report_tracking
 80:  6d1f2e14f5 =  80:  8b55ade93f trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache
 81:  11b6945e80 =  81:  4ee89cd8b0 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension
 82:  c14df9b902 =  82:  bec82644cf trace2:gvfs:experiment: add region to apply_virtualfilesystem()
 83:  a798db112d =  83:  d019329927 trace2:gvfs:experiment: add region around unpack_trees()
 84:  9a573b75a2 =  84:  e035360dd3 trace2:gvfs:experiment: add region to cache_tree_fully_valid()
 85:  7d871c9da7 =  85:  571fd764d4 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()
 86:  7d77fdb9f3 =  86:  f2c0f33acf trace2:gvfs:experiment: increase default event depth for unpack-tree data
 87:  85ef1862d1 =  87:  9773e2e793 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()
 88:  de0c755b13 =  88:  64b58c0854 Trace2:gvfs:experiment: capture more 'tracking' details
 89:  1db678d279 =  89:  8212ec4b30 credential: set trace2_child_class for credential manager children
 90:  cfac25f6ea =  90:  6a0cbb37d0 sub-process: do not borrow cmd pointer from caller
 91:  da08da8d49 =  91:  8da9f584bc sub-process: add subprocess_start_argv()
 92:  d75502d9b1 =  92:  e0dd3e15e5 sha1-file: add function to update existing loose object cache
 93:  af091cc679 =  93:  ddd1116380 packfile: add install_packed_git_and_mru()
 94:  bc2551a9bc =  94:  cf33e1ac08 index-pack: avoid immediate object fetch while parsing packfile
 95:  e773bedca2 =  95:  0f74b95aa5 gvfs-helper: create tool to fetch objects using the GVFS Protocol
 96:  13acae8fdc =  96:  0ee58cc5d0 sha1-file: create shared-cache directory if it doesn't exist
 97:  55d3aea140 =  97:  4a7deea665 gvfs-helper: better handling of network errors
 98:  19f0ff12a1 =  98:  85150e7f04 gvfs-helper-client: properly update loose cache with fetched OID
 99:  776c0fe51d =  99:  6af3a60834 gvfs-helper: V2 robust retry and throttling
100:  93bff99b18 = 100:  973905f1ab gvfs-helper: expose gvfs/objects GET and POST semantics
101:  70c3a5a8a3 = 101:  b247583517 gvfs-helper: dramatically reduce progress noise
102:  44a76306c2 = 102:  423e53d18f gvfs-helper-client.h: define struct object_id
103:  4b874052df = 103:  69baf81d97 gvfs-helper: handle pack-file after single POST request
104:  7af9092ff0 = 104:  944e3949b8 test-gvfs-prococol, t5799: tests for gvfs-helper
105:  f3aeba9e7c = 105:  fdb8ece6da gvfs-helper: move result-list construction into install functions
106:  edca271f6b = 106:  0b236aa0c7 t5799: add support for POST to return either a loose object or packfile
107:  891516ef1a = 107:  0edf612e3f t5799: cleanup wc-l and grep-c lines
108:  c46c8ea734 = 108:  db3f4c3195 gvfs-helper: verify loose objects after write
109:  b1fb35ffeb = 109:  1bf573906a t7599: create corrupt blob test
110:  9b63baa0c5 = 110:  90aa80c62c gvfs-helper: add prefetch support
111:  b6b3c8e919 = 111:  8dbc9778fc gvfs-helper: add prefetch .keep file for last packfile
112:  bc4cb6c290 = 112:  db28521f09 gvfs-helper: do one read in my_copy_fd_len_tail()
113:  309af99d24 = 113:  d1127cc96a gvfs-helper: move content-type warning for prefetch packs
114:  902ed053f6 = 114:  5077a1d1dd fetch: use gvfs-helper prefetch under config
115:  0b3dd788eb = 115:  cae9757546 gvfs-helper: better support for concurrent packfile fetches
116:  47e3d99d78 = 116:  a7f52d2ca4 remote-curl: do not call fetch-pack when using gvfs-helper
117:  91c856a88a = 117:  8661bc3dae fetch: reprepare packs before checking connectivity
118:  06264e4027 = 118:  aa0f581671 gvfs-helper: retry when creating temp files
119:  4ec29bba1d = 119:  4c4e6d336c sparse: avoid warnings about known cURL issues in gvfs-helper.c
120:  47b2da8bd8 = 120:  0818412f62 gvfs-helper: add --max-retries to prefetch verb
121:  4da061bf45 = 121:  0897986ac2 t5799: add tests to detect corrupt pack/idx files in prefetch
122:  503d7f4fe9 = 122:  3fecda7cee gvfs-helper: ignore .idx files in prefetch multi-part responses
123:  14b4a3e15c = 123:  3e8a7c4d50 t5799: explicitly test gvfs-helper --fallback and --no-fallback
124:  4a362928db = 124:  c5d5abaa3b gvfs-helper: don't fallback with new config
125:  c9adb1b4bd = 125:  a1af70568c test-gvfs-protocol: add cache_http_503 to mayhem
127:  519366421b = 126:  32e0842c96 t5799: add unit tests for new `gvfs.fallback` config setting
126:  d2c5b40141 = 127:  27ad5ead31 maintenance: care about gvfs.sharedCache config
128:  c48a427bb3 = 128:  cd4a4d3d82 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags
129:  eeed729309 = 129:  b7083b766b homebrew: add GitHub workflow to release Cask
130:  c243eac150 = 130:  90e57bc536 Adding winget workflows
131:  6fc6509117 = 131:  b6fb09baf8 Disable the `monitor-components` workflow in msft-git
132:  ea7031499e = 132:  ad407da24d .github: enable windows builds on microsoft fork
133:  a1e84bdb70 = 133:  7ff9577b11 release: create initial Windows installer build workflow
134:  e53a8b93ee = 134:  23fb420f37 help: special-case HOST_CPU `universal`
135:  54df7487a6 = 135:  be4dd9ac53 release: add Mac OSX installer build
136:  f7fe8ba213 = 136:  f0cfe11f19 release: build unsigned Ubuntu .deb package
137:  bc73b6ad7e = 137:  6d3ddc38df release: add signing step for .deb package
138:  b0aa37d4eb = 138:  245f2120f9 release: create draft GitHub release with packages & installers
139:  794842321a = 139:  68f3e0ec6f build-git-installers: publish gpg public key
140:  1cace8d432 = 140:  365a7429af release: continue pestering until user upgrades
141:  514615b900 = 141:  df589f7328 Makefile: allow specifying GIT_BUILT_FROM_COMMIT
143:  af5ddee917 = 142:  6b3ac94543 dist: archive HEAD instead of HEAD^{tree}
145:  39e232ba03 = 143:  05280bdef3 release: include GIT_BUILT_FROM_COMMIT in MacOS build
147:  deeac5ff94 = 144:  608de82bf4 release: add installer validation
142:  cd72c390ea = 145:  e21f5f8eb9 update-microsoft-git: create barebones builtin
144:  8c405db040 = 146:  23bc4b5ac7 update-microsoft-git: Windows implementation
146:  ee019f5e3e = 147:  35ea02909c update-microsoft-git: use brew on macOS
148:  6ff4e1452e = 148:  ab00c5a04f .github: update ISSUE_TEMPLATE.md for microsoft/git
149:  65b7f54ab4 = 149:  a12bc1a49f .github: update PULL_REQUEST_TEMPLATE.md
151:  58840bfb84 = 150:  7a74adb70c Adjust README.md for microsoft/git
150:  eab406f8c2 = 151:  19f75e70e7 git_config_set_multivar_in_file_gently(): add a lock timeout
152:  10e49d8558 = 152:  f9a9baee6c scalar: set the config write-lock timeout to 150ms
153:  de28266fe3 = 153:  17b8d55c97 scalar: add docs from microsoft/scalar
154:  8d0dc7cb2c = 154:  c3dbc931f5 scalar (Windows): use forward slashes as directory separators
155:  b3692fd10a = 155:  003d4cb9ee scalar: add retry logic to run_git()
156:  1ea9dd7014 = 156:  cb28a5cf34 scalar: support the `config` command for backwards compatibility
157:  fc083f4f58 = 157:  fa45017005 scalar: implement a minimal JSON parser
158:  014b506631 = 158:  4e1447b7d8 scalar clone: support GVFS-enabled remote repositories
159:  e980635c58 = 159:  6106dce8c3 test-gvfs-protocol: also serve smart protocol
160:  c6ad354c05 = 160:  e6442c3c8a gvfs-helper: add the `endpoint` command
161:  35a78cc15d = 161:  f80662cf15 dir_inside_of(): handle directory separators correctly
162:  66a2764a4e = 162:  cee504b416 scalar: disable authentication in unattended mode
163:  91af888076 = 163:  ba6dabeeb5 scalar: do initialize `gvfs.sharedCache`
164:  33671b8889 = 164:  21af6fba74 scalar diagnose: include shared cache info
165:  ac2fcc92d1 = 165:  5e236e5a1d scalar: only try GVFS protocol on https:// URLs
166:  433c062c22 = 166:  3b91ebe00c scalar: verify that we can use a GVFS-enabled repository
167:  3ae1f3a6b8 = 167:  8bfac726ce scalar: add the `cache-server` command
168:  62d89ce296 = 168:  6af13a4da0 scalar: add a test toggle to skip accessing the vsts/info endpoint
169:  44fd956e6e = 169:  5c9a3dd257 scalar: adjust documentation to the microsoft/git fork
170:  c63aa82313 = 170:  76037f8d13 scalar: enable untracked cache unconditionally
171:  9c7f199327 = 171:  ccb82533f5 scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility
172:  4646749d29 = 172:  6e88d8cc54 scalar: make GVFS Protocol a forced choice
173:  b80da13325 = 173:  fae970c3dc scalar diagnose: accommodate Scalar's Functional Tests
174:  e529447ff4 = 174:  4cc6c2f194 ci: run Scalar's Functional Tests
176:  b895eee911 = 175:  ef5bebd1aa scalar: upgrade to newest FSMonitor config setting
175:  95096d2df7 = 176:  68982db8ad credential: add new interactive config option
177:  bb11be9814 = 177:  4b2c98fb69 maintenance: add custom config to background jobs
179:  b6917b721f = 178:  c8eeb1e73b scalar: configure maintenance during 'reconfigure'
178:  dcd5c00793 = 179:  6f76d4a508 abspath: make strip_last_path_component() global
180:  747eca44a7 = 180:  94e3ae5d03 scalar: .scalarCache should live above enlistment
181:  6e1c3219c8 = 181:  ebb8f0d50c add/rm: allow adding sparse entries when virtual
182:  a348b01156 = 182:  ab29d91935 sparse-checkout: add config to disable deleting dirs
183:  86a4d00bbb = 183:  827278b32b diff: ignore sparse paths in diffstat
184:  1654002f24 = 184:  1953200c0b repo-settings: enable sparse index by default
185:  f2c62dcbf9 = 185:  e8418ea04f diff(sparse-index): verify with partially-sparse
186:  dd7000cd80 = 186:  a0fe103cba stash: expand testing for `git stash -u`
187:  044091536c = 187:  f90edc6b9d sequencer: avoid progress when stderr is redirected
188:  dd7b8b95d3 = 188:  bee761d781 sparse: add vfs-specific precautions
189:  f794bcb771 = 189:  e97729cb06 reset: fix mixed reset when using virtual filesystem

cc @derrickstolee @dscho

@mjcheetham mjcheetham merged commit 081a80e into vfs-2.46.0 Jul 30, 2024
118 checks passed
@mjcheetham mjcheetham deleted the tentative/vfs-2.46.0 branch July 30, 2024 00:56
@dscho dscho changed the title [DO NOT MERGE] Rebase to v2.46.0 Rebase to v2.46.0 Jul 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.