Commit 146e5bf7 by Patrick Steinhardt

config_mem: implement support for snapshots

Similar as in commit dadbb33b (Fix crash if snapshotting a
config_snapshot, 2019-11-01), let's implement snapshots for in-memory
configuration entries. As this deletes more code than it adds, it
doesn't make any sense to not allow for this and allows users to treat
config backends mostly the same.
parent 5d773a18
...@@ -170,14 +170,6 @@ static int config_memory_unlock(git_config_backend *backend, int success) ...@@ -170,14 +170,6 @@ static int config_memory_unlock(git_config_backend *backend, int success)
return config_error_readonly(); return config_error_readonly();
} }
static int config_memory_snapshot(git_config_backend **out, git_config_backend *backend)
{
GIT_UNUSED(out);
GIT_UNUSED(backend);
git_error_set(GIT_ERROR_CONFIG, "this backend does not support snapshots");
return -1;
}
static void config_memory_free(git_config_backend *_backend) static void config_memory_free(git_config_backend *_backend)
{ {
config_memory_backend *backend = (config_memory_backend *)_backend; config_memory_backend *backend = (config_memory_backend *)_backend;
...@@ -219,7 +211,7 @@ int git_config_backend_from_string(git_config_backend **out, const char *cfg, si ...@@ -219,7 +211,7 @@ int git_config_backend_from_string(git_config_backend **out, const char *cfg, si
backend->parent.iterator = config_memory_iterator; backend->parent.iterator = config_memory_iterator;
backend->parent.lock = config_memory_lock; backend->parent.lock = config_memory_lock;
backend->parent.unlock = config_memory_unlock; backend->parent.unlock = config_memory_unlock;
backend->parent.snapshot = config_memory_snapshot; backend->parent.snapshot = git_config_backend_snapshot;
backend->parent.free = config_memory_free; backend->parent.free = config_memory_free;
*out = (git_config_backend *)backend; *out = (git_config_backend *)backend;
......
#include "clar_libgit2.h" #include "clar_libgit2.h"
#include "config_backend.h"
static git_config *cfg; static git_config *cfg;
static git_config *snapshot; static git_config *snapshot;
...@@ -120,3 +122,18 @@ void test_config_snapshot__snapshot(void) ...@@ -120,3 +122,18 @@ void test_config_snapshot__snapshot(void)
cl_git_pass(p_unlink("configfile")); cl_git_pass(p_unlink("configfile"));
} }
void test_config_snapshot__snapshot_from_in_memony(void)
{
const char *configuration = "[section]\nkey = 1\n";
git_config_backend *backend;
int i;
cl_git_pass(git_config_new(&cfg));
cl_git_pass(git_config_backend_from_string(&backend, configuration, strlen(configuration)));
cl_git_pass(git_config_add_backend(cfg, backend, 0, NULL, 0));
cl_git_pass(git_config_snapshot(&snapshot, cfg));
cl_git_pass(git_config_get_int32(&i, snapshot, "section.key"));
cl_assert_equal_i(i, 1);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment