Skip to content
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

[DO NOT MERGE BUT PUSH INSTEAD] Rebase to v2.42.0 #596

Merged
merged 206 commits into from
Aug 23, 2023

Conversation

dscho
Copy link
Member

@dscho dscho commented Aug 8, 2023

Range-diff relative to vfs-2.41.0.3
  • 1: b7d4bc6 = 1: be80c70 reset --stdin: trim carriage return from the paths

  • 2: b1ad077 ! 2: 018d58c gvfs: start by adding the -gvfs suffix to the version

    @@ GIT-VERSION-GEN
      #!/bin/sh
      
      GVF=GIT-VERSION-FILE
    --DEF_VER=v2.41.0
    -+DEF_VER=v2.41.0.vfs.0.0
    +-DEF_VER=v2.42.0-rc0
    ++DEF_VER=v2.42.0.vfs.0.0
      
      LF='
      '
  • 3: 03f9ac9 = 3: 147ddd8 gvfs: ensure that the version is based on a GVFS tag

  • 4: 6f092a8 = 4: 514873d gvfs: add a GVFS-specific header file

  • 5: 6420fd9 ! 5: 562428f gvfs: add the core.gvfs config setting

    @@ Documentation/config/core.txt: core.multiPackIndex::
     
      ## config.c ##
     @@
    + #include "abspath.h"
      #include "advice.h"
    - #include "alloc.h"
      #include "date.h"
     +#include "gvfs.h"
      #include "branch.h"
      #include "config.h"
      #include "convert.h"
    -@@ config.c: int git_default_core_config(const char *var, const char *value, void *cb)
    +@@ config.c: int git_default_core_config(const char *var, const char *value,
      		return 0;
      	}
      
    @@ config.c: int git_default_core_config(const char *var, const char *value, void *
      		return 0;
     
      ## environment.c ##
    -@@ environment.c: int grafts_replace_parents = 1;
    +@@ environment.c: int grafts_keep_true_parents;
      int core_apply_sparse_checkout;
      int core_sparse_checkout_cone;
      int sparse_expect_files_outside_of_patterns;
  • 6: 854652c ! 6: 0d6a6e7 gvfs: add the feature to skip writing the index' SHA-1

    @@ repo-settings.c
      static void repo_cfg_bool(struct repository *r, const char *key, int *dest,
      			  int def)
     @@ repo-settings.c: void prepare_repo_settings(struct repository *r)
    - 	repo_cfg_bool(r, "index.skiphash", &r->settings.index_skip_hash, r->settings.index_skip_hash);
    - 	repo_cfg_bool(r, "pack.readreverseindex", &r->settings.pack_read_reverse_index, 1);
    + 		      r->settings.pack_use_bitmap_boundary_traversal);
    + 	repo_cfg_bool(r, "core.usereplacerefs", &r->settings.read_replace_refs, 1);
      
     +	/*
     +	 * For historical compatibility reasons, enable index.skipHash based
  • 7: a9b99d3 ! 7: bf82f65 gvfs: add the feature that blobs may be missing

    @@ Documentation/config/core.txt: core.gvfs::
     
      ## cache-tree.c ##
     @@
    - #include "alloc.h"
    + #include "git-compat-util.h"
      #include "environment.h"
      #include "hex.h"
     +#include "gvfs.h"
  • 8: 68851a7 ! 8: 1981410 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 "cache.h"
    + #include "git-compat-util.h"
      #include "advice.h"
     +#include "gvfs.h"
      #include "strvec.h"
  • 9: d6b7b96 ! 9: 3519fae gvfs: optionally skip reachability checks/upload pack during fetch

    @@ connected.c
      #include "gettext.h"
      #include "hex.h"
     +#include "gvfs.h"
    - #include "object-store.h"
    + #include "object-store-ll.h"
      #include "run-command.h"
      #include "sigchain.h"
     @@ connected.c: int check_connected(oid_iterate_fn fn, void *cb_data,
  • 10: c103076 ! 10: 229274a gvfs: ensure all filters and EOL conversions are blocked

    @@ Documentation/config/core.txt: core.gvfs::
     
      ## convert.c ##
     @@
    - #include "cache.h"
    + #include "git-compat-util.h"
      #include "advice.h"
     +#include "gvfs.h"
      #include "config.h"
  • 11: 5c1fb20 ! 11: 18db714 gvfs: allow "virtualizing" objects

    @@ Commit message
         Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
     
      ## config.c ##
    -@@ config.c: int git_default_core_config(const char *var, const char *value, void *cb)
    +@@ config.c: int git_default_core_config(const char *var, const char *value,
      		return 0;
      	}
      
    @@ config.c: int git_default_core_config(const char *var, const char *value, void *
     +	}
     +
      	/* Add other config variables here and to Documentation/config.txt. */
    - 	return platform_core_config(var, value, cb);
    + 	return platform_core_config(var, value, ctx, cb);
      }
     
      ## connected.c ##
    @@ environment.c: int core_gvfs;
      #ifndef PROTECT_HFS_DEFAULT
     
      ## environment.h ##
    -@@ environment.h: struct repository;
    +@@ environment.h: struct strvec;
      extern char comment_line_char;
      extern int auto_comment_line_char;
      
    @@ environment.h: struct repository;
     
      ## object-file.c ##
     @@
    + #include "setup.h"
      #include "submodule.h"
      #include "fsck.h"
    - #include "wrapper.h"
     +#include "trace.h"
     +#include "hook.h"
      
  • 12: 260d6a0 ! 12: cc42981 Hydrate missing loose objects in check_and_freshen()

    @@ contrib/long-running-read-object/example.pl (new)
     
      ## object-file.c ##
     @@
    - #include "wrapper.h"
    + #include "fsck.h"
      #include "trace.h"
      #include "hook.h"
     +#include "sigchain.h"
  • 13: 790086d = 13: 0456a8a sha1_file: when writing objects, skip the read_object_hook

  • 124: d098c27 = 14: 7bfa5bd git_config_set_multivar_in_file_gently(): add a lock timeout

  • 125: 888e8fc = 15: 6741209 scalar: set the config write-lock timeout to 150ms

  • 126: 9d4874a = 16: eee5cfb scalar: add docs from microsoft/scalar

  • 127: bf5ab8d = 17: fce069d scalar (Windows): use forward slashes as directory separators

  • 128: 357ebfa = 18: d597758 scalar: add retry logic to run_git()

  • 129: 24a6632 = 19: 6884840 scalar: support the config command for backwards compatibility

  • 154: 5fb0643 = 20: 009f63f sparse-checkout: add config to disable deleting dirs

  • 155: 1333306 = 21: 53d2460 diff: ignore sparse paths in diffstat

  • 159: 5b0edda = 22: 1915faf sequencer: avoid progress when stderr is redirected

  • 14: 399c4a6 ! 23: 18b98a1 gvfs: add global command pre and post hook procs

    @@ git.c: int cmd_main(int argc, const char **argv)
      ## hook.c ##
     @@
      #include "git-compat-util.h"
    + #include "abspath.h"
     +#include "environment.h"
      #include "advice.h"
      #include "gettext.h"
    @@ hook.c
      #include "strbuf.h"
     +#include "setup.h"
     +
    -+static int early_hooks_path_config(const char *var, const char *value, void *data)
    ++static int early_hooks_path_config(const char *var, const char *value,
    ++				   const struct config_context *ctx, void *cb)
     +{
     +	if (!strcmp(var, "core.hookspath"))
    -+		return git_config_pathname((const char **)data, var, value);
    ++		return git_config_pathname((const char **)cb, var, value);
     +
     +	return 0;
     +}
  • 15: 88d4687 = 24: 8cad13e t0400: verify that the hook is called correctly from a subdirectory

  • 16: 281fa4f = 25: d0029a3 Pass PID of git process to hooks.

  • 17: 0b4a671 = 26: e81e968 pre-command: always respect core.hooksPath

  • 18: 032b0b4 = 27: 4528d3a sparse-checkout: update files with a modify/delete conflict

  • 19: 9a45de8 = 28: 31d1fc8 sparse-checkout: avoid writing entries with the skip-worktree bit

  • 20: 91bbdc4 = 29: d3de4b1 Do not remove files outside the sparse-checkout

  • 21: 7501847 ! 30: 0a3896d gvfs: refactor loading the core.gvfs config value

    @@ gvfs.c (new)
     +static int gvfs_config_loaded;
     +static int core_gvfs_is_bool;
     +
    -+static int early_core_gvfs_config(const char *var, const char *value, void *data)
    ++static int early_core_gvfs_config(const char *var, const char *value,
    ++				  const struct config_context *ctx, void *cb)
     +{
     +	if (!strcmp(var, "core.gvfs"))
    -+		core_gvfs = git_config_bool_or_int("core.gvfs", value, &core_gvfs_is_bool);
    ++		core_gvfs = git_config_bool_or_int("core.gvfs", value, ctx->kvi,
    ++						   &core_gvfs_is_bool);
     +	return 0;
     +}
     +
    @@ gvfs.c (new)
     +	if (gvfs_config_loaded)
     +		return;
     +
    -+	if (value)
    -+		core_gvfs = git_config_bool_or_int("core.gvfs", value, &core_gvfs_is_bool);
    -+	else if (startup_info->have_repository == 0)
    ++	if (value) {
    ++		struct key_value_info default_kvi = KVI_INIT;
    ++		core_gvfs = git_config_bool_or_int("core.gvfs", value, &default_kvi, &core_gvfs_is_bool);
    ++	} else if (startup_info->have_repository == 0)
     +		read_early_config(early_core_gvfs_config, NULL);
     +	else
    -+		git_config_get_bool_or_int("core.gvfs", &core_gvfs_is_bool, &core_gvfs);
    ++		repo_config_get_bool_or_int(the_repository, "core.gvfs",
    ++					    &core_gvfs_is_bool, &core_gvfs);
     +
     +	/* Turn on all bits if a bool was set in the settings */
     +	if (core_gvfs_is_bool && core_gvfs)
  • 22: cc0227f ! 31: 4d5ba02 send-pack: do not check for sha1 file when GVFS_MISSING_OK set

    @@ send-pack.c
      #include "hex.h"
      #include "refs.h"
     +#include "gvfs.h"
    - #include "object-store.h"
    + #include "object-store-ll.h"
      #include "pkt-line.h"
      #include "sideband.h"
    -@@ send-pack.c: static int send_pack_config(const char *var, const char *value, void *unused)
    +@@ send-pack.c: int option_parse_push_signed(const struct option *opt,
      
      static void feed_object(const struct object_id *oid, FILE *fh, int negative)
      {
  • 23: cc6dd44 = 32: f2adb2b cache-tree: remove use of strbuf_addf in update_one

  • 24: 3078d8c ! 33: 0ca561f gvfs: block unsupported commands when running in a GVFS repo

    @@ builtin/update-index.c
     @@
       */
      #define USE_THE_INDEX_VARIABLE
    - #include "cache.h"
    + #include "builtin.h"
     +#include "gvfs.h"
      #include "bulk-checkin.h"
      #include "config.h"
  • 25: 46303ad ! 34: 07e63ff worktree: allow in Scalar repositories

    @@ Commit message
     
      ## builtin/worktree.c ##
     @@
    - #include "cache.h"
    + #include "builtin.h"
      #include "abspath.h"
    + #include "advice.h"
     +#include "gvfs.h"
      #include "checkout.h"
      #include "config.h"
  • 26: 2c3b190 ! 35: c4a1090 gvfs: allow overriding core.gvfs

    @@ Commit message
         Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
     
      ## gvfs.c ##
    -@@ gvfs.c: static int early_core_gvfs_config(const char *var, const char *value, void *data
    +@@ gvfs.c: static int early_core_gvfs_config(const char *var, const char *value,
      
      void gvfs_load_config_value(const char *value)
      {
     -	if (gvfs_config_loaded)
     -		return;
     -
    - 	if (value)
    - 		core_gvfs = git_config_bool_or_int("core.gvfs", value, &core_gvfs_is_bool);
    - 	else if (startup_info->have_repository == 0)
    + 	if (value) {
    + 		struct key_value_info default_kvi = KVI_INIT;
    + 		core_gvfs = git_config_bool_or_int("core.gvfs", value, &default_kvi, &core_gvfs_is_bool);
     @@ gvfs.c: void gvfs_load_config_value(const char *value)
      	/* Turn on all bits if a bool was set in the settings */
      	if (core_gvfs_is_bool && core_gvfs)
  • 27: 8219174 = 36: a1edc39 BRANCHES.md: Add explanation of branches and using forks

  • 28: 2cff5e9 ! 37: 36cb486 Add virtual file system settings and hook proc

    @@ Makefile: LIB_OBJS += utf8.o
      LIB_OBJS += worktree.o
     
      ## config.c ##
    -@@ config.c: int git_default_core_config(const char *var, const char *value, void *cb)
    +@@ config.c: int git_default_core_config(const char *var, const char *value,
      	}
      
      	if (!strcmp(var, "core.sparsecheckout")) {
    @@ config.h: int git_config_get_pathname(const char *key, const char **dest);
     
      ## dir.c ##
     @@
    +  */
      #include "git-compat-util.h"
      #include "abspath.h"
    - #include "alloc.h"
     +#include "virtualfilesystem.h"
      #include "config.h"
      #include "convert.h"
    @@ environment.h: int get_shared_repository(void);
      ## read-cache.c ##
     @@
       */
    - #include "cache.h"
    - #include "alloc.h"
    + #include "git-compat-util.h"
    + #include "bulk-checkin.h"
     +#include "virtualfilesystem.h"
      #include "config.h"
      #include "date.h"
    @@ t/t1093-virtualfilesystem.sh (new)
     
      ## unpack-trees.c ##
     @@
    - #include "cache.h"
    + #include "git-compat-util.h"
      #include "advice.h"
      #include "gvfs.h"
     +#include "virtualfilesystem.h"
    @@ virtualfilesystem.c (new)
     +#include "git-compat-util.h"
     +#include "environment.h"
     +#include "gettext.h"
    -+#include "cache.h"
     +#include "config.h"
     +#include "dir.h"
     +#include "hashmap.h"
     +#include "run-command.h"
    ++#include "name-hash.h"
    ++#include "read-cache-ll.h"
     +#include "virtualfilesystem.h"
     +
     +#define HOOK_INTERFACE_VERSION	(1)
  • 29: 5148836 = 38: 8042372 virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 30: 6e313e0 = 39: 1735457 virtualfilesystem: fix bug with symlinks being ignored

  • 31: ebe9464 = 40: d11ca3a virtualfilesystem: check if directory is included

  • 32: 11fb74f = 41: 2d2068b vfs: fix case where directories not handled correctly

  • 33: 01e785b = 42: b3edc09 backwards-compatibility: support the post-indexchanged hook

  • 34: e63dd9e = 43: 888412f gvfs: verify that the built-in FSMonitor is disabled

  • 35: 6668a14 ! 44: af7e062 status: add status serialization mechanism

    @@ builtin/commit.c: static void handle_untracked_files_arg(struct wt_status *s)
      	/*
      	 * Please update $__git_untracked_file_modes in
      	 * git-completion.bash when you add new options
    -@@ builtin/commit.c: static int git_status_config(const char *k, const char *v, void *cb)
    +@@ builtin/commit.c: static int git_status_config(const char *k, const char *v,
      		s->relative_paths = git_config_bool(k, v);
      		return 0;
      	}
    @@ wt-status-deserialize.c (new)
     +#include "environment.h"
     +#include "hex.h"
     +#include "hash.h"
    -+#include "cache.h"
     +#include "wt-status.h"
     +#include "pkt-line.h"
     +#include "trace.h"
    ++#include "statinfo.h"
     +
     +static struct trace_key trace_deserialize = TRACE_KEY_INIT(DESERIALIZE);
     +
    @@ wt-status-serialize.c (new)
     @@
     +#include "git-compat-util.h"
     +#include "hex.h"
    -+#include "cache.h"
     +#include "repository.h"
     +#include "wt-status.h"
     +#include "pkt-line.h"
     +#include "trace.h"
    ++#include "read-cache-ll.h"
     +
     +static struct trace_key trace_serialize = TRACE_KEY_INIT(SERIALIZE);
     +
  • 36: 1765859 = 45: 8f6d6fa Teach ahead-behind and serialized status to play nicely together

  • 37: e421b5c = 46: 78f398f status: serialize to path

  • 38: bac50c5 = 47: dd0b7aa status: reject deserialize in V2 and conflicts

  • 39: 98d6e0c = 48: 9e7d3ad status: fix rename reporting when using serialization cache

  • 40: 10213b4 ! 49: 77244ef serialize-status: serialize global and repo-local exclude file metadata

    @@ Commit message
         Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
     
      ## wt-status-deserialize.c ##
    +@@
    + #include "pkt-line.h"
    + #include "trace.h"
    + #include "statinfo.h"
    ++#include "path.h"
    + 
    + static struct trace_key trace_deserialize = TRACE_KEY_INIT(DESERIALIZE);
    + 
     @@ wt-status-deserialize.c: static int my_validate_index(const struct cache_time *mtime_reported)
      	return DESERIALIZE_OK;
      }
    @@ wt-status-serialize.c
      #include "git-compat-util.h"
     +#include "environment.h"
      #include "hex.h"
    - #include "cache.h"
      #include "repository.h"
    -@@
    + #include "wt-status.h"
    + #include "pkt-line.h"
    + #include "trace.h"
    + #include "read-cache-ll.h"
    ++#include "path.h"
      
      static struct trace_key trace_serialize = TRACE_KEY_INIT(SERIALIZE);
      
  • 41: 58e3047 ! 50: 1223036 status: deserialization wait

    @@ builtin/commit.c: static int opt_parse_deserialize(const struct option *opt, con
      static int opt_parse_m(const struct option *opt, const char *arg, int unset)
      {
      	struct strbuf *buf = opt->value;
    -@@ builtin/commit.c: static int git_status_config(const char *k, const char *v, void *cb)
    +@@ builtin/commit.c: static int git_status_config(const char *k, const char *v,
      		}
      		return 0;
      	}
  • 42: 8e0b51f = 51: 2d073bf merge-recursive: avoid confusing logic in was_dirty()

  • 43: 0b50bb8 = 52: 04cb50e merge-recursive: add some defensive coding to was_dirty()

  • 44: ab8b532 ! 53: 34670c5 merge-recursive: teach was_dirty() about the virtualfilesystem

    @@ Commit message
      ## merge-recursive.c ##
     @@
       */
    - #include "cache.h"
    + #include "git-compat-util.h"
      #include "merge-recursive.h"
     +#include "virtualfilesystem.h"
      
  • 45: ec2cef5 = 54: 729dca6 status: deserialize with -uno does not print correct hint

  • 46: a1081b4 = 55: 710c2ba wt-status-deserialize: fix crash when -v is used

  • 47: 8b5596c ! 56: 48f42fb fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

    @@ Commit message
     
         Signed-off-by: Kevin Willford <Kevin.Willford@microsoft.com>
     
    - ## cache.h ##
    -@@ cache.h: static inline unsigned create_ce_flags(unsigned stage)
    + ## read-cache-ll.h ##
    +@@ read-cache-ll.h: static inline unsigned create_ce_flags(unsigned stage)
      #define ce_namelen(ce) ((ce)->ce_namelen)
      #define ce_size(ce) cache_entry_size(ce_namelen(ce))
      #define ce_stage(ce) ((CE_STAGEMASK & (ce)->ce_flags) >> CE_STAGESHIFT)
  • 48: 698f1b2 = 57: e293532 fsmonitor: add script for debugging and update script for tests

  • 49: 02652b2 = 58: 85f217e status: disable deserialize when verbose output requested.

  • 50: 4b16533 = 59: addf61a t7524: add test for verbose status deserialzation

  • 51: 7cd5356 = 60: f3c28b9 deserialize-status: silently fallback if we cannot read cache file

  • 52: 86c7169 ! 61: 7fe52a0 gvfs:trace2:data: add trace2 tracing around read_object_process

    @@ Commit message
     
      ## object-file.c ##
     @@
    + #include "submodule.h"
      #include "fsck.h"
    - #include "wrapper.h"
      #include "trace.h"
     +#include "trace2.h"
      #include "hook.h"
  • 53: 87422f2 ! 62: 3b4f859 gvfs:trace2:data: status deserialization information

    @@ builtin/commit.c: static int opt_parse_deserialize(const struct option *opt, con
      			do_explicit_deserialize = 1; /* can read from this file */
      		else {
      			/*
    -@@ builtin/commit.c: static int git_status_config(const char *k, const char *v, void *cb)
    +@@ builtin/commit.c: static int git_status_config(const char *k, const char *v,
      		if (v && *v && access(v, R_OK) == 0) {
      			do_implicit_deserialize = 1;
      			deserialize_path = xstrdup(v);
    @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix
     
      ## wt-status-deserialize.c ##
     @@
    - #include "wt-status.h"
    - #include "pkt-line.h"
      #include "trace.h"
    + #include "statinfo.h"
    + #include "path.h"
     +#include "trace2.h"
     +
     +static void set_deserialize_reject_reason(const char *reason)
  • 54: b25228c ! 63: 8a6a57f gvfs:trace2:data: status serialization

    @@ Commit message
     
      ## wt-status-serialize.c ##
     @@
    - #include "wt-status.h"
    - #include "pkt-line.h"
      #include "trace.h"
    + #include "read-cache-ll.h"
    + #include "path.h"
     +#include "trace2.h"
      
      static struct trace_key trace_serialize = TRACE_KEY_INIT(SERIALIZE);
  • 55: ca92198 ! 64: 8d8a0df gvfs:trace2:data: add vfs stats

    @@ virtualfilesystem.c
      #include "git-compat-util.h"
      #include "environment.h"
      #include "gettext.h"
    -+#include "repository.h"
     +#include "trace2.h"
    - #include "cache.h"
      #include "config.h"
      #include "dir.h"
    + #include "hashmap.h"
     @@ virtualfilesystem.c: void apply_virtualfilesystem(struct index_state *istate)
      {
      	char *buf, *entry;
  • 56: 6d188d2 = 65: e02707a trace2: refactor setting process starting time

  • 57: b8d46f5 = 66: 4c104d2 trace2:gvfs:experiment: clear_ce_flags_1

  • 58: e006462 = 67: 46d3ebe trace2:gvfs:experiment: report_tracking

  • 59: b319052 = 68: 318d6a8 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 60: 1208124 = 69: be8ceb9 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 61: 1748ffe = 70: 4970bab trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 62: 567aa5f = 71: 01a5ecf trace2:gvfs:experiment: add region around unpack_trees()

  • 63: 3fe6196 = 72: 6841e43 trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 64: bf3b310 ! 73: 4bb5da6 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

    @@ builtin/checkout.c
     @@
      #include "merge-recursive.h"
      #include "object-name.h"
    - #include "object-store.h"
    + #include "object-store-ll.h"
     +#include "packfile.h"
      #include "parse-options.h"
    - #include "refs.h"
    - #include "remote.h"
    + #include "path.h"
    + #include "preload-index.h"
     @@ builtin/checkout.c: static void update_refs_for_switch(const struct checkout_opts *opts,
      	strbuf_release(&msg);
      	if (!opts->quiet &&
  • 65: 27525de = 74: 38dd549 trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 66: 81e9e7e = 75: 0d03322 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 67: 1d51959 = 76: 396bba5 Trace2:gvfs:experiment: capture more 'tracking' details

  • 68: 6361ef1 = 77: 3f3afc0 credential: set trace2_child_class for credential manager children

  • 69: a372c15 = 78: 9794732 sub-process: do not borrow cmd pointer from caller

  • 70: 835d085 = 79: 1527081 sub-process: add subprocess_start_argv()

  • 71: 3e01a1b ! 80: e6289f3 sha1-file: add function to update existing loose object cache

    @@ object-file.c: struct oidtree *odb_loose_cache(struct object_directory *odb,
      {
      	oidtree_clear(odb->loose_objects_cache);
     
    - ## object-store.h ##
    -@@ object-store.h: void restore_primary_odb(struct object_directory *restore_odb, const char *old_p
    + ## object-store-ll.h ##
    +@@ object-store-ll.h: void restore_primary_odb(struct object_directory *restore_odb, const char *old_p
      struct oidtree *odb_loose_cache(struct object_directory *odb,
      				  const struct object_id *oid);
      
  • 72: eceef97 = 81: dc3e62b packfile: add install_packed_git_and_mru()

  • 73: 99d876a = 82: 6f52504 index-pack: avoid immediate object fetch while parsing packfile

  • 74: 138169e ! 83: 3ecfd05 gvfs-helper: create tool to fetch objects using the GVFS Protocol

    @@ Makefile: scalar$X: scalar.o GIT-LDFLAGS $(GITLIBS)
     
      ## config.c ##
     @@
    + #include "worktree.h"
      #include "ws.h"
    - #include "wrapper.h"
      #include "write-or-die.h"
     +#include "transport.h"
      
      struct config_source {
      	struct config_source *prev;
    -@@ config.c: int git_default_core_config(const char *var, const char *value, void *cb)
    +@@ config.c: int git_default_core_config(const char *var, const char *value,
      		return 0;
      	}
      
    @@ config.c: static int git_default_mailmap_config(const char *var, const char *val
     +	return 0;
     +}
     +
    - int git_default_config(const char *var, const char *value, void *cb)
    + int git_default_config(const char *var, const char *value,
    + 		       const struct config_context *ctx, void *cb)
      {
    - 	if (starts_with(var, "core."))
    -@@ config.c: int git_default_config(const char *var, const char *value, void *cb)
    +@@ config.c: int git_default_config(const char *var, const char *value,
      	if (starts_with(var, "sparse."))
      		return git_default_sparse_config(var, value);
      
    @@ promisor-remote.c
     +#include "environment.h"
      #include "gettext.h"
      #include "hex.h"
    - #include "object-store.h"
    + #include "object-store-ll.h"
     +#include "gvfs-helper-client.h"
      #include "promisor-remote.h"
      #include "config.h"
  • 75: 8111c20 = 84: c2a077d gvfs-helper: fix race condition when creating loose object dirs

  • 76: f58c7dc = 85: f706a93 sha1-file: create shared-cache directory if it doesn't exist

  • 77: a66799e = 86: 743dbba gvfs-helper: better handling of network errors

  • 78: 3039d07 = 87: 8c2a9ae gvfs-helper-client: properly update loose cache with fetched OID

  • 79: 22a1f06 = 88: 42c34ee gvfs-helper: V2 robust retry and throttling

  • 80: 2179ecb = 89: 5426f48 gvfs-helper: expose gvfs/objects GET and POST semantics

  • 81: 6591b5d = 90: 55859b9 gvfs-helper: dramatically reduce progress noise

  • 82: f7a81b8 = 91: 914a531 gvfs-helper-client.h: define struct object_id

  • 83: bece812 = 92: 50cf894 gvfs-helper: handle pack-file after single POST request

  • 84: 5723160 = 93: d813b86 test-gvfs-prococol, t5799: tests for gvfs-helper

  • 85: d444498 = 94: 494fb4e gvfs-helper: move result-list construction into install functions

  • 86: 66d83c6 = 95: 83a0ed0 t5799: add support for POST to return either a loose object or packfile

  • 87: 3cf9be0 = 96: e24de7c t5799: cleanup wc-l and grep-c lines

  • 88: 76ca12f = 97: a66b335 gvfs-helper: verify loose objects after write

  • 89: ae0852f = 98: fdf8c15 t7599: create corrupt blob test

  • 90: 58237c0 = 99: ec5b345 gvfs-helper: add prefetch support

  • 91: f94b391 = 100: 6be1047 gvfs-helper: add prefetch .keep file for last packfile

  • 92: d654b3a = 101: f95ff51 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 93: 2752a54 = 102: 3e14e71 gvfs-helper: move content-type warning for prefetch packs

  • 94: cd85c6e = 103: 583f17f fetch: use gvfs-helper prefetch under config

  • 95: 5e7b77e = 104: 9c1c730 gvfs-helper: better support for concurrent packfile fetches

  • 96: e5ef243 = 105: ce24ebc remote-curl: do not call fetch-pack when using gvfs-helper

  • 97: 9879ae0 = 106: 6a244c1 fetch: reprepare packs before checking connectivity

  • 98: 133865c = 107: 18c9fdb gvfs-helper: retry when creating temp files

  • 99: ac98a9e = 108: 83dac6a sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 100: 9c34cd3 = 109: 21049ad upload-pack: fix race condition in error messages

  • 101: 9a211a3 = 110: 2a43699 maintenance: care about gvfs.sharedCache config

  • 102: e756cec ! 111: 81bc140 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

    @@ Commit message
     
         Signed-off-by: Neeraj Singh <neerajsi@ntdev.microsoft.com>
     
    - ## cache.h ##
    -@@ cache.h: int strcmp_offset(const char *s1, const char *s2, size_t *first_change);
    - int index_dir_exists(struct index_state *istate, const char *name, int namelen);
    - void adjust_dirname_case(struct index_state *istate, char *name);
    - struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
    -+struct cache_entry *index_file_next_match(struct index_state *istate, struct cache_entry *ce, int igncase);
    - 
    - /*
    -  * Searches for an entry defined by name and namelen in the given index.
    -
      ## name-hash.c ##
     @@ name-hash.c: struct cache_entry *index_file_exists(struct index_state *istate, const char *na
      	return NULL;
    @@ name-hash.c: struct cache_entry *index_file_exists(struct index_state *istate, c
      {
      	if (!istate->name_hash_initialized)
     
    + ## name-hash.h ##
    +@@ name-hash.h: struct index_state;
    + int index_dir_exists(struct index_state *istate, const char *name, int namelen);
    + void adjust_dirname_case(struct index_state *istate, char *name);
    + struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase);
    ++struct cache_entry *index_file_next_match(struct index_state *istate, struct cache_entry *ce, int igncase);
    + 
    + int test_lazy_init_name_hash(struct index_state *istate, int try_threaded);
    + void add_name_hash(struct index_state *istate, struct cache_entry *ce);
    +
      ## unpack-trees.c ##
     @@ unpack-trees.c: static int clear_ce_flags_1(struct index_state *istate,
      			continue;
  • 103: 6b7e624 = 112: aee9749 homebrew: add GitHub workflow to release Cask

  • 104: d20121c = 113: 9f6c761 Adding winget workflows

  • 105: af01bfd = 114: a521998 Add workflow for apt-get release

  • 106: bf85693 = 115: f4b81fd Disable the monitor-components workflow in msft-git

  • 107: cf0676c = 116: cd9f824 .github: enable windows builds on microsoft fork

  • 108: 7729533 = 117: cdd5bc5 release: create initial Windows installer build workflow

  • 109: 51369f2 = 118: 7969824 release: add Mac OSX installer build

  • 110: f507846 = 119: 022e480 release: build unsigned Ubuntu .deb package

  • 111: e4f0257 = 120: 0f17d3c release: add signing step for .deb package

  • 112: 9fec74e = 121: 803dbaf release: create draft GitHub release with packages & installers

  • 113: 672a6a7 = 122: fccfdbb release: continue pestering until user upgrades

  • 114: 084d2fa = 123: b805c53 Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 115: 66101c2 = 124: 1674a73 dist: archive HEAD instead of HEAD^{tree}

  • 118: b91b42f = 125: 6b38cb0 update-microsoft-git: create barebones builtin

  • 116: 6a598aa = 126: a7adc2d release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 119: c927262 = 127: ad9fc23 update-microsoft-git: Windows implementation

  • 117: 2a59b7f = 128: 77ccd66 release: add installer validation

  • 120: 50094b9 = 129: 56d93aa update-microsoft-git: use brew on macOS

  • 121: 1938320 = 130: 6bccd6c .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 122: 8eb3f56 = 131: a4e1fa4 .github: update PULL_REQUEST_TEMPLATE.md

  • 123: 18812b3 = 132: da13cf9 Adjust README.md for microsoft/git

  • 130: 5481a0c = 133: d8f7d65 scalar: implement a minimal JSON parser

  • 131: 8662633 = 134: b74ca82 scalar clone: support GVFS-enabled remote repositories

  • 132: c44b2b2 = 135: 4047104 test-gvfs-protocol: also serve smart protocol

  • 133: 1d03d84 = 136: 71eefa9 gvfs-helper: add the endpoint command

  • 134: b3749a1 = 137: 49a3921 dir_inside_of(): handle directory separators correctly

  • 135: df45a16 = 138: 5dae55c scalar: disable authentication in unattended mode

  • 136: a5c97d8 = 139: 9a68cc1 scalar: do initialize gvfs.sharedCache

  • 137: c92180d = 140: f260392 scalar diagnose: include shared cache info

  • 138: 457dcd7 = 141: 9035783 scalar: only try GVFS protocol on https:// URLs

  • 139: 903208c = 142: d5a4733 scalar: verify that we can use a GVFS-enabled repository

  • 140: c9e2f51 = 143: 50e4d0d scalar: add the cache-server command

  • 141: f74080b = 144: d66062e scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 142: e90d4e0 = 145: d855250 scalar: adjust documentation to the microsoft/git fork

  • 143: 8d0dbdd = 146: 8ead9e3 scalar: enable untracked cache unconditionally

  • 144: a662645 = 147: 9a2f49f scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 145: a69b309 = 148: 4c4a841 scalar diagnose: accommodate Scalar's Functional Tests

  • 146: 1ff33f5 = 149: 09623f3 ci: run Scalar's Functional Tests

  • 147: 876caad = 150: e9b5395 scalar: upgrade to newest FSMonitor config setting

  • 148: 67c2c4c ! 151: 5e8c31b setup: add discover_git_directory_reason()

    @@ setup.c: int discover_git_directory(struct strbuf *commondir,
     +		return GIT_DIR_INVALID_FORMAT;
      	}
      
    - 	/* take ownership of candidate.partial_clone */
    -@@ setup.c: int discover_git_directory(struct strbuf *commondir,
    - 	candidate.partial_clone = NULL;
    - 
      	clear_repository_format(&candidate);
     -	return 0;
     +	return result;
  • 149: ab52160 = 152: d4185ec scalar reconfigure: help users remove buggy repos

  • 150: 0d88145 = 153: cfb6795 abspath: make strip_last_path_component() global

  • 151: cfe66d1 = 154: 0095742 scalar: .scalarCache should live above enlistment

  • 152: 4aae3e2 = 155: 05c96a4 scalar: add --no-src option

  • 153: 263ed50 ! 156: a79e0b6 add/rm: allow adding sparse entries when virtual

    @@ builtin/add.c
     @@
       */
      #define USE_THE_INDEX_VARIABLE
    - #include "cache.h"
    + #include "builtin.h"
     +#include "environment.h"
      #include "advice.h"
      #include "config.h"
    - #include "builtin.h"
    + #include "lockfile.h"
     @@ builtin/add.c: static int chmod_pathspec(struct pathspec *pathspec, char flip, int show_only)
      		int err;
      
    @@ builtin/add.c: static int chmod_pathspec(struct pathspec *pathspec, char flip, i
      		    (ce_skip_worktree(ce) ||
      		     !path_in_sparse_checkout(ce->name, &the_index)))
      			continue;
    -@@ builtin/add.c: static void update_callback(struct diff_queue_struct *q,
    - 		struct diff_filepair *p = q->queue[i];
    - 		const char *path = p->one->path;
    - 
    --		if (!include_sparse && !path_in_sparse_checkout(path, &the_index))
    -+		if (!include_sparse && !core_virtualfilesystem &&
    -+		    !path_in_sparse_checkout(path, &the_index))
    - 			continue;
    - 
    - 		switch (fix_unmerged_status(p, data)) {
     @@ builtin/add.c: static int refresh(int verbose, const struct pathspec *pathspec)
      		if (!seen[i]) {
      			const char *path = pathspec->items[i].original;
    @@ builtin/rm.c
      #define USE_THE_INDEX_VARIABLE
      #include "builtin.h"
     +#include "environment.h"
    - #include "alloc.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];
    @@ builtin/rm.c: int cmd_rm(int argc, const char **argv, const char *prefix)
      			advise_on_updating_sparse_paths(&only_match_skip_worktree);
      			ret = 1;
      		}
    +
    + ## read-cache.c ##
    +@@ read-cache.c: static void update_callback(struct diff_queue_struct *q,
    + 		struct diff_filepair *p = q->queue[i];
    + 		const char *path = p->one->path;
    + 
    +-		if (!data->include_sparse &&
    ++		if (!data->include_sparse && !core_virtualfilesystem &&
    + 		    !path_in_sparse_checkout(path, data->index))
    + 			continue;
    + 
  • 156: 05bb053 ! 157: 18e4364 repo-settings: enable sparse index by default

    @@ repo-settings.c: void prepare_repo_settings(struct repository *r)
     +	repo_cfg_bool(r, "index.sparse", &r->settings.sparse_index, 1);
      	repo_cfg_bool(r, "index.skiphash", &r->settings.index_skip_hash, r->settings.index_skip_hash);
      	repo_cfg_bool(r, "pack.readreverseindex", &r->settings.pack_read_reverse_index, 1);
    - 
    + 	repo_cfg_bool(r, "pack.usebitmapboundarytraversal",
     
      ## t/perf/p2000-sparse-operations.sh ##
     @@ t/perf/p2000-sparse-operations.sh: test_expect_success 'setup repo and indexes' '
  • 157: 8bd255f = 158: da25f7f diff(sparse-index): verify with partially-sparse

  • 158: cb2f51a = 159: 0f52704 stash: expand testing for git stash -u

  • 160: 5ef1fba = 160: 47cf200 sparse: add vfs-specific precautions

  • 161: 95ed7f6 = 161: 47e4161 maintenance: delete stale lock files

  • 162: afcac2f = 162: 2eab49a reset: fix mixed reset when using virtual filesystem

  • 163: 47c0731 = 163: 333459c gvfs-helper: add --max-retries to prefetch verb

  • 164: e9bd1f7 = 164: d5c0f80 t5799: add tests to detect corrupt pack/idx files in prefetch

  • 165: 6bbc7a4 = 165: 20ab67e gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 166: d202da3 = 166: 6ab087b release: move secrets to workflow environment

  • 167: dddb557 = 167: c6b4544 release: remove pmc deployment workflow

  • 168: 4c999ac = 168: 4268011 gvfs-helper: stop showing index-pack progress

  • 169: 3981c02 = 169: 7473e58 gvfs-helper: show progress of multiple prefetch packs

Lots of added #includes, some hunks moved because the respective code moved to different files that sort differently in the diff. And changes in config callbacks required by the function signature changes in upstream (there is now a mandatory const struct config_context *ctx parameter, for example). No functional changes, though.

I will use the opportunity to refactor the patches by squashing some obvious bug fixes into the patches that introduce the bugs, and rearranging the patches so that the gvfs-helper sub-branches cuddle together, the result should be tree-same to what above-mentioned range-diff describes.

@dscho dscho self-assigned this Aug 8, 2023
@dscho dscho force-pushed the tentative/vfs-2.42.0 branch 2 times, most recently from a4ea2b9 to 81fe36a Compare August 9, 2023 09:49
@dscho
Copy link
Member Author

dscho commented Aug 9, 2023

@derrickstolee what do you think about upstreaming the following?

@dscho
Copy link
Member Author

dscho commented Aug 9, 2023

I will use the opportunity to refactor the patches by squashing some obvious bug fixes into the patches that introduce the bugs, and rearranging the patches so that the gvfs-helper sub-branches cuddle together, the result should be tree-same to what above-mentioned range-diff describes.

As "threatened", I just force-pushed a tree-same update. Here is...

... the range diff
  • 1: 36cb486 ! 1: 117d4e1 Add virtual file system settings and hook proc

    @@ t/t1093-virtualfilesystem.sh (new)
     +	test_cmp expected actual
     +'
     +
    ++test_expect_success 'folder with same prefix as file' '
    ++	clean_repo &&
    ++	touch dir1.sln &&
    ++	write_script .git/hooks/virtualfilesystem <<-\EOF &&
    ++		printf "dir1/\0"
    ++		printf "dir1.sln\0"
    ++	EOF
    ++	git add dir1.sln &&
    ++	git ls-files -v > actual &&
    ++	cat > expected <<-\EOF &&
    ++		H dir1.sln
    ++		H dir1/file1.txt
    ++		H dir1/file2.txt
    ++		S dir2/file1.txt
    ++		S dir2/file2.txt
    ++	EOF
    ++	test_cmp expected actual
    ++'
    ++
     +test_done
     
      ## unpack-trees.c ##
    @@ virtualfilesystem.c (new)
     +	if (dtype != DT_REG && dtype != DT_DIR && dtype != DT_LNK)
     +		die(_("is_excluded_from_virtualfilesystem passed unhandled dtype"));
     +
    -+	if (dtype == DT_REG) {
    ++	if (dtype == DT_REG || dtype == DT_LNK) {
     +		int ret = is_included_in_virtualfilesystem(pathname, pathlen);
     +		if (ret > 0)
     +			return 0;
    @@ virtualfilesystem.c (new)
     +		return ret;
     +	}
     +
    -+	if (dtype == DT_DIR || dtype == DT_LNK) {
    ++	if (dtype == DT_DIR) {
     +		if (!parent_directory_hashmap.tablesize && virtual_filesystem_data.len)
     +			initialize_parent_directory_hashmap(&parent_directory_hashmap, &virtual_filesystem_data);
     +		if (!parent_directory_hashmap.tablesize)
    @@ virtualfilesystem.c (new)
     +			if (buf[i - 1] == '/') {
     +				if (ignore_case)
     +					adjust_dirname_case(istate, entry);
    -+				pos = index_name_pos(istate, entry, len - 1);
    ++				pos = index_name_pos(istate, entry, len);
     +				if (pos < 0) {
     +					pos = -pos - 1;
     +					while (pos < istate->cache_nr && !fspathncmp(istate->cache[pos]->name, entry, len)) {
  • 2: 8042372 = 2: 7816883 virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 3: 1735457 < -: ------------ virtualfilesystem: fix bug with symlinks being ignored

  • 4: d11ca3a = 3: c6b664a virtualfilesystem: check if directory is included

  • 5: 2d2068b < -: ------------ vfs: fix case where directories not handled correctly

  • 6: b3edc09 = 4: f44724f backwards-compatibility: support the post-indexchanged hook

  • 7: 888412f = 5: 2a9022f gvfs: verify that the built-in FSMonitor is disabled

  • 8: af7e062 ! 6: 8dd3876 status: add status serialization mechanism

    @@ wt-status-deserialize.c (new)
     +		d->worktree_status = ntohl(sd->fixed.worktree_status);
     +		d->index_status = ntohl(sd->fixed.index_status);
     +		d->stagemask = ntohl(sd->fixed.stagemask);
    ++		d->rename_status = ntohl(sd->fixed.rename_status);
     +		d->rename_score = ntohl(sd->fixed.rename_score);
     +		d->mode_head = ntohl(sd->fixed.mode_head);
     +		d->mode_index = ntohl(sd->fixed.mode_index);
    @@ wt-status-deserialize.c (new)
     +
     +		trace_printf_key(
     +			&trace_deserialize,
    -+			"change: %d %d %d %d %o %o %o %d %d %s %s '%s' '%s'",
    ++			"change: %d %d %d %d %d %o %o %o %d %d %s %s '%s' '%s'",
     +			d->worktree_status,
     +			d->index_status,
     +			d->stagemask,
    ++			d->rename_status,
     +			d->rename_score,
     +			d->mode_head,
     +			d->mode_index,
    @@ wt-status-deserialize.c (new)
     +	/*
     +	 * Copy over display-related fields from the current command.
     +	 */
    ++	des_s->repo = cmd_s->repo;
     +	des_s->verbose = cmd_s->verbose;
     +	/* amend */
     +	/* whence */
    @@ wt-status-serialize.c (new)
     +	int len_path, len_rename_source;
     +
     +	trace_printf_key(&trace_serialize,
    -+		"change: %d %d %d %d %o %o %o %d %d %s %s '%s' '%s'",
    ++		"change: %d %d %d %d %d %o %o %o %d %d %s %s '%s' '%s'",
     +		d->worktree_status,
     +		d->index_status,
     +		d->stagemask,
    ++		d->rename_status,
     +		d->rename_score,
     +		d->mode_head,
     +		d->mode_index,
    @@ wt-status-serialize.c (new)
     +	sd.fixed.worktree_status       = htonl(d->worktree_status);
     +	sd.fixed.index_status          = htonl(d->index_status);
     +	sd.fixed.stagemask             = htonl(d->stagemask);
    ++	sd.fixed.rename_status         = htonl(d->rename_status);
     +	sd.fixed.rename_score          = htonl(d->rename_score);
     +	sd.fixed.mode_head             = htonl(d->mode_head);
     +	sd.fixed.mode_index            = htonl(d->mode_index);
    @@ wt-status.h: int require_clean_work_tree(struct repository *repo,
     +	uint32_t worktree_status;
     +	uint32_t index_status;
     +	uint32_t stagemask;
    ++	uint32_t rename_status;
     +	uint32_t rename_score;
     +	uint32_t mode_head;
     +	uint32_t mode_index;
  • 9: 8f6d6fa = 7: 4d2cf03 Teach ahead-behind and serialized status to play nicely together

  • 10: 78f398f ! 8: 2f1a56b status: serialize to path

    @@ t/t7522-serialized-status.sh: test_expect_success 'verify no-ahead-behind and se
     +	test_cmp expect output.1 &&
     +	test_cmp expect output.2
     +'
    ++
    ++test_expect_success 'renames' '
    ++	git init -b main rename_test &&
    ++	echo OLDNAME >rename_test/OLDNAME &&
    ++	git -C rename_test add OLDNAME &&
    ++	git -C rename_test commit -m OLDNAME &&
    ++	git -C rename_test mv OLDNAME NEWNAME &&
    ++	git -C rename_test status --serialize=renamed.dat >output.1 &&
    ++	echo DIRT >rename_test/DIRT &&
    ++	git -C rename_test status --deserialize=renamed.dat >output.2 &&
    ++	test_cmp output.1 output.2
    ++'
     +
      test_done
     
  • 11: dd0b7aa ! 9: 93b9bc1 status: reject deserialize in V2 and conflicts

    @@ t/t7522-serialized-status.sh: test_expect_success 'verify new --serialize=path m
     +
     +'
     +
    - test_done
    + test_expect_success 'renames' '
    + 	git init -b main rename_test &&
    + 	echo OLDNAME >rename_test/OLDNAME &&
     
      ## wt-status-deserialize.c ##
     @@ wt-status-deserialize.c: static int wt_deserialize_v1_header(struct wt_status *s, int fd)
  • 12: 9e7d3ad < -: ------------ status: fix rename reporting when using serialization cache

  • 13: 77244ef = 10: 5f442a0 serialize-status: serialize global and repo-local exclude file metadata

  • 14: 1223036 = 11: 6ffa59d status: deserialization wait

  • 15: 2d073bf = 12: c1a0bb5 merge-recursive: avoid confusing logic in was_dirty()

  • 16: 04cb50e = 13: c84347c merge-recursive: add some defensive coding to was_dirty()

  • 17: 34670c5 = 14: c5ede01 merge-recursive: teach was_dirty() about the virtualfilesystem

  • 18: 729dca6 = 15: 1c23682 status: deserialize with -uno does not print correct hint

  • 19: 710c2ba < -: ------------ wt-status-deserialize: fix crash when -v is used

  • 20: 48f42fb = 16: efd48f7 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 21: e293532 = 17: 564ca16 fsmonitor: add script for debugging and update script for tests

  • 22: 85f217e = 18: 9950ec7 status: disable deserialize when verbose output requested.

  • 23: addf61a = 19: 18c17cc t7524: add test for verbose status deserialzation

  • 24: f3c28b9 = 20: 9d94cac deserialize-status: silently fallback if we cannot read cache file

  • 25: 7fe52a0 = 21: f425609 gvfs:trace2:data: add trace2 tracing around read_object_process

  • 26: 3b4f859 = 22: 812cd94 gvfs:trace2:data: status deserialization information

  • 27: 8a6a57f = 23: 8bbc8dd gvfs:trace2:data: status serialization

  • 28: 8d8a0df = 24: 9a90f49 gvfs:trace2:data: add vfs stats

  • 29: e02707a = 25: 6b2f715 trace2: refactor setting process starting time

  • 30: 4c104d2 = 26: ca80307 trace2:gvfs:experiment: clear_ce_flags_1

  • 31: 46d3ebe = 27: 56d468f trace2:gvfs:experiment: report_tracking

  • 32: 318d6a8 = 28: 0821a67 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 33: be8ceb9 = 29: 744307a trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 34: 4970bab = 30: 5be3f52 trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 35: 01a5ecf = 31: c0cf3aa trace2:gvfs:experiment: add region around unpack_trees()

  • 36: 6841e43 = 32: 3c01fcf trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 37: 4bb5da6 = 33: e59177b trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 38: 38dd549 = 34: ca09e7b trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 39: 0d03322 = 35: d0ae6fb trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 40: 396bba5 = 36: 34b2103 Trace2:gvfs:experiment: capture more 'tracking' details

  • 41: 3f3afc0 = 37: 468476c credential: set trace2_child_class for credential manager children

  • 42: 9794732 = 38: 7d632b9 sub-process: do not borrow cmd pointer from caller

  • 43: 1527081 = 39: 16db96a sub-process: add subprocess_start_argv()

  • 44: e6289f3 = 40: 585c905 sha1-file: add function to update existing loose object cache

  • 45: dc3e62b = 41: f73d6ad packfile: add install_packed_git_and_mru()

  • 46: 6f52504 = 42: c6184ce index-pack: avoid immediate object fetch while parsing packfile

  • 47: 3ecfd05 ! 43: 2d8fe50 gvfs-helper: create tool to fetch objects using the GVFS Protocol

    @@ gvfs-helper.c (new)
     +	strbuf_complete(&buf_path, '/');
     +	strbuf_add(&buf_path, hex, 2);
     +
    -+	if (!file_exists(buf_path.buf) && mkdir(buf_path.buf, 0777) == -1) {
    ++	if (!file_exists(buf_path.buf) &&
    ++	    mkdir(buf_path.buf, 0777) == -1 &&
    ++		!file_exists(buf_path.buf)) {
     +		strbuf_addf(&status->error_message,
     +			    "cannot create directory for loose object '%s'",
     +			    buf_path.buf);
  • 48: c2a077d < -: ------------ gvfs-helper: fix race condition when creating loose object dirs

  • 49: f706a93 = 44: 71151db sha1-file: create shared-cache directory if it doesn't exist

  • 50: 743dbba = 45: 53f0fdc gvfs-helper: better handling of network errors

  • 51: 8c2a9ae = 46: ba63857 gvfs-helper-client: properly update loose cache with fetched OID

  • 52: 42c34ee = 47: 7b3dc22 gvfs-helper: V2 robust retry and throttling

  • 53: 5426f48 = 48: cbdc589 gvfs-helper: expose gvfs/objects GET and POST semantics

  • 54: 55859b9 = 49: cb4e128 gvfs-helper: dramatically reduce progress noise

  • 55: 914a531 = 50: f06bbe5 gvfs-helper-client.h: define struct object_id

  • 56: 50cf894 = 51: 58c525f gvfs-helper: handle pack-file after single POST request

  • 57: d813b86 = 52: d4947bb test-gvfs-prococol, t5799: tests for gvfs-helper

  • 58: 494fb4e = 53: 0d7bb9c gvfs-helper: move result-list construction into install functions

  • 59: 83a0ed0 = 54: 64394d5 t5799: add support for POST to return either a loose object or packfile

  • 60: e24de7c = 55: 89cc634 t5799: cleanup wc-l and grep-c lines

  • 61: a66b335 = 56: 4918990 gvfs-helper: verify loose objects after write

  • 62: fdf8c15 = 57: 01a6699 t7599: create corrupt blob test

  • 63: ec5b345 ! 58: 25a627d gvfs-helper: add prefetch support

    @@ gvfs-helper.c: static int create_loose_pathname_in_odb(struct strbuf *buf_path,
     -	gh__response_status__zero(status);
     +	strvec_push(&ip.args, "git");
     +	strvec_push(&ip.args, "index-pack");
    - 
    --	if (create_loose_pathname_in_odb(&buf_path, &params->loose_oid)) {
    --		strbuf_addf(&status->error_message,
    --			    "cannot create directory for loose object '%s'",
    --			    buf_path.buf);
    --		status->ec = GH__ERROR_CODE__COULD_NOT_CREATE_TEMPFILE;
    --		goto cleanup;
    -+	if (gh__cmd_opts.show_progress) {
    -+		strvec_push(&ip.args, "-v");
    -+		ip.err = 0;
    -+	} else {
    -+		ip.err = -1;
    -+		ip.no_stderr = 1;
    - 	}
    - 
    --	/* Remember the full path of the final destination. */
    --	strbuf_setlen(&params->loose_path, 0);
    --	strbuf_addbuf(&params->loose_path, &buf_path);
    ++
    ++	ip.err = -1;
    ++	ip.no_stderr = 1;
    ++
     +	/* Skip generating the rev index, we don't need it. */
     +	strvec_push(&ip.args, "--no-rev-index");
      
    --	/*
    --	 * Build a unique tempfile pathname based upon it.  We avoid
    --	 * using lockfiles to avoid issues with stale locks after
    --	 * crashes.
    --	 */
    --	strbuf_addf(&buf_path, ".%08u.%.06u.temp", getpid(), nth++);
    +-	if (create_loose_pathname_in_odb(&buf_path, &params->loose_oid)) {
     +	strvec_pushl(&ip.args, "-o", temp_path_idx->buf, NULL);
     +	strvec_push(&ip.args, temp_path_pack->buf);
     +	ip.no_stdin = 1;
     +	ip.out = -1;
    - 
    --	params->tempfile = create_tempfile(buf_path.buf);
    --	if (!params->tempfile) {
    --		strbuf_addstr(&status->error_message,
    --			      "could not create tempfile for loose object");
    --		status->ec = GH__ERROR_CODE__COULD_NOT_CREATE_TEMPFILE;
    ++
     +	if (pipe_command(&ip, NULL, 0, &ip_stdout, 0, NULL, 0)) {
     +		unlink(temp_path_pack->buf);
     +		unlink(temp_path_idx->buf);
    -+		strbuf_addf(&status->error_message,
    + 		strbuf_addf(&status->error_message,
    +-			    "cannot create directory for loose object '%s'",
    +-			    buf_path.buf);
    +-		status->ec = GH__ERROR_CODE__COULD_NOT_CREATE_TEMPFILE;
     +			    "index-pack failed on '%s'",
     +			    temp_path_pack->buf);
     +		/*
    @@ gvfs-helper.c: static int create_loose_pathname_in_odb(struct strbuf *buf_path,
      		goto cleanup;
      	}
      
    --	fdopen_tempfile(params->tempfile, "w");
    +-	/* Remember the full path of the final destination. */
    +-	strbuf_setlen(&params->loose_path, 0);
    +-	strbuf_addbuf(&params->loose_path, &buf_path);
     +	if (packfile_checksum) {
     +		/*
     +		 * stdout from index-pack should have the packfile hash.
    @@ gvfs-helper.c: static int create_loose_pathname_in_odb(struct strbuf *buf_path,
     +		 * TODO just the checksum ?
     +		 */
     +		strbuf_trim_trailing_newline(&ip_stdout);
    -+
    + 
    +-	/*
    +-	 * Build a unique tempfile pathname based upon it.  We avoid
    +-	 * using lockfiles to avoid issues with stale locks after
    +-	 * crashes.
    +-	 */
    +-	strbuf_addf(&buf_path, ".%08u.%.06u.temp", getpid(), nth++);
     +		strbuf_addbuf(packfile_checksum, &ip_stdout);
     +	}
      
    - cleanup:
    --	strbuf_release(&buf_path);
    +-	params->tempfile = create_tempfile(buf_path.buf);
    +-	if (!params->tempfile) {
    +-		strbuf_addstr(&status->error_message,
    +-			      "could not create tempfile for loose object");
    +-		status->ec = GH__ERROR_CODE__COULD_NOT_CREATE_TEMPFILE;
    +-		goto cleanup;
    ++cleanup:
     +	strbuf_release(&ip_stdout);
     +	child_process_clear(&ip);
     +}
    @@ gvfs-helper.c: static int create_loose_pathname_in_odb(struct strbuf *buf_path,
     +			    final_path_pack->buf);
     +		status->ec = GH__ERROR_CODE__COULD_NOT_INSTALL_PACKFILE;
     +		return;
    -+	}
    -+
    + 	}
    + 
    +-	fdopen_tempfile(params->tempfile, "w");
     +	if (params->result_list) {
     +		struct strbuf result_msg = STRBUF_INIT;
    -+
    + 
    +-cleanup:
    +-	strbuf_release(&buf_path);
     +		strbuf_addf(&result_msg, "packfile %s", final_filename->buf);
     +		string_list_append(params->result_list, result_msg.buf);
     +		strbuf_release(&result_msg);
    @@ gvfs-helper.c: static void create_tempfile_for_loose(
     -			    params->final_packfile_filename.buf);
     -		string_list_append(params->result_list, result_msg.buf);
     -		strbuf_release(&result_msg);
    ++	if (gh__cmd_opts.show_progress)
    ++		params->progress = start_progress("Installing prefetch packfiles", np);
    ++
     +	for (k = 0; k < np; k++) {
     +		extract_packfile_from_multipack(params, status, fd, k);
    ++		display_progress(params->progress, k + 1);
     +		if (status->ec != GH__ERROR_CODE__OK)
     +			break;
      	}
    ++	stop_progress(&params->progress);
      
      cleanup:
     -	child_process_clear(&ip);
  • 64: 6be1047 ! 59: ea0ea1d gvfs-helper: add prefetch .keep file for last packfile

    @@ gvfs-helper.c: static void install_prefetch(struct gh__request_params *params,
      	struct strbuf temp_path_mp = STRBUF_INIT;
      
     @@ gvfs-helper.c: static void install_prefetch(struct gh__request_params *params,
    - 		extract_packfile_from_multipack(params, status, fd, k);
    + 		display_progress(params->progress, k + 1);
      		if (status->ec != GH__ERROR_CODE__OK)
      			break;
     +		nr_installed++;
      	}
    + 	stop_progress(&params->progress);
      
     +	if (nr_installed)
     +		delete_stale_keep_files(params, status);
  • 65: f95ff51 = 60: 18381bc gvfs-helper: do one read in my_copy_fd_len_tail()

  • 66: 3e14e71 = 61: 7038203 gvfs-helper: move content-type warning for prefetch packs

  • 67: 583f17f = 62: ef15a48 fetch: use gvfs-helper prefetch under config

  • 68: 9c1c730 = 63: 27424f1 gvfs-helper: better support for concurrent packfile fetches

  • 69: ce24ebc = 64: 27f259d remote-curl: do not call fetch-pack when using gvfs-helper

  • 70: 6a244c1 = 65: be190a8 fetch: reprepare packs before checking connectivity

  • 71: 18c9fdb = 66: a6cc6ea gvfs-helper: retry when creating temp files

  • 72: 83dac6a = 67: 98c7fc4 sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 127: 333459c = 68: c278d2d gvfs-helper: add --max-retries to prefetch verb

  • 73: 21049ad = 69: 29bf38f upload-pack: fix race condition in error messages

  • 128: d5c0f80 = 70: 4789ead t5799: add tests to detect corrupt pack/idx files in prefetch

  • 74: 2a43699 = 71: 9bb38c1 maintenance: care about gvfs.sharedCache config

  • 129: 20ab67e = 72: 0c90bd1 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 75: 81bc140 = 73: 1bcf5e6 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 76: aee9749 ! 74: 6b2bc50 homebrew: add GitHub workflow to release Cask

    @@ .github/workflows/release-homebrew.yml (new)
     +jobs:
     +  release:
     +    runs-on: ubuntu-latest
    ++    environment: release
     +    steps:
     +    - id: version
     +      name: Compute version number
  • 77: 9f6c761 ! 75: 45fb60a Adding winget workflows

    @@ .github/workflows/release-winget.yml (new)
     +jobs:
     +  release:
     +    runs-on: windows-latest
    ++    environment: release
     +    steps:
     +      - name: Publish manifest with winget-create
     +        run: |
  • 78: a521998 < -: ------------ Add workflow for apt-get release

  • 79: f4b81fd = 76: 3d4eb22 Disable the monitor-components workflow in msft-git

  • 80: cd9f824 = 77: 5727637 .github: enable windows builds on microsoft fork

  • 81: cdd5bc5 ! 78: 7f57dd0 release: create initial Windows installer build workflow

    @@ .github/workflows/build-git-installers.yml (new)
     +  # Check prerequisites for the workflow
     +  prereqs:
     +    runs-on: ubuntu-latest
    ++    environment: release
     +    env:
     +      AZ_SUB: ${{ secrets.AZURE_SUBSCRIPTION }}
     +      AZ_CREDS: ${{ secrets.AZURE_CREDENTIALS }}
    @@ .github/workflows/build-git-installers.yml (new)
     +  # Build Windows installers (x86_64 installer & portable)
     +  windows_pkg:
     +    runs-on: windows-2019
    ++    environment: release
     +    needs: prereqs
     +    env:
     +      GPG_OPTIONS: "--batch --yes --no-tty --list-options no-show-photos --verify-options no-show-photos --pinentry-mode loopback"
    @@ .github/workflows/build-git-installers.yml (new)
     +          path: artifacts
     +  windows_artifacts:
     +    runs-on: windows-2019
    ++    environment: release
     +    needs: [prereqs, windows_pkg]
     +    env:
     +      HOME: "${{github.workspace}}\\home"
  • 82: 7969824 ! 79: 9a20dca release: add Mac OSX installer build

    @@ .github/workflows/build-git-installers.yml: jobs:
     +  osx_sign_payload:
     +    # ESRP service requires signing to run on Windows
     +    runs-on: windows-latest
    ++    environment: release
     +    needs: osx_build
     +    steps:
     +    - name: Check out repository
    @@ .github/workflows/build-git-installers.yml: jobs:
     +  osx_sign_and_notarize_pkg:
     +    # ESRP service requires signing to run on Windows
     +    runs-on: windows-latest
    ++    environment: release
     +    needs: osx_pack
     +    steps:
     +    - name: Check out repository
  • 83: 022e480 = 80: e8217c0 release: build unsigned Ubuntu .deb package

  • 84: 0f17d3c ! 81: f296625 release: add signing step for .deb package

    @@ .github/workflows/build-git-installers.yml: jobs:
     -  # End build unsigned Ubuntu package
     +  ubuntu_sign-artifacts:
     +    runs-on: windows-latest # Must be run on Windows due to ESRP executable OS compatibility
    ++    environment: release
     +    needs: [ubuntu_build, prereqs]
     +    if: needs.prereqs.outputs.deb_signable == 'true'
     +    env:
  • 89: 6b38cb0 = 82: b1fcf42 update-microsoft-git: create barebones builtin

  • 85: 803dbaf = 83: 202e7e0 release: create draft GitHub release with packages & installers

  • 91: ad9fc23 = 84: 724efc9 update-microsoft-git: Windows implementation

  • 86: fccfdbb = 85: d17b8b3 release: continue pestering until user upgrades

  • 93: 56d93aa = 86: 2b0ba8e update-microsoft-git: use brew on macOS

  • 87: b805c53 = 87: f8ddc79 Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 94: 6bccd6c = 88: 6ffeac2 .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 88: 1674a73 = 89: e0f96cd dist: archive HEAD instead of HEAD^{tree}

  • 95: a4e1fa4 = 90: f1d5af9 .github: update PULL_REQUEST_TEMPLATE.md

  • 90: a7adc2d = 91: 560b7d1 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 96: da13cf9 = 92: 82bcef4 Adjust README.md for microsoft/git

  • 92: 77ccd66 = 93: 1a310df release: add installer validation

  • 97: d8f7d65 = 94: c56e6ac scalar: implement a minimal JSON parser

  • 98: b74ca82 = 95: a97f3d5 scalar clone: support GVFS-enabled remote repositories

  • 99: 4047104 = 96: 0131e3e test-gvfs-protocol: also serve smart protocol

  • 100: 71eefa9 = 97: 49be8dc gvfs-helper: add the endpoint command

  • 101: 49a3921 = 98: 7d55f25 dir_inside_of(): handle directory separators correctly

  • 102: 5dae55c = 99: 19b9d34 scalar: disable authentication in unattended mode

  • 103: 9a68cc1 = 100: 647c068 scalar: do initialize gvfs.sharedCache

  • 104: f260392 = 101: e0fe88f scalar diagnose: include shared cache info

  • 105: 9035783 = 102: f75fc99 scalar: only try GVFS protocol on https:// URLs

  • 106: d5a4733 = 103: 9bf4193 scalar: verify that we can use a GVFS-enabled repository

  • 107: 50e4d0d = 104: 0ba37f7 scalar: add the cache-server command

  • 108: d66062e = 105: e0df12a scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 109: d855250 = 106: 15eb181 scalar: adjust documentation to the microsoft/git fork

  • 110: 8ead9e3 = 107: 6c74cc1 scalar: enable untracked cache unconditionally

  • 111: 9a2f49f = 108: af4fb72 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 112: 4c4a841 = 109: 31ff713 scalar diagnose: accommodate Scalar's Functional Tests

  • 113: 09623f3 = 110: 962cbf9 ci: run Scalar's Functional Tests

  • 114: e9b5395 = 111: cd1cd80 scalar: upgrade to newest FSMonitor config setting

  • 115: 5e8c31b = 112: cf958b9 setup: add discover_git_directory_reason()

  • 116: d4185ec = 113: 566881c scalar reconfigure: help users remove buggy repos

  • 117: cfb6795 = 114: 1e13ab8 abspath: make strip_last_path_component() global

  • 118: 0095742 = 115: 2736e7e scalar: .scalarCache should live above enlistment

  • 119: 05c96a4 = 116: a40340a scalar: add --no-src option

  • 120: a79e0b6 = 117: 5b4db8b add/rm: allow adding sparse entries when virtual

  • 121: 18e4364 = 118: 67fe9e3 repo-settings: enable sparse index by default

  • 122: da25f7f = 119: c474fcf diff(sparse-index): verify with partially-sparse

  • 123: 0f52704 = 120: 33f26b6 stash: expand testing for git stash -u

  • 124: 47cf200 = 121: 46663dc sparse: add vfs-specific precautions

  • 125: 47e4161 = 122: e166a2c maintenance: delete stale lock files

  • 126: 2eab49a = 123: 779c87c reset: fix mixed reset when using virtual filesystem

  • 130: 6ab087b < -: ------------ release: move secrets to workflow environment

  • 131: c6b4544 < -: ------------ release: remove pmc deployment workflow

  • 132: 4268011 < -: ------------ gvfs-helper: stop showing index-pack progress

  • 133: 7473e58 < -: ------------ gvfs-helper: show progress of multiple prefetch packs

Essentially a lot of squashing bug fixes and dropping the essentially-reverted release-apt-get workflow.

I stopped at that point, leaving more cleanups for later (e.g. dropping the v1/v2 of the serialized git status that is introduced and immediately dropped in the current version of the branch thicket). Hopefully moving a couple of little rocks every time we rebase to a new Git for Windows version will end up in a more manageable set of commits.

@dscho dscho marked this pull request as ready for review August 9, 2023 11:25
@derrickstolee
Copy link
Collaborator

@derrickstolee what do you think about upstreaming the following?

  • baadffbc0e6d94fa1af65e0a767c4f2efd703ff4

I don't have a copy of this (and neither does GitHub).

gitgitgadget#1569

I haven't yet, but will combine this with the --no-src changes.

This retry logic feels like something we do just to make our functional tests run with fewer flaky failures, not actually something that is valuable for the product. My current feeling is that we should not upstream this right now.

gitgitgadget#1570

@dscho
Copy link
Member Author

dscho commented Aug 9, 2023

@derrickstolee what do you think about upstreaming the following?

  • baadffbc0e6d94fa1af65e0a767c4f2efd703ff4

I don't have a copy of this (and neither does GitHub).

My apologies, this was a commit I rewrote multiple times during the rebasing. I meant 29bf38f

@derrickstolee
Copy link
Collaborator

@derrickstolee what do you think about upstreaming the following?

  • baadffbc0e6d94fa1af65e0a767c4f2efd703ff4

I don't have a copy of this (and neither does GitHub).

My apologies, this was a commit I rewrote multiple times during the rebasing. I meant 29bf38f

Thanks! I sent the patch upstream.

@dscho
Copy link
Member Author

dscho commented Aug 11, 2023

I force-pushed an update to -rc1.

Range-diff relative to the -rc0 rebase
  • 1: be80c70 = 1: 80ba2c8 reset --stdin: trim carriage return from the paths

  • 2: 018d58c ! 2: cd5d4de gvfs: start by adding the -gvfs suffix to the version

    @@ GIT-VERSION-GEN
      #!/bin/sh
      
      GVF=GIT-VERSION-FILE
    --DEF_VER=v2.42.0-rc0
    +-DEF_VER=v2.42.0-rc1
     +DEF_VER=v2.42.0.vfs.0.0
      
      LF='
  • 3: 147ddd8 = 3: 2db3907 gvfs: ensure that the version is based on a GVFS tag

  • 4: 514873d = 4: 36494d9 gvfs: add a GVFS-specific header file

  • 5: 562428f = 5: 621dc53 gvfs: add the core.gvfs config setting

  • 6: 0d6a6e7 = 6: a85c1cb gvfs: add the feature to skip writing the index' SHA-1

  • 7: bf82f65 = 7: b0c66c5 gvfs: add the feature that blobs may be missing

  • 8: 1981410 = 8: e35a4d8 gvfs: prevent files to be deleted outside the sparse checkout

  • 9: 3519fae = 9: d07f7a1 gvfs: optionally skip reachability checks/upload pack during fetch

  • 10: 229274a = 10: aa7cf7d gvfs: ensure all filters and EOL conversions are blocked

  • 11: 18db714 = 11: 9d5d70d gvfs: allow "virtualizing" objects

  • 12: cc42981 = 12: 66fc54e Hydrate missing loose objects in check_and_freshen()

  • 13: 0456a8a = 13: 564c2c4 sha1_file: when writing objects, skip the read_object_hook

  • 23: 18b98a1 = 14: 4ee053c gvfs: add global command pre and post hook procs

  • 24: 8cad13e = 15: 69c6bf9 t0400: verify that the hook is called correctly from a subdirectory

  • 25: d0029a3 = 16: 03e838b Pass PID of git process to hooks.

  • 26: e81e968 = 17: 52c0241 pre-command: always respect core.hooksPath

  • 27: 4528d3a = 18: 32d43fc sparse-checkout: update files with a modify/delete conflict

  • 28: 31d1fc8 = 19: 792f63b sparse-checkout: avoid writing entries with the skip-worktree bit

  • 29: d3de4b1 = 20: 8809b24 Do not remove files outside the sparse-checkout

  • 30: 0a3896d = 21: 205770b gvfs: refactor loading the core.gvfs config value

  • 31: 4d5ba02 = 22: 3f52c7d send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 32: f2adb2b = 23: f793bfd cache-tree: remove use of strbuf_addf in update_one

  • 33: 0ca561f = 24: c7fae10 gvfs: block unsupported commands when running in a GVFS repo

  • 34: 07e63ff = 25: 5321f03 worktree: allow in Scalar repositories

  • 35: c4a1090 = 26: 0596b53 gvfs: allow overriding core.gvfs

  • 36: a1edc39 = 27: d430e81 BRANCHES.md: Add explanation of branches and using forks

  • 37: 117d4e1 = 28: 0ef5064 Add virtual file system settings and hook proc

  • 38: 7816883 = 29: 580654b virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 39: c6b664a = 30: 115960d virtualfilesystem: check if directory is included

  • 40: f44724f = 31: e56ebd3 backwards-compatibility: support the post-indexchanged hook

  • 41: 2a9022f = 32: 8ee13ce gvfs: verify that the built-in FSMonitor is disabled

  • 42: 8dd3876 = 33: 6979cb3 status: add status serialization mechanism

  • 43: 4d2cf03 = 34: 2bad0f5 Teach ahead-behind and serialized status to play nicely together

  • 44: 2f1a56b = 35: 80958e2 status: serialize to path

  • 45: 93b9bc1 = 36: 2b79cef status: reject deserialize in V2 and conflicts

  • 46: 5f442a0 = 37: f69a8f3 serialize-status: serialize global and repo-local exclude file metadata

  • 47: 6ffa59d = 38: 13844b7 status: deserialization wait

  • 48: c1a0bb5 = 39: ef33eae merge-recursive: avoid confusing logic in was_dirty()

  • 49: c84347c = 40: ebefe9d merge-recursive: add some defensive coding to was_dirty()

  • 50: c5ede01 = 41: d46bd3b merge-recursive: teach was_dirty() about the virtualfilesystem

  • 51: 1c23682 = 42: 06903ac status: deserialize with -uno does not print correct hint

  • 52: efd48f7 = 43: 38b617d fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 53: 564ca16 = 44: 737fe7b fsmonitor: add script for debugging and update script for tests

  • 54: 9950ec7 = 45: a26bf97 status: disable deserialize when verbose output requested.

  • 55: 18c17cc = 46: 956db41 t7524: add test for verbose status deserialzation

  • 56: 9d94cac = 47: 6a7c558 deserialize-status: silently fallback if we cannot read cache file

  • 57: f425609 = 48: 2063428 gvfs:trace2:data: add trace2 tracing around read_object_process

  • 58: 812cd94 = 49: ad70c87 gvfs:trace2:data: status deserialization information

  • 59: 8bbc8dd = 50: b63ace4 gvfs:trace2:data: status serialization

  • 60: 9a90f49 = 51: f7675f2 gvfs:trace2:data: add vfs stats

  • 61: 6b2f715 = 52: 3802773 trace2: refactor setting process starting time

  • 62: ca80307 = 53: 66c1c92 trace2:gvfs:experiment: clear_ce_flags_1

  • 63: 56d468f = 54: e966eaf trace2:gvfs:experiment: report_tracking

  • 64: 0821a67 = 55: 626d3bd trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 65: 744307a = 56: 83516a5 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 66: 5be3f52 = 57: c74b0b0 trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 67: c0cf3aa = 58: 710ce55 trace2:gvfs:experiment: add region around unpack_trees()

  • 68: 3c01fcf = 59: 244e6f2 trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 69: e59177b = 60: c15f0c6 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 70: ca09e7b = 61: 850efaf trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 71: d0ae6fb = 62: f33e3c3 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 72: 34b2103 = 63: 10aaa06 Trace2:gvfs:experiment: capture more 'tracking' details

  • 73: 468476c = 64: c93f95f credential: set trace2_child_class for credential manager children

  • 74: 7d632b9 = 65: b4ea500 sub-process: do not borrow cmd pointer from caller

  • 75: 16db96a = 66: 7772891 sub-process: add subprocess_start_argv()

  • 76: 585c905 = 67: e9fd149 sha1-file: add function to update existing loose object cache

  • 77: f73d6ad = 68: 13e9c1d packfile: add install_packed_git_and_mru()

  • 78: c6184ce = 69: d676c82 index-pack: avoid immediate object fetch while parsing packfile

  • 79: 2d8fe50 = 70: c27948c gvfs-helper: create tool to fetch objects using the GVFS Protocol

  • 80: 71151db = 71: 1c79702 sha1-file: create shared-cache directory if it doesn't exist

  • 81: 53f0fdc = 72: 81826e4 gvfs-helper: better handling of network errors

  • 82: ba63857 = 73: 3b02e63 gvfs-helper-client: properly update loose cache with fetched OID

  • 83: 7b3dc22 = 74: 0e03263 gvfs-helper: V2 robust retry and throttling

  • 84: cbdc589 = 75: 076a696 gvfs-helper: expose gvfs/objects GET and POST semantics

  • 85: cb4e128 = 76: eebd96b gvfs-helper: dramatically reduce progress noise

  • 86: f06bbe5 = 77: 2f4100a gvfs-helper-client.h: define struct object_id

  • 87: 58c525f = 78: 276e3a5 gvfs-helper: handle pack-file after single POST request

  • 88: d4947bb = 79: aa8b81c test-gvfs-prococol, t5799: tests for gvfs-helper

  • 89: 0d7bb9c = 80: afe2706 gvfs-helper: move result-list construction into install functions

  • 90: 64394d5 = 81: 25b0141 t5799: add support for POST to return either a loose object or packfile

  • 91: 89cc634 = 82: 0e6b5b7 t5799: cleanup wc-l and grep-c lines

  • 92: 4918990 = 83: 4a59bb5 gvfs-helper: verify loose objects after write

  • 93: 01a6699 = 84: c59b913 t7599: create corrupt blob test

  • 94: 25a627d = 85: bb23648 gvfs-helper: add prefetch support

  • 95: ea0ea1d = 86: 09758b9 gvfs-helper: add prefetch .keep file for last packfile

  • 96: 18381bc = 87: 309c9c1 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 97: 7038203 = 88: e4c7854 gvfs-helper: move content-type warning for prefetch packs

  • 98: ef15a48 = 89: 6e7ddef fetch: use gvfs-helper prefetch under config

  • 99: 27424f1 = 90: 5bd8181 gvfs-helper: better support for concurrent packfile fetches

  • 100: 27f259d = 91: 4040ada remote-curl: do not call fetch-pack when using gvfs-helper

  • 101: be190a8 = 92: e144498 fetch: reprepare packs before checking connectivity

  • 102: a6cc6ea = 93: 4b0160c gvfs-helper: retry when creating temp files

  • 103: 98c7fc4 = 94: 1c3fbb6 sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 105: 29bf38f = 95: 5525bf7 upload-pack: fix race condition in error messages

  • 107: 9bb38c1 = 96: a4783c4 maintenance: care about gvfs.sharedCache config

  • 109: 1bcf5e6 = 97: 8075b2b unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 110: 6b2bc50 = 98: aac49f9 homebrew: add GitHub workflow to release Cask

  • 111: 45fb60a = 99: c5bd89e Adding winget workflows

  • 112: 3d4eb22 = 100: d90ea94 Disable the monitor-components workflow in msft-git

  • 113: 5727637 = 101: 9e2b300 .github: enable windows builds on microsoft fork

  • 114: 7f57dd0 = 102: 644db9b release: create initial Windows installer build workflow

  • 104: c278d2d = 103: cf9ceb6 gvfs-helper: add --max-retries to prefetch verb

  • 115: 9a20dca = 104: b1983ce release: add Mac OSX installer build

  • 106: 4789ead = 105: fa7358e t5799: add tests to detect corrupt pack/idx files in prefetch

  • 116: e8217c0 = 106: 5d27088 release: build unsigned Ubuntu .deb package

  • 108: 0c90bd1 = 107: f7e98bd gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 117: f296625 = 108: 269bfa3 release: add signing step for .deb package

  • 118: b1fcf42 = 109: 22fe8c8 update-microsoft-git: create barebones builtin

  • 119: 202e7e0 = 110: 4c66352 release: create draft GitHub release with packages & installers

  • 120: 724efc9 = 111: 4c95d63 update-microsoft-git: Windows implementation

  • 121: d17b8b3 = 112: 71c0000 release: continue pestering until user upgrades

  • 122: 2b0ba8e = 113: 9703a97 update-microsoft-git: use brew on macOS

  • 123: f8ddc79 = 114: b4e666a Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 124: 6ffeac2 = 115: 50a45c8 .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 125: e0f96cd = 116: f0c9458 dist: archive HEAD instead of HEAD^{tree}

  • 14: 7bfa5bd = 117: c5805b8 git_config_set_multivar_in_file_gently(): add a lock timeout

  • 126: f1d5af9 = 118: b36790e .github: update PULL_REQUEST_TEMPLATE.md

  • 127: 560b7d1 = 119: b1bae85 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 15: 6741209 = 120: fe69bd7 scalar: set the config write-lock timeout to 150ms

  • 128: 82bcef4 = 121: ce502b6 Adjust README.md for microsoft/git

  • 129: 1a310df = 122: 8e105c4 release: add installer validation

  • 16: eee5cfb = 123: 5c36fc5 scalar: add docs from microsoft/scalar

  • 17: fce069d = 124: b73a701 scalar (Windows): use forward slashes as directory separators

  • 18: d597758 = 125: d2ed421 scalar: add retry logic to run_git()

  • 19: 6884840 = 126: 9e7c052 scalar: support the config command for backwards compatibility

  • 130: c56e6ac = 127: f2b8b6f scalar: implement a minimal JSON parser

  • 131: a97f3d5 = 128: f620ce1 scalar clone: support GVFS-enabled remote repositories

  • 132: 0131e3e = 129: d3ecd8a test-gvfs-protocol: also serve smart protocol

  • 133: 49be8dc = 130: aeb961f gvfs-helper: add the endpoint command

  • 134: 7d55f25 = 131: a1a0063 dir_inside_of(): handle directory separators correctly

  • 135: 19b9d34 = 132: 76edaf9 scalar: disable authentication in unattended mode

  • 136: 647c068 = 133: e8fefe1 scalar: do initialize gvfs.sharedCache

  • 137: e0fe88f = 134: e5cc4cf scalar diagnose: include shared cache info

  • 138: f75fc99 = 135: 919a59f scalar: only try GVFS protocol on https:// URLs

  • 139: 9bf4193 = 136: 1145f87 scalar: verify that we can use a GVFS-enabled repository

  • 140: 0ba37f7 = 137: aeea129 scalar: add the cache-server command

  • 141: e0df12a = 138: 1486051 scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 142: 15eb181 = 139: 3c0ca71 scalar: adjust documentation to the microsoft/git fork

  • 143: 6c74cc1 = 140: 6388268 scalar: enable untracked cache unconditionally

  • 144: af4fb72 = 141: 11a9453 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 145: 31ff713 = 142: ce88091 scalar diagnose: accommodate Scalar's Functional Tests

  • 146: 962cbf9 = 143: a80f7f5 ci: run Scalar's Functional Tests

  • 147: cd1cd80 = 144: 8af3a48 scalar: upgrade to newest FSMonitor config setting

  • 148: cf958b9 = 145: c2414d2 setup: add discover_git_directory_reason()

  • 149: 566881c = 146: 16e2ac1 scalar reconfigure: help users remove buggy repos

  • 150: 1e13ab8 = 147: 21d23dc abspath: make strip_last_path_component() global

  • 151: 2736e7e = 148: d164fc5 scalar: .scalarCache should live above enlistment

  • 152: a40340a = 149: 92b5a84 scalar: add --no-src option

  • 153: 5b4db8b = 150: 6324cc9 add/rm: allow adding sparse entries when virtual

  • 20: 009f63f = 151: ccad300 sparse-checkout: add config to disable deleting dirs

  • 21: 53d2460 = 152: 0c9e330 diff: ignore sparse paths in diffstat

  • 154: 67fe9e3 = 153: a54ae44 repo-settings: enable sparse index by default

  • 155: c474fcf = 154: 99405a1 diff(sparse-index): verify with partially-sparse

  • 156: 33f26b6 = 155: d833cad stash: expand testing for git stash -u

  • 22: 1915faf = 156: 2fc6bc2 sequencer: avoid progress when stderr is redirected

  • 157: 46663dc = 157: 87955d7 sparse: add vfs-specific precautions

  • 158: e166a2c = 158: f13225f maintenance: delete stale lock files

  • 159: 779c87c = 159: 6a3500a reset: fix mixed reset when using virtual filesystem

Nicely "boring".

@dscho
Copy link
Member Author

dscho commented Aug 16, 2023

Range-diff relative to the -rc1 rebase
  • 1: 80ba2c8 = 1: 6937c7d reset --stdin: trim carriage return from the paths

  • 2: cd5d4de ! 2: 3bcd88b gvfs: start by adding the -gvfs suffix to the version

    @@ GIT-VERSION-GEN
      #!/bin/sh
      
      GVF=GIT-VERSION-FILE
    --DEF_VER=v2.42.0-rc1
    +-DEF_VER=v2.42.0-rc2
     +DEF_VER=v2.42.0.vfs.0.0
      
      LF='
  • 3: 2db3907 = 3: 3233d29 gvfs: ensure that the version is based on a GVFS tag

  • 4: 36494d9 = 4: ab52f78 gvfs: add a GVFS-specific header file

  • 5: 621dc53 = 5: b8be635 gvfs: add the core.gvfs config setting

  • 6: a85c1cb = 6: 35a51e2 gvfs: add the feature to skip writing the index' SHA-1

  • 7: b0c66c5 = 7: 3dfe775 gvfs: add the feature that blobs may be missing

  • 8: e35a4d8 = 8: b38ee00 gvfs: prevent files to be deleted outside the sparse checkout

  • 9: d07f7a1 = 9: 3f3e5e5 gvfs: optionally skip reachability checks/upload pack during fetch

  • 10: aa7cf7d = 10: d31f203 gvfs: ensure all filters and EOL conversions are blocked

  • 11: 9d5d70d = 11: e491c47 gvfs: allow "virtualizing" objects

  • 12: 66fc54e = 12: 8fad608 Hydrate missing loose objects in check_and_freshen()

  • 13: 564c2c4 = 13: 6981fb9 sha1_file: when writing objects, skip the read_object_hook

  • 14: 4ee053c = 14: 679487b gvfs: add global command pre and post hook procs

  • 15: 69c6bf9 = 15: aa36eb9 t0400: verify that the hook is called correctly from a subdirectory

  • 16: 03e838b = 16: 044b044 Pass PID of git process to hooks.

  • 17: 52c0241 = 17: 13c0f30 pre-command: always respect core.hooksPath

  • 18: 32d43fc = 18: 446921d sparse-checkout: update files with a modify/delete conflict

  • 19: 792f63b = 19: 3a67219 sparse-checkout: avoid writing entries with the skip-worktree bit

  • 20: 8809b24 = 20: db575fc Do not remove files outside the sparse-checkout

  • 21: 205770b = 21: 3d0d634 gvfs: refactor loading the core.gvfs config value

  • 22: 3f52c7d = 22: 628cfd9 send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 23: f793bfd = 23: e10789f cache-tree: remove use of strbuf_addf in update_one

  • 24: c7fae10 = 24: f8df5ef gvfs: block unsupported commands when running in a GVFS repo

  • 25: 5321f03 = 25: 3f45c8d worktree: allow in Scalar repositories

  • 26: 0596b53 = 26: 7da1e70 gvfs: allow overriding core.gvfs

  • 27: d430e81 = 27: 8fe82ea BRANCHES.md: Add explanation of branches and using forks

  • 28: 0ef5064 = 28: 0f09f76 Add virtual file system settings and hook proc

  • 29: 580654b = 29: 2d53f3e virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 30: 115960d = 30: 6f98fe8 virtualfilesystem: check if directory is included

  • 31: e56ebd3 = 31: 630f40c backwards-compatibility: support the post-indexchanged hook

  • 32: 8ee13ce = 32: 17284f2 gvfs: verify that the built-in FSMonitor is disabled

  • 33: 6979cb3 = 33: 160f12e status: add status serialization mechanism

  • 34: 2bad0f5 = 34: 9fd19ba Teach ahead-behind and serialized status to play nicely together

  • 35: 80958e2 = 35: 653160a status: serialize to path

  • 36: 2b79cef = 36: 61fb8b2 status: reject deserialize in V2 and conflicts

  • 37: f69a8f3 = 37: 4180c3f serialize-status: serialize global and repo-local exclude file metadata

  • 38: 13844b7 = 38: f461d66 status: deserialization wait

  • 39: ef33eae = 39: 2b8f4e3 merge-recursive: avoid confusing logic in was_dirty()

  • 40: ebefe9d = 40: 33fc523 merge-recursive: add some defensive coding to was_dirty()

  • 41: d46bd3b = 41: 27e71b8 merge-recursive: teach was_dirty() about the virtualfilesystem

  • 42: 06903ac = 42: fc08868 status: deserialize with -uno does not print correct hint

  • 43: 38b617d = 43: 3210a94 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 44: 737fe7b = 44: 2d2dbb2 fsmonitor: add script for debugging and update script for tests

  • 45: a26bf97 = 45: 5a8107c status: disable deserialize when verbose output requested.

  • 46: 956db41 = 46: 7b1c084 t7524: add test for verbose status deserialzation

  • 47: 6a7c558 = 47: 03f2efc deserialize-status: silently fallback if we cannot read cache file

  • 48: 2063428 = 48: fdee097 gvfs:trace2:data: add trace2 tracing around read_object_process

  • 49: ad70c87 = 49: dc2a957 gvfs:trace2:data: status deserialization information

  • 50: b63ace4 = 50: c1e7a38 gvfs:trace2:data: status serialization

  • 51: f7675f2 = 51: 2ab6cc1 gvfs:trace2:data: add vfs stats

  • 52: 3802773 = 52: 17608ad trace2: refactor setting process starting time

  • 53: 66c1c92 = 53: 4dbcd2b trace2:gvfs:experiment: clear_ce_flags_1

  • 54: e966eaf = 54: 49cc9e6 trace2:gvfs:experiment: report_tracking

  • 55: 626d3bd = 55: 5ebd8cb trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 56: 83516a5 = 56: d3165f0 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 57: c74b0b0 = 57: 1f056e8 trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 58: 710ce55 = 58: 8d5bb91 trace2:gvfs:experiment: add region around unpack_trees()

  • 59: 244e6f2 = 59: 2cb55c2 trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 60: c15f0c6 = 60: fa4bfcf trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 61: 850efaf = 61: a34ca03 trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 62: f33e3c3 = 62: edd8df7 trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 63: 10aaa06 = 63: 3be334e Trace2:gvfs:experiment: capture more 'tracking' details

  • 64: c93f95f = 64: 34caf2a credential: set trace2_child_class for credential manager children

  • 65: b4ea500 = 65: 817cf58 sub-process: do not borrow cmd pointer from caller

  • 66: 7772891 = 66: d7ba07f sub-process: add subprocess_start_argv()

  • 67: e9fd149 = 67: 8667c31 sha1-file: add function to update existing loose object cache

  • 68: 13e9c1d = 68: 98f37e6 packfile: add install_packed_git_and_mru()

  • 69: d676c82 = 69: dbacef4 index-pack: avoid immediate object fetch while parsing packfile

  • 70: c27948c = 70: b12fd68 gvfs-helper: create tool to fetch objects using the GVFS Protocol

  • 71: 1c79702 = 71: 72a1c47 sha1-file: create shared-cache directory if it doesn't exist

  • 72: 81826e4 = 72: e684ee3 gvfs-helper: better handling of network errors

  • 73: 3b02e63 = 73: a98ea5a gvfs-helper-client: properly update loose cache with fetched OID

  • 74: 0e03263 = 74: eb83288 gvfs-helper: V2 robust retry and throttling

  • 75: 076a696 = 75: 1072daf gvfs-helper: expose gvfs/objects GET and POST semantics

  • 76: eebd96b = 76: 052677c gvfs-helper: dramatically reduce progress noise

  • 77: 2f4100a = 77: 6d95e3c gvfs-helper-client.h: define struct object_id

  • 78: 276e3a5 = 78: 71bf3e5 gvfs-helper: handle pack-file after single POST request

  • 79: aa8b81c = 79: d497996 test-gvfs-prococol, t5799: tests for gvfs-helper

  • 80: afe2706 = 80: 3b7482f gvfs-helper: move result-list construction into install functions

  • 81: 25b0141 = 81: becf5fc t5799: add support for POST to return either a loose object or packfile

  • 82: 0e6b5b7 = 82: 1eb0318 t5799: cleanup wc-l and grep-c lines

  • 83: 4a59bb5 = 83: d3df430 gvfs-helper: verify loose objects after write

  • 84: c59b913 = 84: b5834fb t7599: create corrupt blob test

  • 85: bb23648 = 85: c94e756 gvfs-helper: add prefetch support

  • 86: 09758b9 = 86: a942242 gvfs-helper: add prefetch .keep file for last packfile

  • 87: 309c9c1 = 87: fe82c18 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 88: e4c7854 = 88: d77fdb2 gvfs-helper: move content-type warning for prefetch packs

  • 89: 6e7ddef = 89: de04271 fetch: use gvfs-helper prefetch under config

  • 90: 5bd8181 = 90: dc5437a gvfs-helper: better support for concurrent packfile fetches

  • 91: 4040ada = 91: 5dfb90a remote-curl: do not call fetch-pack when using gvfs-helper

  • 92: e144498 = 92: ae2bfbb fetch: reprepare packs before checking connectivity

  • 93: 4b0160c = 93: f8e64f0 gvfs-helper: retry when creating temp files

  • 94: 1c3fbb6 = 94: 3aaf59f sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 103: cf9ceb6 = 95: 7edae5f gvfs-helper: add --max-retries to prefetch verb

  • 105: fa7358e = 96: dffcd89 t5799: add tests to detect corrupt pack/idx files in prefetch

  • 107: f7e98bd = 97: 34759a3 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 95: 5525bf7 = 98: 59f87c6 upload-pack: fix race condition in error messages

  • 96: a4783c4 = 99: 82c6b97 maintenance: care about gvfs.sharedCache config

  • 97: 8075b2b = 100: 8316e7e unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 98: aac49f9 = 101: 226ddca homebrew: add GitHub workflow to release Cask

  • 99: c5bd89e = 102: f08193e Adding winget workflows

  • 100: d90ea94 = 103: fe81c65 Disable the monitor-components workflow in msft-git

  • 101: 9e2b300 = 104: 96dfa5d .github: enable windows builds on microsoft fork

  • 102: 644db9b = 105: a21bd0e release: create initial Windows installer build workflow

  • 104: b1983ce = 106: 3b1bda7 release: add Mac OSX installer build

  • 106: 5d27088 = 107: e213318 release: build unsigned Ubuntu .deb package

  • 108: 269bfa3 = 108: c4971bf release: add signing step for .deb package

  • 110: 4c66352 = 109: 0572712 release: create draft GitHub release with packages & installers

  • 112: 71c0000 = 110: e7d9b70 release: continue pestering until user upgrades

  • 114: b4e666a = 111: 46350b5 Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 116: f0c9458 = 112: fe53f2b dist: archive HEAD instead of HEAD^{tree}

  • 109: 22fe8c8 = 113: 76ac51b update-microsoft-git: create barebones builtin

  • 119: b1bae85 = 114: 2f718f4 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 111: 4c95d63 = 115: 3314bc9 update-microsoft-git: Windows implementation

  • 122: 8e105c4 = 116: 77852df release: add installer validation

  • 117: c5805b8 = 117: 01cea13 git_config_set_multivar_in_file_gently(): add a lock timeout

  • 120: fe69bd7 = 118: 98ddcd6 scalar: set the config write-lock timeout to 150ms

  • 123: 5c36fc5 = 119: c513be1 scalar: add docs from microsoft/scalar

  • 113: 9703a97 = 120: b25d831 update-microsoft-git: use brew on macOS

  • 115: 50a45c8 = 121: 9e36410 .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 124: b73a701 = 122: 6ebdf99 scalar (Windows): use forward slashes as directory separators

  • 118: b36790e = 123: 5796514 .github: update PULL_REQUEST_TEMPLATE.md

  • 125: d2ed421 = 124: 00c45d8 scalar: add retry logic to run_git()

  • 121: ce502b6 = 125: b16e704 Adjust README.md for microsoft/git

  • 126: 9e7c052 = 126: 8994a2e scalar: support the config command for backwards compatibility

  • 127: f2b8b6f = 127: 4d0e637 scalar: implement a minimal JSON parser

  • 128: f620ce1 = 128: fb604d2 scalar clone: support GVFS-enabled remote repositories

  • 129: d3ecd8a = 129: 5165a4e test-gvfs-protocol: also serve smart protocol

  • 130: aeb961f = 130: d3620e3 gvfs-helper: add the endpoint command

  • 131: a1a0063 = 131: 50c9bbe dir_inside_of(): handle directory separators correctly

  • 132: 76edaf9 = 132: dfcae4d scalar: disable authentication in unattended mode

  • 133: e8fefe1 = 133: 27fe81e scalar: do initialize gvfs.sharedCache

  • 134: e5cc4cf = 134: 3fdc7cc scalar diagnose: include shared cache info

  • 135: 919a59f = 135: f04ab23 scalar: only try GVFS protocol on https:// URLs

  • 136: 1145f87 = 136: 94b2296 scalar: verify that we can use a GVFS-enabled repository

  • 137: aeea129 = 137: db4c4b9 scalar: add the cache-server command

  • 138: 1486051 = 138: 55bd839 scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 139: 3c0ca71 = 139: b8e2cf2 scalar: adjust documentation to the microsoft/git fork

  • 140: 6388268 = 140: 76cdd2e scalar: enable untracked cache unconditionally

  • 141: 11a9453 = 141: 423eda2 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 142: ce88091 = 142: e999a92 scalar diagnose: accommodate Scalar's Functional Tests

  • 143: a80f7f5 = 143: 16f7c7b ci: run Scalar's Functional Tests

  • 144: 8af3a48 = 144: 71d3adc scalar: upgrade to newest FSMonitor config setting

  • 145: c2414d2 = 145: b947801 setup: add discover_git_directory_reason()

  • 146: 16e2ac1 = 146: 4148f4c scalar reconfigure: help users remove buggy repos

  • 147: 21d23dc = 147: d0a6222 abspath: make strip_last_path_component() global

  • 148: d164fc5 = 148: 1d252e9 scalar: .scalarCache should live above enlistment

  • 149: 92b5a84 = 149: 3c6da6a scalar: add --no-src option

  • 151: ccad300 = 150: f6470e9 sparse-checkout: add config to disable deleting dirs

  • 150: 6324cc9 = 151: d6c3788 add/rm: allow adding sparse entries when virtual

  • 152: 0c9e330 = 152: 0d78437 diff: ignore sparse paths in diffstat

  • 153: a54ae44 = 153: 8fa488c repo-settings: enable sparse index by default

  • 154: 99405a1 = 154: 0babcd2 diff(sparse-index): verify with partially-sparse

  • 155: d833cad = 155: 106c834 stash: expand testing for git stash -u

  • 156: 2fc6bc2 = 156: adaf964 sequencer: avoid progress when stderr is redirected

  • 157: 87955d7 = 157: 065e202 sparse: add vfs-specific precautions

  • 158: f13225f = 158: 03bffd9 maintenance: delete stale lock files

  • 159: 6a3500a = 159: ac48057 reset: fix mixed reset when using virtual filesystem

  • -: ------------ > 160: ee465a1 maintenance: add get_random_minute()

  • -: ------------ > 161: 7377734 maintenance: use random minute in launchctl scheduler

  • -: ------------ > 162: b731f74 maintenance: use random minute in Windows scheduler

  • -: ------------ > 163: 040f70b maintenance: use random minute in cron scheduler

  • -: ------------ > 164: 5d6c56c maintenance: swap method locations

  • -: ------------ > 165: 18e72e8 maintenance: use random minute in systemd scheduler

  • -: ------------ > 166: b896f1d maintenance: fix systemd schedule overlaps

  • -: ------------ > 167: 7233c62 maintenance: update schedule before config

The only notable aspect is that I integrated #597.

@derrickstolee
Copy link
Collaborator

@dscho: I think you missed #594 in the latest rebase? Sorry for the changes happening at the same time as the release window.

@dscho
Copy link
Member Author

dscho commented Aug 17, 2023

@dscho: I think you missed #594 in the latest rebase?

@derrickstolee I did not ;-) Those changes are part of the squashes/clean-ups I mentioned earlier:

63: ec5b345 ! 58: 25a627d gvfs-helper: add prefetch support

@@ gvfs-helper.c: static int create_loose_pathname_in_odb(struct strbuf *buf_path,
 -	gh__response_status__zero(status);
 +	strvec_push(&ip.args, "git");
 +	strvec_push(&ip.args, "index-pack");
- 
--	if (create_loose_pathname_in_odb(&buf_path, &params->loose_oid)) {
--		strbuf_addf(&status->error_message,
--			    "cannot create directory for loose object '%s'",
--			    buf_path.buf);
--		status->ec = GH__ERROR_CODE__COULD_NOT_CREATE_TEMPFILE;
--		goto cleanup;
-+	if (gh__cmd_opts.show_progress) {
-+		strvec_push(&ip.args, "-v");
-+		ip.err = 0;
-+	} else {
-+		ip.err = -1;
-+		ip.no_stderr = 1;
- 	}
- 
--	/* Remember the full path of the final destination. */
--	strbuf_setlen(&params->loose_path, 0);
--	strbuf_addbuf(&params->loose_path, &buf_path);
++
++	ip.err = -1;
++	ip.no_stderr = 1;
++
 +	/* Skip generating the rev index, we don't need it. */
 +	strvec_push(&ip.args, "--no-rev-index");

corresponds to 4c999ac and

@@ gvfs-helper.c: static void create_tempfile_for_loose(
 -			    params->final_packfile_filename.buf);
 -		string_list_append(params->result_list, result_msg.buf);
 -		strbuf_release(&result_msg);
++	if (gh__cmd_opts.show_progress)
++		params->progress = start_progress("Installing prefetch packfiles", np);
++
 +	for (k = 0; k < np; k++) {
 +		extract_packfile_from_multipack(params, status, fd, k);
++		display_progress(params->progress, k + 1);
 +		if (status->ec != GH__ERROR_CODE__OK)
 +			break;
  	}
++	stop_progress(&params->progress);

in the same commit pair corresponds to 3981c02.

Sorry for the changes happening at the same time as the release window.

No need to apologize, this is par for the course. I wouldn't have wanted you to do it any other way, and I gladly picked up the changes and incorporated them manually.

@derrickstolee
Copy link
Collaborator

Thanks, @dscho. I was looking for commit names, not realizing that you had squashed them in an earlier version.

Kevin Willford and others added 13 commits August 21, 2023 20:25
While using the reset --stdin feature on windows path added may have a
\r at the end of the path that wasn't getting removed so didn't match
the path in the index and wasn't reset.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
Signed-off-by: Saeed Noursalehi <sanoursa@microsoft.com>
Since we really want to be based on a `.vfs.*` tag, let's make sure that
there was a new-enough one, i.e. one that agrees with the first three
version numbers of the recorded default version.

This prevents e.g. v2.22.0.vfs.0.<some-huge-number>.<commit> from being
used when the current release train was not yet tagged.

It is important to get the first three numbers of the version right
because e.g. Scalar makes decisions depending on those (such as assuming
that the `git maintenance` built-in is not available, even though it
actually _is_ available).

Signed-off-by: Johannes Schindelin <johasc@microsoft.com>
This header file will accumulate GVFS-specific definitions.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
This does not do anything yet. The next patches will add various values
for that config setting that correspond to the various features
offered/required by GVFS.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
This takes a substantial amount of time, and if the user is reasonably
sure that the files' integrity is not compromised, that time can be saved.

Git no longer verifies the SHA-1 by default, anyway.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>

Update for 2023-02-27: This feature was upstreamed as the index.skipHash
config option. This resulted in some changes to the struct and some of
the setup code. In particular, the config reading was moved to
prepare_repo_settings(), so the core.gvfs bit check was moved there,
too.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Kevin Willford <kewillf@microsoft.com>
Prevent the sparse checkout to delete files that were marked with
skip-worktree bit and are not in the sparse-checkout file.

This is because everything with the skip-worktree bit turned on is being
virtualized and will be removed with the change of HEAD.

There was only one failing test when running with these changes that was
checking to make sure the worktree narrows on checkout which was
expected since we would no longer be narrowing the worktree.

Update 2022-04-05: temporarily set 'sparse.expectfilesoutsideofpatterns' in
test (until we start disabling the "remove present-despite-SKIP_WORKTREE"
behavior with 'core.virtualfilesystem' in a later commit).

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
While performing a fetch with a virtual file system we know that there
will be missing objects and we don't want to download them just because
of the reachability of the commits.  We also don't want to download a
pack file with commits, trees, and blobs since these will be downloaded
on demand.

This flag will skip the first connectivity check and by returning zero
will skip the upload pack. It will also skip the second connectivity
check but continue to update the branches to the latest commit ids.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
This adds hard-coded call to GVFS.hooks.exe before and after each Git
command runs.

To make sure that this is only called on repositories cloned with GVFS, we
test for the tell-tale .gvfs.

2021-10-30: Recent movement of find_hook() to hook.c required moving these
changes out of run-command.c to hook.c.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
Ensure all filters and EOL conversions are blocked when running under
GVFS so that our projected file sizes will match the actual file size
when it is hydrated on the local machine.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
Suggested by Ben Peart.

Signed-off-by: Johannes Schindelin <johasc@microsoft.com>
The idea is to allow blob objects to be missing from the local repository,
and to load them lazily on demand.

After discussing this idea on the mailing list, we will rename the feature
to "lazy clone" and work more on this.

Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
derrickstolee and others added 16 commits August 23, 2023 10:56
When we initially created background maintenance -- with its hourly,
daily, and weekly schedules -- we considered the effects of all clients
launching fetches to the server every hour on the hour. The worry of
DDoSing server hosts was noted, but left as something we would consider
for a future update.

As background maintenance has gained more adoption over the past three
years, our worries about DDoSing the big Git hosts has been unfounded.
Those systems, especially those serving public repositories, are already
resilient to thundering herds of much smaller scale.

However, sometimes organizations spin up specific custom server
infrastructure either in addition to or on top of their Git host. Some
of these technologies are built for a different range of scale, and can
hit concurrency limits sooner. Organizations with such custom
infrastructures are more likely to recommend tools like `scalar` which
furthers their adoption of background maintenance.

To help solve for this, create get_random_minute() as a method to help
Git select a random minute when creating schedules in the future. The
integrations with this method do not yet exist, but will follow in
future changes.

To avoid multiple sources of randomness in the Git codebase, create a
new helper function, git_rand(), that returns a random uint32_t. This is
similar to how rand() returns a random nonnegative value, except it is
based on csprng_bytes() which is cryptographic and will return values
larger than RAND_MAX.

One thing that is important for testability is that we notice when we
are under a test scenario and return a predictable result. The schedules
themselves are not checked for this value, but at least one launchctl
test checks that we do not unnecessarily reboot the schedule if it has
not changed from a previous version.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
The get_random_minute() method was created to allow maintenance
schedules to be fixed to a random minute of the hour. This randomness is
only intended to spread out the load from a number of clients, but each
client should have an hour between each maintenance cycle.

Use get_random_minute() when constructing the schedules for launchctl.

The format already includes a 'Minute' key which is modified from 0 to
the random minute.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
The get_random_minute() method was created to allow maintenance
schedules to be fixed to a random minute of the hour. This randomness is
only intended to spread out the load from a number of clients, but each
client should have an hour between each maintenance cycle.

Add this random minute to the Windows scheduler integration.

We need only to modify the minute value for the 'StartBoundary' tag
across the three schedules.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
The get_random_minute() method was created to allow maintenance
schedules to be fixed to a random minute of the hour. This randomness is
only intended to spread out the load from a number of clients, but each
client should have an hour between each maintenance cycle.

Add this random minute to the cron integration.

The cron schedule specification starts with a minute indicator, which
was previously inserted as the "0" string but now takes the given minute
as an integer parameter.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
The systemd_timer_write_unit_templates() method writes a single template
that is then used to start the hourly, daily, and weekly schedules with
systemd.

However, in order to schedule systemd maintenance on a given minute,
these templates need to be replaced with specific schedules for each of
these jobs.

Before modifying the schedules, move the writing method above the
systemd_timer_enable_unit() method, so we can write a specific schedule
for each unit.

The diff is computed smaller by showing systemd_timer_enable_unit() and
systemd_timer_delete_units()  move instead of
systemd_timer_write_unit_templates() and
systemd_timer_delete_unit_templates().

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
…s remove buggy repos

When running 'scalar reconfigure -a', such as at install time, Scalar
has warning messages about the repository missing (or not containing a
.git directory). Failures can also happen while trying to modify the
repository-local config for that repository.

These warnings may seem confusing to users who don't understand what
they mean or how to stop them.

Add a warning that instructs the user how to remove the warning in
future installations.
The get_random_minute() method was created to allow maintenance
schedules to be fixed to a random minute of the hour. This randomness is
only intended to spread out the load from a number of clients, but each
client should have an hour between each maintenance cycle.

Add this random minute to the systemd integration.

This integration is more complicated than similar changes for other
schedulers because of a neat trick that systemd allows: templating.

The previous implementation generated two template files with names
of the form 'git-maintenance@.(timer|service)'. The '.timer' or
'.service' indicates that this is a template that is picked up when we
later specify '...@<schedule>.timer' or '...@<schedule>.service'. The
'<schedule>' string is then used to insert into the template both the
'OnCalendar' schedule setting and the '--schedule' parameter of the
'git maintenance run' command.

In order to set these schedules to a given minute, we can no longer use
the 'hourly', 'daily', or 'weekly' strings for '<schedule>' and instead
need to abandon the template model for the .timer files. We can still
use templates for the .service files. For this reason, we split these
writes into two methods.

Modify the template with a custom schedule in the 'OnCalendar' setting.
This schedule has some interesting differences from cron-like patterns,
but is relatively easy to figure out from context. The one that might be
confusing is that '*-*-*' is a date-based pattern, but this must be
omitted when using 'Mon' to signal that we care about the day of the
week. Monday is used since that matches the day used for the 'weekly'
schedule used previously.

Now that the timer files are not templates, we might want to abandon the
'@' symbol in the file names. However, this would cause users with
existing schedules to get two competing schedules due to different
names. The work to remove the old schedule name is one thing that we can
avoid by keeping the '@' symbol in our unit names. Since we are locked
into this name, it makes sense that we keep the template model for the
.service files.

The rest of the change involves making sure we are writing these .timer
and .service files before initializing the schedule with 'systemctl' and
deleting the files when we are done. Some changes are also made to share
the random minute along with a single computation of the execution path
of the current Git executable.

In addition, older Git versions may have written a
'git-maintenance@.timer' template file. Be sure to remove this when
successfully enabling maintenance (or disabling maintenance).

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
…and git worktree after clones

These are two highly-requested items from an internal team considering a
move to Scalar using Azure Repos.

1. Remove the requirement that we create a `src` directory at clone time.

2. Allow `git worktree` even when using the GVFS protocol.

These are not difficult to implement. The `--no-src` option could even
be submitted upstream (though the commit will need to drop one bit about
an interaction with the local cache path).
The 'git maintenance run' command prevents concurrent runs in the same
repository using a 'maintenance.lock' file. However, when using systemd
the hourly maintenance runs the same time as the daily and weekly runs.
(Similarly, daily maintenance runs at the same time as weekly
maintenance.) These competing commands result in some maintenance not
actually being run.

This overlap was something we could not fix until we made the recent
change to not use the builting 'hourly', 'daily', and 'weekly' schedules
in systemd. We can adjust the schedules such that:

 1. Hourly runs avoid the 0th hour.
 2. Daily runs avoid Monday.

This will keep maintenance runs from colliding when using systemd.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
…-and-fix-built-in-fsmonitor

Fix the built-in FSMonitor, and run Scalar's Functional Tests as part of the automated builds
When running 'git maintenance start', the current pattern is to
configure global config settings to enable maintenance on the current
repository and set 'maintenance.auto' to false and _then_ to set up the
schedule with the system scheduler.

This has a problematic error condition: if the scheduler fails to
initialize, the repository still will not use automatic maintenance due
to the 'maintenance.auto' setting.

Fix this gap by swapping the order of operations. If Git fails to
initialize maintenance, then the config changes should never happen.

Reported-by: Phillip Wood <phillip.wood123@gmail.com>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
This is random stuff that probably all got upstream in the meantime.
* [x] This is an early version of work already under review upstream.

See gitgitgadget#1567 for the version submitted upstream. This is an
early version for the `microsoft/git` fork so we could potentially
include it in a release to our Microsoft partners. Upgrading to a
version with these changes may help with some of the auth problems
plaguing GVFS Cache Servers. (It's not a long-term fix, but would avoid
having fingers pointed in this direction in the future.)

At least on Windows, we should re-run `git maintenance start` as part of
`scalar reconfigure` during the installer. On other platforms, we will
need to rely on users slowly rotating through their local repositories.

> This PR is a recreation of git-for-windows#593 now that the upstream change required
rebasing to resolve header conflicts.
When scripts or background maintenance wish to perform HTTP(S) requests,
there is a risk that our stored credentials might be invalid. At the
moment, this causes the credential helper to ping the user and block the
process. Even if the credential helper does not ping the user, Git falls
back to the 'askpass' method, which includes a direct ping to the user
via the terminal.

Even setting the 'core.askPass' config as something like 'echo' will
causes Git to fallback to a terminal prompt. It uses
git_terminal_prompt(), which finds the terminal from the environment and
ignores whether stdin has been redirected. This can also block the
process awaiting input.

Create a new config option to prevent user interaction, favoring a
failure to a blocked process.

The chosen name, 'credential.interactive', is taken from the config
option used by Git Credential Manager to already avoid user
interactivity, so there is already one credential helper that integrates
with this option. However, older versions of Git Credential Manager also
accepted other string values, including 'auto', 'never', and 'always'.
The modern use is to use a boolean value, but we should still be
careful that some users could have these non-booleans. Further, we
should respect 'never' the same as 'false'. This is respected by the
implementation and test, but not mentioned in the documentation.

The implementation for the Git interactions takes place within
credential_getpass(). The method prototype is modified to return an
'int' instead of 'void'. This allows us to detect that no attempt was
made to fill the given credential, changing the single caller slightly.

Also, a new trace2 region is added around the interactive portion of the
credential request. This provides a way to measure the amount of time
spent in that region for commands that _are_ interactive. It also makes
a conventient way to test that the config option works with
'test_region'.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
At the moment, some background jobs are getting blocked on credentials
during the 'prefetch' task. This leads to other tasks, such as
incremental repacks, getting blocked. Further, if a user manages to fix
their credentials, then they still need to cancel the background process
before their background maintenance can continue working.

Update the background schedules for our four scheduler integrations to
include these config options via '-c' options:

 * 'credential.interactive=false' will stop Git and some credential
   helpers from prompting in the UI (assuming the '-c' parameters are
   carried through and respected by GCM).

 * 'core.askPass=true' will replace the text fallback for a username
   and password into the 'true' command, which will return a success in
   its exit code, but Git will treat the empty string returned as an
   invalid password and move on.

We can do some testing that the credentials are passed, at least in the
systemd case due to writing the service files.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
The 'scalar reconfigure' command is intended to update registered repos
with the latest settings available. However, up to now we were not
reregistering the repos with background maintenance.

In particular, this meant that the background maintenance schedule would
not be updated if there are improvements between versions.

Be sure to register repos for maintenance during the reconfigure step.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
@derrickstolee
Copy link
Collaborator

@dscho: I reworked this branch in my fork to include #598. Please fetch derrickstolee:tentative/vfs-2.42.0 to check it out.

Range-diff from your branch to mine

I used git range-diff --creation-factor=90 because a creation factor of 99 confused the commit that was removed with one of the new commits from #598.

  1:  beb3ce9766 =   1:  beb3ce9766 reset --stdin: trim carriage return from the paths
  2:  83d4652131 =   2:  83d4652131 gvfs: start by adding the -gvfs suffix to the version
  3:  6963153658 =   3:  6963153658 gvfs: ensure that the version is based on a GVFS tag
  4:  7fa2270eb9 =   4:  7fa2270eb9 gvfs: add a GVFS-specific header file
  5:  b9b41d5dd1 =   5:  b9b41d5dd1 gvfs: add the core.gvfs config setting
  6:  85c245dd53 =   6:  85c245dd53 gvfs: add the feature to skip writing the index' SHA-1
  7:  b75bb69a10 =   7:  b75bb69a10 gvfs: add the feature that blobs may be missing
  8:  5defb61569 =   8:  5defb61569 gvfs: prevent files to be deleted outside the sparse checkout
  9:  2989380f4f =   9:  2989380f4f gvfs: optionally skip reachability checks/upload pack during fetch
 10:  fd78c60dd6 =  10:  fd78c60dd6 gvfs: ensure all filters and EOL conversions are blocked
 11:  6be8f173dc =  11:  6be8f173dc gvfs: allow "virtualizing" objects
 12:  ba8ff26802 =  12:  ba8ff26802 Hydrate missing loose objects in check_and_freshen()
 13:  a05336f9cd =  13:  a05336f9cd sha1_file: when writing objects, skip the read_object_hook
 14:  7027220f63 =  14:  7027220f63 gvfs: add global command pre and post hook procs
 15:  a04260e057 =  15:  a04260e057 t0400: verify that the hook is called correctly from a subdirectory
 16:  1a14559a8e =  16:  1a14559a8e Pass PID of git process to hooks.
 17:  638cebdd38 =  17:  638cebdd38 pre-command: always respect core.hooksPath
 18:  ab7419da3b =  18:  ab7419da3b sparse-checkout: update files with a modify/delete conflict
 19:  fc24c9819f =  19:  fc24c9819f sparse-checkout: avoid writing entries with the skip-worktree bit
 20:  99f85398bd =  20:  99f85398bd Do not remove files outside the sparse-checkout
 21:  b1e77b31f9 =  21:  b1e77b31f9 gvfs: refactor loading the core.gvfs config value
 22:  789bfe2bab =  22:  789bfe2bab send-pack: do not check for sha1 file when GVFS_MISSING_OK set
 23:  7abe226ad4 =  23:  7abe226ad4 cache-tree: remove use of strbuf_addf in update_one
 24:  f4489d543c =  24:  f4489d543c gvfs: block unsupported commands when running in a GVFS repo
 25:  b2db4774b7 =  25:  b2db4774b7 worktree: allow in Scalar repositories
 26:  6045bccfd9 =  26:  6045bccfd9 gvfs: allow overriding core.gvfs
 27:  6918eec6a1 =  27:  6918eec6a1 BRANCHES.md: Add explanation of branches and using forks
 28:  6745c45711 =  28:  6745c45711 Add virtual file system settings and hook proc
 29:  523c9ca40b =  29:  523c9ca40b virtualfilesystem: don't run the virtual file system hook if the index has been redirected
 30:  8e8926786b =  30:  8e8926786b virtualfilesystem: check if directory is included
 31:  d4980f2499 =  31:  d4980f2499 backwards-compatibility: support the post-indexchanged hook
 32:  d00c4ca757 =  32:  d00c4ca757 gvfs: verify that the built-in FSMonitor is disabled
 33:  9c27a8ee44 =  33:  9c27a8ee44 status: add status serialization mechanism
 34:  01f92dcb48 =  34:  01f92dcb48 Teach ahead-behind and serialized status to play nicely together
 35:  7256d4f674 =  35:  7256d4f674 status: serialize to path
 36:  22e9744c4f =  36:  22e9744c4f status: reject deserialize in V2 and conflicts
 37:  af61fbc45c =  37:  af61fbc45c serialize-status: serialize global and repo-local exclude file metadata
 38:  52eb244ea8 =  38:  52eb244ea8 status: deserialization wait
 39:  f51c96d3e1 =  39:  f51c96d3e1 merge-recursive: avoid confusing logic in was_dirty()
 40:  28388fb0cf =  40:  28388fb0cf merge-recursive: add some defensive coding to was_dirty()
 41:  5f499d95e3 =  41:  5f499d95e3 merge-recursive: teach was_dirty() about the virtualfilesystem
 42:  09f8e30014 =  42:  09f8e30014 status: deserialize with -uno does not print correct hint
 43:  82ad4b724b =  43:  82ad4b724b fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate
 44:  0e205d70ff =  44:  0e205d70ff fsmonitor: add script for debugging and update script for tests
 45:  991de58b7c =  45:  991de58b7c status: disable deserialize when verbose output requested.
 46:  e0f79bad32 =  46:  e0f79bad32 t7524: add test for verbose status deserialzation
 47:  14452b7fb9 =  47:  14452b7fb9 deserialize-status: silently fallback if we cannot read cache file
 48:  35e920af21 =  48:  35e920af21 gvfs:trace2:data: add trace2 tracing around read_object_process
 49:  7d872c39e7 =  49:  7d872c39e7 gvfs:trace2:data: status deserialization information
 50:  680a5dda82 =  50:  680a5dda82 gvfs:trace2:data: status serialization
 51:  56b57b4b46 =  51:  56b57b4b46 gvfs:trace2:data: add vfs stats
 52:  3b94725dc4 =  52:  3b94725dc4 trace2: refactor setting process starting time
 53:  f01198af7a =  53:  f01198af7a trace2:gvfs:experiment: clear_ce_flags_1
 54:  d5ab32cb5f =  54:  d5ab32cb5f trace2:gvfs:experiment: report_tracking
 55:  7384393735 =  55:  7384393735 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache
 56:  091f2bfcae =  56:  091f2bfcae trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension
 57:  2ba30a8368 =  57:  2ba30a8368 trace2:gvfs:experiment: add region to apply_virtualfilesystem()
 58:  dbe4182aab =  58:  dbe4182aab trace2:gvfs:experiment: add region around unpack_trees()
 59:  3dead050d3 =  59:  3dead050d3 trace2:gvfs:experiment: add region to cache_tree_fully_valid()
 60:  d746e1d183 =  60:  d746e1d183 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()
 61:  fce6f117bf =  61:  fce6f117bf trace2:gvfs:experiment: increase default event depth for unpack-tree data
 62:  e460ad4a4c =  62:  e460ad4a4c trace2:gvfs:experiment: add data for check_updates() in unpack_trees()
 63:  68d7101b6b =  63:  68d7101b6b Trace2:gvfs:experiment: capture more 'tracking' details
 64:  a617e625a6 =  64:  a617e625a6 credential: set trace2_child_class for credential manager children
 65:  dcf48b2103 =  65:  dcf48b2103 sub-process: do not borrow cmd pointer from caller
 66:  cbc202bf27 =  66:  cbc202bf27 sub-process: add subprocess_start_argv()
 67:  f872f9dbb2 =  67:  f872f9dbb2 sha1-file: add function to update existing loose object cache
 68:  434847cfbc =  68:  434847cfbc packfile: add install_packed_git_and_mru()
 69:  b360b3297a =  69:  b360b3297a index-pack: avoid immediate object fetch while parsing packfile
 70:  5579a8023b =  70:  5579a8023b gvfs-helper: create tool to fetch objects using the GVFS Protocol
 71:  ac4a124ee3 =  71:  ac4a124ee3 sha1-file: create shared-cache directory if it doesn't exist
 72:  6619a85b7c =  72:  6619a85b7c gvfs-helper: better handling of network errors
 73:  311af316a8 =  73:  311af316a8 gvfs-helper-client: properly update loose cache with fetched OID
 74:  8c1a1c4f68 =  74:  8c1a1c4f68 gvfs-helper: V2 robust retry and throttling
 75:  43442ca9c2 =  75:  43442ca9c2 gvfs-helper: expose gvfs/objects GET and POST semantics
 76:  0d987392e3 =  76:  0d987392e3 gvfs-helper: dramatically reduce progress noise
 77:  d8a4d89cc5 =  77:  d8a4d89cc5 gvfs-helper-client.h: define struct object_id
 78:  9175db63d1 =  78:  9175db63d1 gvfs-helper: handle pack-file after single POST request
 79:  f89f72bffd =  79:  f89f72bffd test-gvfs-prococol, t5799: tests for gvfs-helper
 80:  04a00fc112 =  80:  04a00fc112 gvfs-helper: move result-list construction into install functions
 81:  b8d9a6880d =  81:  b8d9a6880d t5799: add support for POST to return either a loose object or packfile
 82:  d66125701d =  82:  d66125701d t5799: cleanup wc-l and grep-c lines
 83:  4c63e73cae =  83:  4c63e73cae gvfs-helper: verify loose objects after write
 84:  d765e392e3 =  84:  d765e392e3 t7599: create corrupt blob test
 85:  39a8eb26c7 =  85:  39a8eb26c7 gvfs-helper: add prefetch support
 86:  9242228937 =  86:  9242228937 gvfs-helper: add prefetch .keep file for last packfile
 87:  7ed9e35c80 =  87:  7ed9e35c80 gvfs-helper: do one read in my_copy_fd_len_tail()
 88:  4f4b450ca2 =  88:  4f4b450ca2 gvfs-helper: move content-type warning for prefetch packs
 89:  3c4c21981c =  89:  3c4c21981c fetch: use gvfs-helper prefetch under config
 90:  ae0eb9a412 =  90:  ae0eb9a412 gvfs-helper: better support for concurrent packfile fetches
 91:  2b1e1c1f47 =  91:  2b1e1c1f47 remote-curl: do not call fetch-pack when using gvfs-helper
 92:  e7f908222e =  92:  e7f908222e fetch: reprepare packs before checking connectivity
 93:  21f9a98bac =  93:  21f9a98bac gvfs-helper: retry when creating temp files
 94:  98386f1457 =  94:  98386f1457 sparse: avoid warnings about known cURL issues in gvfs-helper.c
 95:  2edc14cfff =  95:  2edc14cfff gvfs-helper: add --max-retries to prefetch verb
 96:  38ff92e754 =  96:  38ff92e754 t5799: add tests to detect corrupt pack/idx files in prefetch
 97:  9ee1e4ace9 =  97:  9ee1e4ace9 upload-pack: fix race condition in error messages
 98:  273466db5b =  98:  273466db5b maintenance: care about gvfs.sharedCache config
 99:  cae50264bf =  99:  cae50264bf unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags
100:  60867957f8 = 100:  60867957f8 homebrew: add GitHub workflow to release Cask
101:  ecd2e757b5 = 101:  ecd2e757b5 Adding winget workflows
102:  5a63114561 = 102:  5a63114561 gvfs-helper: ignore .idx files in prefetch multi-part responses
103:  38698255c6 = 103:  38698255c6 Disable the `monitor-components` workflow in msft-git
104:  44ef83ba6c = 104:  44ef83ba6c .github: enable windows builds on microsoft fork
105:  cfed047356 = 105:  cfed047356 release: create initial Windows installer build workflow
106:  7563c50ea2 = 106:  7563c50ea2 release: add Mac OSX installer build
107:  6dc4e872ef = 107:  6dc4e872ef release: build unsigned Ubuntu .deb package
108:  2b9e0f6073 = 108:  2b9e0f6073 release: add signing step for .deb package
109:  644384fad8 = 109:  644384fad8 release: create draft GitHub release with packages & installers
110:  b373c23fc3 = 110:  b373c23fc3 release: continue pestering until user upgrades
111:  166decdfbb = 111:  166decdfbb Makefile: allow specifying GIT_BUILT_FROM_COMMIT
112:  fea717b9a7 = 112:  fea717b9a7 dist: archive HEAD instead of HEAD^{tree}
113:  be41ec0bc2 = 113:  be41ec0bc2 update-microsoft-git: create barebones builtin
114:  3eb9a0afc0 = 114:  3eb9a0afc0 release: include GIT_BUILT_FROM_COMMIT in MacOS build
115:  8ba7557023 = 115:  8ba7557023 update-microsoft-git: Windows implementation
116:  fae34368b4 = 116:  fae34368b4 release: add installer validation
117:  ddba2fa64a = 117:  ddba2fa64a update-microsoft-git: use brew on macOS
118:  82e9672d19 = 118:  82e9672d19 .github: update ISSUE_TEMPLATE.md for microsoft/git
119:  8c64722c67 = 119:  8c64722c67 .github: update PULL_REQUEST_TEMPLATE.md
120:  747ad2cb59 = 120:  747ad2cb59 git_config_set_multivar_in_file_gently(): add a lock timeout
121:  b54bd15913 = 121:  b54bd15913 Adjust README.md for microsoft/git
122:  6682f125c4 = 122:  6682f125c4 scalar: set the config write-lock timeout to 150ms
123:  ae4a077e5e = 123:  ae4a077e5e scalar: add docs from microsoft/scalar
124:  1498a835eb = 124:  1498a835eb scalar (Windows): use forward slashes as directory separators
125:  d98431c3de = 125:  d98431c3de scalar: add retry logic to run_git()
126:  5ed4466827 = 126:  5ed4466827 scalar: support the `config` command for backwards compatibility
127:  d4b21330f6 = 127:  d4b21330f6 scalar: implement a minimal JSON parser
128:  e7c0563082 = 128:  e7c0563082 scalar clone: support GVFS-enabled remote repositories
129:  11adbf7d31 = 129:  11adbf7d31 test-gvfs-protocol: also serve smart protocol
130:  b98daccaeb = 130:  b98daccaeb gvfs-helper: add the `endpoint` command
131:  1a61a8e594 = 131:  1a61a8e594 dir_inside_of(): handle directory separators correctly
132:  85d9478c0c = 132:  85d9478c0c scalar: disable authentication in unattended mode
150:  c9c7b341ad = 133:  c9c7b341ad sparse-checkout: add config to disable deleting dirs
151:  bedddbb0b6 = 134:  bedddbb0b6 add/rm: allow adding sparse entries when virtual
152:  45e72a7f68 = 135:  45e72a7f68 diff: ignore sparse paths in diffstat
153:  b584ffdc51 = 136:  b584ffdc51 repo-settings: enable sparse index by default
154:  41b507ad4e = 137:  41b507ad4e diff(sparse-index): verify with partially-sparse
155:  9e019261ba = 138:  9e019261ba stash: expand testing for `git stash -u`
156:  d99a8a0c20 = 139:  d99a8a0c20 sequencer: avoid progress when stderr is redirected
157:  30b36a61a4 = 140:  30b36a61a4 sparse: add vfs-specific precautions

Here is a squashed fixup:

133:  616f3e60e6 ! 141:  a39b9ec8bf scalar: do initialize `gvfs.sharedCache`
    @@ scalar.c: int cmd_main(int argc, const char **argv)
     +	if (is_unattended()) {
     +		setenv("GIT_ASKPASS", "", 0);
     +		setenv("GIT_TERMINAL_PROMPT", "false", 0);
    -+		git_config_push_parameter("credential.interactive=never");
    ++		git_config_push_parameter("credential.interactive=false");
     +	}
     +
      	while (argc > 1 && *argv[1] == '-') {
134:  6017b692d1 = 142:  d1ba0f9558 scalar diagnose: include shared cache info
135:  f637e38d73 = 143:  965a390676 scalar: only try GVFS protocol on https:// URLs
159:  0bc3512d50 = 144:  0bb7faee70 reset: fix mixed reset when using virtual filesystem

Another fixup:

136:  b5322558df ! 145:  ad14a2eabd scalar: verify that we can use a GVFS-enabled repository
    @@ t/t9210-scalar.sh: test_expect_success UNZIP 'scalar diagnose' '
     +test_expect_success '`scalar clone` with GVFS-enabled server' '
     +	: the fake cache server requires fake authentication &&
     +	git config --global core.askPass true &&
    -+	scalar clone --single-branch -- http://$HOST_PORT/ using-gvfs &&
    ++
    ++	# We must set credential.interactive=true to bypass a setting
    ++	# in "scalar clone" that disables interactive credentials during
    ++	# an unattended command.
    ++	scalar -c credential.interactive=true clone --single-branch -- http://$HOST_PORT/ using-gvfs &&
     +
     +	: verify that the shared cache has been configured &&
     +	cache_key="url_$(printf "%s" http://$HOST_PORT/ |
137:  fd62089141 = 146:  7378a39b7e scalar: add the `cache-server` command
138:  ba56d16efd = 147:  25aa160807 scalar: add a test toggle to skip accessing the vsts/info endpoint
139:  9ef15d1e7d = 148:  84ce51283a scalar: adjust documentation to the microsoft/git fork
140:  a561100885 = 149:  f9056381b0 scalar: enable untracked cache unconditionally
141:  7103d24d79 = 150:  ad15733363 scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility
142:  df1213a047 = 151:  7efae3ffd1 scalar diagnose: accommodate Scalar's Functional Tests
143:  c4ebeeb037 = 152:  0ca292a55b ci: run Scalar's Functional Tests
144:  0717e2feaf = 153:  779915ca8c scalar: upgrade to newest FSMonitor config setting
145:  c21836ddaf = 154:  cfa61bddec setup: add discover_git_directory_reason()
146:  dd1052c0bc = 155:  45ea3356f1 scalar reconfigure: help users remove buggy repos
147:  80a122ff87 = 156:  5aeee2f3a4 abspath: make strip_last_path_component() global
148:  f7bc4a83d5 = 157:  6ccab79202 scalar: .scalarCache should live above enlistment
149:  41b74c3c8a = 158:  679f0de51b scalar: add --no-src option

The revert squashed in:

158:  7f0da72806 <   -:  ---------- maintenance: delete stale lock files
160:  fd965237b8 = 159:  003438d684 maintenance: add get_random_minute()
161:  7cd3ed4688 = 160:  a0bfea8490 maintenance: use random minute in launchctl scheduler
162:  ee50aac575 = 161:  b6aec3eb6f maintenance: use random minute in Windows scheduler
163:  3ce53fe21e = 162:  5ef6e387d9 maintenance: use random minute in cron scheduler
164:  eececdfd2f = 163:  c66dfb2a9d maintenance: swap method locations
165:  958784c8fa = 164:  cf2cb00b20 maintenance: use random minute in systemd scheduler
166:  d3e20bca8c = 165:  3bf089b486 maintenance: fix systemd schedule overlaps
167:  639c5f1924 = 166:  6d15915381 maintenance: update schedule before config

The three new commits:

  -:  ---------- > 167:  22acd557cd credential: add new interactive config option
  -:  ---------- > 168:  384c80e119 maintenance: add custom config to background jobs
  -:  ---------- > 169:  c68e5fb7df scalar: configure maintenance during 'reconfigure'

@dscho
Copy link
Member Author

dscho commented Aug 23, 2023

I reworked this branch in my fork to include #598. Please fetch derrickstolee:tentative/vfs-2.42.0 to check it out.

@derrickstolee thank you, I (force-)pushed it verbatim!

@jeffhostetler jeffhostetler merged commit c68e5fb into microsoft:vfs-2.42.0 Aug 23, 2023
44 checks passed
@jeffhostetler jeffhostetler temporarily deployed to release August 23, 2023 20:22 — with GitHub Actions Inactive
@jeffhostetler jeffhostetler temporarily deployed to release August 23, 2023 20:42 — with GitHub Actions Inactive
@jeffhostetler jeffhostetler temporarily deployed to release August 23, 2023 20:49 — with GitHub Actions Inactive
@dscho dscho deleted the tentative/vfs-2.42.0 branch August 23, 2023 20:56
@jeffhostetler jeffhostetler temporarily deployed to release August 23, 2023 20:57 — with GitHub Actions Inactive
@jeffhostetler jeffhostetler temporarily deployed to release August 23, 2023 21:07 — with GitHub Actions Inactive
@jeffhostetler jeffhostetler temporarily deployed to release August 23, 2023 21:07 — with GitHub Actions Inactive
@jeffhostetler jeffhostetler temporarily deployed to release August 23, 2023 21:16 — with GitHub Actions Inactive
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.