microsoft / git

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

Rebase to v2.46.0 #679

Closed dscho closed 1 month ago

dscho commented 1 month ago
Range-diff relative to clean/vfs-2.45.2 * 1: 9d4453e8d6f3 (upstream: 9d4453e8d6f3) < -: ------------ ci: drop mention of BREW_INSTALL_PACKAGES variable * 2: 3c295c87c250 (upstream: 3c295c87c250) < -: ------------ mingw: drop bogus (and unneeded) declaration of `_pgmptr` * 3: 92566955cec9 = 1: 92566955cec9 advice: warn when sparse index expands * 4: fa9d858ce999 = 2: fa9d858ce999 Revert "midx-write.c: use `--stdin-packs` when repacking" * 5: 43daded4fad2 = 3: 43daded4fad2 t: remove advice from some tests * 6: 9fa03ce7f40c = 4: d493e7b971ef survey: stub in new experimental `git-survey` command * 7: 19db94a327e4 = 5: 891929e0cb2f survey: add command line opts to select references * 8: a49a5cdca3c8 ! 6: 0e33f37886bb survey: collect the set of requested refs ``````diff @@ builtin/survey.c: static void survey_load_config(void) + * Theoretically, this data is independent of the on-disk representation + * (e.g. independent of packing concerns). + */ -+static void survey_phase_refs(void) ++static void survey_phase_refs(struct repository *r) +{ + struct ref_array ref_array = { 0 }; + @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix survey_opts.show_progress = isatty(2); fixup_refs_wanted(); -+ survey_phase_refs(); ++ survey_phase_refs(the_repository); + + strvec_clear(&survey_vec_refs_wanted); + `````` * 9: 937d231772dd ! 7: 02c2b1eef417 survey: calculate stats on refs and print results ``````diff @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array) +/* + * If we want this type of ref, increment counters and return 1. + */ -+static int maybe_count_ref(struct ref_array_item *p) ++static int maybe_count_ref(struct repository *r, struct ref_array_item *p) +{ + struct survey_refs_wanted *rw = &survey_opts.refs; + struct survey_stats_refs *prs = &survey_stats.refs; @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array) + */ + strintmap_incr(&prs->refsmap, "refs/tags/", 1); + -+ if (!peel_iterated_oid(&p->objectname, &peeled)) ++ if (!peel_iterated_oid(r, &p->objectname, &peeled)) + prs->cnt_annotated_tags++; + else + prs->cnt_lightweight_tags++; @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array) +/* + * Calculate stats on the set of refs that we found. + */ -+static void do_calc_stats_refs(struct ref_array *ref_array) ++static void do_calc_stats_refs(struct repository *r, struct ref_array *ref_array) +{ + struct survey_stats_refs *prs = &survey_stats.refs; + int k; @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array) + struct ref_array_item *p = ref_array->items[k]; + size_t len; + -+ if (!maybe_count_ref(p)) ++ if (!maybe_count_ref(r, p)) + continue; + + prs->cnt_total++; @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array) /* * The REFS phase: * -@@ builtin/survey.c: static void survey_phase_refs(void) +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r) do_load_refs(&ref_array); trace2_region_leave("survey", "phase/refs", the_repository); + trace2_region_enter("survey", "phase/calcstats", the_repository); -+ do_calc_stats_refs(&ref_array); ++ do_calc_stats_refs(r, &ref_array); + trace2_region_leave("survey", "phase/calcstats", the_repository); + ref_array_clear(&ref_array); @@ builtin/survey.c: static void survey_phase_refs(void) survey_load_config(); @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix) - survey_phase_refs(); + survey_phase_refs(the_repository); + survey_emit_trace2(); + survey_print_json(); `````` * 10: 90588ad4b1c7 ! 8: 46d069164fb8 survey: stub in treewalk of reachable commits and objects ``````diff @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array) + + switch (p->kind) { + case FILTER_REFS_TAGS: -+ if (!peel_iterated_oid(&p->objectname, &peeled)) ++ if (!peel_iterated_oid(rev_info->repo, &p->objectname, &peeled)) + add_pending_oid(rev_info, NULL, &peeled, add_flags); + else + add_pending_oid(rev_info, NULL, &p->objectname, add_flags); @@ builtin/survey.c: static void do_load_refs(struct ref_array *ref_array) /* * If we want this type of ref, increment counters and return 1. */ -@@ builtin/survey.c: static void survey_phase_refs(void) +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r) do_load_refs(&ref_array); trace2_region_leave("survey", "phase/refs", the_repository); @@ builtin/survey.c: static void survey_phase_refs(void) + trace2_region_leave("survey", "phase/treewalk", the_repository); + trace2_region_enter("survey", "phase/calcstats", the_repository); - do_calc_stats_refs(&ref_array); + do_calc_stats_refs(r, &ref_array); trace2_region_leave("survey", "phase/calcstats", the_repository); `````` * 11: 98972399403d = 9: 44a41d0027b6 survey: add traverse callback for commits * 12: d90ba6a9da03 ! 10: 38f5aecd6c3f survey: add vector of largest objects for various scaling dimensions ``````diff @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix + "size", + survey_opts.show_largest_blobs_by_size_bytes); + - survey_phase_refs(); + survey_phase_refs(the_repository); survey_emit_trace2(); survey_print_json(); `````` * 13: 617deae6ac03 = 11: acf22c612e95 survey: add pathname of blob or tree to large_item_vec * 14: 1de055fb7b25 = 12: 09c93cc0d1e6 survey: add commit-oid to large_item detail * 15: 2bc37eff69cd ! 13: 9d24f68692bb survey: add commit name-rev lookup to each large_item ``````diff @@ builtin/survey.c: static void maybe_insert_large_item(struct large_item_vec *vec /* * Common fields for any type of object. */ -@@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array) +@@ builtin/survey.c: static void do_calc_stats_refs(struct repository *r, struct ref_array *ref_array } } @@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array) /* * The REFS phase: * -@@ builtin/survey.c: static void survey_phase_refs(void) - do_calc_stats_refs(&ref_array); +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r) + do_calc_stats_refs(r, &ref_array); trace2_region_leave("survey", "phase/calcstats", the_repository); + trace2_region_enter("survey", "phase/namerev", the_repository); `````` * 16: 3713eae683d7 ! 14: f4a94db23d1c survey: add --json option and setup for pretty output ``````diff @@ builtin/survey.c: static void survey_emit_trace2(void) { survey_load_config(); @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix) - survey_phase_refs(); + survey_phase_refs(the_repository); survey_emit_trace2(); - survey_print_json(); `````` * 17: de268cde6f28 ! 15: ecef306aae63 survey: add pretty printing of stats ``````diff @@ builtin/survey.c: int cmd_survey(int argc, const char **argv, const char *prefix + alloc_tree_by_size(); + alloc_blob_by_size(); - survey_phase_refs(); + survey_phase_refs(the_repository); `````` * 18: c7ab70ce5b54 = 16: 67a115d6eb93 t8100: create test for git-survey * 19: d06b3ff65ad8 ! 17: e210d30ed3bd survey: add --no-name-rev option ``````diff @@ builtin/survey.c: static int survey_load_config_cb(const char *var, const char * if (!strcmp(var, "survey.showcommitparents")) { survey_opts.show_largest_commits_by_nr_parents = git_config_ulong(var, value, ctx->kvi); -@@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array) +@@ builtin/survey.c: static void do_calc_stats_refs(struct repository *r, struct ref_array *ref_array static void do_lookup_name_rev(void) { @@ builtin/survey.c: static void do_calc_stats_refs(struct ref_array *ref_array) if (survey_opts.show_progress) { survey_progress_total = 0; survey_progress = start_progress(_("Resolving name-revs..."), 0); -@@ builtin/survey.c: static void survey_phase_refs(void) - do_calc_stats_refs(&ref_array); +@@ builtin/survey.c: static void survey_phase_refs(struct repository *r) + do_calc_stats_refs(r, &ref_array); trace2_region_leave("survey", "phase/calcstats", the_repository); - trace2_region_enter("survey", "phase/namerev", the_repository); `````` * 20: ec39557264af = 18: 95f6cde2f8f7 survey: started TODO list at bottom of source file * 21: 28549b1815d8 = 19: aecf6ec64d7d survey: expanded TODO list at the bottom of the source file * 22: 3d885d0c5e44 = 20: 79f3731e02d9 survey: expanded TODO with more notes * 23: d81c8ad95842 (upstream: 12c2ee5fbd1a) < -: ------------ for-each-repo: optionally keep going on an error * 24: 2ef315a28b5f (upstream: c75662bfc963) < -: ------------ maintenance: running maintenance should not stop on errors * 198: 3be470ab8f51 = 21: d0ae24c9d298 survey: clearly note the experimental nature in the output * 25: 8b5ff3765708 = 22: 5f1879ca2275 reset --stdin: trim carriage return from the paths * 26: de0e08cef6dc ! 23: bb17814236d4 Identify microsoft/git via a distinct version suffix ``````diff @@ Commit message ## GIT-VERSION-GEN ## @@ GVF=GIT-VERSION-FILE - DEF_VER=v2.45.2 + DEF_VER=v2.46.0-rc0 +# Identify microsoft/git via a distinct version suffix +DEF_VER=$DEF_VER.vfs.0.0 `````` * 27: 44873f8e40fb = 24: 462b3754796c gvfs: ensure that the version is based on a GVFS tag * 28: 29d46d7b8f01 = 25: 13619bcf7d0e gvfs: add a GVFS-specific header file * 29: d4c7891efc37 ! 26: 6c9e6d9cee5d gvfs: add the core.gvfs config setting ``````diff @@ environment.h: int get_shared_repository(void); ## gvfs.c (new) ## @@ ++#define USE_THE_REPOSITORY_VARIABLE +#include "git-compat-util.h" +#include "environment.h" +#include "gvfs.h" `````` * 30: e2fcd935b1dd = 27: 663af32b43af gvfs: add the feature to skip writing the index' SHA-1 * 31: f74478b6bc9d ! 28: 0de65b93b51c gvfs: add the feature that blobs may be missing ``````diff @@ cache-tree.c: static int update_one(struct cache_tree *it, ## commit.c ## @@ + #define USE_THE_REPOSITORY_VARIABLE + #include "git-compat-util.h" +#include "gvfs.h" #include "tag.h" `````` * 32: 2750fd4d0cb6 ! 29: d3efbf008c97 gvfs: prevent files to be deleted outside the sparse checkout ``````diff @@ t/t1090-sparse-checkout-scope.sh: test_expect_success 'in partial clone, sparse ## unpack-trees.c ## @@ + #include "git-compat-util.h" #include "advice.h" +#include "gvfs.h" `````` * 33: 56146c36a48e = 30: b182882d697c gvfs: optionally skip reachability checks/upload pack during fetch * 34: 298844d02597 ! 31: fdf68f857a83 gvfs: ensure all filters and EOL conversions are blocked ``````diff @@ Documentation/config/core.txt: core.gvfs:: ## convert.c ## @@ + #include "git-compat-util.h" #include "advice.h" +#include "gvfs.h" `````` * 35: 9290d8c599db ! 32: 1673b6c003b5 gvfs: allow "virtualizing" objects ``````diff @@ config.c: int git_default_core_config(const char *var, const char *value, ## connected.c ## @@ + #define USE_THE_REPOSITORY_VARIABLE + #include "git-compat-util.h" +#include "environment.h" #include "gettext.h" `````` * 36: b1d92ce0cde7 = 33: 818d82e8345c Hydrate missing loose objects in check_and_freshen() * 37: 091dc10b1d6e = 34: 2d7a9dceec4e sha1_file: when writing objects, skip the read_object_hook * 38: 90f1631b5c33 ! 35: 4bee1dfe9b5f gvfs: add global command pre and post hook procs ``````diff @@ hook.c + const struct config_context *ctx, void *cb) +{ + if (!strcmp(var, "core.hookspath")) -+ return git_config_pathname((const char **)cb, var, value); ++ return git_config_pathname((char **)cb, var, value); + + return 0; +} @@ hook.c + + if (!initialized) { + struct strbuf gitdir = STRBUF_INIT, commondir = STRBUF_INIT; -+ const char *early_hooks_dir = NULL; ++ char *early_hooks_dir = NULL; + + if (discover_git_directory(&commondir, &gitdir) < 0) { + strbuf_release(&gitdir); @@ hook.c + strbuf_addf(&hooks_dir, "%s/hooks/", commondir.buf); + else { + strbuf_add_absolute_path(&hooks_dir, early_hooks_dir); -+ free((void *)early_hooks_dir); ++ free(early_hooks_dir); + strbuf_addch(&hooks_dir, '/'); + } + `````` * 39: 81a39e769590 = 36: 585cc63cd81c t0400: verify that the hook is called correctly from a subdirectory * 40: 69c187bbd053 = 37: 04b361425283 Pass PID of git process to hooks. * 41: f224aa513f05 = 38: 6dc796cb3d43 pre-command: always respect core.hooksPath * 42: 899ad7e32e45 = 39: 1beb06a0f1b3 sparse-checkout: update files with a modify/delete conflict * 43: c32183f9cb00 = 40: 2e7464043490 sparse-checkout: avoid writing entries with the skip-worktree bit * 44: 326aa6cc2f3f = 41: 47b22d8df73b Do not remove files outside the sparse-checkout * 45: 54634b1157cc = 42: 1b457f9e4354 send-pack: do not check for sha1 file when GVFS_MISSING_OK set * 46: 0ed17f07983c = 43: 7969d782fbc1 cache-tree: remove use of strbuf_addf in update_one * 47: 116dbce18283 ! 44: f2eae33203b1 gvfs: block unsupported commands when running in a GVFS repo ``````diff @@ builtin/gc.c: int cmd_gc(int argc, const char **argv, const char *prefix) ## builtin/update-index.c ## @@ */ - #define USE_THE_INDEX_VARIABLE + #include "builtin.h" +#include "gvfs.h" #include "bulk-checkin.h" @@ builtin/update-index.c: int cmd_update_index(int argc, const char **argv, const + die(_("changing the index version is not supported on a GVFS repo")); + if (preferred_index_format < 0) { - printf(_("%d\n"), the_index.version); + printf(_("%d\n"), the_repository->index->version); } else if (preferred_index_format < INDEX_FORMAT_LB || @@ builtin/update-index.c: int cmd_update_index(int argc, const char **argv, const char *prefix) end_odb_transaction(); @@ builtin/update-index.c: int cmd_update_index(int argc, const char **argv, const ## git.c ## @@ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" +#include "gvfs.h" #include "config.h" `````` * 48: deeb420bf234 = 45: a08a89d854d1 worktree: allow in Scalar repositories * 49: 7fc02f9706c6 = 46: 7227b52f5625 gvfs: allow overriding core.gvfs * 50: 1fb74c0caa23 = 47: 5733f8e0d6e3 BRANCHES.md: Add explanation of branches and using forks * 145: 0cb2146b5023 = 48: 84d002422b26 git_config_set_multivar_in_file_gently(): add a lock timeout * 146: 3d94588c9ad7 = 49: 5ebaf3f62941 scalar: set the config write-lock timeout to 150ms * 147: 225409d5b644 = 50: 2521c6e8b3ea scalar: add docs from microsoft/scalar * 148: 6391ce063357 = 51: 8474a8c79916 scalar (Windows): use forward slashes as directory separators * 149: 4dbcf6f48db4 ! 52: fced4b62821c scalar: add retry logic to run_git() ``````diff @@ scalar.c: static void setup_enlistment_directory(int argc, const char **argv, +static int git_retries = 3; + + LAST_ARG_MUST_BE_NULL static int run_git(const char *arg, ...) { - struct child_process cmd = CHILD_PROCESS_INIT; `````` * 150: 7903a9ab9f54 = 53: 98e34458bbce scalar: support the `config` command for backwards compatibility * 177: f21079b0c3d3 = 54: 45d1ce3a892d sequencer: avoid progress when stderr is redirected * 51: 8e5b27063a7d ! 55: f51ea9b32ea9 Add virtual file system settings and hook proc ``````diff @@ config.c: int git_config_get_max_percent_split_change(void) int is_bool, val; ## config.h ## -@@ config.h: int git_config_get_pathname(const char *key, const char **dest); +@@ config.h: int git_config_get_pathname(const char *key, char **dest); int git_config_get_index_threads(int *dest); int git_config_get_split_index(void); int git_config_get_max_percent_split_change(void); @@ config.h: int git_config_get_pathname(const char *key, const char **dest); ## dir.c ## @@ - */ + #include "git-compat-util.h" #include "abspath.h" +#include "virtualfilesystem.h" @@ environment.c: int core_apply_sparse_checkout; int core_sparse_checkout_cone; int sparse_expect_files_outside_of_patterns; int core_gvfs; -+const char *core_virtualfilesystem; ++char *core_virtualfilesystem; int merge_log_config = -1; int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */ unsigned long pack_size_limit_cfg; @@ environment.h: int get_shared_repository(void); void reset_shared_repository(void); extern int core_preload_index; -+extern const char *core_virtualfilesystem; ++extern char *core_virtualfilesystem; extern int core_gvfs; extern int precomposed_unicode; extern int protect_hfs; ## read-cache.c ## @@ - */ + #include "git-compat-util.h" #include "bulk-checkin.h" +#include "virtualfilesystem.h" @@ sparse-index.c: void expand_index(struct index_state *istate, struct pattern_lis if (!S_ISSPARSEDIR(ce->ce_mode)) { set_index_entry(full, full->cache_nr++, ce); -@@ sparse-index.c: void clear_skip_worktree_from_present_files(struct index_state *istate) - int restarted = 0; - +@@ sparse-index.c: static void clear_skip_worktree_from_present_files_full(struct index_state *ista + void clear_skip_worktree_from_present_files(struct index_state *istate) + { if (!core_apply_sparse_checkout || + core_virtualfilesystem || sparse_expect_files_outside_of_patterns) `````` * 52: 47fb1b229a3f = 56: 8e22f0673d1d virtualfilesystem: don't run the virtual file system hook if the index has been redirected * 53: f998e1da0a9f = 57: bd9e9d991ecd virtualfilesystem: check if directory is included * 54: 95436e484368 = 58: 214b081718a1 backwards-compatibility: support the post-indexchanged hook * 55: 91e8518dd6ba = 59: 858040ab9cb8 gvfs: verify that the built-in FSMonitor is disabled * 56: e9609a8f9773 ! 60: b9c892cb7e26 status: add status serialization mechanism ``````diff @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix + /* deserialize failed, so force the initialization we skipped above. */ + enable_fscache(1); + repo_read_index_preload(the_repository, &s.pathspec, 0); -+ refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL); ++ refresh_index(the_repository->index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL); + + if (use_optional_locks()) + fd = repo_hold_locked_index(the_repository, &index_lock, 0); @@ t/t7523-status-complete-untracked.sh (new) ## wt-status-deserialize.c (new) ## @@ ++#define USE_THE_REPOSITORY_VARIABLE +#include "git-compat-util.h" +#include "environment.h" +#include "hex.h" @@ wt-status-deserialize.c (new) +#include "pkt-line.h" +#include "trace.h" +#include "statinfo.h" ++#include "hex.h" + +static struct trace_key trace_deserialize = TRACE_KEY_INIT(DESERIALIZE); + `````` * 57: b3e750505779 = 61: 7405e5e0ed54 Teach ahead-behind and serialized status to play nicely together * 58: 8407c36d45d5 = 62: 44d03e8f1d5e status: serialize to path * 59: 28d3839d0ce1 = 63: ce47f124cf02 status: reject deserialize in V2 and conflicts * 60: 1d82aa2c3520 ! 64: fe42bddb72b4 serialize-status: serialize global and repo-local exclude file metadata ``````diff @@ Commit message ## wt-status-deserialize.c ## @@ - #include "pkt-line.h" #include "trace.h" #include "statinfo.h" + #include "hex.h" +#include "path.h" static struct trace_key trace_deserialize = TRACE_KEY_INIT(DESERIALIZE); `````` * 61: 3ff191af1deb = 65: c1d5d31ab17e status: deserialization wait * 62: c5e4ee04008f = 66: 11d838d7f861 merge-recursive: avoid confusing logic in was_dirty() * 63: 47d58ffd65ba = 67: 1bc8f66607f2 merge-recursive: add some defensive coding to was_dirty() * 64: cc07a28bf9b9 ! 68: dad640bef266 merge-recursive: teach was_dirty() about the virtualfilesystem ``````diff @@ Commit message ## merge-recursive.c ## @@ - */ + #include "git-compat-util.h" #include "merge-recursive.h" +#include "virtualfilesystem.h" `````` * 65: 72ea807fa985 = 69: 3026a1e4f244 status: deserialize with -uno does not print correct hint * 66: abb2796979ae = 70: f974331a3617 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate * 67: aaab24ef16cc = 71: 0ad0d0f4b54b fsmonitor: add script for debugging and update script for tests * 68: c1569804b39e ! 72: 907a53a12c9d status: disable deserialize when verbose output requested. ``````diff @@ Commit message ## builtin/commit.c ## @@ - #include "commit-reach.h" #include "commit-graph.h" #include "pretty.h" + #include "trailer.h" +#include "trace2.h" static const char * const builtin_commit_usage[] = { `````` * 69: 81f271c72e4a = 73: ba4aaf94aa85 t7524: add test for verbose status deserialzation * 70: 42623159951e = 74: a4bbd5d79ebe deserialize-status: silently fallback if we cannot read cache file * 71: 9d211c480f0b = 75: c8c93ae2402b gvfs:trace2:data: add trace2 tracing around read_object_process * 72: a41a3cafa513 ! 76: cded777829c9 gvfs:trace2:data: status deserialization information ``````diff @@ builtin/commit.c: int cmd_status(int argc, const char **argv, const char *prefix ## wt-status-deserialize.c ## @@ - #include "trace.h" #include "statinfo.h" + #include "hex.h" #include "path.h" +#include "trace2.h" + `````` * 73: aa452a0bd691 ! 77: 03952fa61547 gvfs:trace2:data: status serialization ``````diff @@ Commit message Signed-off-by: Jeff Hostetler ## wt-status-serialize.c ## +@@ ++#define USE_THE_REPOSITORY_VARIABLE + #include "git-compat-util.h" + #include "environment.h" + #include "hex.h" @@ #include "trace.h" #include "read-cache-ll.h" `````` * 74: cc0a9c5f265f ! 78: 31fcdac93d95 gvfs:trace2:data: add vfs stats ``````diff @@ Commit message ## virtualfilesystem.c ## @@ ++#define USE_THE_REPOSITORY_VARIABLE #include "git-compat-util.h" #include "environment.h" #include "gettext.h" `````` * 75: dea7ca4edb07 = 79: abbea4903114 trace2: refactor setting process starting time * 76: b276ce01b05f = 80: afc4a0aa6f1b trace2:gvfs:experiment: clear_ce_flags_1 * 77: f0025354b5a8 = 81: 5ce6558833ac trace2:gvfs:experiment: report_tracking * 78: a3b1d7ee1924 = 82: 4ec2e678cc0d trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache * 79: 34491309ed8c = 83: c1c64db22fbd trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension * 80: 6eb56cb47e8c = 84: ffcbc2848393 trace2:gvfs:experiment: add region to apply_virtualfilesystem() * 81: 7bdb05565e2a = 85: 4957e884ba93 trace2:gvfs:experiment: add region around unpack_trees() * 82: 90a8fbccb521 = 86: 6366b0e3ab52 trace2:gvfs:experiment: add region to cache_tree_fully_valid() * 83: 79acfe9130bb = 87: 9212637a8585 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() * 84: f7c6c30b5209 = 88: 801e01ff4206 trace2:gvfs:experiment: increase default event depth for unpack-tree data * 85: 5d4fb1a109d7 = 89: bf54c3f565b0 trace2:gvfs:experiment: add data for check_updates() in unpack_trees() * 86: bcaa51ddacc7 = 90: 4148a39a3586 Trace2:gvfs:experiment: capture more 'tracking' details * 87: 8d15da72d3a6 = 91: 2f076d13eaa4 credential: set trace2_child_class for credential manager children * 88: 42702c98a6d1 = 92: 1ecd57735347 sub-process: do not borrow cmd pointer from caller * 89: 82c64b8a2a54 = 93: 678c1e180486 sub-process: add subprocess_start_argv() * 90: b5111c7e4614 = 94: ad46269a96c8 sha1-file: add function to update existing loose object cache * 91: 826c0d6f3ba2 = 95: 4c7f6dad9365 packfile: add install_packed_git_and_mru() * 92: 638ebe9c739e = 96: 80e302e1c9c9 index-pack: avoid immediate object fetch while parsing packfile * 93: d8a6be6e4b57 ! 97: fd834454cb32 gvfs-helper: create tool to fetch objects using the GVFS Protocol ``````diff @@ config.c: static int git_default_mailmap_config(const char *var, const char *val +static int git_default_gvfs_config(const char *var, const char *value) +{ + if (!strcmp(var, "gvfs.cache-server")) { -+ const char *v2 = NULL; ++ char *v2 = NULL; + + if (!git_config_string(&v2, var, value) && v2 && *v2) + gvfs_cache_server_url = transport_anonymize_url(v2); -+ free((char*)v2); ++ free(v2); + return 0; + } + @@ config.c: static int git_default_mailmap_config(const char *var, const char *val + static int git_default_attr_config(const char *var, const char *value) { - if (!strcmp(var, "attr.tree")) + if (!strcmp(var, "attr.tree")) { @@ config.c: int git_default_config(const char *var, const char *value, if (starts_with(var, "sparse.")) return git_default_sparse_config(var, value); @@ environment.h: extern int core_gvfs; ## gvfs-helper-client.c (new) ## @@ ++#define USE_THE_REPOSITORY_VARIABLE +#include "git-compat-util.h" +#include "hex.h" +#include "strvec.h" @@ gvfs-helper.c (new) +// +////////////////////////////////////////////////////////////////// + ++#define USE_THE_REPOSITORY_VARIABLE +#include "git-compat-util.h" +#include "git-curl-compat.h" +#include "environment.h" @@ gvfs-helper.c (new) + gh__cmd_opts.remote_name = "origin"; + + gh__global.remote = remote_get(gh__cmd_opts.remote_name); -+ if (!gh__global.remote->url[0] || !*gh__global.remote->url[0]) ++ if (!gh__global.remote->url.v[0] || !*gh__global.remote->url.v[0]) + die("unknown remote '%s'", gh__cmd_opts.remote_name); + + /* @@ gvfs-helper.c (new) + * + * Break that so that we can force the use of a PAT. + */ -+ gh__global.main_url = transport_anonymize_url(gh__global.remote->url[0]); ++ gh__global.main_url = transport_anonymize_url(gh__global.remote->url.v[0]); + + trace2_data_string("gvfs-helper", NULL, "remote/url", gh__global.main_url); +} @@ gvfs-helper.c (new) + return; + + credential_from_url(&gh__global.main_creds, gh__global.main_url); -+ credential_fill(&gh__global.main_creds); ++ credential_fill(&gh__global.main_creds, 0); + gh__global.main_creds_need_approval = 1; +} + @@ object-file.c: static int do_oid_object_info_extended(struct repository *r, ## promisor-remote.c ## @@ + #define USE_THE_REPOSITORY_VARIABLE + #include "git-compat-util.h" +#include "environment.h" #include "gettext.h" `````` * 94: cdd7cfe6688f ! 98: b574c171e157 sha1-file: create shared-cache directory if it doesn't exist ``````diff @@ environment.h: extern int protect_hfs; ## gvfs-helper-client.c ## @@ + #define USE_THE_REPOSITORY_VARIABLE #include "git-compat-util.h" +#include "environment.h" #include "hex.h" `````` * 95: a038c3c69cca = 99: 4d22d1b588fa gvfs-helper: better handling of network errors * 96: 2910aff5a7e2 ! 100: b569887d13c0 gvfs-helper-client: properly update loose cache with fetched OID ``````diff @@ Commit message Signed-off-by: Jeff Hostetler ## gvfs-helper-client.c ## +@@ + #include "pkt-line.h" + #include "quote.h" + #include "packfile.h" ++#include "hex.h" + + static struct oidset gh_client__oidset_queued = OIDSET_INIT; + static unsigned long gh_client__oidset_count; @@ gvfs-helper-client.c: static void gh_client__update_loose_cache(const char *line) if (!skip_prefix(line, "loose ", &v1_oid)) BUG("update_loose_cache: invalid line '%s'", line); `````` * 97: b97808a9fde9 = 101: be0e9bb40389 gvfs-helper: V2 robust retry and throttling * 98: 210605020e46 ! 102: cbcc517bd1bc gvfs-helper: expose gvfs/objects GET and POST semantics ``````diff @@ gvfs-helper.c -// ////////////////////////////////////////////////////////////////// - #include "git-compat-util.h" + #define USE_THE_REPOSITORY_VARIABLE @@ static const char * const main_usage[] = { N_("git gvfs-helper [] config []"), @@ gvfs-helper.c: static unsigned long build_json_payload__gvfs_objects( + if (k == 1) + oidcpy(oid_out, oid_prev); + else -+ oidclr(oid_out); ++ oidclr(oid_out, the_repository->hash_algo); + } + return k; `````` * 99: 22f0423a3938 = 103: 6db413083732 gvfs-helper: dramatically reduce progress noise * 100: 501670ea6494 = 104: 06ba59c18ebc gvfs-helper-client.h: define struct object_id * 101: faff4f02d19f = 105: f50d84997537 gvfs-helper: handle pack-file after single POST request * 102: 078ef69a2e11 ! 106: a089606f04da test-gvfs-prococol, t5799: tests for gvfs-helper ``````diff @@ gvfs-helper.c: static void do__http_post__gvfs_objects(struct gh__response_statu ## t/helper/test-gvfs-protocol.c (new) ## @@ ++#define USE_THE_REPOSITORY_VARIABLE +#include "git-compat-util.h" +#include "environment.h" +#include "hex.h" @@ t/helper/test-gvfs-protocol.c (new) + +#ifndef NO_IPV6 + -+static int setup_named_sock(char *listen_addr, int listen_port, struct socketlist *socklist) ++static int setup_named_sock(const char *listen_addr, int listen_port, struct socketlist *socklist) +{ + int socknum = 0; + char pbuf[NI_MAXSERV]; `````` * 103: 4f6ba7847e65 = 107: e1f2825fd9dc gvfs-helper: move result-list construction into install functions * 104: a413cb572694 = 108: 0465ea07bc27 t5799: add support for POST to return either a loose object or packfile * 105: 5b79aa823a13 = 109: e4df84472fcc t5799: cleanup wc-l and grep-c lines * 106: 669ad33e3b9a = 110: f0cfe9c0c1a9 gvfs-helper: verify loose objects after write * 107: be74d21a6149 = 111: 2491b1ed8467 t7599: create corrupt blob test * 108: 96f1bca46539 ! 112: e6cc93038789 gvfs-helper: add prefetch support ``````diff @@ gvfs-helper.c: static void gh__run_one_slot(struct active_request_slot *slot, } @@ gvfs-helper.c: static void lookup_main_url(void) */ - gh__global.main_url = transport_anonymize_url(gh__global.remote->url[0]); + gh__global.main_url = transport_anonymize_url(gh__global.remote->url.v[0]); - trace2_data_string("gvfs-helper", NULL, "remote/url", gh__global.main_url); + trace2_data_string(TR2_CAT, NULL, "remote/url", gh__global.main_url); `````` * 109: 3d89f61e5cea = 113: b93feac580b2 gvfs-helper: add prefetch .keep file for last packfile * 110: 814f0c27908d = 114: 4cf4fc71c725 gvfs-helper: do one read in my_copy_fd_len_tail() * 111: 5b292e54a07f = 115: dc478bfb4f42 gvfs-helper: move content-type warning for prefetch packs * 112: b9530affdf34 = 116: 9a86242eda08 fetch: use gvfs-helper prefetch under config * 113: 26017bdbc1be = 117: 88744c56fd6e gvfs-helper: better support for concurrent packfile fetches * 114: 2d6625d8bcde = 118: 2e12c33ec7e7 remote-curl: do not call fetch-pack when using gvfs-helper * 115: c4b3dc4cd031 = 119: 1ab9c6327400 fetch: reprepare packs before checking connectivity * 116: bf38a3add304 = 120: 8fee06818bef gvfs-helper: retry when creating temp files * 117: de22e153071c = 121: 407fb5c920f0 sparse: avoid warnings about known cURL issues in gvfs-helper.c * 118: ed719c02b54d = 122: 5f1daad2e340 gvfs-helper: add --max-retries to prefetch verb * 122: 5118ec231cee = 123: 8bee033994d8 t5799: add tests to detect corrupt pack/idx files in prefetch * 124: 88e914c11f54 = 124: c519fa562cfe gvfs-helper: ignore .idx files in prefetch multi-part responses * 119: a3a331fe3721 = 125: 79d4ae365461 maintenance: care about gvfs.sharedCache config * 120: c3563843e6a4 = 126: 31932ba6e9ef unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags * 121: fa34db9e232f = 127: 38f795c0b2a0 homebrew: add GitHub workflow to release Cask * 123: 75e717943afd = 128: d4466b14a00c Adding winget workflows * 125: 359e3eac0b44 ! 129: c1819bc54aae Disable the `monitor-components` workflow in msft-git ``````diff @@ .github/workflows/monitor-components.yml (deleted) - feed: https://github.com/PCRE2Project/pcre2/tags.atom - - label: mingw-w64-llvm - feed: https://github.com/msys2/MINGW-packages/commits/master/mingw-w64-llvm.atom +- - label: innosetup +- feed: https://github.com/jrsoftware/issrc/tags.atom - fail-fast: false - steps: - - uses: git-for-windows/rss-to-issues@v0 `````` * 126: 811292720657 = 130: 33b280cd176a .github: enable windows builds on microsoft fork * 127: 0a1b18635841 = 131: ee013f91b418 release: create initial Windows installer build workflow * 128: d3284e4f2113 = 132: 84dc668f625a help: special-case HOST_CPU `universal` * 129: adc0dc621b2b = 133: 5aa01da370f6 release: add Mac OSX installer build * 130: 20b196b93391 = 134: 4898f6394ba7 release: build unsigned Ubuntu .deb package * 131: ce982931ed88 = 135: 336ac3fc923e release: add signing step for .deb package * 132: 2168e2163996 = 136: 88fc5e01fdc8 release: create draft GitHub release with packages & installers * 133: 61cbd895ed8e = 137: a070a177498b build-git-installers: publish gpg public key * 134: b748af639f14 = 138: 280848e23b72 release: continue pestering until user upgrades * 135: 4c2a29f7879d = 139: c29db06374ef Makefile: allow specifying GIT_BUILT_FROM_COMMIT * 139: 81a3a97de2bf = 140: 60880fa112fd update-microsoft-git: create barebones builtin * 136: 697df23d7d2e = 141: adca1a533462 dist: archive HEAD instead of HEAD^{tree} * 140: 34d9e20b41f9 = 142: 6b8190b86732 update-microsoft-git: Windows implementation * 137: 6487ff02441c = 143: 20f86947317c release: include GIT_BUILT_FROM_COMMIT in MacOS build * 141: 24bfc6f7a1b3 = 144: 571ebb686b85 update-microsoft-git: use brew on macOS * 138: 7f25f3c0d72c = 145: 70b2c7c405e5 release: add installer validation * 142: bab57f6b08ec = 146: ef8aba10219f .github: update ISSUE_TEMPLATE.md for microsoft/git * 143: 533f117d983b = 147: de761fe17d16 .github: update PULL_REQUEST_TEMPLATE.md * 144: bee22b69e05c = 148: e202255676d2 Adjust README.md for microsoft/git * 151: 16260a64df58 = 149: 855f8ecbb092 scalar: implement a minimal JSON parser * 152: 68145ff7d3a2 = 150: 6365f7c4300c scalar clone: support GVFS-enabled remote repositories * 153: f34bc0aa824b ! 151: 92057b32b97d test-gvfs-protocol: also serve smart protocol ``````diff @@ Commit message ## t/helper/test-gvfs-protocol.c ## @@ + #define USE_THE_REPOSITORY_VARIABLE #include "git-compat-util.h" #include "environment.h" +#include "gettext.h" `````` * 154: 156e684d7c5f ! 152: 8411cdc45057 gvfs-helper: add the `endpoint` command ``````diff @@ gvfs-helper.c +// ////////////////////////////////////////////////////////////////// - #include "git-compat-util.h" + #define USE_THE_REPOSITORY_VARIABLE @@ gvfs-helper.c: static void do_req__with_fallback(const char *url_component, * * Return server's response buffer. This is probably a raw JSON string. `````` * 155: f0c7192a661f = 153: cf20ad0c232b dir_inside_of(): handle directory separators correctly * 156: 37a1679fab50 = 154: 1ccd92626d34 scalar: disable authentication in unattended mode * 157: e4c9fb282e2f = 155: 3a523b3531cb scalar: do initialize `gvfs.sharedCache` * 158: fdfccaa091ca = 156: a9a22f3d05c0 scalar diagnose: include shared cache info * 159: 1fcf78306d15 = 157: bc76060e5942 scalar: only try GVFS protocol on https:// URLs * 160: 13db4b2044e2 = 158: e455e68ef6e8 scalar: verify that we can use a GVFS-enabled repository * 161: de44bdb6be24 ! 159: b8db558aa874 scalar: add the `cache-server` command ``````diff @@ scalar.c: static int cmd_version(int argc, const char **argv) + error("no such remote: '%s'", name); + return 1; + } -+ if (!remote->url) { ++ if (!remote->url.nr) { + return error(_("remote '%s' has no URLs"), + name); + } -+ url = remote->url[0]; ++ url = remote->url.v[0]; + } + res = supports_gvfs_protocol(url, NULL); + } else if (set) { `````` * 162: bc1f93190f44 = 160: da1d056d4373 scalar: add a test toggle to skip accessing the vsts/info endpoint * 163: 82a620f77464 = 161: eac9d484f82b scalar: adjust documentation to the microsoft/git fork * 164: 8c628470d995 = 162: e1ca2511fe35 scalar: enable untracked cache unconditionally * 165: dc53c3dcae1c = 163: a2e90b79c21f scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility * 166: fd4a81f2e36f = 164: c5d70c0f609c scalar diagnose: accommodate Scalar's Functional Tests * 167: 48961e3d3b46 = 165: 2f5f7343e5c0 ci: run Scalar's Functional Tests * 168: 39ceaebf95b9 = 166: e814dff3ab40 scalar: upgrade to newest FSMonitor config setting * 169: 6a72129501bc = 167: d9c8469cc330 abspath: make strip_last_path_component() global * 170: 265c7481e02d = 168: 108fc64d2bb6 scalar: .scalarCache should live above enlistment * 171: 10dd178d67a8 ! 169: 10049eb1ed62 add/rm: allow adding sparse entries when virtual ``````diff @@ Commit message ## builtin/add.c ## @@ */ - #define USE_THE_INDEX_VARIABLE + #include "builtin.h" +#include "environment.h" #include "advice.h" @@ builtin/add.c: static int chmod_pathspec(struct pathspec *pathspec, char flip, i if (!include_sparse && + !core_virtualfilesystem && (ce_skip_worktree(ce) || - !path_in_sparse_checkout(ce->name, &the_index))) + !path_in_sparse_checkout(ce->name, the_repository->index))) continue; @@ builtin/add.c: static int refresh(int verbose, const struct pathspec *pathspec) if (!seen[i]) { const char *path = pathspec->items[i].original; - if (matches_skip_worktree(pathspec, i, &skip_worktree_seen) || -- !path_in_sparse_checkout(path, &the_index)) { +- !path_in_sparse_checkout(path, the_repository->index)) { + if (!core_virtualfilesystem && + (matches_skip_worktree(pathspec, i, &skip_worktree_seen) || -+ !path_in_sparse_checkout(path, &the_index))) { ++ !path_in_sparse_checkout(path, the_repository->index))) { string_list_append(&only_match_skip_worktree, pathspec->items[i].original); } else { @@ builtin/add.c: int cmd_add(int argc, const char **argv, const char *prefix) ## builtin/rm.c ## @@ */ - #define USE_THE_INDEX_VARIABLE + #include "builtin.h" +#include "environment.h" #include "advice.h" #include "config.h" #include "lockfile.h" @@ builtin/rm.c: int cmd_rm(int argc, const char **argv, const char *prefix) - for (i = 0; i < the_index.cache_nr; i++) { - const struct cache_entry *ce = the_index.cache[i]; + for (i = 0; i < the_repository->index->cache_nr; i++) { + const struct cache_entry *ce = the_repository->index->cache[i]; - if (!include_sparse && + if (!include_sparse && !core_virtualfilesystem && (ce_skip_worktree(ce) || - !path_in_sparse_checkout(ce->name, &the_index))) + !path_in_sparse_checkout(ce->name, the_repository->index))) continue; @@ builtin/rm.c: int cmd_rm(int argc, const char **argv, const char *prefix) *original ? original : "."); `````` * 172: e00dddb220bd = 170: 911894d32f9c sparse-checkout: add config to disable deleting dirs * 173: e082cb8f9db1 = 171: de33ebef2e0c diff: ignore sparse paths in diffstat * 174: df6a7871ca1c = 172: d3d3691f1b7a repo-settings: enable sparse index by default * 175: 26babbf2d3bb = 173: 3b11321585e4 diff(sparse-index): verify with partially-sparse * 176: 40ea5610f83e = 174: 2719642c80a5 stash: expand testing for `git stash -u` * 178: 9008be105a67 = 175: 6859862d8cf3 sparse: add vfs-specific precautions * 179: 994a00867db7 ! 176: 0f906d174e81 reset: fix mixed reset when using virtual filesystem ``````diff @@ builtin/reset.c: static void update_index_from_diff(struct diff_queue_struct *q, + if (core_virtualfilesystem && !file_exists(two->path)) + { + respect_skip_worktree = 0; -+ pos = index_name_pos(&the_index, two->path, strlen(two->path)); ++ pos = index_name_pos(the_repository->index, two->path, strlen(two->path)); + -+ if ((pos >= 0 && ce_skip_worktree(the_index.cache[pos])) && ++ if ((pos >= 0 && ce_skip_worktree(the_repository->index->cache[pos])) && + (is_missing || !was_missing)) + { + state.force = 1; + state.refresh_cache = 1; -+ state.istate = &the_index; -+ ceBefore = make_cache_entry(&the_index, two->mode, ++ state.istate = the_repository->index; ++ ceBefore = make_cache_entry(the_repository->index, two->mode, + &two->oid, two->path, + 0, 0); + if (!ceBefore) @@ builtin/reset.c: static void update_index_from_diff(struct diff_queue_struct *q, + } if (!is_in_reset_tree && !intent_to_add) { - remove_file_from_index(&the_index, one->path); + remove_file_from_index(the_repository->index, one->path); @@ builtin/reset.c: static void update_index_from_diff(struct diff_queue_struct *q, * to properly construct the reset sparse directory. */ - pos = index_name_pos(&the_index, one->path, strlen(one->path)); -- if ((pos >= 0 && ce_skip_worktree(the_index.cache[pos])) || -- (pos < 0 && !path_in_sparse_checkout(one->path, &the_index))) + pos = index_name_pos(the_repository->index, one->path, strlen(one->path)); +- if ((pos >= 0 && ce_skip_worktree(the_repository->index->cache[pos])) || +- (pos < 0 && !path_in_sparse_checkout(one->path, the_repository->index))) + + /* + * Do not add the SKIP_WORKTREE bit back if we populated the + * file on purpose in a virtual filesystem scenario. + */ + if (respect_skip_worktree && -+ ((pos >= 0 && ce_skip_worktree(the_index.cache[pos])) || -+ (pos < 0 && !path_in_sparse_checkout(one->path, &the_index)))) ++ ((pos >= 0 && ce_skip_worktree(the_repository->index->cache[pos])) || ++ (pos < 0 && !path_in_sparse_checkout(one->path, the_repository->index)))) ce->ce_flags |= CE_SKIP_WORKTREE; if (!ce) `````` * 180: faab0ced07c4 ! 177: a79fae6b7d4e credential: add new interactive config option ``````diff @@ Documentation/config/credential.txt: credential.helper:: or https URL to be important. Defaults to false. See ## credential.c ## +@@ ++#define USE_THE_REPOSITORY_VARIABLE + #include "git-compat-util.h" + #include "abspath.h" + #include "config.h" @@ #include "strbuf.h" #include "urlmatch.h" @@ credential.c: static char *credential_ask_one(const char *what, struct credentia + return 0; } - int credential_read(struct credential *c, FILE *fp) -@@ credential.c: void credential_fill(struct credential *c) + int credential_has_capability(const struct credential_capability *capa, +@@ credential.c: void credential_fill(struct credential *c, int all_capabilities) c->helpers.items[i].string); } - credential_getpass(c); -- if (!c->username && !c->password) +- if (!c->username && !c->password && !c->credential) + if (credential_getpass(c) || -+ (!c->username && !c->password)) ++ (!c->username && !c->password && !c->credential)) die("unable to get password from user"); } `````` * 181: 238ecde4449d = 178: 75a97b3934ad maintenance: add custom config to background jobs * 182: 9b6f61965ef2 ! 179: 5ca9725d6d4c scalar: configure maintenance during 'reconfigure' ``````diff @@ Commit message ## scalar.c ## @@ scalar.c: static int cmd_reconfigure(int argc, const char **argv) - r.commondir = commondir.buf; - r.gitdir = gitdir.buf; + old_repo = the_repository; + the_repository = &r; - if (set_recommended_config(1) >= 0) + if (set_recommended_config(1) >= 0 && + toggle_maintenance(1) >= 0) succeeded = 1; - loop_end: + the_repository = old_repo; ## t/t9210-scalar.sh ## @@ t/t9210-scalar.sh: test_expect_success 'scalar reconfigure' ' @@ t/t9210-scalar.sh: test_expect_success 'scalar reconfigure' ' + test_subcommand git maintenance start

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

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

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

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

Range-diff relative to first-iteration * 1: 92566955cec9 = 1: 92566955cec9 advice: warn when sparse index expands * 2: fa9d858ce999 = 2: fa9d858ce999 Revert "midx-write.c: use `--stdin-packs` when repacking" * 3: 43daded4fad2 = 3: 43daded4fad2 t: remove advice from some tests * 4: d493e7b971ef = 4: d493e7b971ef survey: stub in new experimental `git-survey` command * 5: 891929e0cb2f = 5: 891929e0cb2f survey: add command line opts to select references * 6: 0e33f37886bb = 6: 0e33f37886bb survey: collect the set of requested refs * 7: 02c2b1eef417 = 7: 02c2b1eef417 survey: calculate stats on refs and print results * 8: 46d069164fb8 = 8: 46d069164fb8 survey: stub in treewalk of reachable commits and objects * 9: 44a41d0027b6 = 9: 44a41d0027b6 survey: add traverse callback for commits * 10: 38f5aecd6c3f = 10: 38f5aecd6c3f survey: add vector of largest objects for various scaling dimensions * 11: acf22c612e95 = 11: acf22c612e95 survey: add pathname of blob or tree to large_item_vec * 12: 09c93cc0d1e6 = 12: 09c93cc0d1e6 survey: add commit-oid to large_item detail * 13: 9d24f68692bb = 13: 9d24f68692bb survey: add commit name-rev lookup to each large_item * 14: f4a94db23d1c = 14: f4a94db23d1c survey: add --json option and setup for pretty output * 15: ecef306aae63 = 15: ecef306aae63 survey: add pretty printing of stats * 16: 67a115d6eb93 = 16: 67a115d6eb93 t8100: create test for git-survey * 17: e210d30ed3bd = 17: e210d30ed3bd survey: add --no-name-rev option * 18: 95f6cde2f8f7 = 18: 95f6cde2f8f7 survey: started TODO list at bottom of source file * 19: aecf6ec64d7d = 19: aecf6ec64d7d survey: expanded TODO list at the bottom of the source file * 20: 79f3731e02d9 = 20: 79f3731e02d9 survey: expanded TODO with more notes * 21: d0ae24c9d298 = 21: d0ae24c9d298 survey: clearly note the experimental nature in the output * 183: 714b6a5ea752 = 22: 950219171d99 sparse-index.c: fix use of index hashes in expand_index * 184: 5a978765dda7 = 23: 6fdbc50aeb75 t1092: add test for untracked files and directories * 181: 4dfc839bfa96 = 24: 9c5033454b59 t5300: confirm failure of git index-pack when non-idx suffix requested * 182: 8088fcd506de = 25: 133fc3f1141a index-pack: disable rev-index if index file has non .idx suffix * 189: 0d6d04b0876b = 26: 005f8c5d5701 trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup * 22: 5f1879ca2275 = 27: 08dd799c531d reset --stdin: trim carriage return from the paths * 23: bb17814236d4 = 28: 79167e014ca0 Identify microsoft/git via a distinct version suffix * 24: 462b3754796c = 29: 40708385cc80 gvfs: ensure that the version is based on a GVFS tag * 25: 13619bcf7d0e = 30: 2d54d840b1de gvfs: add a GVFS-specific header file * 26: 6c9e6d9cee5d = 31: bc6375e4d890 gvfs: add the core.gvfs config setting * 27: 663af32b43af = 32: e7a44d04f0d3 gvfs: add the feature to skip writing the index' SHA-1 * 28: 0de65b93b51c = 33: ea206fe4dc9d gvfs: add the feature that blobs may be missing * 29: d3efbf008c97 = 34: 62f4583d2bbd gvfs: prevent files to be deleted outside the sparse checkout * 30: b182882d697c = 35: ea21f8c79900 gvfs: optionally skip reachability checks/upload pack during fetch * 31: fdf68f857a83 = 36: 723b285426c8 gvfs: ensure all filters and EOL conversions are blocked * 32: 1673b6c003b5 = 37: 094a557594e3 gvfs: allow "virtualizing" objects * 33: 818d82e8345c = 38: 4113ebd05161 Hydrate missing loose objects in check_and_freshen() * 34: 2d7a9dceec4e = 39: 82a8cb09e957 sha1_file: when writing objects, skip the read_object_hook * 35: 4bee1dfe9b5f = 40: 65bbe748549e gvfs: add global command pre and post hook procs * 36: 585cc63cd81c = 41: 84fa8701d89f t0400: verify that the hook is called correctly from a subdirectory * 37: 04b361425283 = 42: 5bff5d735aa7 Pass PID of git process to hooks. * 38: 6dc796cb3d43 = 43: 2401e24befe6 pre-command: always respect core.hooksPath * 39: 1beb06a0f1b3 = 44: 409ab49d5cd8 sparse-checkout: update files with a modify/delete conflict * 40: 2e7464043490 = 45: c73dd2d8d195 sparse-checkout: avoid writing entries with the skip-worktree bit * 41: 47b22d8df73b = 46: 545b37b9f1c2 Do not remove files outside the sparse-checkout * 42: 1b457f9e4354 = 47: 02cbf157a99d send-pack: do not check for sha1 file when GVFS_MISSING_OK set * 43: 7969d782fbc1 = 48: 5731fb0947e9 cache-tree: remove use of strbuf_addf in update_one * 44: f2eae33203b1 = 49: 6b7991276bf8 gvfs: block unsupported commands when running in a GVFS repo * 45: a08a89d854d1 = 50: 2da5195324bc worktree: allow in Scalar repositories * 46: 7227b52f5625 = 51: 20677e35db26 gvfs: allow overriding core.gvfs * 47: 5733f8e0d6e3 = 52: 812c87658e15 BRANCHES.md: Add explanation of branches and using forks * 55: f51ea9b32ea9 = 53: dea3c785561f Add virtual file system settings and hook proc * 56: 8e22f0673d1d = 54: 9aae04e2de2b virtualfilesystem: don't run the virtual file system hook if the index has been redirected * 57: bd9e9d991ecd = 55: 3fca8ddbdf43 virtualfilesystem: check if directory is included * 58: 214b081718a1 = 56: 5c66ee85dda4 backwards-compatibility: support the post-indexchanged hook * 59: 858040ab9cb8 = 57: 5778ef45b570 gvfs: verify that the built-in FSMonitor is disabled * 185: 90ce5dce86d4 = 58: a03b1e0a6328 wt-status: add trace2 data for sparse-checkout percentage * 186: 5bfd759d16f7 = 59: 9327918509d8 wt-status: add VFS hydration percentage to normal `git status` output * 60: b9c892cb7e26 = 60: 1966bb602513 status: add status serialization mechanism * 61: 7405e5e0ed54 = 61: 59b78f31a42b Teach ahead-behind and serialized status to play nicely together * 62: 44d03e8f1d5e = 62: c14e228cab25 status: serialize to path * 63: ce47f124cf02 = 63: 61da650cca99 status: reject deserialize in V2 and conflicts * 64: fe42bddb72b4 = 64: 4d3d214e5a90 serialize-status: serialize global and repo-local exclude file metadata * 65: c1d5d31ab17e = 65: 99cdd81bd486 status: deserialization wait * 66: 11d838d7f861 = 66: b3b984043930 merge-recursive: avoid confusing logic in was_dirty() * 67: 1bc8f66607f2 = 67: d708139f7b94 merge-recursive: add some defensive coding to was_dirty() * 68: dad640bef266 = 68: ee784dbbf83d merge-recursive: teach was_dirty() about the virtualfilesystem * 69: 3026a1e4f244 = 69: 8a22ddd977cf status: deserialize with -uno does not print correct hint * 70: f974331a3617 = 70: 8c06ea9999c1 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate * 71: 0ad0d0f4b54b = 71: ea8bdfe5be80 fsmonitor: add script for debugging and update script for tests * 72: 907a53a12c9d = 72: e4eac460a6cd status: disable deserialize when verbose output requested. * 73: ba4aaf94aa85 = 73: a56b134517f8 t7524: add test for verbose status deserialzation * 74: a4bbd5d79ebe = 74: 70304688f5d6 deserialize-status: silently fallback if we cannot read cache file * 75: c8c93ae2402b = 75: 9317315371e6 gvfs:trace2:data: add trace2 tracing around read_object_process * 76: cded777829c9 = 76: 840e7966f9eb gvfs:trace2:data: status deserialization information * 77: 03952fa61547 = 77: 7c0d80dd5525 gvfs:trace2:data: status serialization * 78: 31fcdac93d95 = 78: 2b63cd3f98b0 gvfs:trace2:data: add vfs stats * 79: abbea4903114 = 79: 8fd35f3e8a60 trace2: refactor setting process starting time * 80: afc4a0aa6f1b = 80: 2ce216bb356b trace2:gvfs:experiment: clear_ce_flags_1 * 81: 5ce6558833ac = 81: b6b033b0fa93 trace2:gvfs:experiment: report_tracking * 82: 4ec2e678cc0d = 82: ff6a4100411f trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache * 83: c1c64db22fbd = 83: 58c9819067c5 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension * 84: ffcbc2848393 = 84: 0cba03a6845f trace2:gvfs:experiment: add region to apply_virtualfilesystem() * 85: 4957e884ba93 = 85: 62fc4882390f trace2:gvfs:experiment: add region around unpack_trees() * 86: 6366b0e3ab52 = 86: a8a4e8737878 trace2:gvfs:experiment: add region to cache_tree_fully_valid() * 87: 9212637a8585 = 87: dd5e92b410d1 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() * 88: 801e01ff4206 = 88: 92aba5b37b94 trace2:gvfs:experiment: increase default event depth for unpack-tree data * 89: bf54c3f565b0 = 89: dc529a8720ab trace2:gvfs:experiment: add data for check_updates() in unpack_trees() * 90: 4148a39a3586 = 90: 1cf9c5eb97ed Trace2:gvfs:experiment: capture more 'tracking' details * 91: 2f076d13eaa4 = 91: b92805e78030 credential: set trace2_child_class for credential manager children * 92: 1ecd57735347 = 92: 7ff046b962c0 sub-process: do not borrow cmd pointer from caller * 93: 678c1e180486 = 93: 0dd26841ca18 sub-process: add subprocess_start_argv() * 94: ad46269a96c8 = 94: fee814639470 sha1-file: add function to update existing loose object cache * 95: 4c7f6dad9365 = 95: cbb6a3b794f0 packfile: add install_packed_git_and_mru() * 96: 80e302e1c9c9 = 96: 2ea6aae49999 index-pack: avoid immediate object fetch while parsing packfile * 97: fd834454cb32 ! 97: d55856507817 gvfs-helper: create tool to fetch objects using the GVFS Protocol ``````diff @@ Documentation/config/gvfs.txt (new) +gvfs.sharedcache:: + TODO + ## Documentation/lint-manpages.sh ## +@@ Documentation/lint-manpages.sh: check_missing_docs () ( + git-init-db) continue;; + git-remote-*) continue;; + git-stage) continue;; ++ git-gvfs-helper) continue;; + git-legacy-*) continue;; + git-?*--?* ) continue ;; + esac + ## Makefile ## @@ Makefile: LIB_OBJS += gpg-interface.o LIB_OBJS += graph.o @@ config.c: static int git_default_mailmap_config(const char *var, const char *val + if (!strcmp(var, "gvfs.cache-server")) { + char *v2 = NULL; + -+ if (!git_config_string(&v2, var, value) && v2 && *v2) ++ if (!git_config_string(&v2, var, value) && v2 && *v2) { ++ free(gvfs_cache_server_url); + gvfs_cache_server_url = transport_anonymize_url(v2); ++ } + free(v2); + return 0; + } @@ environment.c: int protect_hfs = PROTECT_HFS_DEFAULT; #endif int protect_ntfs = PROTECT_NTFS_DEFAULT; +int core_use_gvfs_helper; -+const char *gvfs_cache_server_url; ++char *gvfs_cache_server_url; +const char *gvfs_shared_cache_pathname; /* @@ environment.h: extern int core_gvfs; extern int protect_hfs; extern int protect_ntfs; +extern int core_use_gvfs_helper; -+extern const char *gvfs_cache_server_url; ++extern char *gvfs_cache_server_url; +extern const char *gvfs_shared_cache_pathname; extern int core_apply_sparse_checkout; @@ gvfs-helper.c (new) + count++; + } while (1); + ++ strbuf_release(&buf_stdin); + return count; +} + @@ gvfs-helper.c (new) + } + + gh__run_one_slot(slot, params, status); ++ strbuf_release(&rest_url); +} + +static void do_req__to_main(const char *url_component, `````` * 98: b574c171e157 ! 98: 886f31f17f70 sha1-file: create shared-cache directory if it doesn't exist ``````diff @@ environment.c @@ environment.c: int protect_hfs = PROTECT_HFS_DEFAULT; int protect_ntfs = PROTECT_NTFS_DEFAULT; int core_use_gvfs_helper; - const char *gvfs_cache_server_url; + char *gvfs_cache_server_url; -const char *gvfs_shared_cache_pathname; +struct strbuf gvfs_shared_cache_pathname = STRBUF_INIT; @@ environment.h @@ environment.h: extern int protect_hfs; extern int protect_ntfs; extern int core_use_gvfs_helper; - extern const char *gvfs_cache_server_url; + extern char *gvfs_cache_server_url; -extern const char *gvfs_shared_cache_pathname; +extern struct strbuf gvfs_shared_cache_pathname; `````` * 99: 4d22d1b588fa = 99: 9743c4a6fcce gvfs-helper: better handling of network errors * 100: b569887d13c0 = 100: 4b64bd2afc5a gvfs-helper-client: properly update loose cache with fetched OID * 101: be0e9bb40389 ! 101: 48773f09b00a gvfs-helper: V2 robust retry and throttling ``````diff @@ gvfs-helper.c: static void do_req(const char *url_base, else set_cache_server_creds_on_slot(slot, creds); @@ gvfs-helper.c: static void do_req(const char *url_base, - gh__run_one_slot(slot, params, status); + strbuf_release(&rest_url); } +/* `````` * 102: cbcc517bd1bc = 102: 7876b32ccb9c gvfs-helper: expose gvfs/objects GET and POST semantics * 103: 6db413083732 = 103: 913343a570b9 gvfs-helper: dramatically reduce progress noise * 104: 06ba59c18ebc = 104: 135469e2d97f gvfs-helper-client.h: define struct object_id * 105: f50d84997537 = 105: 044c2a9a4854 gvfs-helper: handle pack-file after single POST request * 106: a089606f04da ! 106: bdd85c67a183 test-gvfs-prococol, t5799: tests for gvfs-helper ``````diff @@ t/helper/test-gvfs-protocol.c (new) + .gvfs_api = STRBUF_INIT, \ + .slash_args = STRBUF_INIT, \ + .quest_args = STRBUF_INIT, \ -+ .header_list = STRING_LIST_INIT_NODUP, \ ++ .header_list = STRING_LIST_INIT_DUP, \ + } + +static void req__release(struct req *req) @@ t/helper/test-gvfs-protocol.c (new) + + if (write_in_full(fd, response_header.buf, response_header.len) < 0) { + logerror("unable to write response header"); ++ free(content); + return WR_IO_ERROR; + } + @@ t/helper/test-gvfs-protocol.c (new) + + if (string_list_has_string(&mayhem_list, "close_write")) { + logmayhem("close_write"); ++ free(content); + return WR_MAYHEM | WR_HANGUP; + } + @@ t/helper/test-gvfs-protocol.c (new) + (uintmax_t)*oi->sizep); + + /* [2] */ ++ memset(&oid_check, 0, sizeof(oid_check)); + the_hash_algo->init_fn(&c); + the_hash_algo->update_fn(&c, object_header, object_header_len); + the_hash_algo->update_fn(&c, *oi->contentp, *oi->sizep); @@ t/helper/test-gvfs-protocol.c (new) + + /* [5] */ + wr = send_chunk(fd, compressed, stream.next_out - compressed); -+ if (wr & WR_STOP_THE_MUSIC) ++ if (wr & WR_STOP_THE_MUSIC) { ++ free(content); + return wr; ++ } + + stream.next_out = compressed; + stream.avail_out = sizeof(compressed); @@ t/helper/test-gvfs-protocol.c (new) + oid_to_hex(oid), oid_to_hex(&oid_check)); + + /* [5] */ ++ free(content); + return send_final_chunk(fd); +} + @@ t/helper/test-gvfs-protocol.c (new) + if (!h.len) + goto done; /* a blank line ends the header */ + -+ string_list_append(&req->header_list, -+ strbuf_detach(&h, NULL)); ++ string_list_append(&req->header_list, h.buf); + } + + /* @@ t/helper/test-gvfs-protocol.c (new) + trace2_printf("%s: Hdrs: %s", TR2_CAT, item->string); + } + ++ strbuf_release(&h); ++ + return WR_OK; +} + @@ t/helper/test-gvfs-protocol.c (new) +int cmd_main(int argc, const char **argv) +{ + int listen_port = 0; -+ struct string_list listen_addr = STRING_LIST_INIT_NODUP; ++ static struct string_list listen_addr = STRING_LIST_INIT_NODUP; + int worker_mode = 0; + int i; + @@ t/helper/test-gvfs-protocol.c (new) + const char *v; + + if (skip_prefix(arg, "--listen=", &v)) { -+ string_list_append(&listen_addr, xstrdup_tolower(v)); ++ string_list_append_nodup(&listen_addr, xstrdup_tolower(v)); + continue; + } + if (skip_prefix(arg, "--port=", &v)) { `````` * 107: e1f2825fd9dc = 107: 3ce0a7d819bb gvfs-helper: move result-list construction into install functions * 108: 0465ea07bc27 ! 108: 314d49d7f45a t5799: add support for POST to return either a loose object or packfile ``````diff @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const + + if (oid_object_info_extended(the_repository, oid, &oi, flags)) { + logerror("Could not find OID: '%s'", oid_to_hex(oid)); ++ free(content); + return send_http_error(1, 404, "Not Found", -1, WR_OK); + } + + if (string_list_has_string(&mayhem_list, "http_404")) { + logmayhem("http_404"); ++ free(content); + return send_http_error(1, 404, "Not Found", -1, WR_MAYHEM); + } + @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const + (uintmax_t)*oi.sizep); /* [2] */ + memset(&oid_check, 0, sizeof(oid_check)); the_hash_algo->init_fn(&c); the_hash_algo->update_fn(&c, object_header, object_header_len); - the_hash_algo->update_fn(&c, *oi->contentp, *oi->sizep); `````` * 109: e4df84472fcc = 109: 0508d3e2ce2d t5799: cleanup wc-l and grep-c lines * 110: f0cfe9c0c1a9 ! 110: eeabb303dfac gvfs-helper: verify loose objects after write ``````diff @@ gvfs-helper.c: static void install_packfile(struct gh__request_params *params, + ret = read_loose_object(path, expected_oid, &real_oid, &contents, &oi); + if (!ret) + free(contents); ++ strbuf_release(&type_name); + + return ret; +} `````` * 111: 2491b1ed8467 = 111: fa94716fc8a9 t7599: create corrupt blob test * 112: e6cc93038789 ! 112: 66a156cfd802 gvfs-helper: add prefetch support ``````diff @@ t/helper/test-gvfs-protocol.c: static enum worker_result req__read(struct req *r } +#endif - return WR_OK; - } + strbuf_release(&h); + @@ t/helper/test-gvfs-protocol.c: static enum worker_result dispatch(struct req *req) return do__gvfs_config__get(req); } `````` * 113: b93feac580b2 = 113: ac4306bc461d gvfs-helper: add prefetch .keep file for last packfile * 114: 4cf4fc71c725 = 114: eec2cb38d365 gvfs-helper: do one read in my_copy_fd_len_tail() * 115: dc478bfb4f42 = 115: 3eac7e572561 gvfs-helper: move content-type warning for prefetch packs * 116: 9a86242eda08 = 116: 75daf91a8e43 fetch: use gvfs-helper prefetch under config * 117: 88744c56fd6e = 117: 807e68c96e0f gvfs-helper: better support for concurrent packfile fetches * 118: 2e12c33ec7e7 = 118: 15c368926759 remote-curl: do not call fetch-pack when using gvfs-helper * 119: 1ab9c6327400 = 119: 11fc1795faa1 fetch: reprepare packs before checking connectivity * 120: 8fee06818bef = 120: daed94191a6b gvfs-helper: retry when creating temp files * 121: 407fb5c920f0 = 121: e438434aa238 sparse: avoid warnings about known cURL issues in gvfs-helper.c * 122: 5f1daad2e340 = 122: d3e2705893f8 gvfs-helper: add --max-retries to prefetch verb * 123: 8bee033994d8 = 123: bf18802dc707 t5799: add tests to detect corrupt pack/idx files in prefetch * 124: c519fa562cfe = 124: f79bc92086c2 gvfs-helper: ignore .idx files in prefetch multi-part responses * 190: e717a31ae72e = 125: 56ecd8c4fdf2 t5799: explicitly test gvfs-helper --fallback and --no-fallback * 191: c2df878a7960 = 126: bf3c128b0450 gvfs-helper: don't fallback with new config * 125: 79d4ae365461 = 127: 332d20729383 maintenance: care about gvfs.sharedCache config * 192: 151da772a348 = 128: 06e0f2141cb0 test-gvfs-protocol: add cache_http_503 to mayhem * 126: 31932ba6e9ef = 129: ad1558749274 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags * 193: c457a81e817e = 130: b93a4b2e0b12 t5799: add unit tests for new `gvfs.fallback` config setting * 127: 38f795c0b2a0 = 131: 341eed043a0e homebrew: add GitHub workflow to release Cask * 128: d4466b14a00c = 132: d2e6e6dd5ecb Adding winget workflows * 129: c1819bc54aae = 133: 2b69fd5ba4c9 Disable the `monitor-components` workflow in msft-git * 130: 33b280cd176a = 134: acaedf57324b .github: enable windows builds on microsoft fork * 131: ee013f91b418 = 135: ce866579e5b1 release: create initial Windows installer build workflow * 132: 84dc668f625a = 136: 84fae4b1079c help: special-case HOST_CPU `universal` * 133: 5aa01da370f6 = 137: aaae0bdec430 release: add Mac OSX installer build * 134: 4898f6394ba7 = 138: 3ef8fd774a3c release: build unsigned Ubuntu .deb package * 140: 60880fa112fd ! 139: 7e34f98d1fa4 update-microsoft-git: create barebones builtin ``````diff @@ Documentation/git-update-microsoft-git.txt (new) +--- +Part of the linkgit:git[1] suite + ## Documentation/lint-manpages.sh ## +@@ Documentation/lint-manpages.sh: check_missing_docs () ( + git-remote-*) continue;; + git-stage) continue;; + git-gvfs-helper) continue;; ++ git-update-microsoft-git) continue;; + git-legacy-*) continue;; + git-?*--?* ) continue ;; + esac + ## Makefile ## @@ Makefile: BUILTIN_OBJS += builtin/tag.o BUILTIN_OBJS += builtin/unpack-file.o `````` * 142: 6b8190b86732 = 140: de3b31fb9d91 update-microsoft-git: Windows implementation * 144: 571ebb686b85 = 141: 053721286b0f update-microsoft-git: use brew on macOS * 146: ef8aba10219f = 142: 29a37b9a7b63 .github: update ISSUE_TEMPLATE.md for microsoft/git * 147: de761fe17d16 = 143: 23ed79f2f878 .github: update PULL_REQUEST_TEMPLATE.md * 148: e202255676d2 = 144: bc2279a38e0d Adjust README.md for microsoft/git * 48: 84d002422b26 = 145: a094803c5d9b git_config_set_multivar_in_file_gently(): add a lock timeout * 49: 5ebaf3f62941 = 146: 800d4f2379be scalar: set the config write-lock timeout to 150ms * 50: 2521c6e8b3ea = 147: 7903f0089fbd scalar: add docs from microsoft/scalar * 51: 8474a8c79916 = 148: 2b4a99bf93eb scalar (Windows): use forward slashes as directory separators * 52: fced4b62821c = 149: 41656b76b822 scalar: add retry logic to run_git() * 53: 98e34458bbce = 150: 266249c46eef scalar: support the `config` command for backwards compatibility * 149: 855f8ecbb092 = 151: e253f20dc714 scalar: implement a minimal JSON parser * 150: 6365f7c4300c = 152: c3ac61ed28cd scalar clone: support GVFS-enabled remote repositories * 151: 92057b32b97d = 153: 242bfe782097 test-gvfs-protocol: also serve smart protocol * 152: 8411cdc45057 = 154: d86f59d66b00 gvfs-helper: add the `endpoint` command * 153: cf20ad0c232b = 155: ff64723fa390 dir_inside_of(): handle directory separators correctly * 154: 1ccd92626d34 = 156: 88ec7148cce8 scalar: disable authentication in unattended mode * 155: 3a523b3531cb = 157: 919a40159864 scalar: do initialize `gvfs.sharedCache` * 156: a9a22f3d05c0 = 158: b4009303c1fe scalar diagnose: include shared cache info * 157: bc76060e5942 = 159: 5f5992b8f2da scalar: only try GVFS protocol on https:// URLs * 158: e455e68ef6e8 = 160: 7ca006ebd050 scalar: verify that we can use a GVFS-enabled repository * 159: b8db558aa874 = 161: c7a67252021f scalar: add the `cache-server` command * 160: da1d056d4373 = 162: b11236d25be9 scalar: add a test toggle to skip accessing the vsts/info endpoint * 161: eac9d484f82b = 163: 2a1cef43d710 scalar: adjust documentation to the microsoft/git fork * 162: e1ca2511fe35 = 164: ad371800198a scalar: enable untracked cache unconditionally * 163: a2e90b79c21f = 165: b46b1f0faa3d scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility * 180: 7bbade9b1f32 = 166: 13442741ef47 scalar: make GVFS Protocol a forced choice * 164: c5d70c0f609c = 167: 8b9c6eea8e28 scalar diagnose: accommodate Scalar's Functional Tests * 165: 2f5f7343e5c0 ! 168: c1134a06dff4 ci: run Scalar's Functional Tests ``````diff @@ .github/workflows/scalar-functional-tests.yml (new) + fail-fast: false + matrix: + # Order by runtime (in descending order) -+ os: [windows-2019, macos-11, ubuntu-20.04, ubuntu-22.04] ++ os: [windows-2019, macos-13, ubuntu-20.04, ubuntu-22.04] + # Scalar.NET used to be tested using `features: [false, experimental]` + # But currently, Scalar/C ignores `feature.scalar` altogether, so let's + # save some electrons and run only one of them... `````` * 166: e814dff3ab40 = 169: dd310a45d545 scalar: upgrade to newest FSMonitor config setting * 177: a79fae6b7d4e = 170: b5a5e898c38e credential: add new interactive config option * 178: 75a97b3934ad = 171: 00dcfb638001 maintenance: add custom config to background jobs * 167: d9c8469cc330 = 172: 6ab7d3d90a77 abspath: make strip_last_path_component() global * 179: 5ca9725d6d4c = 173: 284c2bb8009f scalar: configure maintenance during 'reconfigure' * 168: 108fc64d2bb6 = 174: 54e9db2a692a scalar: .scalarCache should live above enlistment * 169: 10049eb1ed62 = 175: c20327d06cd1 add/rm: allow adding sparse entries when virtual * 170: 911894d32f9c = 176: aead9a7ae44c sparse-checkout: add config to disable deleting dirs * 171: de33ebef2e0c = 177: 1619be42c069 diff: ignore sparse paths in diffstat * 172: d3d3691f1b7a = 178: b3df96251015 repo-settings: enable sparse index by default * 173: 3b11321585e4 = 179: aa578f893d67 diff(sparse-index): verify with partially-sparse * 174: 2719642c80a5 = 180: 43011244600f stash: expand testing for `git stash -u` * 54: 45d1ce3a892d = 181: 9e6ce2e24995 sequencer: avoid progress when stderr is redirected * 175: 6859862d8cf3 = 182: 203ebbe0075c sparse: add vfs-specific precautions * 176: 0f906d174e81 = 183: 10668eb6f0d3 reset: fix mixed reset when using virtual filesystem * 135: 336ac3fc923e ! 184: 81f5237405d0 release: add signing step for .deb package ``````diff @@ Commit message Co-authored-by: Lessley Dennington ## .github/workflows/build-git-installers.yml ## +@@ .github/workflows/build-git-installers.yml: on: + tags: + - 'v[0-9]*vfs*' # matches "vvfs" + ++permissions: ++ id-token: write # required for Azure login via OIDC ++ + jobs: + # Check prerequisites for the workflow + prereqs: @@ .github/workflows/build-git-installers.yml: jobs: git/.github/macos-installer/*.pkg # End build and sign Mac OSX installers @@ .github/workflows/build-git-installers.yml: jobs: + - name: Log into Azure + uses: azure/login@v1 + with: -+ creds: ${{ secrets.AZURE_CREDENTIALS }} ++ client-id: ${{ secrets.AZURE_CLIENT_ID }} ++ tenant-id: ${{ secrets.AZURE_TENANT_ID }} ++ subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: Prepare for GPG signing + env: `````` * 136: 88fc5e01fdc8 = 185: 7162807e9b8b release: create draft GitHub release with packages & installers * 137: a070a177498b ! 186: 3b6fd52085db build-git-installers: publish gpg public key ``````diff @@ Commit message ## .github/workflows/build-git-installers.yml ## @@ .github/workflows/build-git-installers.yml: jobs: + runs-on: ubuntu-latest + permissions: + contents: write ++ id-token: write # required for Azure login via OIDC + needs: + - create-linux-artifacts - create-macos-artifacts - windows_artifacts - prereqs @@ .github/workflows/build-git-installers.yml: jobs: + - name: Log into Azure + uses: azure/login@v1 + with: -+ creds: ${{ secrets.AZURE_CREDENTIALS }} ++ client-id: ${{ secrets.AZURE_CLIENT_ID }} ++ tenant-id: ${{ secrets.AZURE_TENANT_ID }} ++ subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: Download GPG public key signature file + run: | `````` * 138: 280848e23b72 = 187: c60fc5ff815d release: continue pestering until user upgrades * 139: c29db06374ef = 188: 37fd5ba3e5fd Makefile: allow specifying GIT_BUILT_FROM_COMMIT * 141: adca1a533462 = 189: b249793a4992 dist: archive HEAD instead of HEAD^{tree} * 143: 20f86947317c = 190: 45382555ec9a release: include GIT_BUILT_FROM_COMMIT in MacOS build * 145: 70b2c7c405e5 ! 191: 43d563727476 release: add installer validation ``````diff @@ .github/workflows/build-git-installers.yml: jobs: runs-on: ubuntu-latest permissions: contents: write + id-token: write # required for Azure login via OIDC needs: + - validate-installers - create-linux-artifacts `````` * 187: dc9a3b5dd349 < -: ------------ scalar-functional-tests.yml: update macos-11 to macos-13 * 188: 2e9909b03ef4 < -: ------------ github: use federated auth for Azure login
mjcheetham commented 1 month ago
Range diff relative to rc0 ``` 1: 92566955ce < -: ---------- advice: warn when sparse index expands ``` Already upstream. ``` 2: fa9d858ce9 = 1: df06595f2a Revert "midx-write.c: use `--stdin-packs` when repacking" 4: d493e7b971 = 2: 3563c4ca76 survey: stub in new experimental `git-survey` command 5: 891929e0cb = 3: 86e3aa8aec survey: add command line opts to select references 6: 0e33f37886 = 4: 93a8f3dfe2 survey: collect the set of requested refs 22: 950219171d = 5: 0f90e81af0 sparse-index.c: fix use of index hashes in expand_index 24: 9c5033454b = 6: 7faf39ec38 t5300: confirm failure of git index-pack when non-idx suffix requested 7: 02c2b1eef4 = 7: 7efb1ef685 survey: calculate stats on refs and print results 3: 43daded4fa = 8: 4dad0cebed t: remove advice from some tests 23: 6fdbc50aeb = 9: fa782dee4c t1092: add test for untracked files and directories 25: 133fc3f114 = 10: 661e96b902 index-pack: disable rev-index if index file has non .idx suffix 26: 005f8c5d57 = 11: c0d0db0b0b trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup 8: 46d069164f = 12: 72fd844ffe survey: stub in treewalk of reachable commits and objects 9: 44a41d0027 = 13: cc01b30466 survey: add traverse callback for commits 10: 38f5aecd6c = 14: 58c40117c3 survey: add vector of largest objects for various scaling dimensions 11: acf22c612e = 15: fdb0634305 survey: add pathname of blob or tree to large_item_vec 12: 09c93cc0d1 = 16: de9f560f9d survey: add commit-oid to large_item detail 13: 9d24f68692 = 17: d8f37cdfc1 survey: add commit name-rev lookup to each large_item 14: f4a94db23d = 18: dbb8b59a59 survey: add --json option and setup for pretty output 15: ecef306aae = 19: bda82ed7c5 survey: add pretty printing of stats 16: 67a115d6eb = 20: 2b62b9b7e9 t8100: create test for git-survey 17: e210d30ed3 = 21: 7febb585d8 survey: add --no-name-rev option 18: 95f6cde2f8 = 22: a3f6b46199 survey: started TODO list at bottom of source file 19: aecf6ec64d = 23: 9397140c0e survey: expanded TODO list at the bottom of the source file 20: 79f3731e02 = 24: b5648914c2 survey: expanded TODO with more notes 21: d0ae24c9d2 = 25: 14a92b5ead survey: clearly note the experimental nature in the output 27: 08dd799c53 = 26: 3c5f0946b7 reset --stdin: trim carriage return from the paths 28: 79167e014c ! 27: 5ab768cfd1 Identify microsoft/git via a distinct version suffix @@ Commit message ## GIT-VERSION-GEN ## @@ GVF=GIT-VERSION-FILE - DEF_VER=v2.46.0-rc0 + DEF_VER=v2.46.0-rc1 +# Identify microsoft/git via a distinct version suffix +DEF_VER=$DEF_VER.vfs.0.0 29: 40708385cc = 28: 0cde5ec2ea gvfs: ensure that the version is based on a GVFS tag 30: 2d54d840b1 = 29: cb798ed4a1 gvfs: add a GVFS-specific header file 31: bc6375e4d8 = 30: e4c400ef86 gvfs: add the core.gvfs config setting 32: e7a44d04f0 = 31: 602843c0d3 gvfs: add the feature to skip writing the index' SHA-1 33: ea206fe4dc = 32: 92ba3cfea0 gvfs: add the feature that blobs may be missing 34: 62f4583d2b = 33: cdc2aa5977 gvfs: prevent files to be deleted outside the sparse checkout 35: ea21f8c799 = 34: 99902e24e1 gvfs: optionally skip reachability checks/upload pack during fetch 36: 723b285426 = 35: 17f1eb5cd3 gvfs: ensure all filters and EOL conversions are blocked 37: 094a557594 = 36: 23d6dd0345 gvfs: allow "virtualizing" objects 38: 4113ebd051 = 37: cfac01828c Hydrate missing loose objects in check_and_freshen() 39: 82a8cb09e9 = 38: 2e77a626ae sha1_file: when writing objects, skip the read_object_hook 40: 65bbe74854 = 39: 54410cc296 gvfs: add global command pre and post hook procs 41: 84fa8701d8 = 40: 1fe3795039 t0400: verify that the hook is called correctly from a subdirectory 42: 5bff5d735a = 41: e6858931a1 Pass PID of git process to hooks. 43: 2401e24bef = 42: d5d5c66fed pre-command: always respect core.hooksPath 44: 409ab49d5c = 43: 2a8a732a71 sparse-checkout: update files with a modify/delete conflict 45: c73dd2d8d1 = 44: 6f78a3d2c0 sparse-checkout: avoid writing entries with the skip-worktree bit 46: 545b37b9f1 = 45: 0e245d14bd Do not remove files outside the sparse-checkout 47: 02cbf157a9 = 46: 0f960b852f send-pack: do not check for sha1 file when GVFS_MISSING_OK set 48: 5731fb0947 = 47: 6031f32297 cache-tree: remove use of strbuf_addf in update_one 49: 6b7991276b = 48: d16829be04 gvfs: block unsupported commands when running in a GVFS repo 50: 2da5195324 = 49: cea1222281 worktree: allow in Scalar repositories 51: 20677e35db = 50: 23a95fb838 gvfs: allow overriding core.gvfs 52: 812c87658e = 51: 632cebbbee BRANCHES.md: Add explanation of branches and using forks 53: dea3c78556 = 52: 7184be1ddd Add virtual file system settings and hook proc 54: 9aae04e2de = 53: aa30cd8111 virtualfilesystem: don't run the virtual file system hook if the index has been redirected 55: 3fca8ddbdf = 54: e6a87f3a58 virtualfilesystem: check if directory is included 56: 5c66ee85dd = 55: b8338c1a5b backwards-compatibility: support the post-indexchanged hook 57: 5778ef45b5 = 56: 18886ac465 gvfs: verify that the built-in FSMonitor is disabled 58: a03b1e0a63 = 57: 74b1f33870 wt-status: add trace2 data for sparse-checkout percentage 59: 9327918509 = 58: a49d01a60e wt-status: add VFS hydration percentage to normal `git status` output 60: 1966bb6025 = 59: c5bb373475 status: add status serialization mechanism 61: 59b78f31a4 = 60: 35e18b8221 Teach ahead-behind and serialized status to play nicely together 62: c14e228cab = 61: 4da43b03ac status: serialize to path 63: 61da650cca = 62: db07d40536 status: reject deserialize in V2 and conflicts 64: 4d3d214e5a = 63: f61fd21144 serialize-status: serialize global and repo-local exclude file metadata 65: 99cdd81bd4 = 64: 07da99264d status: deserialization wait 66: b3b9840439 = 65: 5cc6d7a862 merge-recursive: avoid confusing logic in was_dirty() 67: d708139f7b = 66: cb76211423 merge-recursive: add some defensive coding to was_dirty() 68: ee784dbbf8 = 67: b5c1fdb696 merge-recursive: teach was_dirty() about the virtualfilesystem 69: 8a22ddd977 = 68: dc0c647b7f status: deserialize with -uno does not print correct hint 70: 8c06ea9999 = 69: 5339acee22 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate 71: ea8bdfe5be = 70: 7a3bfb1158 fsmonitor: add script for debugging and update script for tests 72: e4eac460a6 = 71: 07bbfcc5af status: disable deserialize when verbose output requested. 73: a56b134517 = 72: a08f41f70b t7524: add test for verbose status deserialzation 74: 70304688f5 = 73: 480e9e989a deserialize-status: silently fallback if we cannot read cache file 75: 9317315371 = 74: daf492bfae gvfs:trace2:data: add trace2 tracing around read_object_process 76: 840e7966f9 = 75: 267ff7c07c gvfs:trace2:data: status deserialization information 77: 7c0d80dd55 = 76: fa956c111f gvfs:trace2:data: status serialization 78: 2b63cd3f98 = 77: 2ca98e7594 gvfs:trace2:data: add vfs stats 79: 8fd35f3e8a = 78: f7d022e50e trace2: refactor setting process starting time 80: 2ce216bb35 = 79: b7920cfcd2 trace2:gvfs:experiment: clear_ce_flags_1 81: b6b033b0fa = 80: 0ca43b3aaf trace2:gvfs:experiment: report_tracking 82: ff6a410041 = 81: c88123de58 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache 83: 58c9819067 = 82: 9dcde580e6 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension 84: 0cba03a684 = 83: 2a0520316f trace2:gvfs:experiment: add region to apply_virtualfilesystem() 85: 62fc488239 = 84: b8de77d6a5 trace2:gvfs:experiment: add region around unpack_trees() 86: a8a4e87378 = 85: 64f920fe53 trace2:gvfs:experiment: add region to cache_tree_fully_valid() 87: dd5e92b410 = 86: 4b95ad9a45 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() 88: 92aba5b37b = 87: e03d099e38 trace2:gvfs:experiment: increase default event depth for unpack-tree data 89: dc529a8720 = 88: 1121372830 trace2:gvfs:experiment: add data for check_updates() in unpack_trees() 90: 1cf9c5eb97 = 89: 16b0edb5ef Trace2:gvfs:experiment: capture more 'tracking' details 91: b92805e780 = 90: 58bdeae303 credential: set trace2_child_class for credential manager children 92: 7ff046b962 = 91: 5469cc2a08 sub-process: do not borrow cmd pointer from caller 93: 0dd26841ca = 92: ff03061906 sub-process: add subprocess_start_argv() 94: fee8146394 = 93: 73cdb6baa5 sha1-file: add function to update existing loose object cache 95: cbb6a3b794 = 94: 11164e4e42 packfile: add install_packed_git_and_mru() 96: 2ea6aae499 = 95: bff7c394ee index-pack: avoid immediate object fetch while parsing packfile 97: d558565078 = 96: 83fd9cd7af gvfs-helper: create tool to fetch objects using the GVFS Protocol 98: 886f31f17f = 97: 2a62e82b83 sha1-file: create shared-cache directory if it doesn't exist 99: 9743c4a6fc = 98: 208ee6f366 gvfs-helper: better handling of network errors 100: 4b64bd2afc = 99: 16f54c4d86 gvfs-helper-client: properly update loose cache with fetched OID 101: 48773f09b0 = 100: 05402c4fe2 gvfs-helper: V2 robust retry and throttling 102: 7876b32ccb = 101: 51b5aa6ad9 gvfs-helper: expose gvfs/objects GET and POST semantics 103: 913343a570 = 102: 88945668cc gvfs-helper: dramatically reduce progress noise 104: 135469e2d9 = 103: a6fe884b26 gvfs-helper-client.h: define struct object_id 105: 044c2a9a48 = 104: 045e86f14d gvfs-helper: handle pack-file after single POST request 106: bdd85c67a1 ! 105: 90a644427b test-gvfs-prococol, t5799: tests for gvfs-helper @@ t/helper/test-gvfs-protocol.c (new) + + if (write_in_full(fd, response_header.buf, response_header.len) < 0) { + logerror("unable to write response header"); -+ free(content); + return WR_IO_ERROR; + } + @@ t/helper/test-gvfs-protocol.c (new) + + if (string_list_has_string(&mayhem_list, "close_write")) { + logmayhem("close_write"); -+ free(content); + return WR_MAYHEM | WR_HANGUP; + } + @@ t/helper/test-gvfs-protocol.c (new) + /* [5] */ + wr = send_chunk(fd, compressed, stream.next_out - compressed); + if (wr & WR_STOP_THE_MUSIC) { -+ free(content); + return wr; + } + @@ t/helper/test-gvfs-protocol.c (new) + oid_to_hex(oid), oid_to_hex(&oid_check)); + + /* [5] */ -+ free(content); + return send_final_chunk(fd); +} + ``` These `free(content)` lines were added to the wrong commit.. `void *content` isn't introduced until later. ``` 107: 3ce0a7d819 = 106: 4d0afd5d5d gvfs-helper: move result-list construction into install functions 108: 314d49d7f4 ! 107: 063f19ac56 t5799: add support for POST to return either a loose object or packfile @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const /* * We are blending several somewhat independent concepts here: @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi, + + if (write_in_full(fd, response_header.buf, response_header.len) < 0) { + logerror("unable to write response header"); ++ free(content); + return WR_IO_ERROR; + } + +@@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi, + + if (string_list_has_string(&mayhem_list, "close_write")) { + logmayhem("close_write"); ++ free(content); + return WR_MAYHEM | WR_HANGUP; + } + /* [1a] */ object_header_len = 1 + xsnprintf(object_header, MAX_HEADER_LEN, "%s %"PRIuMAX, @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const do { enum worker_result wr; unsigned char *in0 = stream.next_in; +@@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi, + /* [5] */ + wr = send_chunk(fd, compressed, stream.next_out - compressed); + if (wr & WR_STOP_THE_MUSIC) { ++ free(content); + return wr; + } + +@@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi, + oid_to_hex(oid), oid_to_hex(&oid_check)); + + /* [5] */ ++ free(content); + return send_final_chunk(fd); + } + @@ t/helper/test-gvfs-protocol.c: static enum worker_result send_loose_object(const struct object_info *oi, static enum worker_result do__gvfs_objects__get(struct req *req) { ``` Here are the `free(content)` calls that now live in the commit that added the `*content`. ``` 109: 0508d3e2ce = 108: ace3ea7097 t5799: cleanup wc-l and grep-c lines 110: eeabb303df = 109: b3974d854c gvfs-helper: verify loose objects after write 111: fa94716fc8 = 110: e6674f3994 t7599: create corrupt blob test 112: 66a156cfd8 = 111: 906ecd9fa7 gvfs-helper: add prefetch support 113: ac4306bc46 = 112: 8829873d49 gvfs-helper: add prefetch .keep file for last packfile 114: eec2cb38d3 = 113: 475b597dbd gvfs-helper: do one read in my_copy_fd_len_tail() 115: 3eac7e5725 = 114: f85f47f7a7 gvfs-helper: move content-type warning for prefetch packs 116: 75daf91a8e = 115: c86d0d8280 fetch: use gvfs-helper prefetch under config 117: 807e68c96e = 116: e5296c7dcb gvfs-helper: better support for concurrent packfile fetches 118: 15c3689267 = 117: a3934592f7 remote-curl: do not call fetch-pack when using gvfs-helper 119: 11fc1795fa = 118: 5d7744b059 fetch: reprepare packs before checking connectivity 120: daed94191a = 119: a56cf97d1b gvfs-helper: retry when creating temp files 121: e438434aa2 = 120: e75a40ff4f sparse: avoid warnings about known cURL issues in gvfs-helper.c 122: d3e2705893 = 121: 86c5780213 gvfs-helper: add --max-retries to prefetch verb 123: bf18802dc7 = 122: f692b2e58e t5799: add tests to detect corrupt pack/idx files in prefetch 124: f79bc92086 = 123: e979daee96 gvfs-helper: ignore .idx files in prefetch multi-part responses 127: 332d207293 = 124: ef29598c99 maintenance: care about gvfs.sharedCache config 129: ad15587492 = 125: bd4b42af7e unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags 131: 341eed043a = 126: ea3d46623f homebrew: add GitHub workflow to release Cask 125: 56ecd8c4fd = 127: bccc49129d t5799: explicitly test gvfs-helper --fallback and --no-fallback 132: d2e6e6dd5e = 128: 42b11562fe Adding winget workflows 126: bf3c128b04 = 129: a3049b5ba0 gvfs-helper: don't fallback with new config 133: 2b69fd5ba4 = 130: 6c6e55f5fa Disable the `monitor-components` workflow in msft-git 128: 06e0f2141c = 131: e1b6ce7e58 test-gvfs-protocol: add cache_http_503 to mayhem 134: acaedf5732 = 132: 1cc18c0502 .github: enable windows builds on microsoft fork 130: b93a4b2e0b = 133: 25d4af2c6c t5799: add unit tests for new `gvfs.fallback` config setting 135: ce866579e5 = 134: 562fd02ce2 release: create initial Windows installer build workflow 136: 84fae4b107 = 135: 6e615dfcd0 help: special-case HOST_CPU `universal` 137: aaae0bdec4 = 136: 70f340519e release: add Mac OSX installer build 138: 3ef8fd774a = 137: 97dfa03000 release: build unsigned Ubuntu .deb package 184: 81f5237405 = 138: 00d71d7e84 release: add signing step for .deb package 185: 7162807e9b = 139: 66dd2efaff release: create draft GitHub release with packages & installers 186: 3b6fd52085 = 140: ac147343c8 build-git-installers: publish gpg public key 187: c60fc5ff81 = 141: 2592a29ba4 release: continue pestering until user upgrades 188: 37fd5ba3e5 = 142: b0ca78b281 Makefile: allow specifying GIT_BUILT_FROM_COMMIT 189: b249793a49 = 143: 4f4c1b7182 dist: archive HEAD instead of HEAD^{tree} 139: 7e34f98d1f = 144: c2eba6a672 update-microsoft-git: create barebones builtin 140: de3b31fb9d = 145: 08b7512cea update-microsoft-git: Windows implementation 141: 053721286b = 146: dc54770821 update-microsoft-git: use brew on macOS 142: 29a37b9a7b = 147: 334f64577a .github: update ISSUE_TEMPLATE.md for microsoft/git 143: 23ed79f2f8 = 148: 6c9cda8200 .github: update PULL_REQUEST_TEMPLATE.md 190: 45382555ec = 149: 2c5792a083 release: include GIT_BUILT_FROM_COMMIT in MacOS build 144: bc2279a38e = 150: bd130cbde7 Adjust README.md for microsoft/git 191: 43d5637274 = 151: 4803709be0 release: add installer validation 145: a094803c5d = 152: 3ed9c0a8ff git_config_set_multivar_in_file_gently(): add a lock timeout 146: 800d4f2379 = 153: 8fa1caefdc scalar: set the config write-lock timeout to 150ms 147: 7903f0089f = 154: f6cf7175bc scalar: add docs from microsoft/scalar 148: 2b4a99bf93 = 155: 6d6cb91235 scalar (Windows): use forward slashes as directory separators 149: 41656b76b8 = 156: 7b4a5877ab scalar: add retry logic to run_git() 150: 266249c46e = 157: f21384dfb8 scalar: support the `config` command for backwards compatibility 151: e253f20dc7 = 158: 7c6efb90a5 scalar: implement a minimal JSON parser 152: c3ac61ed28 = 159: 5b06fe83cf scalar clone: support GVFS-enabled remote repositories 153: 242bfe7820 = 160: 41f5b68284 test-gvfs-protocol: also serve smart protocol 154: d86f59d66b = 161: 567182f6da gvfs-helper: add the `endpoint` command 155: ff64723fa3 = 162: 0621c86245 dir_inside_of(): handle directory separators correctly 156: 88ec7148cc = 163: 29ea86c404 scalar: disable authentication in unattended mode 157: 919a401598 = 164: a8515437a6 scalar: do initialize `gvfs.sharedCache` 158: b4009303c1 = 165: 20fb120d02 scalar diagnose: include shared cache info 159: 5f5992b8f2 = 166: b13391cea8 scalar: only try GVFS protocol on https:// URLs 160: 7ca006ebd0 = 167: e1dec1b4bb scalar: verify that we can use a GVFS-enabled repository 161: c7a6725202 = 168: 7eb416c8d7 scalar: add the `cache-server` command 162: b11236d25b = 169: 840c3d0127 scalar: add a test toggle to skip accessing the vsts/info endpoint 163: 2a1cef43d7 = 170: 1ea4ca77b8 scalar: adjust documentation to the microsoft/git fork 164: ad37180019 = 171: b97767f8c7 scalar: enable untracked cache unconditionally 165: b46b1f0faa = 172: 34e6b7deb1 scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility 166: 13442741ef = 173: 6bf6f9fb43 scalar: make GVFS Protocol a forced choice 167: 8b9c6eea8e = 174: 0d608a443c scalar diagnose: accommodate Scalar's Functional Tests 168: c1134a06df = 175: 491d786d00 ci: run Scalar's Functional Tests 170: b5a5e898c3 = 176: 966cd6a538 credential: add new interactive config option 169: dd310a45d5 = 177: a757c4e64f scalar: upgrade to newest FSMonitor config setting 171: 00dcfb6380 = 178: c6529cd574 maintenance: add custom config to background jobs 172: 6ab7d3d90a = 179: 399e15da72 abspath: make strip_last_path_component() global 173: 284c2bb800 = 180: f53adb17de scalar: configure maintenance during 'reconfigure' 174: 54e9db2a69 = 181: ead648bae3 scalar: .scalarCache should live above enlistment 175: c20327d06c = 182: 09edaa7c27 add/rm: allow adding sparse entries when virtual 176: aead9a7ae4 = 183: 9f8f66d829 sparse-checkout: add config to disable deleting dirs 177: 1619be42c0 = 184: c92731b6f7 diff: ignore sparse paths in diffstat 178: b3df962510 = 185: a17261c8ed repo-settings: enable sparse index by default 179: aa578f893d = 186: a66e0aa4ba diff(sparse-index): verify with partially-sparse 180: 4301124460 = 187: 9186a9048d stash: expand testing for `git stash -u` 181: 9e6ce2e249 = 188: 13d6b4d6fe sequencer: avoid progress when stderr is redirected 182: 203ebbe007 = 189: 3e0ce613de sparse: add vfs-specific precautions 183: 10668eb6f0 = 190: 661b9ef03b reset: fix mixed reset when using virtual filesystem ```
dscho commented 1 month ago
Range-diff relative to v2.46.0-rc1 * 1: df06595f2ac8 (upstream: 8fb6d11fade8) < -: ------------ Revert "midx-write.c: use `--stdin-packs` when repacking" * 8: 4dad0cebed3e = 1: 6c42db87ca46 t: remove advice from some tests * 5: 0f90e81af08d = 2: cfa160cd59a7 sparse-index.c: fix use of index hashes in expand_index * 6: 7faf39ec3857 = 3: 68c1ea5ef424 t5300: confirm failure of git index-pack when non-idx suffix requested * 2: 3563c4ca767c = 4: 50fecde3690e survey: stub in new experimental `git-survey` command * 9: fa782dee4c05 = 5: c8f4733a419e t1092: add test for untracked files and directories * 10: 661e96b90281 = 6: 0c9dd7070ca3 index-pack: disable rev-index if index file has non .idx suffix * 11: c0d0db0b0b71 = 7: 643444b074e8 trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup * 3: 86e3aa8aecc3 = 8: 437ba3f1ba08 survey: add command line opts to select references * 4: 93a8f3dfe274 = 9: b97d0e017286 survey: collect the set of requested refs * 7: 7efb1ef6859a = 10: 5f4f384f8916 survey: calculate stats on refs and print results * 12: 72fd844ffecd = 11: 2bb0a3c81917 survey: stub in treewalk of reachable commits and objects * 13: cc01b3046624 = 12: 28db8cd8715e survey: add traverse callback for commits * 14: 58c40117c333 = 13: cbb69a829e7e survey: add vector of largest objects for various scaling dimensions * 15: fdb063430534 = 14: 86de0580d46a survey: add pathname of blob or tree to large_item_vec * 16: de9f560f9d9f = 15: 069236ba7c71 survey: add commit-oid to large_item detail * 17: d8f37cdfc168 = 16: e9cb47d435b8 survey: add commit name-rev lookup to each large_item * 18: dbb8b59a592b = 17: f049a9a0008e survey: add --json option and setup for pretty output * 19: bda82ed7c53a = 18: bbc24b7153a3 survey: add pretty printing of stats * 20: 2b62b9b7e955 = 19: 36e7be9d1b02 t8100: create test for git-survey * 21: 7febb585d825 = 20: 49e58e5f6e5a survey: add --no-name-rev option * 22: a3f6b46199a3 = 21: 8fba2e8158e7 survey: started TODO list at bottom of source file * 23: 9397140c0eed = 22: 05e3193faae5 survey: expanded TODO list at the bottom of the source file * 24: b5648914c2ed = 23: cdc2cade9eb2 survey: expanded TODO with more notes * 25: 14a92b5ead58 = 24: e8430a0fb9d2 survey: clearly note the experimental nature in the output * 26: 3c5f0946b742 = 25: 0a389f966782 reset --stdin: trim carriage return from the paths * 27: 5ab768cfd1bb ! 26: 9e88ba23b615 Identify microsoft/git via a distinct version suffix ``````diff @@ Commit message ## GIT-VERSION-GEN ## @@ GVF=GIT-VERSION-FILE - DEF_VER=v2.46.0-rc1 + DEF_VER=v2.46.0-rc2 +# Identify microsoft/git via a distinct version suffix +DEF_VER=$DEF_VER.vfs.0.0 `````` * 28: 0cde5ec2ea9d = 27: 62b9d3e9a925 gvfs: ensure that the version is based on a GVFS tag * 29: cb798ed4a1d1 = 28: bc1c8b07893a gvfs: add a GVFS-specific header file * 30: e4c400ef86aa = 29: 974120d01d52 gvfs: add the core.gvfs config setting * 31: 602843c0d3c3 = 30: cc65107a272d gvfs: add the feature to skip writing the index' SHA-1 * 32: 92ba3cfea0ec = 31: 235d45b92863 gvfs: add the feature that blobs may be missing * 33: cdc2aa597714 = 32: 1ea9ac76ba68 gvfs: prevent files to be deleted outside the sparse checkout * 34: 99902e24e18c = 33: 03d24318cb7a gvfs: optionally skip reachability checks/upload pack during fetch * 35: 17f1eb5cd3e8 = 34: 3f35a0626820 gvfs: ensure all filters and EOL conversions are blocked * 36: 23d6dd034505 = 35: 08416150ae6e gvfs: allow "virtualizing" objects * 37: cfac01828c08 = 36: 1d56fde1812a Hydrate missing loose objects in check_and_freshen() * 38: 2e77a626aecd = 37: f8eb818c6273 sha1_file: when writing objects, skip the read_object_hook * 39: 54410cc296e7 = 38: 52627c45ef0a gvfs: add global command pre and post hook procs * 40: 1fe3795039c3 = 39: dfe708c14104 t0400: verify that the hook is called correctly from a subdirectory * 41: e6858931a135 = 40: 5dda729386cf Pass PID of git process to hooks. * 42: d5d5c66fed51 = 41: 7c2bffde5bce pre-command: always respect core.hooksPath * 43: 2a8a732a715d = 42: 6d9e5fb6289d sparse-checkout: update files with a modify/delete conflict * 44: 6f78a3d2c02c = 43: 8bca145d89b3 sparse-checkout: avoid writing entries with the skip-worktree bit * 45: 0e245d14bd2a = 44: 5fea5e172c0b Do not remove files outside the sparse-checkout * 46: 0f960b852fa6 = 45: 299a286bdac5 send-pack: do not check for sha1 file when GVFS_MISSING_OK set * 47: 6031f3229700 = 46: 432864e53bd1 cache-tree: remove use of strbuf_addf in update_one * 48: d16829be04e9 = 47: 641a7949402c gvfs: block unsupported commands when running in a GVFS repo * 49: cea122228134 = 48: 62890f136d70 worktree: allow in Scalar repositories * 50: 23a95fb838e7 = 49: 504769b29236 gvfs: allow overriding core.gvfs * 51: 632cebbbee70 = 50: 4a74e2dfc5a8 BRANCHES.md: Add explanation of branches and using forks * 52: 7184be1ddd05 = 51: fc5074e413ed Add virtual file system settings and hook proc * 53: aa30cd811163 = 52: 88e22399eb75 virtualfilesystem: don't run the virtual file system hook if the index has been redirected * 54: e6a87f3a58aa = 53: 7e2bafb22947 virtualfilesystem: check if directory is included * 55: b8338c1a5b20 = 54: 34bfc04aa320 backwards-compatibility: support the post-indexchanged hook * 56: 18886ac4659c = 55: 6343ad253d88 gvfs: verify that the built-in FSMonitor is disabled * 57: 74b1f338701b = 56: 0738ce57948c wt-status: add trace2 data for sparse-checkout percentage * 58: a49d01a60ee8 = 57: 30adc4fde0ff wt-status: add VFS hydration percentage to normal `git status` output * 59: c5bb37347552 = 58: 693c0e7b94b5 status: add status serialization mechanism * 60: 35e18b82219b = 59: ef724196cb76 Teach ahead-behind and serialized status to play nicely together * 61: 4da43b03ac3c = 60: b010c87f0eb2 status: serialize to path * 62: db07d4053607 = 61: c2bb72aec7e0 status: reject deserialize in V2 and conflicts * 63: f61fd211449e = 62: 96868afbd03c serialize-status: serialize global and repo-local exclude file metadata * 64: 07da99264d55 = 63: e0e3b5159b5f status: deserialization wait * 65: 5cc6d7a862a0 = 64: 8818d326f341 merge-recursive: avoid confusing logic in was_dirty() * 66: cb7621142350 = 65: de4e9a88a755 merge-recursive: add some defensive coding to was_dirty() * 67: b5c1fdb696b8 = 66: ccfc651e559f merge-recursive: teach was_dirty() about the virtualfilesystem * 68: dc0c647b7fe1 = 67: e82bc342529a status: deserialize with -uno does not print correct hint * 69: 5339acee222c = 68: 99f42bba079b fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate * 70: 7a3bfb115890 = 69: a98411ef4a14 fsmonitor: add script for debugging and update script for tests * 71: 07bbfcc5afbe = 70: 5da2a27318cb status: disable deserialize when verbose output requested. * 72: a08f41f70bd6 = 71: c8065f60264e t7524: add test for verbose status deserialzation * 73: 480e9e989a1e = 72: 976877cc7fe9 deserialize-status: silently fallback if we cannot read cache file * 74: daf492bfae22 = 73: 0623cebacf0c gvfs:trace2:data: add trace2 tracing around read_object_process * 75: 267ff7c07cd0 = 74: 6212a56f9e1c gvfs:trace2:data: status deserialization information * 76: fa956c111ffd = 75: 16ae5941b37e gvfs:trace2:data: status serialization * 77: 2ca98e75944f = 76: 9ff030e977f1 gvfs:trace2:data: add vfs stats * 78: f7d022e50ef3 = 77: 8068560045b0 trace2: refactor setting process starting time * 79: b7920cfcd216 = 78: 1af07f560edd trace2:gvfs:experiment: clear_ce_flags_1 * 80: 0ca43b3aafc8 = 79: ed916bb582b8 trace2:gvfs:experiment: report_tracking * 81: c88123de582a = 80: 6d1f2e14f5d5 trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache * 82: 9dcde580e61d = 81: 11b6945e8040 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension * 83: 2a0520316f06 = 82: c14df9b902fd trace2:gvfs:experiment: add region to apply_virtualfilesystem() * 84: b8de77d6a5bc = 83: a798db112d4e trace2:gvfs:experiment: add region around unpack_trees() * 85: 64f920fe532c = 84: 9a573b75a2dd trace2:gvfs:experiment: add region to cache_tree_fully_valid() * 86: 4b95ad9a4515 = 85: 7d871c9da720 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() * 87: e03d099e38b7 = 86: 7d77fdb9f37a trace2:gvfs:experiment: increase default event depth for unpack-tree data * 88: 1121372830ce = 87: 85ef1862d1b2 trace2:gvfs:experiment: add data for check_updates() in unpack_trees() * 89: 16b0edb5ef6f = 88: de0c755b1363 Trace2:gvfs:experiment: capture more 'tracking' details * 90: 58bdeae3030c = 89: 1db678d27985 credential: set trace2_child_class for credential manager children * 91: 5469cc2a0809 = 90: cfac25f6ea6b sub-process: do not borrow cmd pointer from caller * 92: ff03061906ee = 91: da08da8d49ae sub-process: add subprocess_start_argv() * 93: 73cdb6baa5d3 = 92: d75502d9b184 sha1-file: add function to update existing loose object cache * 94: 11164e4e42cb = 93: af091cc67970 packfile: add install_packed_git_and_mru() * 95: bff7c394eec0 = 94: bc2551a9bceb index-pack: avoid immediate object fetch while parsing packfile * 96: 83fd9cd7afd9 = 95: e773bedca28f gvfs-helper: create tool to fetch objects using the GVFS Protocol * 97: 2a62e82b83a9 = 96: 13acae8fdc57 sha1-file: create shared-cache directory if it doesn't exist * 98: 208ee6f366e0 = 97: 55d3aea14048 gvfs-helper: better handling of network errors * 99: 16f54c4d86c6 = 98: 19f0ff12a1c7 gvfs-helper-client: properly update loose cache with fetched OID * 100: 05402c4fe236 = 99: 776c0fe51dfe gvfs-helper: V2 robust retry and throttling * 101: 51b5aa6ad953 = 100: 93bff99b186a gvfs-helper: expose gvfs/objects GET and POST semantics * 102: 88945668ccbd = 101: 70c3a5a8a3b9 gvfs-helper: dramatically reduce progress noise * 103: a6fe884b2654 = 102: 44a76306c260 gvfs-helper-client.h: define struct object_id * 104: 045e86f14d26 = 103: 4b874052dfcb gvfs-helper: handle pack-file after single POST request * 105: 90a644427b96 = 104: 7af9092ff035 test-gvfs-prococol, t5799: tests for gvfs-helper * 106: 4d0afd5d5d2c = 105: f3aeba9e7cad gvfs-helper: move result-list construction into install functions * 107: 063f19ac56d1 = 106: edca271f6b9e t5799: add support for POST to return either a loose object or packfile * 108: ace3ea709730 = 107: 891516ef1a51 t5799: cleanup wc-l and grep-c lines * 109: b3974d854cab = 108: c46c8ea73481 gvfs-helper: verify loose objects after write * 110: e6674f399422 = 109: b1fb35ffeb1e t7599: create corrupt blob test * 111: 906ecd9fa7b5 = 110: 9b63baa0c5d5 gvfs-helper: add prefetch support * 112: 8829873d4921 = 111: b6b3c8e91935 gvfs-helper: add prefetch .keep file for last packfile * 113: 475b597dbd1d = 112: bc4cb6c29086 gvfs-helper: do one read in my_copy_fd_len_tail() * 114: f85f47f7a73f = 113: 309af99d243a gvfs-helper: move content-type warning for prefetch packs * 115: c86d0d828089 = 114: 902ed053f695 fetch: use gvfs-helper prefetch under config * 116: e5296c7dcbfa = 115: 0b3dd788eb8c gvfs-helper: better support for concurrent packfile fetches * 117: a3934592f709 = 116: 47e3d99d78ac remote-curl: do not call fetch-pack when using gvfs-helper * 118: 5d7744b05974 = 117: 91c856a88ad5 fetch: reprepare packs before checking connectivity * 119: a56cf97d1b4c = 118: 06264e4027eb gvfs-helper: retry when creating temp files * 120: e75a40ff4f07 = 119: 4ec29bba1d57 sparse: avoid warnings about known cURL issues in gvfs-helper.c * 121: 86c5780213d3 = 120: 47b2da8bd861 gvfs-helper: add --max-retries to prefetch verb * 122: f692b2e58e12 = 121: 4da061bf4516 t5799: add tests to detect corrupt pack/idx files in prefetch * 123: e979daee96ac = 122: 503d7f4fe91c gvfs-helper: ignore .idx files in prefetch multi-part responses * 127: bccc49129d1a = 123: 14b4a3e15cc3 t5799: explicitly test gvfs-helper --fallback and --no-fallback * 129: a3049b5ba09b = 124: 4a362928dba4 gvfs-helper: don't fallback with new config * 131: e1b6ce7e58a8 = 125: c9adb1b4bd78 test-gvfs-protocol: add cache_http_503 to mayhem * 124: ef29598c9923 = 126: d2c5b40141ec maintenance: care about gvfs.sharedCache config * 133: 25d4af2c6cf7 = 127: 519366421b5e t5799: add unit tests for new `gvfs.fallback` config setting * 125: bd4b42af7ee1 = 128: c48a427bb356 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags * 126: ea3d46623fca = 129: eeed72930985 homebrew: add GitHub workflow to release Cask * 128: 42b11562fed5 = 130: c243eac15079 Adding winget workflows * 130: 6c6e55f5fa96 = 131: 6fc65091173e Disable the `monitor-components` workflow in msft-git * 132: 1cc18c05024a = 132: ea7031499e5b .github: enable windows builds on microsoft fork * 134: 562fd02ce2e4 = 133: a1e84bdb7029 release: create initial Windows installer build workflow * 135: 6e615dfcd096 = 134: e53a8b93eeae help: special-case HOST_CPU `universal` * 136: 70f340519e71 = 135: 54df7487a69e release: add Mac OSX installer build * 137: 97dfa03000df = 136: f7fe8ba21315 release: build unsigned Ubuntu .deb package * 138: 00d71d7e8491 = 137: bc73b6ad7e27 release: add signing step for .deb package * 139: 66dd2efaff57 = 138: b0aa37d4eb41 release: create draft GitHub release with packages & installers * 140: ac147343c8cf = 139: 794842321a36 build-git-installers: publish gpg public key * 141: 2592a29ba40f = 140: 1cace8d43257 release: continue pestering until user upgrades * 142: b0ca78b28189 = 141: 514615b9002d Makefile: allow specifying GIT_BUILT_FROM_COMMIT * 144: c2eba6a6724c = 142: cd72c390ea91 update-microsoft-git: create barebones builtin * 143: 4f4c1b7182ce = 143: af5ddee91792 dist: archive HEAD instead of HEAD^{tree} * 145: 08b7512cea26 = 144: 8c405db040d2 update-microsoft-git: Windows implementation * 149: 2c5792a08387 = 145: 39e232ba03fc release: include GIT_BUILT_FROM_COMMIT in MacOS build * 146: dc5477082182 = 146: ee019f5e3e9a update-microsoft-git: use brew on macOS * 151: 4803709be0c7 = 147: deeac5ff94d0 release: add installer validation * 147: 334f64577a31 = 148: 6ff4e1452efc .github: update ISSUE_TEMPLATE.md for microsoft/git * 148: 6c9cda8200bb = 149: 65b7f54ab47d .github: update PULL_REQUEST_TEMPLATE.md * 152: 3ed9c0a8ff02 = 150: eab406f8c22f git_config_set_multivar_in_file_gently(): add a lock timeout * 150: bd130cbde7de = 151: 58840bfb84a4 Adjust README.md for microsoft/git * 153: 8fa1caefdcfc = 152: 10e49d8558de scalar: set the config write-lock timeout to 150ms * 154: f6cf7175bc2b = 153: de28266fe357 scalar: add docs from microsoft/scalar * 155: 6d6cb912355d = 154: 8d0dc7cb2cd6 scalar (Windows): use forward slashes as directory separators * 156: 7b4a5877ab32 = 155: b3692fd10a50 scalar: add retry logic to run_git() * 157: f21384dfb87d = 156: 1ea9dd701475 scalar: support the `config` command for backwards compatibility * 158: 7c6efb90a5d6 = 157: fc083f4f58a3 scalar: implement a minimal JSON parser * 159: 5b06fe83cf93 = 158: 014b5066311e scalar clone: support GVFS-enabled remote repositories * 160: 41f5b682843b = 159: e980635c5898 test-gvfs-protocol: also serve smart protocol * 161: 567182f6da3c = 160: c6ad354c05a3 gvfs-helper: add the `endpoint` command * 162: 0621c862458d = 161: 35a78cc15dad dir_inside_of(): handle directory separators correctly * 163: 29ea86c404b4 = 162: 66a2764a4ecf scalar: disable authentication in unattended mode * 164: a8515437a6d0 = 163: 91af888076e6 scalar: do initialize `gvfs.sharedCache` * 165: 20fb120d023d = 164: 33671b8889c5 scalar diagnose: include shared cache info * 166: b13391cea825 = 165: ac2fcc92d136 scalar: only try GVFS protocol on https:// URLs * 167: e1dec1b4bba0 = 166: 433c062c22e6 scalar: verify that we can use a GVFS-enabled repository * 168: 7eb416c8d70f = 167: 3ae1f3a6b841 scalar: add the `cache-server` command * 169: 840c3d0127aa = 168: 62d89ce29699 scalar: add a test toggle to skip accessing the vsts/info endpoint * 170: 1ea4ca77b8c7 = 169: 44fd956e6e6e scalar: adjust documentation to the microsoft/git fork * 171: b97767f8c771 = 170: c63aa82313ad scalar: enable untracked cache unconditionally * 172: 34e6b7deb1d0 = 171: 9c7f19932720 scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility * 173: 6bf6f9fb438c = 172: 4646749d295d scalar: make GVFS Protocol a forced choice * 174: 0d608a443cd9 = 173: b80da133259c scalar diagnose: accommodate Scalar's Functional Tests * 175: 491d786d00e8 = 174: e529447ff48d ci: run Scalar's Functional Tests * 176: 966cd6a5380b = 175: 95096d2df711 credential: add new interactive config option * 177: a757c4e64f76 = 176: b895eee91159 scalar: upgrade to newest FSMonitor config setting * 178: c6529cd5741a = 177: bb11be9814a5 maintenance: add custom config to background jobs * 179: 399e15da7290 = 178: dcd5c00793e2 abspath: make strip_last_path_component() global * 180: f53adb17de2f = 179: b6917b721fac scalar: configure maintenance during 'reconfigure' * 181: ead648bae32e = 180: 747eca44a793 scalar: .scalarCache should live above enlistment * 182: 09edaa7c2786 = 181: 6e1c3219c831 add/rm: allow adding sparse entries when virtual * 183: 9f8f66d8296a = 182: a348b01156c0 sparse-checkout: add config to disable deleting dirs * 184: c92731b6f7fb = 183: 86a4d00bbb4b diff: ignore sparse paths in diffstat * 185: a17261c8ed55 = 184: 1654002f24a3 repo-settings: enable sparse index by default * 186: a66e0aa4ba22 = 185: f2c62dcbf90c diff(sparse-index): verify with partially-sparse * 187: 9186a9048dfd = 186: dd7000cd80cc stash: expand testing for `git stash -u` * 188: 13d6b4d6fe80 = 187: 044091536c0f sequencer: avoid progress when stderr is redirected * 189: 3e0ce613de1a = 188: dd7b8b95d3b7 sparse: add vfs-specific precautions * 190: 661b9ef03b3b = 189: f794bcb7719f reset: fix mixed reset when using virtual filesystem
mjcheetham commented 1 month ago
Range-diff relative to v2.46.0-rc2 ``` 1: 6c42db87ca = 1: d2d403516c t: remove advice from some tests 2: cfa160cd59 = 2: 5ee9c43698 sparse-index.c: fix use of index hashes in expand_index 5: c8f4733a41 = 3: ad14bf428b t1092: add test for untracked files and directories 3: 68c1ea5ef4 = 4: 8530990de7 t5300: confirm failure of git index-pack when non-idx suffix requested 6: 0c9dd7070c = 5: abc86813b9 index-pack: disable rev-index if index file has non .idx suffix 7: 643444b074 = 6: 50c7799704 trace2: prefetch value of GIT_TRACE2_DST_DEBUG at startup 4: 50fecde369 = 7: ec811a004a survey: stub in new experimental `git-survey` command 8: 437ba3f1ba = 8: 93e532cb45 survey: add command line opts to select references 9: b97d0e0172 = 9: 80b37d2acc survey: collect the set of requested refs 10: 5f4f384f89 = 10: a9edb5a1ec survey: calculate stats on refs and print results 11: 2bb0a3c819 = 11: cc84ca6c33 survey: stub in treewalk of reachable commits and objects 12: 28db8cd871 = 12: 8276f9bde3 survey: add traverse callback for commits 13: cbb69a829e = 13: 95144256ad survey: add vector of largest objects for various scaling dimensions 14: 86de0580d4 = 14: 57d85c343d survey: add pathname of blob or tree to large_item_vec 15: 069236ba7c = 15: 753a4360bc survey: add commit-oid to large_item detail 16: e9cb47d435 = 16: 145b957bbd survey: add commit name-rev lookup to each large_item 17: f049a9a000 = 17: bb75fa6157 survey: add --json option and setup for pretty output 18: bbc24b7153 = 18: f3098cb31c survey: add pretty printing of stats 19: 36e7be9d1b = 19: a5febc9157 t8100: create test for git-survey 20: 49e58e5f6e = 20: f5d1032214 survey: add --no-name-rev option 21: 8fba2e8158 = 21: 923582c574 survey: started TODO list at bottom of source file 22: 05e3193faa = 22: 6ad83b74b1 survey: expanded TODO list at the bottom of the source file 23: cdc2cade9e = 23: b9e50f76b3 survey: expanded TODO with more notes 24: e8430a0fb9 = 24: 891f502ed4 survey: clearly note the experimental nature in the output 25: 0a389f9667 = 25: 97af85518b reset --stdin: trim carriage return from the paths 26: 9e88ba23b6 ! 26: 250cbe1e7c Identify microsoft/git via a distinct version suffix @@ Commit message ## GIT-VERSION-GEN ## @@ GVF=GIT-VERSION-FILE - DEF_VER=v2.46.0-rc2 + DEF_VER=v2.46.0 +# Identify microsoft/git via a distinct version suffix +DEF_VER=$DEF_VER.vfs.0.0 27: 62b9d3e9a9 = 27: a7f73ee637 gvfs: ensure that the version is based on a GVFS tag 28: bc1c8b0789 = 28: c165478e12 gvfs: add a GVFS-specific header file 29: 974120d01d = 29: cea7ec791f gvfs: add the core.gvfs config setting 30: cc65107a27 = 30: 3648554b6a gvfs: add the feature to skip writing the index' SHA-1 31: 235d45b928 = 31: 08b42f2551 gvfs: add the feature that blobs may be missing 32: 1ea9ac76ba = 32: 86ee5ec96c gvfs: prevent files to be deleted outside the sparse checkout 33: 03d24318cb = 33: d0b5dcf550 gvfs: optionally skip reachability checks/upload pack during fetch 34: 3f35a06268 = 34: fcc15b369c gvfs: ensure all filters and EOL conversions are blocked 35: 08416150ae = 35: c6dc4e5a31 gvfs: allow "virtualizing" objects 36: 1d56fde181 = 36: a0db91fbab Hydrate missing loose objects in check_and_freshen() 37: f8eb818c62 = 37: b9e1fc6d11 sha1_file: when writing objects, skip the read_object_hook 38: 52627c45ef = 38: 6805073569 gvfs: add global command pre and post hook procs 39: dfe708c141 = 39: 18705c3221 t0400: verify that the hook is called correctly from a subdirectory 40: 5dda729386 = 40: 63eab821e5 Pass PID of git process to hooks. 41: 7c2bffde5b = 41: 922a8cf013 pre-command: always respect core.hooksPath 42: 6d9e5fb628 = 42: 78b96ea9ce sparse-checkout: update files with a modify/delete conflict 43: 8bca145d89 = 43: 98f77732cc sparse-checkout: avoid writing entries with the skip-worktree bit 44: 5fea5e172c = 44: e5d4c1d8af Do not remove files outside the sparse-checkout 45: 299a286bda = 45: 9f1b23e9cd send-pack: do not check for sha1 file when GVFS_MISSING_OK set 46: 432864e53b = 46: 48ba4c2d49 cache-tree: remove use of strbuf_addf in update_one 47: 641a794940 = 47: c15e53e54e gvfs: block unsupported commands when running in a GVFS repo 48: 62890f136d = 48: e90bfb5040 worktree: allow in Scalar repositories 49: 504769b292 = 49: 8400e33f22 gvfs: allow overriding core.gvfs 50: 4a74e2dfc5 = 50: 233bf5291a BRANCHES.md: Add explanation of branches and using forks 51: fc5074e413 = 51: af81bfc22a Add virtual file system settings and hook proc 52: 88e22399eb = 52: 905318f95a virtualfilesystem: don't run the virtual file system hook if the index has been redirected 53: 7e2bafb229 = 53: 090c57e12c virtualfilesystem: check if directory is included 54: 34bfc04aa3 = 54: fb00b667c3 backwards-compatibility: support the post-indexchanged hook 55: 6343ad253d = 55: bbff50a3be gvfs: verify that the built-in FSMonitor is disabled 56: 0738ce5794 = 56: f7476e9fc3 wt-status: add trace2 data for sparse-checkout percentage 57: 30adc4fde0 = 57: be104c6545 wt-status: add VFS hydration percentage to normal `git status` output 58: 693c0e7b94 = 58: 520f402d17 status: add status serialization mechanism 59: ef724196cb = 59: 790b937b78 Teach ahead-behind and serialized status to play nicely together 60: b010c87f0e = 60: cdd2535306 status: serialize to path 61: c2bb72aec7 = 61: 453d80030f status: reject deserialize in V2 and conflicts 62: 96868afbd0 = 62: a9aa37c1fc serialize-status: serialize global and repo-local exclude file metadata 63: e0e3b5159b = 63: 29d774622c status: deserialization wait 64: 8818d326f3 = 64: 87570dbbed merge-recursive: avoid confusing logic in was_dirty() 65: de4e9a88a7 = 65: 2872f85623 merge-recursive: add some defensive coding to was_dirty() 66: ccfc651e55 = 66: d53d1ae57c merge-recursive: teach was_dirty() about the virtualfilesystem 67: e82bc34252 = 67: 6b02fcdcd5 status: deserialize with -uno does not print correct hint 68: 99f42bba07 = 68: 775d8815c1 fsmonitor: check CE_FSMONITOR_VALID in ce_uptodate 69: a98411ef4a = 69: 195695673a fsmonitor: add script for debugging and update script for tests 70: 5da2a27318 = 70: 3284d55ab0 status: disable deserialize when verbose output requested. 71: c8065f6026 = 71: 2103d34c37 t7524: add test for verbose status deserialzation 72: 976877cc7f = 72: 9a4b9e9332 deserialize-status: silently fallback if we cannot read cache file 73: 0623cebacf = 73: e665d87e03 gvfs:trace2:data: add trace2 tracing around read_object_process 74: 6212a56f9e = 74: 4d814a713d gvfs:trace2:data: status deserialization information 75: 16ae5941b3 = 75: f50b605685 gvfs:trace2:data: status serialization 76: 9ff030e977 = 76: 5869b3fbd6 gvfs:trace2:data: add vfs stats 77: 8068560045 = 77: a3e8249a45 trace2: refactor setting process starting time 78: 1af07f560e = 78: 31624c42ba trace2:gvfs:experiment: clear_ce_flags_1 79: ed916bb582 = 79: 33bae12bbd trace2:gvfs:experiment: report_tracking 80: 6d1f2e14f5 = 80: 8b55ade93f trace2:gvfs:experiment: read_cache: annotate thread usage in read-cache 81: 11b6945e80 = 81: 4ee89cd8b0 trace2:gvfs:experiment: read-cache: time read/write of cache-tree extension 82: c14df9b902 = 82: bec82644cf trace2:gvfs:experiment: add region to apply_virtualfilesystem() 83: a798db112d = 83: d019329927 trace2:gvfs:experiment: add region around unpack_trees() 84: 9a573b75a2 = 84: e035360dd3 trace2:gvfs:experiment: add region to cache_tree_fully_valid() 85: 7d871c9da7 = 85: 571fd764d4 trace2:gvfs:experiment: add unpack_entry() counter to unpack_trees() and report_tracking() 86: 7d77fdb9f3 = 86: f2c0f33acf trace2:gvfs:experiment: increase default event depth for unpack-tree data 87: 85ef1862d1 = 87: 9773e2e793 trace2:gvfs:experiment: add data for check_updates() in unpack_trees() 88: de0c755b13 = 88: 64b58c0854 Trace2:gvfs:experiment: capture more 'tracking' details 89: 1db678d279 = 89: 8212ec4b30 credential: set trace2_child_class for credential manager children 90: cfac25f6ea = 90: 6a0cbb37d0 sub-process: do not borrow cmd pointer from caller 91: da08da8d49 = 91: 8da9f584bc sub-process: add subprocess_start_argv() 92: d75502d9b1 = 92: e0dd3e15e5 sha1-file: add function to update existing loose object cache 93: af091cc679 = 93: ddd1116380 packfile: add install_packed_git_and_mru() 94: bc2551a9bc = 94: cf33e1ac08 index-pack: avoid immediate object fetch while parsing packfile 95: e773bedca2 = 95: 0f74b95aa5 gvfs-helper: create tool to fetch objects using the GVFS Protocol 96: 13acae8fdc = 96: 0ee58cc5d0 sha1-file: create shared-cache directory if it doesn't exist 97: 55d3aea140 = 97: 4a7deea665 gvfs-helper: better handling of network errors 98: 19f0ff12a1 = 98: 85150e7f04 gvfs-helper-client: properly update loose cache with fetched OID 99: 776c0fe51d = 99: 6af3a60834 gvfs-helper: V2 robust retry and throttling 100: 93bff99b18 = 100: 973905f1ab gvfs-helper: expose gvfs/objects GET and POST semantics 101: 70c3a5a8a3 = 101: b247583517 gvfs-helper: dramatically reduce progress noise 102: 44a76306c2 = 102: 423e53d18f gvfs-helper-client.h: define struct object_id 103: 4b874052df = 103: 69baf81d97 gvfs-helper: handle pack-file after single POST request 104: 7af9092ff0 = 104: 944e3949b8 test-gvfs-prococol, t5799: tests for gvfs-helper 105: f3aeba9e7c = 105: fdb8ece6da gvfs-helper: move result-list construction into install functions 106: edca271f6b = 106: 0b236aa0c7 t5799: add support for POST to return either a loose object or packfile 107: 891516ef1a = 107: 0edf612e3f t5799: cleanup wc-l and grep-c lines 108: c46c8ea734 = 108: db3f4c3195 gvfs-helper: verify loose objects after write 109: b1fb35ffeb = 109: 1bf573906a t7599: create corrupt blob test 110: 9b63baa0c5 = 110: 90aa80c62c gvfs-helper: add prefetch support 111: b6b3c8e919 = 111: 8dbc9778fc gvfs-helper: add prefetch .keep file for last packfile 112: bc4cb6c290 = 112: db28521f09 gvfs-helper: do one read in my_copy_fd_len_tail() 113: 309af99d24 = 113: d1127cc96a gvfs-helper: move content-type warning for prefetch packs 114: 902ed053f6 = 114: 5077a1d1dd fetch: use gvfs-helper prefetch under config 115: 0b3dd788eb = 115: cae9757546 gvfs-helper: better support for concurrent packfile fetches 116: 47e3d99d78 = 116: a7f52d2ca4 remote-curl: do not call fetch-pack when using gvfs-helper 117: 91c856a88a = 117: 8661bc3dae fetch: reprepare packs before checking connectivity 118: 06264e4027 = 118: aa0f581671 gvfs-helper: retry when creating temp files 119: 4ec29bba1d = 119: 4c4e6d336c sparse: avoid warnings about known cURL issues in gvfs-helper.c 120: 47b2da8bd8 = 120: 0818412f62 gvfs-helper: add --max-retries to prefetch verb 121: 4da061bf45 = 121: 0897986ac2 t5799: add tests to detect corrupt pack/idx files in prefetch 122: 503d7f4fe9 = 122: 3fecda7cee gvfs-helper: ignore .idx files in prefetch multi-part responses 123: 14b4a3e15c = 123: 3e8a7c4d50 t5799: explicitly test gvfs-helper --fallback and --no-fallback 124: 4a362928db = 124: c5d5abaa3b gvfs-helper: don't fallback with new config 125: c9adb1b4bd = 125: a1af70568c test-gvfs-protocol: add cache_http_503 to mayhem 127: 519366421b = 126: 32e0842c96 t5799: add unit tests for new `gvfs.fallback` config setting 126: d2c5b40141 = 127: 27ad5ead31 maintenance: care about gvfs.sharedCache config 128: c48a427bb3 = 128: cd4a4d3d82 unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags 129: eeed729309 = 129: b7083b766b homebrew: add GitHub workflow to release Cask 130: c243eac150 = 130: 90e57bc536 Adding winget workflows 131: 6fc6509117 = 131: b6fb09baf8 Disable the `monitor-components` workflow in msft-git 132: ea7031499e = 132: ad407da24d .github: enable windows builds on microsoft fork 133: a1e84bdb70 = 133: 7ff9577b11 release: create initial Windows installer build workflow 134: e53a8b93ee = 134: 23fb420f37 help: special-case HOST_CPU `universal` 135: 54df7487a6 = 135: be4dd9ac53 release: add Mac OSX installer build 136: f7fe8ba213 = 136: f0cfe11f19 release: build unsigned Ubuntu .deb package 137: bc73b6ad7e = 137: 6d3ddc38df release: add signing step for .deb package 138: b0aa37d4eb = 138: 245f2120f9 release: create draft GitHub release with packages & installers 139: 794842321a = 139: 68f3e0ec6f build-git-installers: publish gpg public key 140: 1cace8d432 = 140: 365a7429af release: continue pestering until user upgrades 141: 514615b900 = 141: df589f7328 Makefile: allow specifying GIT_BUILT_FROM_COMMIT 143: af5ddee917 = 142: 6b3ac94543 dist: archive HEAD instead of HEAD^{tree} 145: 39e232ba03 = 143: 05280bdef3 release: include GIT_BUILT_FROM_COMMIT in MacOS build 147: deeac5ff94 = 144: 608de82bf4 release: add installer validation 142: cd72c390ea = 145: e21f5f8eb9 update-microsoft-git: create barebones builtin 144: 8c405db040 = 146: 23bc4b5ac7 update-microsoft-git: Windows implementation 146: ee019f5e3e = 147: 35ea02909c update-microsoft-git: use brew on macOS 148: 6ff4e1452e = 148: ab00c5a04f .github: update ISSUE_TEMPLATE.md for microsoft/git 149: 65b7f54ab4 = 149: a12bc1a49f .github: update PULL_REQUEST_TEMPLATE.md 151: 58840bfb84 = 150: 7a74adb70c Adjust README.md for microsoft/git 150: eab406f8c2 = 151: 19f75e70e7 git_config_set_multivar_in_file_gently(): add a lock timeout 152: 10e49d8558 = 152: f9a9baee6c scalar: set the config write-lock timeout to 150ms 153: de28266fe3 = 153: 17b8d55c97 scalar: add docs from microsoft/scalar 154: 8d0dc7cb2c = 154: c3dbc931f5 scalar (Windows): use forward slashes as directory separators 155: b3692fd10a = 155: 003d4cb9ee scalar: add retry logic to run_git() 156: 1ea9dd7014 = 156: cb28a5cf34 scalar: support the `config` command for backwards compatibility 157: fc083f4f58 = 157: fa45017005 scalar: implement a minimal JSON parser 158: 014b506631 = 158: 4e1447b7d8 scalar clone: support GVFS-enabled remote repositories 159: e980635c58 = 159: 6106dce8c3 test-gvfs-protocol: also serve smart protocol 160: c6ad354c05 = 160: e6442c3c8a gvfs-helper: add the `endpoint` command 161: 35a78cc15d = 161: f80662cf15 dir_inside_of(): handle directory separators correctly 162: 66a2764a4e = 162: cee504b416 scalar: disable authentication in unattended mode 163: 91af888076 = 163: ba6dabeeb5 scalar: do initialize `gvfs.sharedCache` 164: 33671b8889 = 164: 21af6fba74 scalar diagnose: include shared cache info 165: ac2fcc92d1 = 165: 5e236e5a1d scalar: only try GVFS protocol on https:// URLs 166: 433c062c22 = 166: 3b91ebe00c scalar: verify that we can use a GVFS-enabled repository 167: 3ae1f3a6b8 = 167: 8bfac726ce scalar: add the `cache-server` command 168: 62d89ce296 = 168: 6af13a4da0 scalar: add a test toggle to skip accessing the vsts/info endpoint 169: 44fd956e6e = 169: 5c9a3dd257 scalar: adjust documentation to the microsoft/git fork 170: c63aa82313 = 170: 76037f8d13 scalar: enable untracked cache unconditionally 171: 9c7f199327 = 171: ccb82533f5 scalar: parse `clone --no-fetch-commits-and-trees` for backwards compatibility 172: 4646749d29 = 172: 6e88d8cc54 scalar: make GVFS Protocol a forced choice 173: b80da13325 = 173: fae970c3dc scalar diagnose: accommodate Scalar's Functional Tests 174: e529447ff4 = 174: 4cc6c2f194 ci: run Scalar's Functional Tests 176: b895eee911 = 175: ef5bebd1aa scalar: upgrade to newest FSMonitor config setting 175: 95096d2df7 = 176: 68982db8ad credential: add new interactive config option 177: bb11be9814 = 177: 4b2c98fb69 maintenance: add custom config to background jobs 179: b6917b721f = 178: c8eeb1e73b scalar: configure maintenance during 'reconfigure' 178: dcd5c00793 = 179: 6f76d4a508 abspath: make strip_last_path_component() global 180: 747eca44a7 = 180: 94e3ae5d03 scalar: .scalarCache should live above enlistment 181: 6e1c3219c8 = 181: ebb8f0d50c add/rm: allow adding sparse entries when virtual 182: a348b01156 = 182: ab29d91935 sparse-checkout: add config to disable deleting dirs 183: 86a4d00bbb = 183: 827278b32b diff: ignore sparse paths in diffstat 184: 1654002f24 = 184: 1953200c0b repo-settings: enable sparse index by default 185: f2c62dcbf9 = 185: e8418ea04f diff(sparse-index): verify with partially-sparse 186: dd7000cd80 = 186: a0fe103cba stash: expand testing for `git stash -u` 187: 044091536c = 187: f90edc6b9d sequencer: avoid progress when stderr is redirected 188: dd7b8b95d3 = 188: bee761d781 sparse: add vfs-specific precautions 189: f794bcb771 = 189: e97729cb06 reset: fix mixed reset when using virtual filesystem ```

cc @derrickstolee @dscho