summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libgit2/odb_loose.c34
-rw-r--r--src/libgit2/transports/ssh.c14
-rw-r--r--tests/libgit2/odb/backend/loose.c43
-rw-r--r--tests/libgit2/online/clone.c12
4 files changed, 81 insertions, 22 deletions
diff --git a/src/libgit2/odb_loose.c b/src/libgit2/odb_loose.c
index d1abbe233..51195d357 100644
--- a/src/libgit2/odb_loose.c
+++ b/src/libgit2/odb_loose.c
@@ -1204,3 +1204,37 @@ int git_odb__backend_loose(
*backend_out = (git_odb_backend *)backend;
return 0;
}
+
+
+#ifdef GIT_EXPERIMENTAL_SHA256
+int git_odb_backend_loose(
+ git_odb_backend **backend_out,
+ const char *objects_dir,
+ git_odb_backend_loose_options *opts)
+{
+ return git_odb__backend_loose(backend_out, objects_dir, opts);
+}
+#else
+int git_odb_backend_loose(
+ git_odb_backend **backend_out,
+ const char *objects_dir,
+ int compression_level,
+ int do_fsync,
+ unsigned int dir_mode,
+ unsigned int file_mode)
+{
+ git_odb_backend_loose_flag_t flags = 0;
+ git_odb_backend_loose_options opts = GIT_ODB_BACKEND_LOOSE_OPTIONS_INIT;
+
+ if (do_fsync)
+ flags |= GIT_ODB_BACKEND_LOOSE_FSYNC;
+
+ opts.flags = flags;
+ opts.compression_level = compression_level;
+ opts.dir_mode = dir_mode;
+ opts.file_mode = file_mode;
+ opts.oid_type = GIT_OID_DEFAULT;
+
+ return git_odb__backend_loose(backend_out, objects_dir, &opts);
+}
+#endif
diff --git a/src/libgit2/transports/ssh.c b/src/libgit2/transports/ssh.c
index d7594aa12..5500ea100 100644
--- a/src/libgit2/transports/ssh.c
+++ b/src/libgit2/transports/ssh.c
@@ -651,8 +651,6 @@ static int check_against_known_hosts(
return ret;
}
-#define SSH_DEFAULT_PORT 22
-
/*
* Perform the check for the session's certificate against known hosts if
* possible and then ask the user if they have a callback.
@@ -750,16 +748,9 @@ static int check_certificate(
if (check_cb != NULL) {
git_cert_hostkey *cert_ptr = &cert;
git_error_state previous_error = {0};
- const char *host_ptr = host;
- git_str host_and_port = GIT_STR_INIT;
-
- if (port != SSH_DEFAULT_PORT) {
- git_str_printf(&host_and_port, "%s:%d", host, port);
- host_ptr = host_and_port.ptr;
- }
git_error_state_capture(&previous_error, error);
- error = check_cb((git_cert *) cert_ptr, cert_valid, host_ptr, check_cb_payload);
+ error = check_cb((git_cert *) cert_ptr, cert_valid, host, check_cb_payload);
if (error == GIT_PASSTHROUGH) {
error = git_error_state_restore(&previous_error);
} else if (error < 0 && !git_error_last()) {
@@ -767,12 +758,13 @@ static int check_certificate(
}
git_error_state_free(&previous_error);
- git_str_dispose(&host_and_port);
}
return error;
}
+#define SSH_DEFAULT_PORT "22"
+
static int _git_ssh_setup_conn(
ssh_subtransport *t,
const char *url,
diff --git a/tests/libgit2/odb/backend/loose.c b/tests/libgit2/odb/backend/loose.c
new file mode 100644
index 000000000..781b61d9f
--- /dev/null
+++ b/tests/libgit2/odb/backend/loose.c
@@ -0,0 +1,43 @@
+#include "clar_libgit2.h"
+#include "repository.h"
+#include "odb.h"
+#include "backend_helpers.h"
+#include "git2/sys/mempack.h"
+
+static git_repository *_repo;
+static git_odb *_odb;
+
+void test_odb_backend_loose__initialize(void)
+{
+ git_odb_backend *backend;
+
+ cl_fixture_sandbox("testrepo.git");
+
+#ifdef GIT_EXPERIMENTAL_SHA256
+ cl_git_pass(git_odb_backend_loose(&backend, "testrepo.git/objects", NULL));
+#else
+ cl_git_pass(git_odb_backend_loose(&backend, "testrepo.git/objects", 0, 0, 0, 0));
+#endif
+
+ cl_git_pass(git_odb__new(&_odb, NULL));
+ cl_git_pass(git_odb_add_backend(_odb, backend, 10));
+ cl_git_pass(git_repository_wrap_odb(&_repo, _odb));
+}
+
+void test_odb_backend_loose__cleanup(void)
+{
+ git_odb_free(_odb);
+ git_repository_free(_repo);
+
+ cl_fixture_cleanup("testrepo.git");
+}
+
+void test_odb_backend_loose__read(void)
+{
+ git_oid oid;
+ git_odb_object *obj;
+
+ cl_git_pass(git_oid__fromstr(&oid, "1385f264afb75a56a5bec74243be9b367ba4ca08", GIT_OID_SHA1));
+ cl_git_pass(git_odb_read(&obj, _odb, &oid));
+ git_odb_object_free(obj);
+}
diff --git a/tests/libgit2/online/clone.c b/tests/libgit2/online/clone.c
index bb704c066..1a4cdb520 100644
--- a/tests/libgit2/online/clone.c
+++ b/tests/libgit2/online/clone.c
@@ -787,19 +787,10 @@ static int ssh_certificate_check(git_cert *cert, int valid, const char *host, vo
{
git_cert_hostkey *key;
git_oid expected = GIT_OID_SHA1_ZERO, actual = GIT_OID_SHA1_ZERO;
- git_str expected_host = GIT_STR_INIT;
- git_net_url parsed_url = GIT_NET_URL_INIT;
GIT_UNUSED(valid);
GIT_UNUSED(payload);
- cl_git_pass(git_net_url_parse_standard_or_scp(&parsed_url, _remote_url));
- cl_git_pass(git_str_printf(&expected_host, "%s%s%s",
- parsed_url.host,
- git_net_url_is_default_port(&parsed_url) ? "" : ":",
- git_net_url_is_default_port(&parsed_url) ? "" : parsed_url.port));
- cl_assert_equal_s(expected_host.ptr, host);
-
cl_assert(_remote_ssh_fingerprint);
cl_git_pass(git_oid__fromstrp(&expected, _remote_ssh_fingerprint, GIT_OID_SHA1));
@@ -821,8 +812,7 @@ static int ssh_certificate_check(git_cert *cert, int valid, const char *host, vo
cl_assert(!memcmp(&expected, &actual, 20));
- git_net_url_dispose(&parsed_url);
- git_str_dispose(&expected_host);
+ cl_assert_equal_s("localhost", host);
return GIT_EUSER;
}