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

Rebase to v2.45.0 #644

Merged
merged 556 commits into from
Apr 29, 2024
Merged

Rebase to v2.45.0 #644

merged 556 commits into from
Apr 29, 2024

Conversation

dscho
Copy link
Member

@dscho dscho commented Apr 23, 2024

Range-diff relative to vfs-2.44.0
  • 189: abd7968 = 1: dfb63a6 for-each-repo: optionally keep going on an error

  • 190: 1ae1155 = 2: d70b66b maintenance: running maintenance should not stop on errors

  • 1: 08acea8 = 3: 291baa1 reset --stdin: trim carriage return from the paths

  • 2: a75168a < -: ----------- gvfs: start by adding the -gvfs suffix to the version

  • -: ----------- > 4: 7171e5c Identify microsoft/git via a distinct version suffix

  • 3: 1db481c = 5: 45448ec gvfs: ensure that the version is based on a GVFS tag

  • 4: 7cc11e5 = 6: 3f492fa gvfs: add a GVFS-specific header file

  • 5: 656515f = 7: 75ddd14 gvfs: add the core.gvfs config setting

  • 6: 2ad35f3 ! 8: 0dec18a gvfs: add the feature to skip writing the index' SHA-1

    @@ repo-settings.c: void prepare_repo_settings(struct repository *r)
      	 * The GIT_TEST_MULTI_PACK_INDEX variable is special in that
      	 * either it *or* the config sets
     
    - ## t/t1016-read-tree-skip-sha-on-read.sh (new) ##
    + ## t/t1017-read-tree-skip-sha-on-read.sh (new) ##
     @@
     +#!/bin/sh
     +
  • 7: 69804bb = 9: 8b5f8b6 gvfs: add the feature that blobs may be missing

  • 8: 08e1394 = 10: d2756a0 gvfs: prevent files to be deleted outside the sparse checkout

  • 9: 8f94806 = 11: d2d9185 gvfs: optionally skip reachability checks/upload pack during fetch

  • 10: 425f60c = 12: cc89974 gvfs: ensure all filters and EOL conversions are blocked

  • 11: 1809338 ! 13: 01ec987 gvfs: allow "virtualizing" objects

    @@ Commit message
         to "lazy clone" and work more on this.
     
         Signed-off-by: Ben Peart <[email protected]>
    +    Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## config.c ##
     @@ config.c: int git_default_core_config(const char *var, const char *value,
    @@ environment.c: int core_gvfs;
     
      ## environment.h ##
     @@ environment.h: struct strvec;
    - extern char comment_line_char;
    + extern const char *comment_line_str;
      extern int auto_comment_line_char;
      
     +extern int core_virtualize_objects;
    @@ environment.h: struct strvec;
     
      ## object-file.c ##
     @@
    - #include "setup.h"
    - #include "submodule.h"
      #include "fsck.h"
    + #include "loose.h"
    + #include "object-file-convert.h"
     +#include "trace.h"
     +#include "hook.h"
      
  • 12: 6829117 ! 14: 77ececa Hydrate missing loose objects in check_and_freshen()

    @@ contrib/long-running-read-object/example.pl (new)
     
      ## object-file.c ##
     @@
    - #include "fsck.h"
    + #include "object-file-convert.h"
      #include "trace.h"
      #include "hook.h"
     +#include "sigchain.h"
  • 13: 41d24c3 ! 15: 1ebd6a6 sha1_file: when writing objects, skip the read_object_hook

    @@ object-file.c: int stream_loose_object(struct input_stream *in_stream, size_t le
      		goto cleanup;
      	}
     @@ object-file.c: int write_object_file_flags(const void *buf, size_t len,
    + 	 * it out into .git/objects/??/?{38} file.
      	 */
    - 	write_object_file_prepare(the_hash_algo, buf, len, type, oid, hdr,
    - 				  &hdrlen);
    + 	write_object_file_prepare(algo, buf, len, type, oid, hdr, &hdrlen);
     -	if (freshen_packed_object(oid) || freshen_loose_object(oid))
     +	if (freshen_packed_object(oid) || freshen_loose_object(oid, 1))
      		return 0;
    - 	return write_loose_object(oid, hdr, hdrlen, buf, len, 0, flags);
    - }
    + 	if (write_loose_object(oid, hdr, hdrlen, buf, len, 0, flags))
    + 		return -1;
     @@ object-file.c: int write_object_file_literally(const void *buf, size_t len,
      
      	if (!(flags & HASH_WRITE_OBJECT))
    @@ object-file.c: int write_object_file_literally(const void *buf, size_t len,
     +	if (freshen_packed_object(oid) || freshen_loose_object(oid, 1))
      		goto cleanup;
      	status = write_loose_object(oid, header, hdrlen, buf, len, 0, 0);
    - 
    + 	if (compat_type != -1)
     
      ## t/t0410/read-object ##
     @@ t/t0410/read-object: while (1) {
  • 14: c10e77d ! 16: 8daad9f gvfs: add global command pre and post hook procs

    @@ git.c: static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
     +
      	trace_argv_printf(argv, "trace: built-in: git");
      	trace2_cmd_name(p->cmd);
    - 	trace2_cmd_list_config();
    - 	trace2_cmd_list_env_vars();
      
      	validate_cache_entries(the_repository->index);
     -	status = p->fn(argc, argv, prefix);
  • 15: 5a78b0c = 17: 3cf79a7 t0400: verify that the hook is called correctly from a subdirectory

  • 16: bcbcbb1 = 18: da90d91 Pass PID of git process to hooks.

  • 17: 2135705 = 19: 5567a3e pre-command: always respect core.hooksPath

  • 18: 8173d74 = 20: 2fa2c0c sparse-checkout: update files with a modify/delete conflict

  • 19: 5cf5793 = 21: e94543d sparse-checkout: avoid writing entries with the skip-worktree bit

  • 20: 9fea45a = 22: 43b4268 Do not remove files outside the sparse-checkout

  • 21: 203814b = 23: 7804aff send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 22: 9f0e5f9 = 24: 26b3cbc cache-tree: remove use of strbuf_addf in update_one

  • 23: d724e71 ! 25: 6b2941f gvfs: block unsupported commands when running in a GVFS repo

    @@ Commit message
         11) worktree
     
         Signed-off-by: Ben Peart <[email protected]>
    +    Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## builtin/gc.c ##
     @@
    @@ builtin/gc.c: int cmd_gc(int argc, const char **argv, const char *prefix)
      	if (quiet)
      		strvec_push(&repack, "-q");
      
    -+	if ((!auto_gc || (auto_gc && gc_auto_threshold > 0)) && gvfs_config_is_set(GVFS_BLOCK_COMMANDS))
    ++	if ((!opts.auto_flag || (opts.auto_flag && gc_auto_threshold > 0)) && gvfs_config_is_set(GVFS_BLOCK_COMMANDS))
     +		die(_("'git gc' is not supported on a GVFS repo"));
     +
    - 	if (auto_gc) {
    + 	if (opts.auto_flag) {
      		/*
      		 * Auto-gc should be least intrusive as possible.
     
  • 24: 40bf6bd = 26: eb1a110 worktree: allow in Scalar repositories

  • 25: a202667 = 27: e56fd83 gvfs: allow overriding core.gvfs

  • 26: 12b6663 = 28: 143f6c8 BRANCHES.md: Add explanation of branches and using forks

  • 27: 81dc570 ! 29: 8530efe Add virtual file system settings and hook proc

    @@ dir.c: enum pattern_match_result path_matches_pattern_list(
      	int result = NOT_MATCHED;
      	size_t slash_pos;
      
    -+	/*
    -+	 * The virtual file system data is used to prevent git from traversing
    -+	 * any part of the tree that is not in the virtual file system.  Return
    -+	 * 1 to exclude the entry if it is not found in the virtual file system,
    -+	 * else fall through to the regular excludes logic as it may further exclude.
    -+	 */
    -+	if (*dtype == DT_UNKNOWN)
    -+		*dtype = resolve_dtype(DT_UNKNOWN, istate, pathname, pathlen);
    -+	if (is_excluded_from_virtualfilesystem(pathname, pathlen, *dtype) > 0)
    -+		return 1;
    ++	if (core_virtualfilesystem) {
    ++		/*
    ++		* The virtual file system data is used to prevent git from traversing
    ++		* any part of the tree that is not in the virtual file system.  Return
    ++		* 1 to exclude the entry if it is not found in the virtual file system,
    ++		* else fall through to the regular excludes logic as it may further exclude.
    ++		*/
    ++		if (*dtype == DT_UNKNOWN)
    ++			*dtype = resolve_dtype(DT_UNKNOWN, istate, pathname, pathlen);
    ++		if (is_excluded_from_virtualfilesystem(pathname, pathlen, *dtype) > 0)
    ++			return 1;
    ++	}
     +
      	if (!pl->use_cone_patterns) {
      		pattern = last_matching_pattern_from_list(pathname, pathlen, basename,
    @@ dir.c: struct path_pattern *last_matching_pattern(struct dir_struct *dir,
     -		last_matching_pattern(dir, istate, pathname, dtype_p);
     +	struct path_pattern *pattern;
     +
    -+	/*
    -+	 * The virtual file system data is used to prevent git from traversing
    -+	 * any part of the tree that is not in the virtual file system.  Return
    -+	 * 1 to exclude the entry if it is not found in the virtual file system,
    -+	 * else fall through to the regular excludes logic as it may further exclude.
    -+	 */
    -+	if (*dtype_p == DT_UNKNOWN)
    -+		*dtype_p = resolve_dtype(DT_UNKNOWN, istate, pathname, strlen(pathname));
    -+	if (is_excluded_from_virtualfilesystem(pathname, strlen(pathname), *dtype_p) > 0)
    -+		return 1;
    ++	if (core_virtualfilesystem) {
    ++		/*
    ++		* The virtual file system data is used to prevent git from traversing
    ++		* any part of the tree that is not in the virtual file system.  Return
    ++		* 1 to exclude the entry if it is not found in the virtual file system,
    ++		* else fall through to the regular excludes logic as it may further exclude.
    ++		*/
    ++		if (*dtype_p == DT_UNKNOWN)
    ++			*dtype_p = resolve_dtype(DT_UNKNOWN, istate, pathname, strlen(pathname));
    ++		if (is_excluded_from_virtualfilesystem(pathname, strlen(pathname), *dtype_p) > 0)
    ++			return 1;
    ++	}
     +
     +	pattern = last_matching_pattern(dir, istate, pathname, dtype_p);
      	if (pattern)
  • 28: 8c1e2c8 = 30: d2859b2 virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 29: 456cdb5 = 31: 69e43b2 virtualfilesystem: check if directory is included

  • 30: 3e677ad = 32: 6707a3b backwards-compatibility: support the post-indexchanged hook

  • 31: 9e26884 = 33: 0da573b gvfs: verify that the built-in FSMonitor is disabled

  • 32: a3f9c23 ! 34: cdad578 status: add status serialization mechanism

    @@ builtin/commit.c: static int opt_parse_porcelain(const struct option *opt, const
      static int opt_parse_m(const struct option *opt, const char *arg, int unset)
      {
      	struct strbuf *buf = opt->value;
    -@@ builtin/commit.c: static void handle_untracked_files_arg(struct wt_status *s)
    - 		s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
    - 	else if (!strcmp(untracked_files_arg, "all"))
    - 		s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
    -+	else if (!strcmp(untracked_files_arg,"complete"))
    -+		s->show_untracked_files = SHOW_COMPLETE_UNTRACKED_FILES;
    - 	/*
    - 	 * Please update $__git_untracked_file_modes in
    - 	 * git-completion.bash when you add new options
    +@@ builtin/commit.c: static enum untracked_status_type parse_untracked_setting_name(const char *u)
    + 		return SHOW_NORMAL_UNTRACKED_FILES;
    + 	else if (!strcmp(u, "all"))
    + 		return SHOW_ALL_UNTRACKED_FILES;
    ++	else if (!strcmp(u,"complete"))
    ++		return SHOW_COMPLETE_UNTRACKED_FILES;
    + 	else
    + 		return SHOW_UNTRACKED_FILES_ERROR;
    + }
     @@ builtin/commit.c: static int git_status_config(const char *k, const char *v,
      		s->relative_paths = git_config_bool(k, v);
      		return 0;
    @@ builtin/commit.c: static int git_status_config(const char *k, const char *v,
     +		return 0;
     +	}
      	if (!strcmp(k, "status.showuntrackedfiles")) {
    - 		if (!v)
    - 			return config_error_nonbool(k);
    + 		enum untracked_status_type u;
    + 
     @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
      	static const char *rename_score_arg = (const char *)-1;
      	static struct wt_status s;
    @@ wt-status.h
      #include "remote.h"
      
      struct repository;
    -@@ wt-status.h: enum color_wt_status {
    - enum untracked_status_type {
    - 	SHOW_NO_UNTRACKED_FILES,
    +@@ wt-status.h: enum untracked_status_type {
    + 	SHOW_UNTRACKED_FILES_ERROR = -1,
    + 	SHOW_NO_UNTRACKED_FILES = 0,
      	SHOW_NORMAL_UNTRACKED_FILES,
     -	SHOW_ALL_UNTRACKED_FILES
     +	SHOW_ALL_UNTRACKED_FILES,
  • 33: afa8244 = 35: 21ab719 Teach ahead-behind and serialized status to play nicely together

  • 34: b9a54bf = 36: 01dd8aa status: serialize to path

  • 35: 9adbd52 = 37: 1ca8d3d status: reject deserialize in V2 and conflicts

  • 36: 3f92ef4 = 38: 0d42119 serialize-status: serialize global and repo-local exclude file metadata

  • 37: 3533ff3 ! 39: 2110517 status: deserialization wait

    @@ builtin/commit.c: static int git_status_config(const char *k, const char *v,
     +		return 0;
     +	}
      	if (!strcmp(k, "status.showuntrackedfiles")) {
    - 		if (!v)
    - 			return config_error_nonbool(k);
    + 		enum untracked_status_type u;
    + 
     @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix)
      		{ OPTION_CALLBACK, 0, "deserialize", NULL,
      		  N_("path"), N_("deserialize raw status data from file"),
  • 38: 4f0dc95 = 40: cf81231 merge-recursive: avoid confusing logic in was_dirty()

  • 39: a6513c4 = 41: 6393c9e merge-recursive: add some defensive coding to was_dirty()

  • 40: 6207355 = 42: 2ea6a15 merge-recursive: teach was_dirty() about the virtualfilesystem

  • 41: f37bdd5 = 43: 0164495 status: deserialize with -uno does not print correct hint

  • 42: 25c3e0b = 44: 7f27df8 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 43: d23c6d3 = 45: b2289c3 fsmonitor: add script for debugging and update script for tests

  • 44: 7788fa9 = 46: 178f355 status: disable deserialize when verbose output requested.

  • 45: da3a063 = 47: 645bcd7 t7524: add test for verbose status deserialzation

  • 46: bc53d52 = 48: 81c16ea deserialize-status: silently fallback if we cannot read cache file

  • 47: cbd5040 ! 49: 67c0345 gvfs:trace2:data: add trace2 tracing around read_object_process

    @@ Commit message
     
      ## object-file.c ##
     @@
    - #include "submodule.h"
    - #include "fsck.h"
    + #include "loose.h"
    + #include "object-file-convert.h"
      #include "trace.h"
     +#include "trace2.h"
      #include "hook.h"
  • 48: e77727e = 50: 99d7bb0 gvfs:trace2:data: status deserialization information

  • 49: 69bc46a = 51: 4066c3a gvfs:trace2:data: status serialization

  • 50: 375bcec = 52: fea657c gvfs:trace2:data: add vfs stats

  • 51: 6c017b4 = 53: 2b6aec5 trace2: refactor setting process starting time

  • 52: 50541e7 = 54: 648829b trace2:gvfs:experiment: clear_ce_flags_1

  • 53: e84e9bb ! 55: 27d8220 trace2:gvfs:experiment: report_tracking

    @@ Commit message
     
      ## builtin/checkout.c ##
     @@ builtin/checkout.c: static void update_refs_for_switch(const struct checkout_opts *opts,
    - 	remove_branch_state(the_repository, !opts->quiet);
      	strbuf_release(&msg);
      	if (!opts->quiet &&
    --	    (new_branch_info->path || (!opts->force_detach && !strcmp(new_branch_info->name, "HEAD"))))
    -+	    (new_branch_info->path || (!opts->force_detach && !strcmp(new_branch_info->name, "HEAD")))) {
    + 	    !opts->force_detach &&
    +-	    (new_branch_info->path || !strcmp(new_branch_info->name, "HEAD")))
    ++	    (new_branch_info->path || !strcmp(new_branch_info->name, "HEAD"))) {
     +		trace2_region_enter("exp", "report_tracking", the_repository);
      		report_tracking(new_branch_info);
     +		trace2_region_leave("exp", "report_tracking", the_repository);
  • 54: 7d83388 = 56: 0965bf1 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 55: 2e92c18 = 57: 36ae2c4 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 56: f9a546e = 58: a4aa7f8 trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 57: 8a09e08 = 59: b5e088c trace2:gvfs:experiment: add region around unpack_trees()

  • 58: 2424bb0 = 60: faaefd9 trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 59: dfa422c ! 61: b96ee3c trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

    @@ builtin/checkout.c
      #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 &&
    - 	    (new_branch_info->path || (!opts->force_detach && !strcmp(new_branch_info->name, "HEAD")))) {
    + 	    !opts->force_detach &&
    + 	    (new_branch_info->path || !strcmp(new_branch_info->name, "HEAD"))) {
     +		unsigned long nr_unpack_entry_at_start;
     +
      		trace2_region_enter("exp", "report_tracking", the_repository);
  • 60: d9fbd93 = 62: 34bed83 trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 61: ee1ef57 = 63: da2922f trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 62: 41c5b12 ! 64: 6e7cb09 Trace2:gvfs:experiment: capture more 'tracking' details

    @@ Commit message
     
      ## builtin/checkout.c ##
     @@ builtin/checkout.c: static void update_refs_for_switch(const struct checkout_opts *opts,
    - 	    (new_branch_info->path || (!opts->force_detach && !strcmp(new_branch_info->name, "HEAD")))) {
    + 	    (new_branch_info->path || !strcmp(new_branch_info->name, "HEAD"))) {
      		unsigned long nr_unpack_entry_at_start;
      
     -		trace2_region_enter("exp", "report_tracking", the_repository);
  • 63: 49870a5 = 65: f7ea389 credential: set trace2_child_class for credential manager children

  • 64: f6fca70 = 66: 4607e7a sub-process: do not borrow cmd pointer from caller

  • 65: 327886f = 67: 39242d3 sub-process: add subprocess_start_argv()

  • 66: 154bddb = 68: e7e2aa1 sha1-file: add function to update existing loose object cache

  • 67: 99bb46e = 69: 67419c8 packfile: add install_packed_git_and_mru()

  • 68: 1095cd4 = 70: 00ebc76 index-pack: avoid immediate object fetch while parsing packfile

  • 69: 5c54630 ! 71: af90c33 gvfs-helper: create tool to fetch objects using the GVFS Protocol

    @@ Makefile: LIB_OBJS += gpg-interface.o
      LIB_OBJS += hashmap.o
      LIB_OBJS += help.o
     @@ Makefile: endif
    - 	endif
    +         endif
      	BASIC_CFLAGS += $(CURL_CFLAGS)
      
     +	PROGRAM_OBJS += gvfs-helper.o
  • 70: f3dc228 = 72: 83b2721 sha1-file: create shared-cache directory if it doesn't exist

  • 71: 73a6cc3 = 73: 2339e36 gvfs-helper: better handling of network errors

  • 72: ca24fc3 = 74: c1ae8f0 gvfs-helper-client: properly update loose cache with fetched OID

  • 73: 0f79deb = 75: 8606223 gvfs-helper: V2 robust retry and throttling

  • 74: a5e5dee = 76: 5840ca3 gvfs-helper: expose gvfs/objects GET and POST semantics

  • 75: 08fc2ee = 77: dcc1811 gvfs-helper: dramatically reduce progress noise

  • 76: c503dd5 = 78: 6b467dd gvfs-helper-client.h: define struct object_id

  • 77: 531ffc5 = 79: 623b1ab gvfs-helper: handle pack-file after single POST request

  • 114: 6895430 ! 80: a111d41 git_config_set_multivar_in_file_gently(): add a lock timeout

    @@ Documentation/config/core.txt: core.WSLCompat::
     
      ## config.c ##
     @@ config.c: int git_config_set_multivar_in_file_gently(const char *config_filename,
    - 					   const char *value_pattern,
    + 					   const char *comment,
      					   unsigned flags)
      {
     +	static unsigned long timeout_ms = ULONG_MAX;
  • 115: 955384e = 81: 53002f5 scalar: set the config write-lock timeout to 150ms

  • 116: 50b32c9 = 82: 9c869b3 scalar: add docs from microsoft/scalar

  • 117: 93ca048 = 83: 28554ba scalar (Windows): use forward slashes as directory separators

  • 118: ddd637c = 84: fcb838e scalar: add retry logic to run_git()

  • 119: 9904172 = 85: 437450c scalar: support the config command for backwards compatibility

  • 146: 5f9ba58 ! 86: dafb3e6 sequencer: avoid progress when stderr is redirected

    @@ sequencer.c: static int do_recursive_merge(struct repository *r,
     +	o.show_rename_progress = isatty(2);
      
      	head_tree = parse_tree_indirect(head);
    - 	next_tree = next ? repo_get_commit_tree(r, next) : empty_tree(r);
    + 	if (!head_tree)
  • 78: ca192b7 ! 87: f5169aa test-gvfs-prococol, t5799: tests for gvfs-helper

    @@ Commit message
         [1] https://github.com/microsoft/VFSForGit/blob/master/Protocol.md
     
         Signed-off-by: Jeff Hostetler <[email protected]>
    +    Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## Makefile ##
     @@ Makefile: endif
    @@ t/t5799-gvfs-helper.sh (new)
     +	# the new commits.
     +	#
     +	test_commit_bulk -C "$REPO_SRC" --filename="batch_a.%s.t" 9 &&
    -+	cp "$REPO_SRC"/.git/refs/heads/main m1.branch &&
    ++	git -C "$REPO_SRC" rev-parse refs/heads/main >m1.branch &&
     +	test_commit_bulk -C "$REPO_SRC" --filename="batch_b.%s.t" 9 &&
    -+	cp "$REPO_SRC"/.git/refs/heads/main m2.branch &&
    ++	git -C "$REPO_SRC" rev-parse refs/heads/main >m2.branch &&
     +	#
     +	# test_commit() creates commits, trees, tags, and blobs and leave
     +	# them loose.
    @@ t/t5799-gvfs-helper.sh (new)
     +	test_commit -C "$REPO_SRC" file7.txt &&
     +	test_commit -C "$REPO_SRC" file8.txt &&
     +	test_commit -C "$REPO_SRC" file9.txt &&
    -+	cp "$REPO_SRC"/.git/refs/heads/main m3.branch &&
    ++	git -C "$REPO_SRC" rev-parse refs/heads/main >m3.branch &&
     +	#
     +	# gvfs-helper.exe writes downloaded objects to a shared-cache directory
     +	# rather than the ODB inside the .git directory.
  • 79: 1f34846 = 88: e6c58df gvfs-helper: move result-list construction into install functions

  • 80: 1528d92 = 89: 35e19ad t5799: add support for POST to return either a loose object or packfile

  • 81: 03298f9 = 90: 05c140b t5799: cleanup wc-l and grep-c lines

  • 82: 08188f9 = 91: 08ad8fb gvfs-helper: verify loose objects after write

  • 83: 6a55d77 = 92: 50af98e t7599: create corrupt blob test

  • 84: 05c4105 ! 93: cd5322f gvfs-helper: add prefetch support

    @@ t/t5799-gvfs-helper.sh: test_expect_success 'setup repos' '
     +	#
      	test_commit_bulk -C "$REPO_SRC" --filename="batch_a.%s.t" 9 &&
     +	git -C "$REPO_SRC" branch B1 &&
    - 	cp "$REPO_SRC"/.git/refs/heads/main m1.branch &&
    + 	git -C "$REPO_SRC" rev-parse refs/heads/main >m1.branch &&
     +	#
      	test_commit_bulk -C "$REPO_SRC" --filename="batch_b.%s.t" 9 &&
     +	git -C "$REPO_SRC" branch B2 &&
    - 	cp "$REPO_SRC"/.git/refs/heads/main m2.branch &&
    + 	git -C "$REPO_SRC" rev-parse refs/heads/main >m2.branch &&
      	#
      	# test_commit() creates commits, trees, tags, and blobs and leave
     @@ t/t5799-gvfs-helper.sh: test_expect_success 'setup repos' '
    @@ t/t5799-gvfs-helper.sh: test_expect_success 'setup repos' '
      	test_commit -C "$REPO_SRC" file8.txt &&
      	test_commit -C "$REPO_SRC" file9.txt &&
     +	git -C "$REPO_SRC" branch B3 &&
    - 	cp "$REPO_SRC"/.git/refs/heads/main m3.branch &&
    + 	git -C "$REPO_SRC" rev-parse refs/heads/main >m3.branch &&
      	#
     +	# Create some commits-and-trees-only packfiles for testing prefetch.
     +	# Set arbitrary EPOCH times to make it easier to test fetch-since.
  • 85: 328ac49 = 94: d812d69 gvfs-helper: add prefetch .keep file for last packfile

  • 86: 3bd3ff1 = 95: 32a4133 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 87: 85b6d44 = 96: f2c635d gvfs-helper: move content-type warning for prefetch packs

  • 88: f71d334 = 97: 396a02c fetch: use gvfs-helper prefetch under config

  • 89: f752421 = 98: d80e642 gvfs-helper: better support for concurrent packfile fetches

  • 90: 0f68cb6 = 99: 6313f62 remote-curl: do not call fetch-pack when using gvfs-helper

  • 91: d356ff2 = 100: 3dede70 fetch: reprepare packs before checking connectivity

  • 92: 0dac5bb = 101: e944259 gvfs-helper: retry when creating temp files

  • 93: 2129426 = 102: 31397ce sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 94: 14738b6 = 103: caf7b64 gvfs-helper: add --max-retries to prefetch verb

  • 97: ac61687 = 104: fc76147 maintenance: care about gvfs.sharedCache config

  • 95: 1865729 = 105: faf4191 t5799: add tests to detect corrupt pack/idx files in prefetch

  • 98: 76cd2f0 ! 106: f53a6c6 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

    @@ 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);
    +@@ name-hash.h: int index_dir_find(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);
  • 96: 4243dfc = 107: bd1078c gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 99: d3cc952 = 108: ac6e2e2 homebrew: add GitHub workflow to release Cask

  • 100: baa69bf = 109: 0bd8f07 Adding winget workflows

  • 101: 1445711 = 110: 4e4074a Disable the monitor-components workflow in msft-git

  • 102: 0c9f22e = 111: 291652c .github: enable windows builds on microsoft fork

  • 103: 5a3a699 = 112: fcb9098 release: create initial Windows installer build workflow

  • 104: a751ad0 = 113: 9cd2a8f help: special-case HOST_CPU universal

  • 105: 55fe1c4 = 114: a820f95 release: add Mac OSX installer build

  • 106: 1015e36 = 115: a71ecee release: build unsigned Ubuntu .deb package

  • 107: 5c21313 = 116: 121afe8 release: add signing step for .deb package

  • 149: 3d95968 ! 117: bb505f1 release: create draft GitHub release with packages & installers

    @@ .github/workflows/build-git-installers.yml: jobs:
     +      - create-linux-artifacts
     +      - create-macos-artifacts
     +      - windows_artifacts
    ++      - prereqs
     +    if: |
     +      success() ||
     +        (needs.create-linux-artifacts.result == 'skipped' &&
  • 150: 7acf5f5 ! 118: aa56c24 build-git-installers: publish gpg public key

    @@ Commit message
     
      ## .github/workflows/build-git-installers.yml ##
     @@ .github/workflows/build-git-installers.yml: jobs:
    -       - create-linux-artifacts
            - create-macos-artifacts
            - windows_artifacts
    +       - prereqs
     +    env:
     +      AZURE_VAULT: ${{ secrets.AZURE_VAULT }}
     +      GPG_PUBLIC_KEY_SECRET_NAME: ${{ secrets.GPG_PUBLIC_KEY_SECRET_NAME }}
  • 151: 6cd4ad4 = 119: 4bc3c28 release: continue pestering until user upgrades

  • 152: 0035b9f = 120: 18ca753 Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 153: 7db2e99 = 121: faeb084 dist: archive HEAD instead of HEAD^{tree}

  • 154: 9e989ee = 122: a4900ea release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 155: 23dd028 ! 123: 6ee0e1b release: add installer validation

    @@ .github/workflows/build-git-installers.yml: jobs:
     +          - os: macos-latest
     +            artifact: macos-artifacts
     +            command: git
    -+          - os: macos-latest-xl-arm64
    -+            artifact: macos-artifacts
    -+            command: git
     +          - os: windows-latest
     +            artifact: win-installer-x86_64
     +            command: $PROGRAMFILES\Git\cmd\git.exe
    @@ .github/workflows/build-git-installers.yml: jobs:
          runs-on: ubuntu-latest
          permissions:
            contents: write
    --    needs:
    --      - create-linux-artifacts
    --      - create-macos-artifacts
    --      - windows_artifacts
    -+    needs: [validate-installers]
    -     env:
    -       AZURE_VAULT: ${{ secrets.AZURE_VAULT }}
    -       GPG_PUBLIC_KEY_SECRET_NAME: ${{ secrets.GPG_PUBLIC_KEY_SECRET_NAME }}
    +     needs:
    ++      - validate-installers
    +       - create-linux-artifacts
    +       - create-macos-artifacts
    +       - windows_artifacts
  • 108: 6ceeebe = 124: c5bc89e update-microsoft-git: create barebones builtin

  • 109: 9fa2c36 = 125: 6a313e3 update-microsoft-git: Windows implementation

  • 110: eeb8fb8 = 126: 7ee86e2 update-microsoft-git: use brew on macOS

  • 111: 6f05ba9 = 127: c189a2d .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 112: c7a8331 = 128: b86f2a6 .github: update PULL_REQUEST_TEMPLATE.md

  • 113: 61747ce = 129: 900486f Adjust README.md for microsoft/git

  • 120: 453d4eb = 130: c20c2d1 scalar: implement a minimal JSON parser

  • 121: a56de78 = 131: f786b08 scalar clone: support GVFS-enabled remote repositories

  • 122: 9cc3bf9 = 132: c1ff0e8 test-gvfs-protocol: also serve smart protocol

  • 123: 107a31f = 133: dc2db9d gvfs-helper: add the endpoint command

  • 124: 8708a4b = 134: a021409 dir_inside_of(): handle directory separators correctly

  • 125: bc239e7 = 135: 6d47434 scalar: disable authentication in unattended mode

  • 126: 20105da = 136: f216aba scalar: do initialize gvfs.sharedCache

  • 127: 6ec6b87 = 137: 0dff686 scalar diagnose: include shared cache info

  • 128: 80f9ccf = 138: aa25821 scalar: only try GVFS protocol on https:// URLs

  • 129: 894fd6f ! 139: 050b3f3 scalar: verify that we can use a GVFS-enabled repository

    @@ t/t9210-scalar.sh: test_expect_success UNZIP 'scalar diagnose' '
     +		test_path_is_missing 1/2 &&
     +		GIT_TRACE=$PWD/trace.txt git cat-file blob $second >actual &&
     +		: verify that the gvfs-helper was invoked to fetch it &&
    -+		test_i18ngrep gvfs-helper trace.txt &&
    ++		test_grep gvfs-helper trace.txt &&
     +		echo "second" >expect &&
     +		test_cmp expect actual
     +	)
  • 130: de5319c = 140: a18b560 scalar: add the cache-server command

  • 131: 7aaefa9 = 141: 3b173a2 scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 132: 2e09e47 = 142: cdb1a6a scalar: adjust documentation to the microsoft/git fork

  • 133: 728bf67 = 143: cef9988 scalar: enable untracked cache unconditionally

  • 134: 7386dd1 = 144: b5d3fb5 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 135: 03accb7 = 145: d555913 scalar diagnose: accommodate Scalar's Functional Tests

  • 136: e960ac0 = 146: 38eb66b ci: run Scalar's Functional Tests

  • 137: 99b9b65 = 147: 32051ef scalar: upgrade to newest FSMonitor config setting

  • 138: f80613f = 148: 743c169 abspath: make strip_last_path_component() global

  • 139: e0cbc01 = 149: a75677e scalar: .scalarCache should live above enlistment

  • 140: ab0c7de = 150: f007b7b add/rm: allow adding sparse entries when virtual

  • 141: 8577cb1 = 151: 1c03d59 sparse-checkout: add config to disable deleting dirs

  • 142: ee5b0c3 = 152: 2c89c1a diff: ignore sparse paths in diffstat

  • 143: e4ec64e = 153: 31952c7 repo-settings: enable sparse index by default

  • 144: 12f176c = 154: 8fc11dd diff(sparse-index): verify with partially-sparse

  • 145: 914a993 = 155: f81dd61 stash: expand testing for git stash -u

  • 147: ffd7346 = 156: acfcf9e sparse: add vfs-specific precautions

  • 148: a74960e = 157: 9373631 reset: fix mixed reset when using virtual filesystem

  • 156: c8fe603 = 158: 4bb7a11 credential: add new interactive config option

  • 157: a7642ea ! 159: 2ab2fe0 maintenance: add custom config to background jobs

    @@ Commit message
         systemd case due to writing the service files.
     
         Signed-off-by: Derrick Stolee <[email protected]>
    +    Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## builtin/gc.c ##
     @@ builtin/gc.c: static const char *get_frequency(enum schedule_priority schedule)
    @@ builtin/gc.c: static int launchctl_schedule_plist(const char *exec_path, enum sc
      		   "<string>--exec-path=%s</string>\n"
     +		   "%s" /* For extra config parameters. */
      		   "<string>for-each-repo</string>\n"
    + 		   "<string>--keep-going</string>\n"
      		   "<string>--config=maintenance.repo</string>\n"
    - 		   "<string>maintenance</string>\n"
     @@ builtin/gc.c: static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
      		   "</array>\n"
      		   "<key>StartCalendarInterval</key>\n"
    @@ builtin/gc.c: static int schtasks_schedule_task(const char *exec_path, enum sche
      	      "<Actions Context=\"Author\">\n"
      	      "<Exec>\n"
      	      "<Command>\"%s\\headless-git.exe\"</Command>\n"
    --	      "<Arguments>--exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
    -+	      "<Arguments>--exec-path=\"%s\" %s for-each-repo --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
    +-	      "<Arguments>--exec-path=\"%s\" for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
    ++	      "<Arguments>--exec-path=\"%s\" %s for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
      	      "</Exec>\n"
      	      "</Actions>\n"
      	      "</Task>\n";
    @@ builtin/gc.c: static int crontab_update_schedule(int run_maintenance, int fd)
      			"# replaced in the future by a Git command.\n\n");
      
      		strbuf_addf(&line_format,
    --			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%s\n",
    +-			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%s\n",
     -			    exec_path, exec_path);
    -+			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" %s for-each-repo --config=maintenance.repo maintenance run --schedule=%%s\n",
    ++			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" %s for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%s\n",
     +			    exec_path, exec_path, get_extra_config_parameters());
      		fprintf(cron_in, line_format.buf, minute, "1-23", "*", "hourly");
      		fprintf(cron_in, line_format.buf, minute, "0", "1-6", "daily");
    @@ builtin/gc.c: static int systemd_timer_write_service_template(const char *exec_p
      	       "\n"
      	       "[Service]\n"
      	       "Type=oneshot\n"
    --	       "ExecStart=\"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%i\n"
    -+	       "ExecStart=\"%s/git\" --exec-path=\"%s\" %s for-each-repo --config=maintenance.repo maintenance run --schedule=%%i\n"
    +-	       "ExecStart=\"%s/git\" --exec-path=\"%s\" for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%i\n"
    ++	       "ExecStart=\"%s/git\" --exec-path=\"%s\" %s for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%i\n"
      	       "LockPersonality=yes\n"
      	       "MemoryDenyWriteExecute=yes\n"
      	       "NoNewPrivileges=yes\n"
  • 158: f1896c9 = 160: ead3d37 scalar: configure maintenance during 'reconfigure'

  • 159: 3fba5cb = 161: bc9254f t5300: confirm failure of git index-pack when non-idx suffix requested

  • 160: ea013ed = 162: 6f85e26 index-pack: disable rev-index if index file has non .idx suffix

  • 161: 57a9598 = 163: e728546 sparse-index.c: fix use of index hashes in expand_index

  • 162: 187c9b0 = 164: 0460408 t1092: add test for untracked files and directories

  • 163: e35106f (upstream: b316552) < -: ----------- name-hash: add index_dir_find()

  • 164: 15e25b5 (upstream: 32ca706) < -: ----------- t7527: add case-insensitve test for FSMonitor

  • 165: ac5f796 (upstream: e5da3dd) < -: ----------- fsmonitor: refactor refresh callback on directory events

  • 166: 64c9b50 (upstream: 7a15a62) < -: ----------- fsmonitor: clarify handling of directory events in callback helper

  • 167: 7c8609c (upstream: 8687c2b) < -: ----------- fsmonitor: refactor refresh callback for non-directory events

  • 168: f4e4019 (upstream: 3e4ffda) < -: ----------- dir: create untracked_cache_invalidate_trimmed_path()

  • 169: 5fdd6fb (upstream: 48f4cd7) < -: ----------- fsmonitor: refactor untracked-cache invalidation

  • 170: 9628e45 (upstream: 7c97174) < -: ----------- fsmonitor: move untracked-cache invalidation into helper functions

  • 171: c3c49b4 (upstream: a524820) < -: ----------- fsmonitor: return invalidated cache-entry count on directory event

  • 172: 8e9dfb8 (upstream: 558d146) < -: ----------- fsmonitor: remove custom loop from non-directory path handler

  • 173: 405d568 (upstream: 9e34e56) < -: ----------- fsmonitor: return invalidated cache-entry count on non-directory event

  • 174: 428ed9d (upstream: 84d441f) < -: ----------- fsmonitor: trace the new invalidated cache-entry count

  • 175: 3357ac3 (upstream: b0dba50) < -: ----------- fsmonitor: refactor bit invalidation in refresh callback

  • 176: b1b11c1 (upstream: 29c139c) < -: ----------- fsmonitor: support case-insensitive events

  • 177: 4e9f006 (upstream: 0c1c3c8) < -: ----------- t0211: demonstrate missing 'def_param' events for certain commands

  • 178: cc026b2 (upstream: 520cf66) < -: ----------- trace2: avoid emitting 'def_param' set more than once

  • 179: 910c853 (upstream: 6111252) < -: ----------- trace2: emit 'def_param' set with 'cmd_name' event

  • 180: e7269ad < -: ----------- fixup! release: add installer validation

  • 181: 00bb8b3 < -: ----------- fixup! release: create draft GitHub release with packages & installers

  • 182: 94a7088 = 165: effbcff macos-installer/Makefile: debug dump linkage of build targets

  • 183: 1e44a0f = 166: 3b72420 workflow/build-git-installer: use OS supplied libcurl

  • 184: 3242311 (upstream: 3242311) < -: ----------- http: reset POSTFIELDSIZE when clearing curl handle

  • 185: c28ee09 (upstream: c28ee09) < -: ----------- INSTALL: bump libcurl version to 7.21.3

  • 186: 92a209b (upstream: 92a209b) < -: ----------- remote-curl: add Transfer-Encoding header only for older curl

  • 187: 6aabf8c < -: ----------- fixup! Add virtual file system settings and hook proc

  • 188: fd1d5e1 (upstream: 199f44c) < -: ----------- builtin/clone: allow remote helpers to detect repo

The big non-obvious change is this:

  • 157: a7642ea ! 159: 2ab2fe0 maintenance: add custom config to background jobs

    @@ Commit message
         systemd case due to writing the service files.
     
         Signed-off-by: Derrick Stolee <[email protected]>
    +    Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## builtin/gc.c ##
     @@ builtin/gc.c: static const char *get_frequency(enum schedule_priority schedule)
    @@ builtin/gc.c: static int launchctl_schedule_plist(const char *exec_path, enum sc
      		   "<string>--exec-path=%s</string>\n"
     +		   "%s" /* For extra config parameters. */
      		   "<string>for-each-repo</string>\n"
    + 		   "<string>--keep-going</string>\n"
      		   "<string>--config=maintenance.repo</string>\n"
    - 		   "<string>maintenance</string>\n"
     @@ builtin/gc.c: static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit
      		   "</array>\n"
      		   "<key>StartCalendarInterval</key>\n"
    @@ builtin/gc.c: static int schtasks_schedule_task(const char *exec_path, enum sche
      	      "<Actions Context=\"Author\">\n"
      	      "<Exec>\n"
      	      "<Command>\"%s\\headless-git.exe\"</Command>\n"
    --	      "<Arguments>--exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
    -+	      "<Arguments>--exec-path=\"%s\" %s for-each-repo --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
    +-	      "<Arguments>--exec-path=\"%s\" for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
    ++	      "<Arguments>--exec-path=\"%s\" %s for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%s</Arguments>\n"
      	      "</Exec>\n"
      	      "</Actions>\n"
      	      "</Task>\n";
    @@ builtin/gc.c: static int crontab_update_schedule(int run_maintenance, int fd)
      			"# replaced in the future by a Git command.\n\n");
      
      		strbuf_addf(&line_format,
    --			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%s\n",
    +-			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%s\n",
     -			    exec_path, exec_path);
    -+			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" %s for-each-repo --config=maintenance.repo maintenance run --schedule=%%s\n",
    ++			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" %s for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%s\n",
     +			    exec_path, exec_path, get_extra_config_parameters());
      		fprintf(cron_in, line_format.buf, minute, "1-23", "*", "hourly");
      		fprintf(cron_in, line_format.buf, minute, "0", "1-6", "daily");
    @@ builtin/gc.c: static int systemd_timer_write_service_template(const char *exec_p
      	       "\n"
      	       "[Service]\n"
      	       "Type=oneshot\n"
    --	       "ExecStart=\"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%i\n"
    -+	       "ExecStart=\"%s/git\" --exec-path=\"%s\" %s for-each-repo --config=maintenance.repo maintenance run --schedule=%%i\n"
    +-	       "ExecStart=\"%s/git\" --exec-path=\"%s\" for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%i\n"
    ++	       "ExecStart=\"%s/git\" --exec-path=\"%s\" %s for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%%i\n"
      	       "LockPersonality=yes\n"
      	       "MemoryDenyWriteExecute=yes\n"
      	       "NoNewPrivileges=yes\n"

That's because I moved the for-each-repo fix to the root of the branch thicket, and what merge conflicts were formerly resolved in 86c0809 are now folded into the actual conflicting commit.

There's also this, which is due to test_i18ngrep having retired:

  • 129: 894fd6f ! 139: 050b3f3 scalar: verify that we can use a GVFS-enabled repository

    @@ t/t9210-scalar.sh: test_expect_success UNZIP 'scalar diagnose' '
     +		test_path_is_missing 1/2 &&
     +		GIT_TRACE=$PWD/trace.txt git cat-file blob $second >actual &&
     +		: verify that the gvfs-helper was invoked to fetch it &&
    -+		test_i18ngrep gvfs-helper trace.txt &&
    ++		test_grep gvfs-helper trace.txt &&
     +		echo "second" >expect &&
     +		test_cmp expect actual
     +	)

Finally, this change is needed to make the -reftable CI jobs happy:

  • 78: ca192b7 ! 87: f5169aa test-gvfs-prococol, t5799: tests for gvfs-helper

    @@ Commit message
         [1] https://github.com/microsoft/VFSForGit/blob/master/Protocol.md
     
         Signed-off-by: Jeff Hostetler <[email protected]>
    +    Signed-off-by: Johannes Schindelin <[email protected]>
     
      ## Makefile ##
     @@ Makefile: endif
    @@ t/t5799-gvfs-helper.sh (new)
     +	# the new commits.
     +	#
     +	test_commit_bulk -C "$REPO_SRC" --filename="batch_a.%s.t" 9 &&
    -+	cp "$REPO_SRC"/.git/refs/heads/main m1.branch &&
    ++	git -C "$REPO_SRC" rev-parse refs/heads/main >m1.branch &&
     +	test_commit_bulk -C "$REPO_SRC" --filename="batch_b.%s.t" 9 &&
    -+	cp "$REPO_SRC"/.git/refs/heads/main m2.branch &&
    ++	git -C "$REPO_SRC" rev-parse refs/heads/main >m2.branch &&
     +	#
     +	# test_commit() creates commits, trees, tags, and blobs and leave
     +	# them loose.
    @@ t/t5799-gvfs-helper.sh (new)
     +	test_commit -C "$REPO_SRC" file7.txt &&
     +	test_commit -C "$REPO_SRC" file8.txt &&
     +	test_commit -C "$REPO_SRC" file9.txt &&
    -+	cp "$REPO_SRC"/.git/refs/heads/main m3.branch &&
    ++	git -C "$REPO_SRC" rev-parse refs/heads/main >m3.branch &&
     +	#
     +	# gvfs-helper.exe writes downloaded objects to a shared-cache directory
     +	# rather than the ODB inside the .git directory.

@dscho dscho self-assigned this Apr 23, 2024
@dscho dscho marked this pull request as draft April 23, 2024 14:54
@dscho dscho force-pushed the tentative/vfs-2.45.0 branch from 4b1e399 to 550ec75 Compare April 23, 2024 17:39
Copy link

@derrickstolee derrickstolee left a comment

Choose a reason for hiding this comment

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

Thanks, @dscho!

@dscho dscho marked this pull request as ready for review April 24, 2024 06:16
@dscho
Copy link
Member Author

dscho commented Apr 24, 2024

build-git-installers / prereqs (push) Failing after 2s

Ah yes. The version format fix...

@dscho dscho force-pushed the tentative/vfs-2.45.0 branch from 550ec75 to 4824feb Compare April 24, 2024 17:21
@dscho
Copy link
Member Author

dscho commented Apr 24, 2024

Range-diff relative to -rc0
  • 1: dfb63a6 = 1: 70e83f0 for-each-repo: optionally keep going on an error

  • 2: d70b66b = 2: a1d035a maintenance: running maintenance should not stop on errors

  • 3: 291baa1 = 3: 93bf69f reset --stdin: trim carriage return from the paths

  • 4: 7171e5c ! 4: 177ac31 Identify microsoft/git via a distinct version suffix

    @@ Commit message
      ## GIT-VERSION-GEN ##
     @@
      GVF=GIT-VERSION-FILE
    - DEF_VER=v2.45.0-rc0
    + DEF_VER=v2.45.0-rc1
      
     +# Identify microsoft/git via a distinct version suffix
     +DEF_VER=$DEF_VER.vfs.0.0
  • 5: 45448ec = 5: 4c3e4c7 gvfs: ensure that the version is based on a GVFS tag

  • 6: 3f492fa = 6: ddbdff7 gvfs: add a GVFS-specific header file

  • 7: 75ddd14 = 7: ed6040b gvfs: add the core.gvfs config setting

  • 8: 0dec18a = 8: a411eda gvfs: add the feature to skip writing the index' SHA-1

  • 9: 8b5f8b6 = 9: af8cf8b gvfs: add the feature that blobs may be missing

  • 10: d2756a0 = 10: 5375f85 gvfs: prevent files to be deleted outside the sparse checkout

  • 11: d2d9185 = 11: 0519f25 gvfs: optionally skip reachability checks/upload pack during fetch

  • 12: cc89974 = 12: 438a40c gvfs: ensure all filters and EOL conversions are blocked

  • 13: 01ec987 = 13: 7d290fa gvfs: allow "virtualizing" objects

  • 14: 77ececa = 14: 7fcc05c Hydrate missing loose objects in check_and_freshen()

  • 15: 1ebd6a6 = 15: af7912d sha1_file: when writing objects, skip the read_object_hook

  • 16: 8daad9f = 16: 3339769 gvfs: add global command pre and post hook procs

  • 17: 3cf79a7 = 17: 9783fb7 t0400: verify that the hook is called correctly from a subdirectory

  • 18: da90d91 = 18: d6e7c54 Pass PID of git process to hooks.

  • 19: 5567a3e = 19: ccf83fa pre-command: always respect core.hooksPath

  • 20: 2fa2c0c = 20: d2c4c75 sparse-checkout: update files with a modify/delete conflict

  • 21: e94543d = 21: 08e81ec sparse-checkout: avoid writing entries with the skip-worktree bit

  • 22: 43b4268 = 22: 319902c Do not remove files outside the sparse-checkout

  • 23: 7804aff = 23: 7e6f8e7 send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 24: 26b3cbc = 24: a4292e8 cache-tree: remove use of strbuf_addf in update_one

  • 25: 6b2941f = 25: 8156508 gvfs: block unsupported commands when running in a GVFS repo

  • 26: eb1a110 = 26: 4196162 worktree: allow in Scalar repositories

  • 27: e56fd83 = 27: c51d3e6 gvfs: allow overriding core.gvfs

  • 28: 143f6c8 = 28: 72b7884 BRANCHES.md: Add explanation of branches and using forks

  • 29: 8530efe = 29: 3780c1e Add virtual file system settings and hook proc

  • 30: d2859b2 = 30: 2600d2d virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 31: 69e43b2 = 31: d6ec6a2 virtualfilesystem: check if directory is included

  • 32: 6707a3b = 32: c23304e backwards-compatibility: support the post-indexchanged hook

  • 33: 0da573b = 33: fc9f8ff gvfs: verify that the built-in FSMonitor is disabled

  • 34: cdad578 = 34: 4a35120 status: add status serialization mechanism

  • 35: 21ab719 = 35: d5434c5 Teach ahead-behind and serialized status to play nicely together

  • 36: 01dd8aa = 36: cbbb521 status: serialize to path

  • 37: 1ca8d3d = 37: 64ea961 status: reject deserialize in V2 and conflicts

  • 38: 0d42119 = 38: 3221c80 serialize-status: serialize global and repo-local exclude file metadata

  • 39: 2110517 = 39: 8e76343 status: deserialization wait

  • 40: cf81231 = 40: a0fecd6 merge-recursive: avoid confusing logic in was_dirty()

  • 41: 6393c9e = 41: a84e3b5 merge-recursive: add some defensive coding to was_dirty()

  • 42: 2ea6a15 = 42: ceef491 merge-recursive: teach was_dirty() about the virtualfilesystem

  • 43: 0164495 = 43: a482d7c status: deserialize with -uno does not print correct hint

  • 44: 7f27df8 = 44: c6df971 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 45: b2289c3 = 45: 91f1441 fsmonitor: add script for debugging and update script for tests

  • 46: 178f355 = 46: c1c35cb status: disable deserialize when verbose output requested.

  • 47: 645bcd7 = 47: 6c31eb8 t7524: add test for verbose status deserialzation

  • 48: 81c16ea = 48: e3f36e1 deserialize-status: silently fallback if we cannot read cache file

  • 49: 67c0345 = 49: 7404dfe gvfs:trace2:data: add trace2 tracing around read_object_process

  • 50: 99d7bb0 = 50: 17ed8cb gvfs:trace2:data: status deserialization information

  • 51: 4066c3a = 51: b355676 gvfs:trace2:data: status serialization

  • 52: fea657c = 52: 1b6e0d8 gvfs:trace2:data: add vfs stats

  • 53: 2b6aec5 = 53: 36fff00 trace2: refactor setting process starting time

  • 54: 648829b = 54: 43b902a trace2:gvfs:experiment: clear_ce_flags_1

  • 55: 27d8220 = 55: a5fbf42 trace2:gvfs:experiment: report_tracking

  • 56: 0965bf1 = 56: e64eee6 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 57: 36ae2c4 = 57: 6102c27 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 58: a4aa7f8 = 58: 399d6d8 trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 59: b5e088c = 59: 4256989 trace2:gvfs:experiment: add region around unpack_trees()

  • 60: faaefd9 = 60: c50801c trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 61: b96ee3c = 61: 431351b trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 62: 34bed83 = 62: 6876cb7 trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 63: da2922f = 63: 5ceff9f trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 64: 6e7cb09 = 64: a680787 Trace2:gvfs:experiment: capture more 'tracking' details

  • 65: f7ea389 = 65: 25d73be credential: set trace2_child_class for credential manager children

  • 66: 4607e7a = 66: c78809e sub-process: do not borrow cmd pointer from caller

  • 67: 39242d3 = 67: 42c2d27 sub-process: add subprocess_start_argv()

  • 68: e7e2aa1 = 68: b8fdf55 sha1-file: add function to update existing loose object cache

  • 69: 67419c8 = 69: e359759 packfile: add install_packed_git_and_mru()

  • 70: 00ebc76 = 70: f285b2a index-pack: avoid immediate object fetch while parsing packfile

  • 71: af90c33 = 71: a9cebee gvfs-helper: create tool to fetch objects using the GVFS Protocol

  • 72: 83b2721 = 72: f6bf0e8 sha1-file: create shared-cache directory if it doesn't exist

  • 73: 2339e36 = 73: 6905887 gvfs-helper: better handling of network errors

  • 74: c1ae8f0 = 74: 916905b gvfs-helper-client: properly update loose cache with fetched OID

  • 75: 8606223 = 75: 299c6a9 gvfs-helper: V2 robust retry and throttling

  • 76: 5840ca3 = 76: 962445c gvfs-helper: expose gvfs/objects GET and POST semantics

  • 77: dcc1811 = 77: 990e7c9 gvfs-helper: dramatically reduce progress noise

  • 78: 6b467dd = 78: e7bd30e gvfs-helper-client.h: define struct object_id

  • 79: 623b1ab = 79: 94337cf gvfs-helper: handle pack-file after single POST request

  • 87: f5169aa = 80: 6820d1d test-gvfs-prococol, t5799: tests for gvfs-helper

  • 88: e6c58df = 81: 4958567 gvfs-helper: move result-list construction into install functions

  • 89: 35e19ad = 82: 42d3302 t5799: add support for POST to return either a loose object or packfile

  • 90: 05c140b = 83: a635088 t5799: cleanup wc-l and grep-c lines

  • 91: 08ad8fb = 84: 963e854 gvfs-helper: verify loose objects after write

  • 92: 50af98e = 85: 72c263c t7599: create corrupt blob test

  • 93: cd5322f = 86: e389b5e gvfs-helper: add prefetch support

  • 94: d812d69 = 87: cf45b8f gvfs-helper: add prefetch .keep file for last packfile

  • 95: 32a4133 = 88: ee871b6 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 96: f2c635d = 89: c0ca3f1 gvfs-helper: move content-type warning for prefetch packs

  • 97: 396a02c = 90: 9dea5fe fetch: use gvfs-helper prefetch under config

  • 98: d80e642 = 91: a09670a gvfs-helper: better support for concurrent packfile fetches

  • 99: 6313f62 = 92: 923ce33 remote-curl: do not call fetch-pack when using gvfs-helper

  • 100: 3dede70 = 93: ece5f79 fetch: reprepare packs before checking connectivity

  • 101: e944259 = 94: ea177bb gvfs-helper: retry when creating temp files

  • 102: 31397ce = 95: 97a2b95 sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 104: fc76147 = 96: cc4f729 maintenance: care about gvfs.sharedCache config

  • 106: f53a6c6 = 97: 3a735e4 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 108: ac6e2e2 = 98: 3e192ab homebrew: add GitHub workflow to release Cask

  • 103: caf7b64 = 99: cf5293d gvfs-helper: add --max-retries to prefetch verb

  • 109: 0bd8f07 = 100: 9e8fc93 Adding winget workflows

  • 105: faf4191 = 101: 863eb1b t5799: add tests to detect corrupt pack/idx files in prefetch

  • 110: 4e4074a = 102: 0bcec67 Disable the monitor-components workflow in msft-git

  • 107: bd1078c = 103: a9722b6 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 111: 291652c = 104: e50ad51 .github: enable windows builds on microsoft fork

  • 112: fcb9098 = 105: 0422949 release: create initial Windows installer build workflow

  • 124: c5bc89e = 106: 2bd13f0 update-microsoft-git: create barebones builtin

  • 113: 9cd2a8f = 107: 72b20f5 help: special-case HOST_CPU universal

  • 125: 6a313e3 = 108: 4bc99a8 update-microsoft-git: Windows implementation

  • 126: 7ee86e2 = 109: 87d9126 update-microsoft-git: use brew on macOS

  • 80: a111d41 = 110: cb1cfad git_config_set_multivar_in_file_gently(): add a lock timeout

  • 127: c189a2d = 111: c8971f4 .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 81: 53002f5 = 112: 5ca4036 scalar: set the config write-lock timeout to 150ms

  • 128: b86f2a6 = 113: e7f8911 .github: update PULL_REQUEST_TEMPLATE.md

  • 82: 9c869b3 = 114: 6be2e8d scalar: add docs from microsoft/scalar

  • 129: 900486f = 115: 5fefc74 Adjust README.md for microsoft/git

  • 83: 28554ba = 116: 7f2f117 scalar (Windows): use forward slashes as directory separators

  • 84: fcb838e = 117: 38a9eb3 scalar: add retry logic to run_git()

  • 85: 437450c = 118: 4dfdf2d scalar: support the config command for backwards compatibility

  • 130: c20c2d1 = 119: e192187 scalar: implement a minimal JSON parser

  • 131: f786b08 = 120: 9f5e046 scalar clone: support GVFS-enabled remote repositories

  • 132: c1ff0e8 = 121: abb5f4b test-gvfs-protocol: also serve smart protocol

  • 133: dc2db9d = 122: 68fe961 gvfs-helper: add the endpoint command

  • 134: a021409 = 123: 5e47d42 dir_inside_of(): handle directory separators correctly

  • 135: 6d47434 = 124: b63eb0b scalar: disable authentication in unattended mode

  • 136: f216aba = 125: 31bd7ee scalar: do initialize gvfs.sharedCache

  • 137: 0dff686 = 126: b1a08dc scalar diagnose: include shared cache info

  • 138: aa25821 = 127: 4fae3d5 scalar: only try GVFS protocol on https:// URLs

  • 139: 050b3f3 = 128: f9d3c0c scalar: verify that we can use a GVFS-enabled repository

  • 140: a18b560 = 129: 02bdd28 scalar: add the cache-server command

  • 141: 3b173a2 = 130: a992f2a scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 142: cdb1a6a = 131: 6b73092 scalar: adjust documentation to the microsoft/git fork

  • 143: cef9988 = 132: 573cf55 scalar: enable untracked cache unconditionally

  • 144: b5d3fb5 = 133: 4ffb02b scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 145: d555913 = 134: cc997d1 scalar diagnose: accommodate Scalar's Functional Tests

  • 146: 38eb66b = 135: 06ffe4c ci: run Scalar's Functional Tests

  • 147: 32051ef = 136: 0d811a2 scalar: upgrade to newest FSMonitor config setting

  • 148: 743c169 = 137: de83d90 abspath: make strip_last_path_component() global

  • 149: a75677e = 138: be0d249 scalar: .scalarCache should live above enlistment

  • 150: f007b7b = 139: edcff76 add/rm: allow adding sparse entries when virtual

  • 151: 1c03d59 = 140: e71f63c sparse-checkout: add config to disable deleting dirs

  • 152: 2c89c1a = 141: 9558320 diff: ignore sparse paths in diffstat

  • 153: 31952c7 = 142: c805420 repo-settings: enable sparse index by default

  • 154: 8fc11dd = 143: e99738d diff(sparse-index): verify with partially-sparse

  • 155: f81dd61 = 144: 0c7eca0 stash: expand testing for git stash -u

  • 86: dafb3e6 = 145: b264724 sequencer: avoid progress when stderr is redirected

  • 156: acfcf9e = 146: 0d11652 sparse: add vfs-specific precautions

  • 157: 9373631 = 147: 63e0b67 reset: fix mixed reset when using virtual filesystem

  • 114: a820f95 ! 148: 79d186f release: add Mac OSX installer build

    @@ .github/macos-installer/Makefile (new)
     +$(BUILD_DIR)/git-$(VERSION)/osx-built:
     +	[ -d $(DESTDIR)$(GIT_PREFIX) ] && $(SUDO) rm -rf $(DESTDIR) || echo ok
     +	cd $(BUILD_DIR)/git-$(VERSION); $(SUBMAKE) -j $(CORES) all strip
    ++	echo "================"
    ++	echo "Dumping Linkage"
    ++	cd $(BUILD_DIR)/git-$(VERSION); ./git version
    ++	echo "===="
    ++	cd $(BUILD_DIR)/git-$(VERSION); /usr/bin/otool -L ./git
    ++	echo "===="
    ++	cd $(BUILD_DIR)/git-$(VERSION); /usr/bin/otool -L ./git-http-fetch
    ++	echo "===="
    ++	cd $(BUILD_DIR)/git-$(VERSION); /usr/bin/otool -L ./git-http-push
    ++	echo "===="
    ++	cd $(BUILD_DIR)/git-$(VERSION); /usr/bin/otool -L ./git-remote-http
    ++	echo "===="
    ++	cd $(BUILD_DIR)/git-$(VERSION); /usr/bin/otool -L ./git-gvfs-helper
    ++	echo "================"
     +	touch $@
     +
     +$(BUILD_DIR)/git-$(VERSION)/osx-installed-bin: $(BUILD_DIR)/git-$(VERSION)/osx-built $(BUILD_DIR)/git-$(VERSION)/osx-built-keychain
    @@ .github/workflows/build-git-installers.yml: jobs:
     +
     +          # Install x86_64 packages
     +          arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    -+          arch -x86_64 /usr/local/bin/brew install gettext curl
    ++          arch -x86_64 /usr/local/bin/brew install gettext
     +
     +          # Install arm64 packages
     +          brew install automake asciidoc xmlto docbook
     +          brew link --force gettext
     +
    -+          # Make universal gettext and curl library
    ++          # Make universal gettext library
     +          lipo -create -output libintl.a /usr/local/opt/gettext/lib/libintl.a /opt/homebrew/opt/gettext/lib/libintl.a
    -+          lipo -create -output libcurl.dylib /opt/homebrew/opt/curl/lib/libcurl.4.dylib /usr/local/opt/curl/lib/libcurl.4.dylib
     +
     +      - name: Set up signing/notarization infrastructure
     +        env:
    @@ .github/workflows/build-git-installers.yml: jobs:
     +          LDFLAGS = -L"$(pwd)"
     +          EOF
     +
    -+          # Configure the Git build to pick up the universal `libcurl.dylib`
    ++          # Configure the Git to use the OS supplied libcurl.
     +          cat >>git/config.mak <<EOF
    -+          CURL_LDFLAGS := -L"$(pwd)" -lcurl
    ++          CURL_LDFLAGS := -lcurl
     +          CURL_CONFIG := /usr/bin/true
     +          EOF
     +
  • 115: a71ecee = 149: f656408 release: build unsigned Ubuntu .deb package

  • 116: 121afe8 = 150: 128398e release: add signing step for .deb package

  • 117: bb505f1 = 151: c1d9ba0 release: create draft GitHub release with packages & installers

  • 118: aa56c24 = 152: ce3e7f8 build-git-installers: publish gpg public key

  • 119: 4bc3c28 = 153: ffd2051 release: continue pestering until user upgrades

  • 120: 18ca753 = 154: c3d90c7 Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 121: faeb084 = 155: e260578 dist: archive HEAD instead of HEAD^{tree}

  • 122: a4900ea = 156: 90d4e46 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 123: 6ee0e1b = 157: 6b9ecaa release: add installer validation

  • 158: 4bb7a11 = 158: 388a42a credential: add new interactive config option

  • 159: 2ab2fe0 = 159: b683982 maintenance: add custom config to background jobs

  • 160: ead3d37 = 160: 58c5bd2 scalar: configure maintenance during 'reconfigure'

  • 161: bc9254f = 161: 0f36a6d t5300: confirm failure of git index-pack when non-idx suffix requested

  • 162: 6f85e26 = 162: 9604e77 index-pack: disable rev-index if index file has non .idx suffix

  • 163: e728546 = 163: b590df6 sparse-index.c: fix use of index hashes in expand_index

  • 164: 0460408 = 164: e768441 t1092: add test for untracked files and directories

  • 165: effbcff < -: ----------- macos-installer/Makefile: debug dump linkage of build targets

  • 166: 3b72420 < -: ----------- workflow/build-git-installer: use OS supplied libcurl

I used the opportunity to fold these two into 79d186f:

  • 165: effbcff < -: ----------- macos-installer/Makefile: debug dump linkage of build targets
  • 166: 3b72420 < -: ----------- workflow/build-git-installer: use OS supplied libcurl

@derrickstolee
Copy link

@dscho was the rebase clean through the version number change as you had hoped?

Copy link
Member Author

dscho commented Apr 25, 2024

Yup!

dscho and others added 17 commits April 29, 2024 21:48
We already have a directory where we store files intended for use by
multiple test scripts. The same directory is a better home for the
test-binary-*.png files than t/.

Signed-off-by: Johannes Schindelin <[email protected]>
On Windows, symbolic links have a type: a "file symlink" must point at
a file, and a "directory symlink" must point at a directory. If the
type of symlink does not match its target, it doesn't work.

Git does not record the type of symlink in the index or in a tree. On
checkout it'll guess the type, which only works if the target exists
at the time the symlink is created. This may often not be the case,
for example when the link points at a directory inside a submodule.

By specifying `symlink=file` or `symlink=dir` the user can specify what
type of symlink Git should create, so Git doesn't have to rely on
unreliable heuristics.

Signed-off-by: Bert Belder <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
The idea is to allow running the test suite on MinGit with BusyBox
installed in /mingw64/bin/sh.exe. In that case, we will want to exclude
sort & find (and other Unix utilities) from being bundled.

Signed-off-by: Johannes Schindelin <[email protected]>
To verify that the symlink is resolved correctly, we use the fact that
`git.exe` is a native Win32 program, and that `git.exe config -f <path>`
therefore uses the native symlink resolution.

Signed-off-by: Bert Belder <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
BusyBox-w32 is a true Win32 application, i.e. it does not come with a
POSIX emulation layer.

That also means that it does *not* use the Unix convention of separating
the entries in the PATH variable using colons, but semicolons.

However, there are also BusyBox ports to Windows which use a POSIX
emulation layer such as Cygwin's or MSYS2's runtime, i.e. using colons
as PATH separators.

As a tell-tale, let's use the presence of semicolons in the PATH
variable: on Unix, it is highly unlikely that it contains semicolons,
and on Windows (without POSIX emulation), it is virtually guaranteed, as
everybody should have both $SYSTEMROOT and $SYSTEMROOT/system32 in their
PATH.

Signed-off-by: Johannes Schindelin <[email protected]>
Traditionally, Git for Windows' SDK uses Bash as its default shell.
However, other Unix shells are available, too. Most notably, the Win32
port of BusyBox comes with `ash` whose `pwd` command already prints
Windows paths as Git for Windows wants them, while there is not even a
`builtin` command.

Therefore, let's be careful not to override `pwd` unless we know that
the `builtin` command is available.

Signed-off-by: Johannes Schindelin <[email protected]>
The -W option is only understood by MSYS2 Bash's pwd command. We already
make sure to override `pwd` by `builtin pwd -W` for MINGW, so let's not
double the effort here.

This will also help when switching the shell to another one (such as
BusyBox' ash) whose pwd does *not* understand the -W option.

Signed-off-by: Johannes Schindelin <[email protected]>
When running with BusyBox, we will want to avoid calling executables on
the PATH that are implemented in BusyBox itself.

Signed-off-by: Johannes Schindelin <[email protected]>
At some stage, t5003-archive-zip wants to add a file that is not ASCII.
To that end, it uses /bin/sh. But that file may actually not exist (it
is too easy to forget that not all the world is Unix/Linux...)! Besides,
we already have perfectly fine binary files intended for use solely by
the tests. So let's use one of them instead.

Signed-off-by: Johannes Schindelin <[email protected]>
While it may seem super convenient to some old Unix hands to simpy
require Perl to be available when running the test suite, this is a
major hassle on Windows, where we want to verify that Perl is not,
actually, required in a NO_PERL build.

As a super ugly workaround, we "install" a script into /usr/bin/perl
reading like this:

	#!/bin/sh

	# We'd much rather avoid requiring Perl altogether when testing
	# an installed Git. Oh well, that's why we cannot have nice
	# things.
	exec c:/git-sdk-64/usr/bin/perl.exe "$@"

The problem with that is that BusyBox assumes that the #! line in a
script refers to an executable, not to a script. So when it encounters
the line #!/usr/bin/perl in t5532's proxy-get-cmd, it barfs.

Let's help this situation by simply executing the Perl script with the
"interpreter" specified explicitly.

Signed-off-by: Johannes Schindelin <[email protected]>
When t5605 tries to verify that files are hardlinked (or that they are
not), it uses the `-links` option of the `find` utility.

BusyBox' implementation does not support that option, and BusyBox-w32's
lstat() does not even report the number of hard links correctly (for
performance reasons).

So let's just switch to a different method that actually works on
Windows.

Signed-off-by: Johannes Schindelin <[email protected]>
Git for Windows uses MSYS2's Bash to run the test suite, which comes
with benefits but also at a heavy price: on the plus side, MSYS2's
POSIX emulation layer allows us to continue pretending that we are on a
Unix system, e.g. use Unix paths instead of Windows ones, yet this is
bought at a rather noticeable performance penalty.

There *are* some more native ports of Unix shells out there, though,
most notably BusyBox-w32's ash. These native ports do not use any POSIX
emulation layer (or at most a *very* thin one, choosing to avoid
features such as fork() that are expensive to emulate on Windows), and
they use native Windows paths (usually with forward slashes instead of
backslashes, which is perfectly legal in almost all use cases).

And here comes the problem: with a $PWD looking like, say,
C:/git-sdk-64/usr/src/git/t/trash directory.t5813-proto-disable-ssh
Git's test scripts get quite a bit confused, as their assumptions have
been shattered. Not only does this path contain a colon (oh no!), it
also does not start with a slash.

This is a problem e.g. when constructing a URL as t5813 does it:
ssh://remote$PWD. Not only is it impossible to separate the "host" from
the path with a $PWD as above, even prefixing $PWD by a slash won't
work, as /C:/git-sdk-64/... is not a valid path.

As a workaround, detect when $PWD does not start with a slash on
Windows, and simply strip the drive prefix, using an obscure feature of
Windows paths: if an absolute Windows path starts with a slash, it is
implicitly prefixed by the drive prefix of the current directory. As we
are talking about the current directory here, anyway, that strategy
works.

Signed-off-by: Johannes Schindelin <[email protected]>
On Windows, the current working directory is pretty much guaranteed to
contain a colon. If we feed that path to CVS, it mistakes it for a
separator between host and port, though.

This has not been a problem so far because Git for Windows uses MSYS2's
Bash using a POSIX emulation layer that also pretends that the current
directory is a Unix path (at least as long as we're in a shell script).

However, that is rather limiting, as Git for Windows also explores other
ports of other Unix shells. One of those is BusyBox-w32's ash, which is
a native port (i.e. *not* using any POSIX emulation layer, and certainly
not emulating Unix paths).

So let's just detect if there is a colon in $PWD and punt in that case.

Signed-off-by: Johannes Schindelin <[email protected]>
The TerminateProcess() function does not actually leave the child
processes any chance to perform any cleanup operations. This is bad
insofar as Git itself expects its signal handlers to run.

A symptom is e.g. a left-behind .lock file that would not be left behind
if the same operation was run, say, on Linux.

To remedy this situation, we use an obscure trick: we inject a thread
into the process that needs to be killed and to let that thread run the
ExitProcess() function with the desired exit status. Thanks J Wyman for
describing this trick.

The advantage is that the ExitProcess() function lets the atexit
handlers run. While this is still different from what Git expects (i.e.
running a signal handler), in practice Git sets up signal handlers and
atexit handlers that call the same code to clean up after itself.

In case that the gentle method to terminate the process failed, we still
fall back to calling TerminateProcess(), but in that case we now also
make sure that processes spawned by the spawned process are terminated;
TerminateProcess() does not give the spawned process a chance to do so
itself.

Please note that this change only affects how Git for Windows tries to
terminate processes spawned by Git's own executables. Third-party
software that *calls* Git and wants to terminate it *still* need to make
sure to imitate this gentle method, otherwise this patch will not have
any effect.

Signed-off-by: Johannes Schindelin <[email protected]>
The Makefile target `install-mingit-test-artifacts` simply copies stuff
and things directly into a MinGit directory, including an init.bat
script to set everything up so that the tests can be run in a cmd
window.

Sadly, Git's test suite still relies on a Perl interpreter even if
compiled with NO_PERL=YesPlease. We punt for now, installing a small
script into /usr/bin/perl that hands off to an existing Perl of a Git
for Windows SDK.

Signed-off-by: Johannes Schindelin <[email protected]>
The Windows Subsystem for Linux (WSL) version 2 allows to use `chmod` on
NTFS volumes provided that they are mounted with metadata enabled (see
https://devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements/
for details), for example:

	$ chmod 0755 /mnt/d/test/a.sh

In order to facilitate better collaboration between the Windows
version of Git and the WSL version of Git, we can make the Windows
version of Git also support reading and writing NTFS file modes
in a manner compatible with WSL.

Since this slightly slows down operations where lots of files are
created (such as an initial checkout), this feature is only enabled when
`core.WSLCompat` is set to true. Note that you also have to set
`core.fileMode=true` in repositories that have been initialized without
enabling WSL compatibility.

There are several ways to enable metadata loading for NTFS volumes
in WSL, one of which is to modify `/etc/wsl.conf` by adding:

```
[automount]
enabled = true
options = "metadata,umask=027,fmask=117"
```

And reboot WSL.

It can also be enabled temporarily by this incantation:

	$ sudo umount /mnt/c &&
	  sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=111

It's important to note that this modification is compatible with, but
does not depend on WSL. The helper functions in this commit can operate
independently and functions normally on devices where WSL is not
installed or properly configured.

Signed-off-by: xungeng li <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
Rather than using private IFTTT Applets that send mails to this
maintainer whenever a new version of a Git for Windows component was
released, let's use the power of GitHub workflows to make this process
publicly visible.

This workflow monitors the Atom/RSS feeds, and opens a ticket whenever a
new version was released.

Note: Bash sometimes releases multiple patched versions within a few
minutes of each other (i.e. 5.1p1 through 5.1p4, 5.0p15 and 5.0p16). The
MSYS2 runtime also has a similar system. We can address those patches as
a group, so we shouldn't get multiple issues about them.

Note further: We're not acting on newlib releases, OpenSSL alphas, Perl
release candidates or non-stable Perl releases. There's no need to open
issues about them.

Co-authored-by: Matthias Aßhauer <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
vdye and others added 15 commits April 29, 2024 22:02
Implement workflow to create GitHub release with attached `git` installers
Fixes for MacOS release build & build options
This adds a new builtin, `git update-microsoft-git`, that executes the platform-specific upgrade steps to get the latest version of `microsoft-git`.

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

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

Fix the built-in FSMonitor, and run Scalar's Functional Tests as part of the automated builds
This is random stuff that probably all got upstream in the meantime.
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 <[email protected]>
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 <[email protected]>
Signed-off-by: Johannes Schindelin <[email protected]>
Add test case to demonstrate that `git index-pack -o <idx-path> pack-path`
fails if <idx-path> does not end in ".idx" when `--rev-index` is
enabled.

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

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

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

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

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

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

Signed-off-by: Victoria Dye <[email protected]>
Teach index-pack to silently omit the reverse index if the
index file does not have the standard ".idx" suffix.

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

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

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

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

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

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

Signed-off-by: Jeff Hostetler <[email protected]>
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 <[email protected]>
Add a test verifying that sparse-checkout (with and without sparse index
enabled) treat untracked files & directories correctly when changing sparse
patterns. Specifically, it ensures that 'git sparse-checkout set'

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

Signed-off-by: Victoria Dye <[email protected]>
Cherry-pick rev-index fixes from v2.41.0.vfs.0.5 into v2.42.0.*
@dscho dscho force-pushed the tentative/vfs-2.45.0 branch from 4824feb to b68812e Compare April 29, 2024 20:05
@dscho
Copy link
Member Author

dscho commented Apr 29, 2024

Range-diff relative to v2.45.0-rc1
  • 1: 70e83f0 = 1: c5eb22f for-each-repo: optionally keep going on an error

  • 2: a1d035a = 2: 39cf372 maintenance: running maintenance should not stop on errors

  • 3: 93bf69f = 3: 8fc81fb reset --stdin: trim carriage return from the paths

  • 4: 177ac31 ! 4: 11a339e Identify microsoft/git via a distinct version suffix

    @@ Commit message
      ## GIT-VERSION-GEN ##
     @@
      GVF=GIT-VERSION-FILE
    - DEF_VER=v2.45.0-rc1
    + DEF_VER=v2.45.0
      
     +# Identify microsoft/git via a distinct version suffix
     +DEF_VER=$DEF_VER.vfs.0.0
  • 5: 4c3e4c7 = 5: 2d5d918 gvfs: ensure that the version is based on a GVFS tag

  • 6: ddbdff7 = 6: 00d0db0 gvfs: add a GVFS-specific header file

  • 7: ed6040b = 7: 1630ca4 gvfs: add the core.gvfs config setting

  • 8: a411eda = 8: add4a59 gvfs: add the feature to skip writing the index' SHA-1

  • 9: af8cf8b = 9: 912f104 gvfs: add the feature that blobs may be missing

  • 10: 5375f85 = 10: cc76156 gvfs: prevent files to be deleted outside the sparse checkout

  • 11: 0519f25 = 11: 0b42dcd gvfs: optionally skip reachability checks/upload pack during fetch

  • 12: 438a40c = 12: 05f8c12 gvfs: ensure all filters and EOL conversions are blocked

  • 13: 7d290fa = 13: fa0e159 gvfs: allow "virtualizing" objects

  • 14: 7fcc05c = 14: d6ee336 Hydrate missing loose objects in check_and_freshen()

  • 15: af7912d = 15: 156a40f sha1_file: when writing objects, skip the read_object_hook

  • 16: 3339769 = 16: 7402811 gvfs: add global command pre and post hook procs

  • 17: 9783fb7 = 17: e7bf03f t0400: verify that the hook is called correctly from a subdirectory

  • 18: d6e7c54 = 18: 7f7b1ae Pass PID of git process to hooks.

  • 19: ccf83fa = 19: daba665 pre-command: always respect core.hooksPath

  • 20: d2c4c75 = 20: ea46c9b sparse-checkout: update files with a modify/delete conflict

  • 21: 08e81ec = 21: 9bb3d30 sparse-checkout: avoid writing entries with the skip-worktree bit

  • 22: 319902c = 22: 64b8e55 Do not remove files outside the sparse-checkout

  • 23: 7e6f8e7 = 23: df0ee3a send-pack: do not check for sha1 file when GVFS_MISSING_OK set

  • 24: a4292e8 = 24: a2aad6e cache-tree: remove use of strbuf_addf in update_one

  • 25: 8156508 = 25: 379037d gvfs: block unsupported commands when running in a GVFS repo

  • 26: 4196162 = 26: f5f8667 worktree: allow in Scalar repositories

  • 27: c51d3e6 = 27: 559d22d gvfs: allow overriding core.gvfs

  • 28: 72b7884 = 28: 915dd0e BRANCHES.md: Add explanation of branches and using forks

  • 29: 3780c1e = 29: fb3896b Add virtual file system settings and hook proc

  • 30: 2600d2d = 30: 3a23415 virtualfilesystem: don't run the virtual file system hook if the index has been redirected

  • 31: d6ec6a2 = 31: fd88f1d virtualfilesystem: check if directory is included

  • 32: c23304e = 32: a235f3e backwards-compatibility: support the post-indexchanged hook

  • 33: fc9f8ff = 33: 2d54645 gvfs: verify that the built-in FSMonitor is disabled

  • 34: 4a35120 = 34: 463c44a status: add status serialization mechanism

  • 35: d5434c5 = 35: 053e352 Teach ahead-behind and serialized status to play nicely together

  • 36: cbbb521 = 36: 4b646b4 status: serialize to path

  • 37: 64ea961 = 37: 58c9b0b status: reject deserialize in V2 and conflicts

  • 38: 3221c80 = 38: b46bedb serialize-status: serialize global and repo-local exclude file metadata

  • 39: 8e76343 = 39: d917783 status: deserialization wait

  • 40: a0fecd6 = 40: 801300d merge-recursive: avoid confusing logic in was_dirty()

  • 41: a84e3b5 = 41: 5a58776 merge-recursive: add some defensive coding to was_dirty()

  • 42: ceef491 = 42: 7a43c9a merge-recursive: teach was_dirty() about the virtualfilesystem

  • 43: a482d7c = 43: 006fb39 status: deserialize with -uno does not print correct hint

  • 44: c6df971 = 44: e383198 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate

  • 45: 91f1441 = 45: 7002ec2 fsmonitor: add script for debugging and update script for tests

  • 46: c1c35cb = 46: ab232b3 status: disable deserialize when verbose output requested.

  • 47: 6c31eb8 = 47: dd16e4f t7524: add test for verbose status deserialzation

  • 48: e3f36e1 = 48: c51d610 deserialize-status: silently fallback if we cannot read cache file

  • 49: 7404dfe = 49: d1b84be gvfs:trace2:data: add trace2 tracing around read_object_process

  • 50: 17ed8cb = 50: 323ae62 gvfs:trace2:data: status deserialization information

  • 51: b355676 = 51: 0983325 gvfs:trace2:data: status serialization

  • 52: 1b6e0d8 = 52: 8ff9081 gvfs:trace2:data: add vfs stats

  • 53: 36fff00 = 53: 316985c trace2: refactor setting process starting time

  • 54: 43b902a = 54: ffa6a7a trace2:gvfs:experiment: clear_ce_flags_1

  • 55: a5fbf42 = 55: 6ed0189 trace2:gvfs:experiment: report_tracking

  • 56: e64eee6 = 56: 61f3777 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache

  • 57: 6102c27 = 57: 7e259e1 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension

  • 58: 399d6d8 = 58: 485d47e trace2:gvfs:experiment: add region to apply_virtualfilesystem()

  • 59: 4256989 = 59: 63eadcf trace2:gvfs:experiment: add region around unpack_trees()

  • 60: c50801c = 60: 3f6652a trace2:gvfs:experiment: add region to cache_tree_fully_valid()

  • 61: 431351b = 61: cb0d9f6 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking()

  • 62: 6876cb7 = 62: 3431711 trace2:gvfs:experiment: increase default event depth for unpack-tree data

  • 63: 5ceff9f = 63: 62d510e trace2:gvfs:experiment: add data for check_updates() in unpack_trees()

  • 64: a680787 = 64: 244c418 Trace2:gvfs:experiment: capture more 'tracking' details

  • 65: 25d73be = 65: 5223a1f credential: set trace2_child_class for credential manager children

  • 66: c78809e = 66: fe1cf67 sub-process: do not borrow cmd pointer from caller

  • 67: 42c2d27 = 67: f277df4 sub-process: add subprocess_start_argv()

  • 68: b8fdf55 = 68: db65d92 sha1-file: add function to update existing loose object cache

  • 69: e359759 = 69: 2e22b51 packfile: add install_packed_git_and_mru()

  • 70: f285b2a = 70: 582dec7 index-pack: avoid immediate object fetch while parsing packfile

  • 71: a9cebee = 71: 9f20de3 gvfs-helper: create tool to fetch objects using the GVFS Protocol

  • 72: f6bf0e8 = 72: 229b5be sha1-file: create shared-cache directory if it doesn't exist

  • 73: 6905887 = 73: 7b059df gvfs-helper: better handling of network errors

  • 74: 916905b = 74: 091bf68 gvfs-helper-client: properly update loose cache with fetched OID

  • 75: 299c6a9 = 75: aaa2c89 gvfs-helper: V2 robust retry and throttling

  • 76: 962445c = 76: c869fa7 gvfs-helper: expose gvfs/objects GET and POST semantics

  • 77: 990e7c9 = 77: 2da2d65 gvfs-helper: dramatically reduce progress noise

  • 78: e7bd30e = 78: d83f757 gvfs-helper-client.h: define struct object_id

  • 79: 94337cf = 79: e49eee5 gvfs-helper: handle pack-file after single POST request

  • 80: 6820d1d = 80: c128fc0 test-gvfs-prococol, t5799: tests for gvfs-helper

  • 81: 4958567 = 81: 9a9fe2b gvfs-helper: move result-list construction into install functions

  • 82: 42d3302 = 82: a5ce642 t5799: add support for POST to return either a loose object or packfile

  • 83: a635088 = 83: 51d2920 t5799: cleanup wc-l and grep-c lines

  • 84: 963e854 = 84: f11ed18 gvfs-helper: verify loose objects after write

  • 85: 72c263c = 85: c484229 t7599: create corrupt blob test

  • 86: e389b5e = 86: f5af304 gvfs-helper: add prefetch support

  • 87: cf45b8f = 87: af3935a gvfs-helper: add prefetch .keep file for last packfile

  • 88: ee871b6 = 88: 45c6634 gvfs-helper: do one read in my_copy_fd_len_tail()

  • 89: c0ca3f1 = 89: a3ee045 gvfs-helper: move content-type warning for prefetch packs

  • 90: 9dea5fe = 90: 00d4feb fetch: use gvfs-helper prefetch under config

  • 91: a09670a = 91: 04ee5a1 gvfs-helper: better support for concurrent packfile fetches

  • 92: 923ce33 = 92: 733f9ad remote-curl: do not call fetch-pack when using gvfs-helper

  • 93: ece5f79 = 93: f980c67 fetch: reprepare packs before checking connectivity

  • 94: ea177bb = 94: dbc55cc gvfs-helper: retry when creating temp files

  • 95: 97a2b95 = 95: a788951 sparse: avoid warnings about known cURL issues in gvfs-helper.c

  • 96: cc4f729 = 96: 4cb8f09 maintenance: care about gvfs.sharedCache config

  • 99: cf5293d = 97: 87e7e61 gvfs-helper: add --max-retries to prefetch verb

  • 97: 3a735e4 = 98: eac30a5 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags

  • 101: 863eb1b = 99: 77475d4 t5799: add tests to detect corrupt pack/idx files in prefetch

  • 98: 3e192ab = 100: 528a8b1 homebrew: add GitHub workflow to release Cask

  • 103: a9722b6 = 101: d480477 gvfs-helper: ignore .idx files in prefetch multi-part responses

  • 100: 9e8fc93 = 102: c620a9f Adding winget workflows

  • 102: 0bcec67 = 103: ba54b36 Disable the monitor-components workflow in msft-git

  • 104: e50ad51 = 104: e59be1f .github: enable windows builds on microsoft fork

  • 105: 0422949 = 105: 1da0231 release: create initial Windows installer build workflow

  • 107: 72b20f5 = 106: e1c6147 help: special-case HOST_CPU universal

  • 148: 79d186f = 107: 60feff2 release: add Mac OSX installer build

  • 149: f656408 = 108: 2098c27 release: build unsigned Ubuntu .deb package

  • 150: 128398e = 109: f5e773e release: add signing step for .deb package

  • 151: c1d9ba0 = 110: 4c61c1f release: create draft GitHub release with packages & installers

  • 152: ce3e7f8 = 111: 16ca68a build-git-installers: publish gpg public key

  • 153: ffd2051 = 112: d0462da release: continue pestering until user upgrades

  • 154: c3d90c7 = 113: 56e5fec Makefile: allow specifying GIT_BUILT_FROM_COMMIT

  • 155: e260578 = 114: 62524e2 dist: archive HEAD instead of HEAD^{tree}

  • 156: 90d4e46 = 115: 4325d16 release: include GIT_BUILT_FROM_COMMIT in MacOS build

  • 157: 6b9ecaa = 116: 024e386 release: add installer validation

  • 106: 2bd13f0 = 117: 586cda0 update-microsoft-git: create barebones builtin

  • 108: 4bc99a8 = 118: 3a3c47b update-microsoft-git: Windows implementation

  • 109: 87d9126 = 119: 08d7d2f update-microsoft-git: use brew on macOS

  • 111: c8971f4 = 120: 12ac17a .github: update ISSUE_TEMPLATE.md for microsoft/git

  • 110: cb1cfad = 121: bad0bc3 git_config_set_multivar_in_file_gently(): add a lock timeout

  • 113: e7f8911 = 122: 3b43886 .github: update PULL_REQUEST_TEMPLATE.md

  • 112: 5ca4036 = 123: 4b9cb8a scalar: set the config write-lock timeout to 150ms

  • 115: 5fefc74 = 124: a5b0281 Adjust README.md for microsoft/git

  • 114: 6be2e8d = 125: dfd1877 scalar: add docs from microsoft/scalar

  • 116: 7f2f117 = 126: e4139c5 scalar (Windows): use forward slashes as directory separators

  • 117: 38a9eb3 = 127: 32eb925 scalar: add retry logic to run_git()

  • 118: 4dfdf2d = 128: c65f878 scalar: support the config command for backwards compatibility

  • 119: e192187 = 129: 306a13a scalar: implement a minimal JSON parser

  • 120: 9f5e046 = 130: 321a4a5 scalar clone: support GVFS-enabled remote repositories

  • 121: abb5f4b = 131: 11c9190 test-gvfs-protocol: also serve smart protocol

  • 122: 68fe961 = 132: 8538f2c gvfs-helper: add the endpoint command

  • 123: 5e47d42 = 133: 8f7412b dir_inside_of(): handle directory separators correctly

  • 124: b63eb0b = 134: 418b97a scalar: disable authentication in unattended mode

  • 125: 31bd7ee = 135: bdb620d scalar: do initialize gvfs.sharedCache

  • 126: b1a08dc = 136: 7685c29 scalar diagnose: include shared cache info

  • 127: 4fae3d5 = 137: a4fc1df scalar: only try GVFS protocol on https:// URLs

  • 128: f9d3c0c = 138: fd51fa5 scalar: verify that we can use a GVFS-enabled repository

  • 129: 02bdd28 = 139: 9f18d97 scalar: add the cache-server command

  • 130: a992f2a = 140: f6efa1c scalar: add a test toggle to skip accessing the vsts/info endpoint

  • 131: 6b73092 = 141: 1df44f6 scalar: adjust documentation to the microsoft/git fork

  • 132: 573cf55 = 142: ce372e8 scalar: enable untracked cache unconditionally

  • 133: 4ffb02b = 143: e8374f9 scalar: parse clone --no-fetch-commits-and-trees for backwards compatibility

  • 134: cc997d1 = 144: 267f68c scalar diagnose: accommodate Scalar's Functional Tests

  • 135: 06ffe4c = 145: 9eb2a07 ci: run Scalar's Functional Tests

  • 136: 0d811a2 = 146: 5854c30 scalar: upgrade to newest FSMonitor config setting

  • 137: de83d90 = 147: 3940c78 abspath: make strip_last_path_component() global

  • 138: be0d249 = 148: f505c40 scalar: .scalarCache should live above enlistment

  • 139: edcff76 = 149: 052c63e add/rm: allow adding sparse entries when virtual

  • 140: e71f63c = 150: 518476a sparse-checkout: add config to disable deleting dirs

  • 141: 9558320 = 151: c168c25 diff: ignore sparse paths in diffstat

  • 142: c805420 = 152: c2ba772 repo-settings: enable sparse index by default

  • 143: e99738d = 153: c33429b diff(sparse-index): verify with partially-sparse

  • 144: 0c7eca0 = 154: 8a7808a stash: expand testing for git stash -u

  • 145: b264724 = 155: 1b65e5f sequencer: avoid progress when stderr is redirected

  • 146: 0d11652 = 156: 49adf44 sparse: add vfs-specific precautions

  • 147: 63e0b67 = 157: 72afab7 reset: fix mixed reset when using virtual filesystem

  • 158: 388a42a = 158: 45e8e78 credential: add new interactive config option

  • 159: b683982 = 159: 3009248 maintenance: add custom config to background jobs

  • 160: 58c5bd2 = 160: e50cea0 scalar: configure maintenance during 'reconfigure'

  • 161: 0f36a6d = 161: bdea28a t5300: confirm failure of git index-pack when non-idx suffix requested

  • 162: 9604e77 = 162: 353c840 index-pack: disable rev-index if index file has non .idx suffix

  • 163: b590df6 = 163: 59c8897 sparse-index.c: fix use of index hashes in expand_index

  • 164: e768441 = 164: a3a3c99 t1092: add test for untracked files and directories

@dscho dscho changed the title [DO NOT MERGE YET] Rebase to v2.45.0 Rebase to v2.45.0 Apr 29, 2024
@vdye vdye merged commit b68812e into vfs-2.45.0 Apr 29, 2024
118 checks passed
@vdye vdye deleted the tentative/vfs-2.45.0 branch April 29, 2024 23:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet