microsoft / git

A fork of Git containing Microsoft-specific patches.
http://git-scm.com/
Other
761 stars 92 forks source link

Rebase to v2.45.0 #644

Closed dscho closed 4 months ago

dscho commented 4 months ago
Range-diff relative to vfs-2.44.0 * 189: abd796894c8 = 1: dfb63a66e99 for-each-repo: optionally keep going on an error * 190: 1ae11553052 = 2: d70b66bc24b maintenance: running maintenance should not stop on errors * 1: 08acea8cbf7 = 3: 291baa1fa66 reset --stdin: trim carriage return from the paths * 2: a75168a73b0 < -: ----------- gvfs: start by adding the -gvfs suffix to the version * -: ----------- > 4: 7171e5c8568 Identify microsoft/git via a distinct version suffix * 3: 1db481ce86b = 5: 45448ec459a gvfs: ensure that the version is based on a GVFS tag * 4: 7cc11e5cd32 = 6: 3f492fa0e7f gvfs: add a GVFS-specific header file * 5: 656515f4136 = 7: 75ddd141608 gvfs: add the core.gvfs config setting * 6: 2ad35f3e596 ! 8: 0dec18a8e6f gvfs: add the feature to skip writing the index' SHA-1 ``````diff @@ 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: 69804bb0632 = 9: 8b5f8b6dcb9 gvfs: add the feature that blobs may be missing * 8: 08e1394797f = 10: d2756a030a8 gvfs: prevent files to be deleted outside the sparse checkout * 9: 8f948063f65 = 11: d2d918591f8 gvfs: optionally skip reachability checks/upload pack during fetch * 10: 425f60c8ed4 = 12: cc89974116e gvfs: ensure all filters and EOL conversions are blocked * 11: 180933810bd ! 13: 01ec987b375 gvfs: allow "virtualizing" objects ``````diff @@ Commit message to "lazy clone" and work more on this. Signed-off-by: Ben Peart + Signed-off-by: Johannes Schindelin ## 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: 6829117a64e ! 14: 77ececa9295 Hydrate missing loose objects in check_and_freshen() ``````diff @@ 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: 41d24c3022a ! 15: 1ebd6a6b17b sha1_file: when writing objects, skip the read_object_hook ``````diff @@ 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: c10e77da347 ! 16: 8daad9fae45 gvfs: add global command pre and post hook procs ``````diff @@ 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: 5a78b0cdd62 = 17: 3cf79a7670f t0400: verify that the hook is called correctly from a subdirectory * 16: bcbcbb1c7e1 = 18: da90d91c832 Pass PID of git process to hooks. * 17: 2135705af70 = 19: 5567a3eaee8 pre-command: always respect core.hooksPath * 18: 8173d74ba67 = 20: 2fa2c0c137d sparse-checkout: update files with a modify/delete conflict * 19: 5cf57938570 = 21: e94543d555d sparse-checkout: avoid writing entries with the skip-worktree bit * 20: 9fea45ae4fe = 22: 43b4268cf7c Do not remove files outside the sparse-checkout * 21: 203814b133b = 23: 7804aff77cd send-pack: do not check for sha1 file when GVFS_MISSING_OK set * 22: 9f0e5f92d0d = 24: 26b3cbcfe40 cache-tree: remove use of strbuf_addf in update_one * 23: d724e71925e ! 25: 6b2941f033c gvfs: block unsupported commands when running in a GVFS repo ``````diff @@ Commit message 11) worktree Signed-off-by: Ben Peart + Signed-off-by: Johannes Schindelin ## 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: 40bf6bdc2e6 = 26: eb1a110c22f worktree: allow in Scalar repositories * 25: a202667840a = 27: e56fd83551a gvfs: allow overriding core.gvfs * 26: 12b66632d06 = 28: 143f6c8900b BRANCHES.md: Add explanation of branches and using forks * 27: 81dc570c885 ! 29: 8530efe91e8 Add virtual file system settings and hook proc ``````diff @@ 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: 8c1e2c850ef = 30: d2859b2e70b virtualfilesystem: don't run the virtual file system hook if the index has been redirected * 29: 456cdb53e24 = 31: 69e43b2da12 virtualfilesystem: check if directory is included * 30: 3e677ad52d6 = 32: 6707a3bd3ef backwards-compatibility: support the post-indexchanged hook * 31: 9e268843229 = 33: 0da573bcb52 gvfs: verify that the built-in FSMonitor is disabled * 32: a3f9c230b39 ! 34: cdad5785c31 status: add status serialization mechanism ``````diff @@ 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: afa8244ae37 = 35: 21ab7199bb5 Teach ahead-behind and serialized status to play nicely together * 34: b9a54bf736e = 36: 01dd8aac1e0 status: serialize to path * 35: 9adbd522e38 = 37: 1ca8d3d1b4f status: reject deserialize in V2 and conflicts * 36: 3f92ef4b1f5 = 38: 0d421198662 serialize-status: serialize global and repo-local exclude file metadata * 37: 3533ff3e2f2 ! 39: 21105177fa4 status: deserialization wait ``````diff @@ 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: 4f0dc9551f0 = 40: cf812313bae merge-recursive: avoid confusing logic in was_dirty() * 39: a6513c48f1a = 41: 6393c9eadb4 merge-recursive: add some defensive coding to was_dirty() * 40: 62073556915 = 42: 2ea6a155630 merge-recursive: teach was_dirty() about the virtualfilesystem * 41: f37bdd5aa94 = 43: 016449527a1 status: deserialize with -uno does not print correct hint * 42: 25c3e0b4ecb = 44: 7f27df8ca46 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate * 43: d23c6d3d43a = 45: b2289c3f872 fsmonitor: add script for debugging and update script for tests * 44: 7788fa91d95 = 46: 178f355b8b5 status: disable deserialize when verbose output requested. * 45: da3a0631d54 = 47: 645bcd73934 t7524: add test for verbose status deserialzation * 46: bc53d5282db = 48: 81c16ea9e37 deserialize-status: silently fallback if we cannot read cache file * 47: cbd50404fbe ! 49: 67c0345a224 gvfs:trace2:data: add trace2 tracing around read_object_process ``````diff @@ 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: e77727e7d72 = 50: 99d7bb0cd7b gvfs:trace2:data: status deserialization information * 49: 69bc46aa01d = 51: 4066c3a2ef0 gvfs:trace2:data: status serialization * 50: 375bcec8825 = 52: fea657c0e3b gvfs:trace2:data: add vfs stats * 51: 6c017b4a8c1 = 53: 2b6aec5c806 trace2: refactor setting process starting time * 52: 50541e7274d = 54: 648829b7978 trace2:gvfs:experiment: clear_ce_flags_1 * 53: e84e9bbf100 ! 55: 27d82201caf trace2:gvfs:experiment: report_tracking ``````diff @@ 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: 7d833880f8b = 56: 0965bf12d2d trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache * 55: 2e92c186789 = 57: 36ae2c49bfc trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension * 56: f9a546e1a88 = 58: a4aa7f89ce5 trace2:gvfs:experiment: add region to apply_virtualfilesystem() * 57: 8a09e08d230 = 59: b5e088c37f4 trace2:gvfs:experiment: add region around unpack_trees() * 58: 2424bb01579 = 60: faaefd98fa9 trace2:gvfs:experiment: add region to cache_tree_fully_valid() * 59: dfa422ca12c ! 61: b96ee3c0864 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() ``````diff @@ 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: d9fbd93535d = 62: 34bed8337f8 trace2:gvfs:experiment: increase default event depth for unpack-tree data * 61: ee1ef573aec = 63: da2922f2af0 trace2:gvfs:experiment: add data for check_updates() in unpack_trees() * 62: 41c5b125445 ! 64: 6e7cb0946a3 Trace2:gvfs:experiment: capture more 'tracking' details ``````diff @@ 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: 49870a50a05 = 65: f7ea389263c credential: set trace2_child_class for credential manager children * 64: f6fca70aa52 = 66: 4607e7afe2a sub-process: do not borrow cmd pointer from caller * 65: 327886ffef1 = 67: 39242d3332c sub-process: add subprocess_start_argv() * 66: 154bddbd1d1 = 68: e7e2aa1f6d8 sha1-file: add function to update existing loose object cache * 67: 99bb46ecc11 = 69: 67419c8ef6d packfile: add install_packed_git_and_mru() * 68: 1095cd42be6 = 70: 00ebc760d97 index-pack: avoid immediate object fetch while parsing packfile * 69: 5c54630ff0c ! 71: af90c33b0f6 gvfs-helper: create tool to fetch objects using the GVFS Protocol ``````diff @@ 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: f3dc228a1d9 = 72: 83b2721d6e4 sha1-file: create shared-cache directory if it doesn't exist * 71: 73a6cc3f419 = 73: 2339e36f622 gvfs-helper: better handling of network errors * 72: ca24fc3908d = 74: c1ae8f0642b gvfs-helper-client: properly update loose cache with fetched OID * 73: 0f79deb5c9a = 75: 86062233cb4 gvfs-helper: V2 robust retry and throttling * 74: a5e5deec5e7 = 76: 5840ca38041 gvfs-helper: expose gvfs/objects GET and POST semantics * 75: 08fc2eea45d = 77: dcc1811c5a3 gvfs-helper: dramatically reduce progress noise * 76: c503dd52086 = 78: 6b467ddbc03 gvfs-helper-client.h: define struct object_id * 77: 531ffc5d4bf = 79: 623b1ab5ec8 gvfs-helper: handle pack-file after single POST request * 114: 68954302010 ! 80: a111d418ba1 git_config_set_multivar_in_file_gently(): add a lock timeout ``````diff @@ 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: 955384e917a = 81: 53002f503a4 scalar: set the config write-lock timeout to 150ms * 116: 50b32c9ad23 = 82: 9c869b37dcf scalar: add docs from microsoft/scalar * 117: 93ca0480da4 = 83: 28554babb1d scalar (Windows): use forward slashes as directory separators * 118: ddd637c8966 = 84: fcb838e0b1d scalar: add retry logic to run_git() * 119: 99041725874 = 85: 437450c23d6 scalar: support the `config` command for backwards compatibility * 146: 5f9ba58b8fa ! 86: dafb3e63ea4 sequencer: avoid progress when stderr is redirected ``````diff @@ 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: ca192b7e289 ! 87: f5169aaccd9 test-gvfs-prococol, t5799: tests for gvfs-helper ``````diff @@ Commit message [1] https://github.com/microsoft/VFSForGit/blob/master/Protocol.md Signed-off-by: Jeff Hostetler + Signed-off-by: Johannes Schindelin ## 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: 1f348460f67 = 88: e6c58dfc4a7 gvfs-helper: move result-list construction into install functions * 80: 1528d924d0f = 89: 35e19ad6052 t5799: add support for POST to return either a loose object or packfile * 81: 03298f94d16 = 90: 05c140b39fd t5799: cleanup wc-l and grep-c lines * 82: 08188f98a33 = 91: 08ad8fb8bad gvfs-helper: verify loose objects after write * 83: 6a55d771b0d = 92: 50af98e948a t7599: create corrupt blob test * 84: 05c4105e4b2 ! 93: cd5322fa61e gvfs-helper: add prefetch support ``````diff @@ 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: 328ac49d29b = 94: d812d69cbce gvfs-helper: add prefetch .keep file for last packfile * 86: 3bd3ff1ce42 = 95: 32a4133c84f gvfs-helper: do one read in my_copy_fd_len_tail() * 87: 85b6d4409ab = 96: f2c635dd0c0 gvfs-helper: move content-type warning for prefetch packs * 88: f71d33481b5 = 97: 396a02c1a5c fetch: use gvfs-helper prefetch under config * 89: f7524212420 = 98: d80e642a8d7 gvfs-helper: better support for concurrent packfile fetches * 90: 0f68cb63e8b = 99: 6313f6285fc remote-curl: do not call fetch-pack when using gvfs-helper * 91: d356ff2db87 = 100: 3dede707a0e fetch: reprepare packs before checking connectivity * 92: 0dac5bba024 = 101: e944259d75c gvfs-helper: retry when creating temp files * 93: 21294264fc2 = 102: 31397cef28e sparse: avoid warnings about known cURL issues in gvfs-helper.c * 94: 14738b60f81 = 103: caf7b640621 gvfs-helper: add --max-retries to prefetch verb * 97: ac616872e02 = 104: fc7614761ae maintenance: care about gvfs.sharedCache config * 95: 1865729d47e = 105: faf4191ecb6 t5799: add tests to detect corrupt pack/idx files in prefetch * 98: 76cd2f05c35 ! 106: f53a6c6e7a6 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags ``````diff @@ 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: 4243dfc84e8 = 107: bd1078cd9fb gvfs-helper: ignore .idx files in prefetch multi-part responses * 99: d3cc9520d78 = 108: ac6e2e2cad3 homebrew: add GitHub workflow to release Cask * 100: baa69bfac7b = 109: 0bd8f0798fe Adding winget workflows * 101: 144571175cc = 110: 4e4074a94bb Disable the `monitor-components` workflow in msft-git * 102: 0c9f22e9b9e = 111: 291652c9057 .github: enable windows builds on microsoft fork * 103: 5a3a699e883 = 112: fcb9098b811 release: create initial Windows installer build workflow * 104: a751ad03a07 = 113: 9cd2a8f608d help: special-case HOST_CPU `universal` * 105: 55fe1c43843 = 114: a820f952d9f release: add Mac OSX installer build * 106: 1015e36c8dd = 115: a71ecee9cc5 release: build unsigned Ubuntu .deb package * 107: 5c21313642b = 116: 121afe896cf release: add signing step for .deb package * 149: 3d959687d87 ! 117: bb505f17ce9 release: create draft GitHub release with packages & installers ``````diff @@ .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: 7acf5f5c5a4 ! 118: aa56c24b635 build-git-installers: publish gpg public key ``````diff @@ 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: 6cd4ad42f68 = 119: 4bc3c2859e2 release: continue pestering until user upgrades * 152: 0035b9fb363 = 120: 18ca753af3b Makefile: allow specifying GIT_BUILT_FROM_COMMIT * 153: 7db2e99a330 = 121: faeb084ec92 dist: archive HEAD instead of HEAD^{tree} * 154: 9e989ee6c05 = 122: a4900ea8f9c release: include GIT_BUILT_FROM_COMMIT in MacOS build * 155: 23dd028c961 ! 123: 6ee0e1bfaf1 release: add installer validation ``````diff @@ .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: 6ceeebe94d4 = 124: c5bc89ee99a update-microsoft-git: create barebones builtin * 109: 9fa2c36a632 = 125: 6a313e32538 update-microsoft-git: Windows implementation * 110: eeb8fb8e432 = 126: 7ee86e27ecb update-microsoft-git: use brew on macOS * 111: 6f05ba947cd = 127: c189a2d4b4c .github: update ISSUE_TEMPLATE.md for microsoft/git * 112: c7a83319cc8 = 128: b86f2a63962 .github: update PULL_REQUEST_TEMPLATE.md * 113: 61747ce6689 = 129: 900486f7f16 Adjust README.md for microsoft/git * 120: 453d4ebbdc4 = 130: c20c2d18065 scalar: implement a minimal JSON parser * 121: a56de780d13 = 131: f786b088fb8 scalar clone: support GVFS-enabled remote repositories * 122: 9cc3bf9bf9b = 132: c1ff0e8f3fc test-gvfs-protocol: also serve smart protocol * 123: 107a31f508d = 133: dc2db9d13ba gvfs-helper: add the `endpoint` command * 124: 8708a4b499f = 134: a021409f9bd dir_inside_of(): handle directory separators correctly * 125: bc239e7ba52 = 135: 6d4743499b9 scalar: disable authentication in unattended mode * 126: 20105daaeaf = 136: f216aba0795 scalar: do initialize `gvfs.sharedCache` * 127: 6ec6b87837d = 137: 0dff6860c84 scalar diagnose: include shared cache info * 128: 80f9ccf677d = 138: aa2582165ea scalar: only try GVFS protocol on https:// URLs * 129: 894fd6f9c77 ! 139: 050b3f3a966 scalar: verify that we can use a GVFS-enabled repository ``````diff @@ 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: de5319c6ac5 = 140: a18b5603912 scalar: add the `cache-server` command * 131: 7aaefa97134 = 141: 3b173a262be scalar: add a test toggle to skip accessing the vsts/info endpoint * 132: 2e09e47efff = 142: cdb1a6ada06 scalar: adjust documentation to the microsoft/git fork * 133: 728bf67b847 = 143: cef99886853 scalar: enable untracked cache unconditionally * 134: 7386dd1587f = 144: b5d3fb52965 scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility * 135: 03accb7e741 = 145: d555913cb02 scalar diagnose: accommodate Scalar's Functional Tests * 136: e960ac079a6 = 146: 38eb66b7112 ci: run Scalar's Functional Tests * 137: 99b9b65ebbd = 147: 32051ef1449 scalar: upgrade to newest FSMonitor config setting * 138: f80613fbc44 = 148: 743c1693134 abspath: make strip_last_path_component() global * 139: e0cbc012f8a = 149: a75677e116c scalar: .scalarCache should live above enlistment * 140: ab0c7dea38c = 150: f007b7b0377 add/rm: allow adding sparse entries when virtual * 141: 8577cb1b820 = 151: 1c03d5972a2 sparse-checkout: add config to disable deleting dirs * 142: ee5b0c3fa97 = 152: 2c89c1aaf70 diff: ignore sparse paths in diffstat * 143: e4ec64e03a4 = 153: 31952c75639 repo-settings: enable sparse index by default * 144: 12f176c914b = 154: 8fc11dd2af6 diff(sparse-index): verify with partially-sparse * 145: 914a9938708 = 155: f81dd6185c3 stash: expand testing for `git stash -u` * 147: ffd7346ab3d = 156: acfcf9e1c36 sparse: add vfs-specific precautions * 148: a74960ee1cd = 157: 93736319e5f reset: fix mixed reset when using virtual filesystem * 156: c8fe603ba93 = 158: 4bb7a11e472 credential: add new interactive config option * 157: a7642ea8ed8 ! 159: 2ab2fe023bf maintenance: add custom config to background jobs ``````diff @@ Commit message systemd case due to writing the service files. Signed-off-by: Derrick Stolee + Signed-off-by: Johannes Schindelin ## 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 "--exec-path=%s\n" + "%s" /* For extra config parameters. */ "for-each-repo\n" + "--keep-going\n" "--config=maintenance.repo\n" - "maintenance\n" @@ builtin/gc.c: static int launchctl_schedule_plist(const char *exec_path, enum schedule_priorit "\n" "StartCalendarInterval\n" @@ builtin/gc.c: static int schtasks_schedule_task(const char *exec_path, enum sche "\n" "\n" "\"%s\\headless-git.exe\"\n" -- "--exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%s\n" -+ "--exec-path=\"%s\" %s for-each-repo --config=maintenance.repo maintenance run --schedule=%s\n" +- "--exec-path=\"%s\" for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%s\n" ++ "--exec-path=\"%s\" %s for-each-repo --keep-going --config=maintenance.repo maintenance run --schedule=%s\n" "\n" "\n" "\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: f1896c9f5e0 = 160: ead3d3773c1 scalar: configure maintenance during 'reconfigure' * 159: 3fba5cb5498 = 161: bc9254fe2e0 t5300: confirm failure of git index-pack when non-idx suffix requested * 160: ea013edf31e = 162: 6f85e265c52 index-pack: disable rev-index if index file has non .idx suffix * 161: 57a95987e1f = 163: e728546ebeb sparse-index.c: fix use of index hashes in expand_index * 162: 187c9b08573 = 164: 0460408313b t1092: add test for untracked files and directories * 163: e35106f6459 (upstream: b3165523394) < -: ----------- name-hash: add index_dir_find() * 164: 15e25b5f576 (upstream: 32ca706fadb) < -: ----------- t7527: add case-insensitve test for FSMonitor * 165: ac5f79610cf (upstream: e5da3ddbe9b) < -: ----------- fsmonitor: refactor refresh callback on directory events * 166: 64c9b5091db (upstream: 7a15a62aebd) < -: ----------- fsmonitor: clarify handling of directory events in callback helper * 167: 7c8609c5997 (upstream: 8687c2b067a) < -: ----------- fsmonitor: refactor refresh callback for non-directory events * 168: f4e4019c51c (upstream: 3e4ffda6394) < -: ----------- dir: create untracked_cache_invalidate_trimmed_path() * 169: 5fdd6fba7b6 (upstream: 48f4cd7155a) < -: ----------- fsmonitor: refactor untracked-cache invalidation * 170: 9628e45799e (upstream: 7c97174dcd6) < -: ----------- fsmonitor: move untracked-cache invalidation into helper functions * 171: c3c49b47d94 (upstream: a52482036cd) < -: ----------- fsmonitor: return invalidated cache-entry count on directory event * 172: 8e9dfb8a107 (upstream: 558d146d13e) < -: ----------- fsmonitor: remove custom loop from non-directory path handler * 173: 405d5689340 (upstream: 9e34e562805) < -: ----------- fsmonitor: return invalidated cache-entry count on non-directory event * 174: 428ed9d1977 (upstream: 84d441f2f09) < -: ----------- fsmonitor: trace the new invalidated cache-entry count * 175: 3357ac30bfe (upstream: b0dba507fe3) < -: ----------- fsmonitor: refactor bit invalidation in refresh callback * 176: b1b11c13f55 (upstream: 29c139ce789) < -: ----------- fsmonitor: support case-insensitive events * 177: 4e9f006cfdf (upstream: 0c1c3c861ea) < -: ----------- t0211: demonstrate missing 'def_param' events for certain commands * 178: cc026b23030 (upstream: 520cf668149) < -: ----------- trace2: avoid emitting 'def_param' set more than once * 179: 910c8537054 (upstream: 6111252cbf2) < -: ----------- trace2: emit 'def_param' set with 'cmd_name' event * 180: e7269adc4ab < -: ----------- fixup! release: add installer validation * 181: 00bb8b3e102 < -: ----------- fixup! release: create draft GitHub release with packages & installers * 182: 94a708860f1 = 165: effbcffe3ee macos-installer/Makefile: debug dump linkage of build targets * 183: 1e44a0f18f5 = 166: 3b724207408 workflow/build-git-installer: use OS supplied libcurl * 184: 32423117424 (upstream: 32423117424) < -: ----------- http: reset POSTFIELDSIZE when clearing curl handle * 185: c28ee09503f (upstream: c28ee09503f) < -: ----------- INSTALL: bump libcurl version to 7.21.3 * 186: 92a209bf245 (upstream: 92a209bf245) < -: ----------- remote-curl: add Transfer-Encoding header only for older curl * 187: 6aabf8c63b5 < -: ----------- fixup! Add virtual file system settings and hook proc * 188: fd1d5e1d0fc (upstream: 199f44cb2ea) < -: ----------- builtin/clone: allow remote helpers to detect repo

The big non-obvious change is this:

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 86c0809ed84 are now folded into the actual conflicting commit.

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

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

dscho commented 4 months ago

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

Ah yes. The version format fix...

dscho commented 4 months ago
Range-diff relative to -rc0 * 1: dfb63a66e99 = 1: 70e83f05338 for-each-repo: optionally keep going on an error * 2: d70b66bc24b = 2: a1d035a72aa maintenance: running maintenance should not stop on errors * 3: 291baa1fa66 = 3: 93bf69fd7ac reset --stdin: trim carriage return from the paths * 4: 7171e5c8568 ! 4: 177ac314722 Identify microsoft/git via a distinct version suffix ``````diff @@ 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: 45448ec459a = 5: 4c3e4c783b2 gvfs: ensure that the version is based on a GVFS tag * 6: 3f492fa0e7f = 6: ddbdff78eab gvfs: add a GVFS-specific header file * 7: 75ddd141608 = 7: ed6040bd070 gvfs: add the core.gvfs config setting * 8: 0dec18a8e6f = 8: a411eda7463 gvfs: add the feature to skip writing the index' SHA-1 * 9: 8b5f8b6dcb9 = 9: af8cf8b36d5 gvfs: add the feature that blobs may be missing * 10: d2756a030a8 = 10: 5375f859aa9 gvfs: prevent files to be deleted outside the sparse checkout * 11: d2d918591f8 = 11: 0519f25033a gvfs: optionally skip reachability checks/upload pack during fetch * 12: cc89974116e = 12: 438a40c3c1c gvfs: ensure all filters and EOL conversions are blocked * 13: 01ec987b375 = 13: 7d290fa3226 gvfs: allow "virtualizing" objects * 14: 77ececa9295 = 14: 7fcc05c75c1 Hydrate missing loose objects in check_and_freshen() * 15: 1ebd6a6b17b = 15: af7912d6fd1 sha1_file: when writing objects, skip the read_object_hook * 16: 8daad9fae45 = 16: 3339769b9b2 gvfs: add global command pre and post hook procs * 17: 3cf79a7670f = 17: 9783fb76488 t0400: verify that the hook is called correctly from a subdirectory * 18: da90d91c832 = 18: d6e7c54c35c Pass PID of git process to hooks. * 19: 5567a3eaee8 = 19: ccf83fad144 pre-command: always respect core.hooksPath * 20: 2fa2c0c137d = 20: d2c4c7513ed sparse-checkout: update files with a modify/delete conflict * 21: e94543d555d = 21: 08e81ec5a2c sparse-checkout: avoid writing entries with the skip-worktree bit * 22: 43b4268cf7c = 22: 319902c928b Do not remove files outside the sparse-checkout * 23: 7804aff77cd = 23: 7e6f8e7fa27 send-pack: do not check for sha1 file when GVFS_MISSING_OK set * 24: 26b3cbcfe40 = 24: a4292e8aa32 cache-tree: remove use of strbuf_addf in update_one * 25: 6b2941f033c = 25: 8156508f11a gvfs: block unsupported commands when running in a GVFS repo * 26: eb1a110c22f = 26: 419616206a6 worktree: allow in Scalar repositories * 27: e56fd83551a = 27: c51d3e6a858 gvfs: allow overriding core.gvfs * 28: 143f6c8900b = 28: 72b7884e939 BRANCHES.md: Add explanation of branches and using forks * 29: 8530efe91e8 = 29: 3780c1e998d Add virtual file system settings and hook proc * 30: d2859b2e70b = 30: 2600d2d7414 virtualfilesystem: don't run the virtual file system hook if the index has been redirected * 31: 69e43b2da12 = 31: d6ec6a269bd virtualfilesystem: check if directory is included * 32: 6707a3bd3ef = 32: c23304e1463 backwards-compatibility: support the post-indexchanged hook * 33: 0da573bcb52 = 33: fc9f8ffa926 gvfs: verify that the built-in FSMonitor is disabled * 34: cdad5785c31 = 34: 4a35120179c status: add status serialization mechanism * 35: 21ab7199bb5 = 35: d5434c58348 Teach ahead-behind and serialized status to play nicely together * 36: 01dd8aac1e0 = 36: cbbb5216901 status: serialize to path * 37: 1ca8d3d1b4f = 37: 64ea961eb5d status: reject deserialize in V2 and conflicts * 38: 0d421198662 = 38: 3221c800c60 serialize-status: serialize global and repo-local exclude file metadata * 39: 21105177fa4 = 39: 8e763437177 status: deserialization wait * 40: cf812313bae = 40: a0fecd6bcc4 merge-recursive: avoid confusing logic in was_dirty() * 41: 6393c9eadb4 = 41: a84e3b503c1 merge-recursive: add some defensive coding to was_dirty() * 42: 2ea6a155630 = 42: ceef491f1f3 merge-recursive: teach was_dirty() about the virtualfilesystem * 43: 016449527a1 = 43: a482d7c5c35 status: deserialize with -uno does not print correct hint * 44: 7f27df8ca46 = 44: c6df97179d5 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate * 45: b2289c3f872 = 45: 91f14418f40 fsmonitor: add script for debugging and update script for tests * 46: 178f355b8b5 = 46: c1c35cb8716 status: disable deserialize when verbose output requested. * 47: 645bcd73934 = 47: 6c31eb87151 t7524: add test for verbose status deserialzation * 48: 81c16ea9e37 = 48: e3f36e12baf deserialize-status: silently fallback if we cannot read cache file * 49: 67c0345a224 = 49: 7404dfe86bd gvfs:trace2:data: add trace2 tracing around read_object_process * 50: 99d7bb0cd7b = 50: 17ed8cb381a gvfs:trace2:data: status deserialization information * 51: 4066c3a2ef0 = 51: b3556767a04 gvfs:trace2:data: status serialization * 52: fea657c0e3b = 52: 1b6e0d860ff gvfs:trace2:data: add vfs stats * 53: 2b6aec5c806 = 53: 36fff000382 trace2: refactor setting process starting time * 54: 648829b7978 = 54: 43b902a6e19 trace2:gvfs:experiment: clear_ce_flags_1 * 55: 27d82201caf = 55: a5fbf42fef4 trace2:gvfs:experiment: report_tracking * 56: 0965bf12d2d = 56: e64eee6883e trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache * 57: 36ae2c49bfc = 57: 6102c272337 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension * 58: a4aa7f89ce5 = 58: 399d6d8a29e trace2:gvfs:experiment: add region to apply_virtualfilesystem() * 59: b5e088c37f4 = 59: 4256989d519 trace2:gvfs:experiment: add region around unpack_trees() * 60: faaefd98fa9 = 60: c50801c5c0a trace2:gvfs:experiment: add region to cache_tree_fully_valid() * 61: b96ee3c0864 = 61: 431351bcdd4 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() * 62: 34bed8337f8 = 62: 6876cb716a3 trace2:gvfs:experiment: increase default event depth for unpack-tree data * 63: da2922f2af0 = 63: 5ceff9fea9d trace2:gvfs:experiment: add data for check_updates() in unpack_trees() * 64: 6e7cb0946a3 = 64: a6807876bb1 Trace2:gvfs:experiment: capture more 'tracking' details * 65: f7ea389263c = 65: 25d73beb052 credential: set trace2_child_class for credential manager children * 66: 4607e7afe2a = 66: c78809e981a sub-process: do not borrow cmd pointer from caller * 67: 39242d3332c = 67: 42c2d278a33 sub-process: add subprocess_start_argv() * 68: e7e2aa1f6d8 = 68: b8fdf55ae7d sha1-file: add function to update existing loose object cache * 69: 67419c8ef6d = 69: e35975953a8 packfile: add install_packed_git_and_mru() * 70: 00ebc760d97 = 70: f285b2a4be7 index-pack: avoid immediate object fetch while parsing packfile * 71: af90c33b0f6 = 71: a9cebee57b2 gvfs-helper: create tool to fetch objects using the GVFS Protocol * 72: 83b2721d6e4 = 72: f6bf0e8ab37 sha1-file: create shared-cache directory if it doesn't exist * 73: 2339e36f622 = 73: 6905887d976 gvfs-helper: better handling of network errors * 74: c1ae8f0642b = 74: 916905b7f95 gvfs-helper-client: properly update loose cache with fetched OID * 75: 86062233cb4 = 75: 299c6a9e04d gvfs-helper: V2 robust retry and throttling * 76: 5840ca38041 = 76: 962445c7e29 gvfs-helper: expose gvfs/objects GET and POST semantics * 77: dcc1811c5a3 = 77: 990e7c93e53 gvfs-helper: dramatically reduce progress noise * 78: 6b467ddbc03 = 78: e7bd30e2d8f gvfs-helper-client.h: define struct object_id * 79: 623b1ab5ec8 = 79: 94337cf0278 gvfs-helper: handle pack-file after single POST request * 87: f5169aaccd9 = 80: 6820d1d19d1 test-gvfs-prococol, t5799: tests for gvfs-helper * 88: e6c58dfc4a7 = 81: 4958567cdf5 gvfs-helper: move result-list construction into install functions * 89: 35e19ad6052 = 82: 42d3302d3c0 t5799: add support for POST to return either a loose object or packfile * 90: 05c140b39fd = 83: a63508856a6 t5799: cleanup wc-l and grep-c lines * 91: 08ad8fb8bad = 84: 963e854a594 gvfs-helper: verify loose objects after write * 92: 50af98e948a = 85: 72c263caa0f t7599: create corrupt blob test * 93: cd5322fa61e = 86: e389b5e512e gvfs-helper: add prefetch support * 94: d812d69cbce = 87: cf45b8f5c9f gvfs-helper: add prefetch .keep file for last packfile * 95: 32a4133c84f = 88: ee871b67c7a gvfs-helper: do one read in my_copy_fd_len_tail() * 96: f2c635dd0c0 = 89: c0ca3f136a9 gvfs-helper: move content-type warning for prefetch packs * 97: 396a02c1a5c = 90: 9dea5fe8354 fetch: use gvfs-helper prefetch under config * 98: d80e642a8d7 = 91: a09670ad8cd gvfs-helper: better support for concurrent packfile fetches * 99: 6313f6285fc = 92: 923ce33b777 remote-curl: do not call fetch-pack when using gvfs-helper * 100: 3dede707a0e = 93: ece5f7927c0 fetch: reprepare packs before checking connectivity * 101: e944259d75c = 94: ea177bbcd1b gvfs-helper: retry when creating temp files * 102: 31397cef28e = 95: 97a2b9590d8 sparse: avoid warnings about known cURL issues in gvfs-helper.c * 104: fc7614761ae = 96: cc4f72906fc maintenance: care about gvfs.sharedCache config * 106: f53a6c6e7a6 = 97: 3a735e4bd9c unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags * 108: ac6e2e2cad3 = 98: 3e192abe496 homebrew: add GitHub workflow to release Cask * 103: caf7b640621 = 99: cf5293df046 gvfs-helper: add --max-retries to prefetch verb * 109: 0bd8f0798fe = 100: 9e8fc93c048 Adding winget workflows * 105: faf4191ecb6 = 101: 863eb1bf38a t5799: add tests to detect corrupt pack/idx files in prefetch * 110: 4e4074a94bb = 102: 0bcec67fca9 Disable the `monitor-components` workflow in msft-git * 107: bd1078cd9fb = 103: a9722b60bdb gvfs-helper: ignore .idx files in prefetch multi-part responses * 111: 291652c9057 = 104: e50ad512b5a .github: enable windows builds on microsoft fork * 112: fcb9098b811 = 105: 0422949a22d release: create initial Windows installer build workflow * 124: c5bc89ee99a = 106: 2bd13f09970 update-microsoft-git: create barebones builtin * 113: 9cd2a8f608d = 107: 72b20f573ba help: special-case HOST_CPU `universal` * 125: 6a313e32538 = 108: 4bc99a8c3d9 update-microsoft-git: Windows implementation * 126: 7ee86e27ecb = 109: 87d91267c76 update-microsoft-git: use brew on macOS * 80: a111d418ba1 = 110: cb1cfadabe4 git_config_set_multivar_in_file_gently(): add a lock timeout * 127: c189a2d4b4c = 111: c8971f4b5fc .github: update ISSUE_TEMPLATE.md for microsoft/git * 81: 53002f503a4 = 112: 5ca40366f81 scalar: set the config write-lock timeout to 150ms * 128: b86f2a63962 = 113: e7f89113dd7 .github: update PULL_REQUEST_TEMPLATE.md * 82: 9c869b37dcf = 114: 6be2e8d8f57 scalar: add docs from microsoft/scalar * 129: 900486f7f16 = 115: 5fefc74f28e Adjust README.md for microsoft/git * 83: 28554babb1d = 116: 7f2f117391e scalar (Windows): use forward slashes as directory separators * 84: fcb838e0b1d = 117: 38a9eb36a78 scalar: add retry logic to run_git() * 85: 437450c23d6 = 118: 4dfdf2daca7 scalar: support the `config` command for backwards compatibility * 130: c20c2d18065 = 119: e192187055d scalar: implement a minimal JSON parser * 131: f786b088fb8 = 120: 9f5e046b409 scalar clone: support GVFS-enabled remote repositories * 132: c1ff0e8f3fc = 121: abb5f4badc7 test-gvfs-protocol: also serve smart protocol * 133: dc2db9d13ba = 122: 68fe9616163 gvfs-helper: add the `endpoint` command * 134: a021409f9bd = 123: 5e47d42131d dir_inside_of(): handle directory separators correctly * 135: 6d4743499b9 = 124: b63eb0b1c14 scalar: disable authentication in unattended mode * 136: f216aba0795 = 125: 31bd7ee75d0 scalar: do initialize `gvfs.sharedCache` * 137: 0dff6860c84 = 126: b1a08dc4548 scalar diagnose: include shared cache info * 138: aa2582165ea = 127: 4fae3d5179d scalar: only try GVFS protocol on https:// URLs * 139: 050b3f3a966 = 128: f9d3c0ccdff scalar: verify that we can use a GVFS-enabled repository * 140: a18b5603912 = 129: 02bdd28b57b scalar: add the `cache-server` command * 141: 3b173a262be = 130: a992f2af87e scalar: add a test toggle to skip accessing the vsts/info endpoint * 142: cdb1a6ada06 = 131: 6b73092644b scalar: adjust documentation to the microsoft/git fork * 143: cef99886853 = 132: 573cf55dba9 scalar: enable untracked cache unconditionally * 144: b5d3fb52965 = 133: 4ffb02b5abd scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility * 145: d555913cb02 = 134: cc997d15fdb scalar diagnose: accommodate Scalar's Functional Tests * 146: 38eb66b7112 = 135: 06ffe4c6177 ci: run Scalar's Functional Tests * 147: 32051ef1449 = 136: 0d811a252a4 scalar: upgrade to newest FSMonitor config setting * 148: 743c1693134 = 137: de83d9046fa abspath: make strip_last_path_component() global * 149: a75677e116c = 138: be0d249cbd7 scalar: .scalarCache should live above enlistment * 150: f007b7b0377 = 139: edcff7685e1 add/rm: allow adding sparse entries when virtual * 151: 1c03d5972a2 = 140: e71f63c160e sparse-checkout: add config to disable deleting dirs * 152: 2c89c1aaf70 = 141: 955832084e9 diff: ignore sparse paths in diffstat * 153: 31952c75639 = 142: c805420ee67 repo-settings: enable sparse index by default * 154: 8fc11dd2af6 = 143: e99738d69c4 diff(sparse-index): verify with partially-sparse * 155: f81dd6185c3 = 144: 0c7eca0c009 stash: expand testing for `git stash -u` * 86: dafb3e63ea4 = 145: b26472485ea sequencer: avoid progress when stderr is redirected * 156: acfcf9e1c36 = 146: 0d11652c652 sparse: add vfs-specific precautions * 157: 93736319e5f = 147: 63e0b6730a9 reset: fix mixed reset when using virtual filesystem * 114: a820f952d9f ! 148: 79d186f9135 release: add Mac OSX installer build ``````diff @@ .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 <

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

  • 165: effbcffe3ee < -: ----------- macos-installer/Makefile: debug dump linkage of build targets
  • 166: 3b724207408 < -: ----------- workflow/build-git-installer: use OS supplied libcurl
derrickstolee commented 4 months ago

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

dscho commented 4 months ago

Yup!

dscho commented 4 months ago
Range-diff relative to v2.45.0-rc1 * 1: 70e83f05338 = 1: c5eb22f61df for-each-repo: optionally keep going on an error * 2: a1d035a72aa = 2: 39cf3727939 maintenance: running maintenance should not stop on errors * 3: 93bf69fd7ac = 3: 8fc81fb1750 reset --stdin: trim carriage return from the paths * 4: 177ac314722 ! 4: 11a339e0e54 Identify microsoft/git via a distinct version suffix ``````diff @@ 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: 4c3e4c783b2 = 5: 2d5d9187aed gvfs: ensure that the version is based on a GVFS tag * 6: ddbdff78eab = 6: 00d0db0090b gvfs: add a GVFS-specific header file * 7: ed6040bd070 = 7: 1630ca473b9 gvfs: add the core.gvfs config setting * 8: a411eda7463 = 8: add4a590c68 gvfs: add the feature to skip writing the index' SHA-1 * 9: af8cf8b36d5 = 9: 912f10429e2 gvfs: add the feature that blobs may be missing * 10: 5375f859aa9 = 10: cc76156c795 gvfs: prevent files to be deleted outside the sparse checkout * 11: 0519f25033a = 11: 0b42dcd6107 gvfs: optionally skip reachability checks/upload pack during fetch * 12: 438a40c3c1c = 12: 05f8c126e5c gvfs: ensure all filters and EOL conversions are blocked * 13: 7d290fa3226 = 13: fa0e1594785 gvfs: allow "virtualizing" objects * 14: 7fcc05c75c1 = 14: d6ee3364c93 Hydrate missing loose objects in check_and_freshen() * 15: af7912d6fd1 = 15: 156a40feb08 sha1_file: when writing objects, skip the read_object_hook * 16: 3339769b9b2 = 16: 7402811eddf gvfs: add global command pre and post hook procs * 17: 9783fb76488 = 17: e7bf03fe5e8 t0400: verify that the hook is called correctly from a subdirectory * 18: d6e7c54c35c = 18: 7f7b1ae6de6 Pass PID of git process to hooks. * 19: ccf83fad144 = 19: daba6653a08 pre-command: always respect core.hooksPath * 20: d2c4c7513ed = 20: ea46c9ba2ac sparse-checkout: update files with a modify/delete conflict * 21: 08e81ec5a2c = 21: 9bb3d306d57 sparse-checkout: avoid writing entries with the skip-worktree bit * 22: 319902c928b = 22: 64b8e559fe5 Do not remove files outside the sparse-checkout * 23: 7e6f8e7fa27 = 23: df0ee3ad80d send-pack: do not check for sha1 file when GVFS_MISSING_OK set * 24: a4292e8aa32 = 24: a2aad6e44a0 cache-tree: remove use of strbuf_addf in update_one * 25: 8156508f11a = 25: 379037de992 gvfs: block unsupported commands when running in a GVFS repo * 26: 419616206a6 = 26: f5f866783c9 worktree: allow in Scalar repositories * 27: c51d3e6a858 = 27: 559d22d27c6 gvfs: allow overriding core.gvfs * 28: 72b7884e939 = 28: 915dd0e07bb BRANCHES.md: Add explanation of branches and using forks * 29: 3780c1e998d = 29: fb3896b4235 Add virtual file system settings and hook proc * 30: 2600d2d7414 = 30: 3a23415867a virtualfilesystem: don't run the virtual file system hook if the index has been redirected * 31: d6ec6a269bd = 31: fd88f1d29ce virtualfilesystem: check if directory is included * 32: c23304e1463 = 32: a235f3e9f69 backwards-compatibility: support the post-indexchanged hook * 33: fc9f8ffa926 = 33: 2d546459857 gvfs: verify that the built-in FSMonitor is disabled * 34: 4a35120179c = 34: 463c44a9bc8 status: add status serialization mechanism * 35: d5434c58348 = 35: 053e352b533 Teach ahead-behind and serialized status to play nicely together * 36: cbbb5216901 = 36: 4b646b42bab status: serialize to path * 37: 64ea961eb5d = 37: 58c9b0b494e status: reject deserialize in V2 and conflicts * 38: 3221c800c60 = 38: b46bedb4e1e serialize-status: serialize global and repo-local exclude file metadata * 39: 8e763437177 = 39: d917783d263 status: deserialization wait * 40: a0fecd6bcc4 = 40: 801300d10bc merge-recursive: avoid confusing logic in was_dirty() * 41: a84e3b503c1 = 41: 5a58776d1ec merge-recursive: add some defensive coding to was_dirty() * 42: ceef491f1f3 = 42: 7a43c9a7fef merge-recursive: teach was_dirty() about the virtualfilesystem * 43: a482d7c5c35 = 43: 006fb3931cd status: deserialize with -uno does not print correct hint * 44: c6df97179d5 = 44: e383198a433 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate * 45: 91f14418f40 = 45: 7002ec2d16f fsmonitor: add script for debugging and update script for tests * 46: c1c35cb8716 = 46: ab232b3924e status: disable deserialize when verbose output requested. * 47: 6c31eb87151 = 47: dd16e4fe3e0 t7524: add test for verbose status deserialzation * 48: e3f36e12baf = 48: c51d6101774 deserialize-status: silently fallback if we cannot read cache file * 49: 7404dfe86bd = 49: d1b84be14d2 gvfs:trace2:data: add trace2 tracing around read_object_process * 50: 17ed8cb381a = 50: 323ae62840c gvfs:trace2:data: status deserialization information * 51: b3556767a04 = 51: 09833257b35 gvfs:trace2:data: status serialization * 52: 1b6e0d860ff = 52: 8ff9081b8a0 gvfs:trace2:data: add vfs stats * 53: 36fff000382 = 53: 316985cbc0b trace2: refactor setting process starting time * 54: 43b902a6e19 = 54: ffa6a7a1e95 trace2:gvfs:experiment: clear_ce_flags_1 * 55: a5fbf42fef4 = 55: 6ed0189f297 trace2:gvfs:experiment: report_tracking * 56: e64eee6883e = 56: 61f377718a8 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache * 57: 6102c272337 = 57: 7e259e1938a trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension * 58: 399d6d8a29e = 58: 485d47e2e77 trace2:gvfs:experiment: add region to apply_virtualfilesystem() * 59: 4256989d519 = 59: 63eadcfba1a trace2:gvfs:experiment: add region around unpack_trees() * 60: c50801c5c0a = 60: 3f6652a9161 trace2:gvfs:experiment: add region to cache_tree_fully_valid() * 61: 431351bcdd4 = 61: cb0d9f6953e trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() * 62: 6876cb716a3 = 62: 343171161cf trace2:gvfs:experiment: increase default event depth for unpack-tree data * 63: 5ceff9fea9d = 63: 62d510e790a trace2:gvfs:experiment: add data for check_updates() in unpack_trees() * 64: a6807876bb1 = 64: 244c418be6d Trace2:gvfs:experiment: capture more 'tracking' details * 65: 25d73beb052 = 65: 5223a1fcd4c credential: set trace2_child_class for credential manager children * 66: c78809e981a = 66: fe1cf670875 sub-process: do not borrow cmd pointer from caller * 67: 42c2d278a33 = 67: f277df43641 sub-process: add subprocess_start_argv() * 68: b8fdf55ae7d = 68: db65d92686e sha1-file: add function to update existing loose object cache * 69: e35975953a8 = 69: 2e22b519dc8 packfile: add install_packed_git_and_mru() * 70: f285b2a4be7 = 70: 582dec7b466 index-pack: avoid immediate object fetch while parsing packfile * 71: a9cebee57b2 = 71: 9f20de307c4 gvfs-helper: create tool to fetch objects using the GVFS Protocol * 72: f6bf0e8ab37 = 72: 229b5be90b6 sha1-file: create shared-cache directory if it doesn't exist * 73: 6905887d976 = 73: 7b059dfa307 gvfs-helper: better handling of network errors * 74: 916905b7f95 = 74: 091bf6849e7 gvfs-helper-client: properly update loose cache with fetched OID * 75: 299c6a9e04d = 75: aaa2c89509d gvfs-helper: V2 robust retry and throttling * 76: 962445c7e29 = 76: c869fa7f916 gvfs-helper: expose gvfs/objects GET and POST semantics * 77: 990e7c93e53 = 77: 2da2d65b8b7 gvfs-helper: dramatically reduce progress noise * 78: e7bd30e2d8f = 78: d83f7570700 gvfs-helper-client.h: define struct object_id * 79: 94337cf0278 = 79: e49eee58458 gvfs-helper: handle pack-file after single POST request * 80: 6820d1d19d1 = 80: c128fc04584 test-gvfs-prococol, t5799: tests for gvfs-helper * 81: 4958567cdf5 = 81: 9a9fe2bbd5f gvfs-helper: move result-list construction into install functions * 82: 42d3302d3c0 = 82: a5ce642d9e3 t5799: add support for POST to return either a loose object or packfile * 83: a63508856a6 = 83: 51d29209fcd t5799: cleanup wc-l and grep-c lines * 84: 963e854a594 = 84: f11ed18e133 gvfs-helper: verify loose objects after write * 85: 72c263caa0f = 85: c4842292be5 t7599: create corrupt blob test * 86: e389b5e512e = 86: f5af304240a gvfs-helper: add prefetch support * 87: cf45b8f5c9f = 87: af3935a7e47 gvfs-helper: add prefetch .keep file for last packfile * 88: ee871b67c7a = 88: 45c66345cad gvfs-helper: do one read in my_copy_fd_len_tail() * 89: c0ca3f136a9 = 89: a3ee0455f06 gvfs-helper: move content-type warning for prefetch packs * 90: 9dea5fe8354 = 90: 00d4feb65a1 fetch: use gvfs-helper prefetch under config * 91: a09670ad8cd = 91: 04ee5a13634 gvfs-helper: better support for concurrent packfile fetches * 92: 923ce33b777 = 92: 733f9ad7220 remote-curl: do not call fetch-pack when using gvfs-helper * 93: ece5f7927c0 = 93: f980c673dc3 fetch: reprepare packs before checking connectivity * 94: ea177bbcd1b = 94: dbc55cc3599 gvfs-helper: retry when creating temp files * 95: 97a2b9590d8 = 95: a7889510b62 sparse: avoid warnings about known cURL issues in gvfs-helper.c * 96: cc4f72906fc = 96: 4cb8f09ba2a maintenance: care about gvfs.sharedCache config * 99: cf5293df046 = 97: 87e7e61a941 gvfs-helper: add --max-retries to prefetch verb * 97: 3a735e4bd9c = 98: eac30a5a843 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags * 101: 863eb1bf38a = 99: 77475d4644c t5799: add tests to detect corrupt pack/idx files in prefetch * 98: 3e192abe496 = 100: 528a8b1bc07 homebrew: add GitHub workflow to release Cask * 103: a9722b60bdb = 101: d4804777406 gvfs-helper: ignore .idx files in prefetch multi-part responses * 100: 9e8fc93c048 = 102: c620a9f856a Adding winget workflows * 102: 0bcec67fca9 = 103: ba54b361678 Disable the `monitor-components` workflow in msft-git * 104: e50ad512b5a = 104: e59be1f1461 .github: enable windows builds on microsoft fork * 105: 0422949a22d = 105: 1da0231332d release: create initial Windows installer build workflow * 107: 72b20f573ba = 106: e1c61479c60 help: special-case HOST_CPU `universal` * 148: 79d186f9135 = 107: 60feff28c39 release: add Mac OSX installer build * 149: f656408edc1 = 108: 2098c276465 release: build unsigned Ubuntu .deb package * 150: 128398e4901 = 109: f5e773e73ac release: add signing step for .deb package * 151: c1d9ba05a6d = 110: 4c61c1f6615 release: create draft GitHub release with packages & installers * 152: ce3e7f8f083 = 111: 16ca68a6614 build-git-installers: publish gpg public key * 153: ffd2051987a = 112: d0462da025b release: continue pestering until user upgrades * 154: c3d90c78c28 = 113: 56e5fec3aab Makefile: allow specifying GIT_BUILT_FROM_COMMIT * 155: e2605784699 = 114: 62524e20013 dist: archive HEAD instead of HEAD^{tree} * 156: 90d4e46b569 = 115: 4325d16c019 release: include GIT_BUILT_FROM_COMMIT in MacOS build * 157: 6b9ecaacfca = 116: 024e38620d3 release: add installer validation * 106: 2bd13f09970 = 117: 586cda0ec85 update-microsoft-git: create barebones builtin * 108: 4bc99a8c3d9 = 118: 3a3c47b0b06 update-microsoft-git: Windows implementation * 109: 87d91267c76 = 119: 08d7d2fb299 update-microsoft-git: use brew on macOS * 111: c8971f4b5fc = 120: 12ac17ab36d .github: update ISSUE_TEMPLATE.md for microsoft/git * 110: cb1cfadabe4 = 121: bad0bc35471 git_config_set_multivar_in_file_gently(): add a lock timeout * 113: e7f89113dd7 = 122: 3b43886a9a2 .github: update PULL_REQUEST_TEMPLATE.md * 112: 5ca40366f81 = 123: 4b9cb8ab336 scalar: set the config write-lock timeout to 150ms * 115: 5fefc74f28e = 124: a5b0281fb6e Adjust README.md for microsoft/git * 114: 6be2e8d8f57 = 125: dfd18770005 scalar: add docs from microsoft/scalar * 116: 7f2f117391e = 126: e4139c56cba scalar (Windows): use forward slashes as directory separators * 117: 38a9eb36a78 = 127: 32eb9254f6e scalar: add retry logic to run_git() * 118: 4dfdf2daca7 = 128: c65f8784bf1 scalar: support the `config` command for backwards compatibility * 119: e192187055d = 129: 306a13a39fb scalar: implement a minimal JSON parser * 120: 9f5e046b409 = 130: 321a4a5e6be scalar clone: support GVFS-enabled remote repositories * 121: abb5f4badc7 = 131: 11c91905f3a test-gvfs-protocol: also serve smart protocol * 122: 68fe9616163 = 132: 8538f2c13ff gvfs-helper: add the `endpoint` command * 123: 5e47d42131d = 133: 8f7412bad85 dir_inside_of(): handle directory separators correctly * 124: b63eb0b1c14 = 134: 418b97ade78 scalar: disable authentication in unattended mode * 125: 31bd7ee75d0 = 135: bdb620d9c5d scalar: do initialize `gvfs.sharedCache` * 126: b1a08dc4548 = 136: 7685c296683 scalar diagnose: include shared cache info * 127: 4fae3d5179d = 137: a4fc1df623f scalar: only try GVFS protocol on https:// URLs * 128: f9d3c0ccdff = 138: fd51fa533ce scalar: verify that we can use a GVFS-enabled repository * 129: 02bdd28b57b = 139: 9f18d972e7f scalar: add the `cache-server` command * 130: a992f2af87e = 140: f6efa1c8cb2 scalar: add a test toggle to skip accessing the vsts/info endpoint * 131: 6b73092644b = 141: 1df44f624db scalar: adjust documentation to the microsoft/git fork * 132: 573cf55dba9 = 142: ce372e8c0ea scalar: enable untracked cache unconditionally * 133: 4ffb02b5abd = 143: e8374f913cc scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility * 134: cc997d15fdb = 144: 267f68c22ac scalar diagnose: accommodate Scalar's Functional Tests * 135: 06ffe4c6177 = 145: 9eb2a07b268 ci: run Scalar's Functional Tests * 136: 0d811a252a4 = 146: 5854c301ace scalar: upgrade to newest FSMonitor config setting * 137: de83d9046fa = 147: 3940c78db58 abspath: make strip_last_path_component() global * 138: be0d249cbd7 = 148: f505c40acd6 scalar: .scalarCache should live above enlistment * 139: edcff7685e1 = 149: 052c63ebed8 add/rm: allow adding sparse entries when virtual * 140: e71f63c160e = 150: 518476a28b2 sparse-checkout: add config to disable deleting dirs * 141: 955832084e9 = 151: c168c258d55 diff: ignore sparse paths in diffstat * 142: c805420ee67 = 152: c2ba7729ad9 repo-settings: enable sparse index by default * 143: e99738d69c4 = 153: c33429b40d9 diff(sparse-index): verify with partially-sparse * 144: 0c7eca0c009 = 154: 8a7808ac4c9 stash: expand testing for `git stash -u` * 145: b26472485ea = 155: 1b65e5fbb6b sequencer: avoid progress when stderr is redirected * 146: 0d11652c652 = 156: 49adf4440e6 sparse: add vfs-specific precautions * 147: 63e0b6730a9 = 157: 72afab77f75 reset: fix mixed reset when using virtual filesystem * 158: 388a42aa23d = 158: 45e8e784ece credential: add new interactive config option * 159: b6839826c75 = 159: 3009248f876 maintenance: add custom config to background jobs * 160: 58c5bd21c79 = 160: e50cea0fb97 scalar: configure maintenance during 'reconfigure' * 161: 0f36a6d9119 = 161: bdea28a5c95 t5300: confirm failure of git index-pack when non-idx suffix requested * 162: 9604e7721b9 = 162: 353c8408512 index-pack: disable rev-index if index file has non .idx suffix * 163: b590df65890 = 163: 59c88977f2e sparse-index.c: fix use of index hashes in expand_index * 164: e768441cbd3 = 164: a3a3c99e9e7 t1092: add test for untracked files and directories