Compare commits
No commits in common. 'cs10' and 'c9' have entirely different histories.
@ -1,2 +1,2 @@
|
|||||||
e164197ede0c38287bb59a50b18cd808629a7fc4 SOURCES/git-2.45.2.tar.sign
|
7577a22e233e892dba5cf19a3a57cef2062d01e6 SOURCES/git-2.43.5.tar.sign
|
||||||
c7b6becec398e69130e4f066390e1519a417eb35 SOURCES/git-2.45.2.tar.xz
|
31decef72034ae36c8098a9e6bb13a7dd4859fd9 SOURCES/git-2.43.5.tar.xz
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
SOURCES/git-2.45.2.tar.sign
|
SOURCES/git-2.43.5.tar.sign
|
||||||
SOURCES/git-2.45.2.tar.xz
|
SOURCES/git-2.43.5.tar.xz
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
diff -ur b/builtin/receive-pack.c a/builtin/receive-pack.c
|
||||||
|
--- b/builtin/receive-pack.c 2023-11-20 03:07:41.000000000 +0100
|
||||||
|
+++ a/builtin/receive-pack.c 2023-12-06 15:34:28.294170714 +0100
|
||||||
|
@@ -40,6 +40,8 @@
|
||||||
|
#include "worktree.h"
|
||||||
|
#include "shallow.h"
|
||||||
|
#include "parse-options.h"
|
||||||
|
+#include <openssl/hmac.h>
|
||||||
|
+#include <openssl/evp.h>
|
||||||
|
|
||||||
|
static const char * const receive_pack_usage[] = {
|
||||||
|
N_("git receive-pack <git-dir>"),
|
||||||
|
@@ -538,43 +540,11 @@
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void hmac_hash(unsigned char *out,
|
||||||
|
+static inline void hmac_hash(unsigned char *out,
|
||||||
|
const char *key_in, size_t key_len,
|
||||||
|
const char *text, size_t text_len)
|
||||||
|
{
|
||||||
|
- unsigned char key[GIT_MAX_BLKSZ];
|
||||||
|
- unsigned char k_ipad[GIT_MAX_BLKSZ];
|
||||||
|
- unsigned char k_opad[GIT_MAX_BLKSZ];
|
||||||
|
- int i;
|
||||||
|
- git_hash_ctx ctx;
|
||||||
|
-
|
||||||
|
- /* RFC 2104 2. (1) */
|
||||||
|
- memset(key, '\0', GIT_MAX_BLKSZ);
|
||||||
|
- if (the_hash_algo->blksz < key_len) {
|
||||||
|
- the_hash_algo->init_fn(&ctx);
|
||||||
|
- the_hash_algo->update_fn(&ctx, key_in, key_len);
|
||||||
|
- the_hash_algo->final_fn(key, &ctx);
|
||||||
|
- } else {
|
||||||
|
- memcpy(key, key_in, key_len);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* RFC 2104 2. (2) & (5) */
|
||||||
|
- for (i = 0; i < sizeof(key); i++) {
|
||||||
|
- k_ipad[i] = key[i] ^ 0x36;
|
||||||
|
- k_opad[i] = key[i] ^ 0x5c;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* RFC 2104 2. (3) & (4) */
|
||||||
|
- the_hash_algo->init_fn(&ctx);
|
||||||
|
- the_hash_algo->update_fn(&ctx, k_ipad, sizeof(k_ipad));
|
||||||
|
- the_hash_algo->update_fn(&ctx, text, text_len);
|
||||||
|
- the_hash_algo->final_fn(out, &ctx);
|
||||||
|
-
|
||||||
|
- /* RFC 2104 2. (6) & (7) */
|
||||||
|
- the_hash_algo->init_fn(&ctx);
|
||||||
|
- the_hash_algo->update_fn(&ctx, k_opad, sizeof(k_opad));
|
||||||
|
- the_hash_algo->update_fn(&ctx, out, the_hash_algo->rawsz);
|
||||||
|
- the_hash_algo->final_fn(out, &ctx);
|
||||||
|
+ HMAC(EVP_sha1(), key_in, key_len, text, text_len, out, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
|
||||||
|
diff -ur b/Makefile a/Makefile
|
||||||
|
--- b/Makefile 2023-11-20 03:07:41.000000000 +0100
|
||||||
|
+++ a/Makefile 2023-12-06 15:35:08.506316431 +0100
|
||||||
|
@@ -2123,6 +2123,8 @@
|
||||||
|
EXTLIBS += -lcrypto -lssl
|
||||||
|
endif
|
||||||
|
|
||||||
|
+EXTLIBS += -lcrypto
|
||||||
|
+
|
||||||
|
ifneq ($(PROCFS_EXECUTABLE_PATH),)
|
||||||
|
procfs_executable_path_SQ = $(subst ','\'',$(PROCFS_EXECUTABLE_PATH))
|
||||||
|
BASIC_CFLAGS += '-DPROCFS_EXECUTABLE_PATH="$(procfs_executable_path_SQ)"'
|
@ -0,0 +1,115 @@
|
|||||||
|
From 51441e6460b505c07b4a8a6deeaa7de4bf6e8e33 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Junio C Hamano <gitster@pobox.com>
|
||||||
|
Date: Fri, 3 May 2024 08:34:27 -0700
|
||||||
|
Subject: [PATCH] stop using HEAD for attributes in bare repository by default
|
||||||
|
|
||||||
|
With 23865355 (attr: read attributes from HEAD when bare repo,
|
||||||
|
2023-10-13), we started to use the HEAD tree as the default
|
||||||
|
attribute source in a bare repository. One argument for such a
|
||||||
|
behaviour is that it would make things like "git archive" run in
|
||||||
|
bare and non-bare repositories for the same commit consistent.
|
||||||
|
This changes was merged to Git 2.43 but without an explicit mention
|
||||||
|
in its release notes.
|
||||||
|
|
||||||
|
It turns out that this change destroys performance of shallowly
|
||||||
|
cloning from a bare repository. As the "server" installations are
|
||||||
|
expected to be mostly bare, and "git pack-objects", which is the
|
||||||
|
core of driving the other side of "git clone" and "git fetch" wants
|
||||||
|
to see if a path is set not to delta with blobs from other paths via
|
||||||
|
the attribute system, the change forces the server side to traverse
|
||||||
|
the tree of the HEAD commit needlessly to find if each and every
|
||||||
|
paths the objects it sends out has the attribute that controls the
|
||||||
|
deltification. Given that (1) most projects do not configure such
|
||||||
|
an attribute, and (2) it is dubious for the server side to honor
|
||||||
|
such an end-user supplied attribute anyway, this was a poor choice
|
||||||
|
of the default.
|
||||||
|
|
||||||
|
To mitigate the current situation, let's revert the change that uses
|
||||||
|
the tree of HEAD in a bare repository by default as the attribute
|
||||||
|
source. This will help most people who have been happy with the
|
||||||
|
behaviour of Git 2.42 and before.
|
||||||
|
|
||||||
|
Two things to note:
|
||||||
|
|
||||||
|
* If you are stuck with versions of Git 2.43 or newer, that is
|
||||||
|
older than the release this fix appears in, you can explicitly
|
||||||
|
set the attr.tree configuration variable to point at an empty
|
||||||
|
tree object, i.e.
|
||||||
|
|
||||||
|
$ git config attr.tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||||
|
|
||||||
|
* If you like the behaviour we are reverting, you can explicitly
|
||||||
|
set the attr.tree configuration variable to HEAD, i.e.
|
||||||
|
|
||||||
|
$ git config attr.tree HEAD
|
||||||
|
|
||||||
|
The right fix for this is to optimize the code paths that allow
|
||||||
|
accesses to attributes in tree objects, but that is a much more
|
||||||
|
involved change and is left as a longer-term project, outside the
|
||||||
|
scope of this "first step" fix.
|
||||||
|
|
||||||
|
Signed-off-by: Junio C Hamano <gitster@pobox.com>
|
||||||
|
---
|
||||||
|
attr.c | 7 -------
|
||||||
|
t/t0003-attributes.sh | 10 ++++++++--
|
||||||
|
t/t5001-archive-attr.sh | 3 ++-
|
||||||
|
3 files changed, 10 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/attr.c b/attr.c
|
||||||
|
index e62876dfd3e9be..02ab8436266289 100644
|
||||||
|
--- a/attr.c
|
||||||
|
+++ b/attr.c
|
||||||
|
@@ -1213,13 +1213,6 @@ static void compute_default_attr_source(struct object_id *attr_source)
|
||||||
|
ignore_bad_attr_tree = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!default_attr_source_tree_object_name &&
|
||||||
|
- startup_info->have_repository &&
|
||||||
|
- is_bare_repository()) {
|
||||||
|
- default_attr_source_tree_object_name = "HEAD";
|
||||||
|
- ignore_bad_attr_tree = 1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
if (!default_attr_source_tree_object_name || !is_null_oid(attr_source))
|
||||||
|
return;
|
||||||
|
|
||||||
|
diff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh
|
||||||
|
index aee2298f01331a..5de46ddf67f7ff 100755
|
||||||
|
--- a/t/t0003-attributes.sh
|
||||||
|
+++ b/t/t0003-attributes.sh
|
||||||
|
@@ -384,13 +384,19 @@ test_expect_success 'bad attr source defaults to reading .gitattributes file' '
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
-test_expect_success 'bare repo defaults to reading .gitattributes from HEAD' '
|
||||||
|
+test_expect_success 'bare repo no longer defaults to reading .gitattributes from HEAD' '
|
||||||
|
test_when_finished rm -rf test bare_with_gitattribute &&
|
||||||
|
git init test &&
|
||||||
|
test_commit -C test gitattributes .gitattributes "f/path test=val" &&
|
||||||
|
git clone --bare test bare_with_gitattribute &&
|
||||||
|
- echo "f/path: test: val" >expect &&
|
||||||
|
+
|
||||||
|
+ echo "f/path: test: unspecified" >expect &&
|
||||||
|
git -C bare_with_gitattribute check-attr test -- f/path >actual &&
|
||||||
|
+ test_cmp expect actual &&
|
||||||
|
+
|
||||||
|
+ echo "f/path: test: val" >expect &&
|
||||||
|
+ git -C bare_with_gitattribute -c attr.tree=HEAD \
|
||||||
|
+ check-attr test -- f/path >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
diff --git a/t/t5001-archive-attr.sh b/t/t5001-archive-attr.sh
|
||||||
|
index eaf959d8f63f15..7310774af5efea 100755
|
||||||
|
--- a/t/t5001-archive-attr.sh
|
||||||
|
+++ b/t/t5001-archive-attr.sh
|
||||||
|
@@ -133,7 +133,8 @@ test_expect_success 'git archive vs. bare' '
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git archive with worktree attributes, bare' '
|
||||||
|
- (cd bare && git archive --worktree-attributes HEAD) >bare-worktree.tar &&
|
||||||
|
+ (cd bare &&
|
||||||
|
+ git -c attr.tree=HEAD archive --worktree-attributes HEAD) >bare-worktree.tar &&
|
||||||
|
(mkdir bare-worktree && cd bare-worktree && "$TAR" xf -) <bare-worktree.tar
|
||||||
|
'
|
||||||
|
|
@ -1,14 +0,0 @@
|
|||||||
diff -ur b/t/lib-httpd/apache.conf a/t/lib-httpd/apache.conf
|
|
||||||
--- b/t/lib-httpd/apache.conf 2024-01-09 11:06:46.660868023 +0100
|
|
||||||
+++ a/t/lib-httpd/apache.conf 2024-01-09 11:09:09.572713625 +0100
|
|
||||||
@@ -272,7 +272,9 @@
|
|
||||||
<IfDefine DAV>
|
|
||||||
LoadModule dav_module modules/mod_dav.so
|
|
||||||
LoadModule dav_fs_module modules/mod_dav_fs.so
|
|
||||||
-
|
|
||||||
+ <IfDirective DavLockDBType>
|
|
||||||
+ DavLockDBType sdbm
|
|
||||||
+ </IfDirective>
|
|
||||||
DAVLockDB DAVLock
|
|
||||||
<Location /dumb/>
|
|
||||||
Dav on
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue