diff options
-rw-r--r-- | .github/workflows/main.yml | 2 | ||||
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | builtin/index-pack.c | 29 | ||||
-rw-r--r-- | compat/mingw.h | 2 | ||||
-rw-r--r-- | git.c | 19 | ||||
-rw-r--r-- | help.c | 2 | ||||
-rw-r--r-- | help.h | 1 | ||||
-rwxr-xr-x | t/t5302-pack-index.sh | 7 | ||||
-rwxr-xr-x | t/t5534-push-signed.sh | 7 |
9 files changed, 51 insertions, 28 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fcfd138ff1..14ff94dcbe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -154,7 +154,7 @@ jobs: Expand-Archive compat.zip -DestinationPath . -Force Remove-Item compat.zip - name: add msbuild to PATH - uses: microsoft/setup-msbuild@v1.0.0 + uses: microsoft/setup-msbuild@v1 - name: copy dlls to root shell: powershell run: | @@ -820,8 +820,8 @@ TEST_SHELL_PATH = $(SHELL_PATH) LIB_FILE = libgit.a XDIFF_LIB = xdiff/lib.a -GENERATED_H += config-list.h GENERATED_H += command-list.h +GENERATED_H += config-list.h LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \ $(FIND) . \ @@ -998,9 +998,9 @@ LIB_OBJS += sigchain.o LIB_OBJS += split-index.o LIB_OBJS += stable-qsort.o LIB_OBJS += strbuf.o -LIB_OBJS += strvec.o LIB_OBJS += streaming.o LIB_OBJS += string-list.o +LIB_OBJS += strvec.o LIB_OBJS += sub-process.o LIB_OBJS += submodule-config.o LIB_OBJS += submodule.o @@ -1066,15 +1066,15 @@ BUILTIN_OBJS += builtin/checkout-index.o BUILTIN_OBJS += builtin/checkout.o BUILTIN_OBJS += builtin/clean.o BUILTIN_OBJS += builtin/clone.o -BUILTIN_OBJS += builtin/credential-cache.o -BUILTIN_OBJS += builtin/credential-cache--daemon.o -BUILTIN_OBJS += builtin/credential-store.o BUILTIN_OBJS += builtin/column.o BUILTIN_OBJS += builtin/commit-graph.o BUILTIN_OBJS += builtin/commit-tree.o BUILTIN_OBJS += builtin/commit.o BUILTIN_OBJS += builtin/config.o BUILTIN_OBJS += builtin/count-objects.o +BUILTIN_OBJS += builtin/credential-cache--daemon.o +BUILTIN_OBJS += builtin/credential-cache.o +BUILTIN_OBJS += builtin/credential-store.o BUILTIN_OBJS += builtin/credential.o BUILTIN_OBJS += builtin/describe.o BUILTIN_OBJS += builtin/diff-files.o diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 8acd078aa0..0d03cb442d 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -159,10 +159,6 @@ static pthread_mutex_t deepest_delta_mutex; #define deepest_delta_lock() lock_mutex(&deepest_delta_mutex) #define deepest_delta_unlock() unlock_mutex(&deepest_delta_mutex) -static pthread_mutex_t type_cas_mutex; -#define type_cas_lock() lock_mutex(&type_cas_mutex) -#define type_cas_unlock() unlock_mutex(&type_cas_mutex) - static pthread_key_t key; static inline void lock_mutex(pthread_mutex_t *mutex) @@ -186,7 +182,6 @@ static void init_thread(void) init_recursive_mutex(&read_mutex); pthread_mutex_init(&counter_mutex, NULL); pthread_mutex_init(&work_mutex, NULL); - pthread_mutex_init(&type_cas_mutex, NULL); if (show_stat) pthread_mutex_init(&deepest_delta_mutex, NULL); pthread_key_create(&key, NULL); @@ -209,7 +204,6 @@ static void cleanup_thread(void) pthread_mutex_destroy(&read_mutex); pthread_mutex_destroy(&counter_mutex); pthread_mutex_destroy(&work_mutex); - pthread_mutex_destroy(&type_cas_mutex); if (show_stat) pthread_mutex_destroy(&deepest_delta_mutex); for (i = 0; i < nr_threads; i++) @@ -894,18 +888,15 @@ static void sha1_object(const void *data, struct object_entry *obj_entry, } /* - * Walk from current node up - * to top parent if necessary to deflate the node. In normal - * situation, its parent node would be already deflated, so it just - * needs to apply delta. - * - * In the worst case scenario, parent node is no longer deflated because - * we're running out of delta_base_cache_limit; we need to re-deflate - * parents, possibly up to the top base. + * Ensure that this node has been reconstructed and return its contents. * - * All deflated objects here are subject to be freed if we exceed - * delta_base_cache_limit, just like in find_unresolved_deltas(), we - * just need to make sure the last node is not freed. + * In the typical and best case, this node would already be reconstructed + * (through the invocation to resolve_delta() in threaded_second_pass()) and it + * would not be pruned. However, if pruning of this node was necessary due to + * reaching delta_base_cache_limit, this function will find the closest + * ancestor with reconstructed data that has not been pruned (or if there is + * none, the ultimate base object), and reconstruct each node in the delta + * chain in order to generate the reconstructed data for this node. */ static void *get_base_data(struct base_data *c) { @@ -1028,6 +1019,10 @@ static void *threaded_second_pass(void *data) struct object_entry *child_obj; struct base_data *child; + counter_lock(); + display_progress(progress, nr_resolved_deltas); + counter_unlock(); + work_lock(); if (list_empty(&work_head)) { /* diff --git a/compat/mingw.h b/compat/mingw.h index e6fe810ba9..af8eddd73e 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -606,7 +606,7 @@ int main(int argc, const char **argv); * Call this function to open a new MinTTY (this assumes you are in Git for * Windows' SDK) with a GDB that attaches to the current process right away. */ -extern void open_in_gdb(void); +void open_in_gdb(void); /* * Used by Pthread API implementation for Windows @@ -638,6 +638,25 @@ static void list_builtins(struct string_list *out, unsigned int exclude_option) } } +void load_builtin_commands(const char *prefix, struct cmdnames *cmds) +{ + const char *name; + int i; + + /* + * Callers can ask for a subset of the commands based on a certain + * prefix, which is then dropped from the added names. The names in + * the `commands[]` array do not have the `git-` prefix, though, + * therefore we must expect the `prefix` to at least start with `git-`. + */ + if (!skip_prefix(prefix, "git-", &prefix)) + BUG("prefix '%s' must start with 'git-'", prefix); + + for (i = 0; i < ARRAY_SIZE(commands); i++) + if (skip_prefix(commands[i].cmd, prefix, &name)) + add_cmdname(cmds, name, strlen(name)); +} + #ifdef STRIP_EXTENSION static void strip_extension(const char **argv) { @@ -263,6 +263,8 @@ void load_command_list(const char *prefix, const char *env_path = getenv("PATH"); const char *exec_path = git_exec_path(); + load_builtin_commands(prefix, main_cmds); + if (exec_path) { list_commands_in_dir(main_cmds, exec_path, prefix); QSORT(main_cmds->names, main_cmds->cnt, cmdname_compare); @@ -32,6 +32,7 @@ const char *help_unknown_cmd(const char *cmd); void load_command_list(const char *prefix, struct cmdnames *main_cmds, struct cmdnames *other_cmds); +void load_builtin_commands(const char *prefix, struct cmdnames *cmds); void add_cmdname(struct cmdnames *cmds, const char *name, int len); /* Here we require that excludes is a sorted list. */ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes); diff --git a/t/t5302-pack-index.sh b/t/t5302-pack-index.sh index c92e553a2f..7c9d687367 100755 --- a/t/t5302-pack-index.sh +++ b/t/t5302-pack-index.sh @@ -277,4 +277,11 @@ test_expect_success 'index-pack --fsck-objects also warns upon missing tagger in grep "^warning:.* expected .tagger. line" err ' +test_expect_success 'index-pack -v --stdin produces progress for both phases' ' + pack=$(git pack-objects --all pack </dev/null) && + GIT_PROGRESS_DELAY=0 git index-pack -v --stdin <pack-$pack.pack 2>err && + test_i18ngrep "Receiving objects" err && + test_i18ngrep "Resolving deltas" err +' + test_done diff --git a/t/t5534-push-signed.sh b/t/t5534-push-signed.sh index 7e928aff66..af0385fb89 100755 --- a/t/t5534-push-signed.sh +++ b/t/t5534-push-signed.sh @@ -282,10 +282,9 @@ test_expect_success GPG 'failed atomic push does not execute GPG' ' EOF test_must_fail env PATH="$TRASH_DIRECTORY:$PATH" git push \ --signed --atomic --porcelain \ - dst noop ff noff >out 2>&1 && + dst noop ff noff >out 2>err && - test_i18ngrep ! "gpg failed to sign" out && - sed -n -e "/^To dst/,$ p" out >actual && + test_i18ngrep ! "gpg failed to sign" err && cat >expect <<-EOF && To dst = refs/heads/noop:refs/heads/noop [up to date] @@ -293,7 +292,7 @@ test_expect_success GPG 'failed atomic push does not execute GPG' ' ! refs/heads/noff:refs/heads/noff [rejected] (non-fast-forward) Done EOF - test_i18ncmp expect actual + test_cmp expect out ' test_done |