1 /* 2 * Copyright (C) the libgit2 contributors. All rights reserved. 3 * 4 * This file is part of libgit2, distributed under the GNU GPL v2 with 5 * a Linking Exception. For full terms see the included COPYING file. 6 */ 7 module libgit2_d.sys.config; 8 9 10 private static import libgit2_d.config; 11 private static import libgit2_d.types; 12 13 /** 14 * @file git2/sys/config.h 15 * @brief Git config backend routines 16 * @defgroup git_backend Git custom backend APIs 17 * @ingroup Git 18 * @{ 19 */ 20 extern (C): 21 nothrow @nogc: 22 package(libgit2_d): 23 24 /** 25 * Every iterator must have this struct as its first element, so the 26 * API can talk to it. You'd define your iterator as 27 * 28 * struct my_iterator { 29 * .git_config_iterator parent; 30 * ... 31 * } 32 * 33 * and assign `iter->parent.backend` to your `git_config_backend`. 34 */ 35 struct git_config_iterator 36 { 37 .git_config_backend* backend; 38 uint flags; 39 40 /** 41 * Return the current entry and advance the iterator. The 42 * memory belongs to the library. 43 */ 44 int function(libgit2_d.config.git_config_entry** entry, .git_config_iterator* iter) next; 45 46 /** 47 * Free the iterator 48 */ 49 void function(.git_config_iterator* iter) free; 50 } 51 52 /** 53 * Generic backend that implements the interface to 54 * access a configuration file 55 */ 56 struct git_config_backend 57 { 58 uint version_; 59 60 /** 61 * True if this backend is for a snapshot 62 */ 63 int readonly; 64 65 libgit2_d.types.git_config* cfg; 66 67 /* Open means open the file/database and parse if necessary */ 68 int function(.git_config_backend*, libgit2_d.config.git_config_level_t level, const (libgit2_d.types.git_repository)* repo) open; 69 int function(.git_config_backend*, const (char)* key, libgit2_d.config.git_config_entry** entry) get; 70 int function(.git_config_backend*, const (char)* key, const (char)* value) set; 71 int function(.git_config_backend* cfg, const (char)* name, const (char)* regexp, const (char)* value) set_multivar; 72 int function(.git_config_backend*, const (char)* key) del; 73 int function(.git_config_backend*, const (char)* key, const (char)* regexp) del_multivar; 74 int function(.git_config_iterator**, .git_config_backend*) iterator; 75 76 /** 77 * Produce a read-only version of this backend 78 */ 79 int function(.git_config_backend**, .git_config_backend*) snapshot; 80 81 /** 82 * Lock this backend. 83 * 84 * Prevent any writes to the data store backing this 85 * backend. Any updates must not be visible to any other 86 * readers. 87 */ 88 int function(.git_config_backend*) lock; 89 90 /** 91 * Unlock the data store backing this backend. If success is 92 * true, the changes should be committed, otherwise rolled 93 * back. 94 */ 95 int function(.git_config_backend*, int success) unlock; 96 97 void function(.git_config_backend*) free; 98 } 99 100 enum GIT_CONFIG_BACKEND_VERSION = 1; 101 102 pragma(inline, true) 103 pure nothrow @safe @nogc 104 .git_config_backend GIT_CONFIG_BACKEND_INIT() 105 106 do 107 { 108 .git_config_backend OUTPUT = 109 { 110 version_: .GIT_CONFIG_BACKEND_VERSION, 111 }; 112 113 return OUTPUT; 114 } 115 116 /** 117 * Initializes a `git_config_backend` with default values. Equivalent to 118 * creating an instance with GIT_CONFIG_BACKEND_INIT. 119 * 120 * Params: 121 * backend = the `git_config_backend` struct to initialize. 122 * version = Version of struct; pass `GIT_CONFIG_BACKEND_VERSION` 123 * 124 * Returns: Zero on success; -1 on failure. 125 */ 126 //GIT_EXTERN 127 int git_config_init_backend(.git_config_backend* backend, uint version_); 128 129 /** 130 * Add a generic config file instance to an existing config 131 * 132 * Note that the configuration object will free the file 133 * automatically. 134 * 135 * Further queries on this config object will access each 136 * of the config file instances in order (instances with 137 * a higher priority level will be accessed first). 138 * 139 * Params: 140 * cfg = the configuration to add the file to 141 * file = the configuration file (backend) to add 142 * level = the priority level of the backend 143 * repo = optional repository to allow parsing of conditional includes 144 * force = if a config file already exists for the given priority level, replace it 145 * 146 * Returns: 0 on success, git_error_code.GIT_EEXISTS when adding more than one file for a given priority level (and force_replace set to 0), or error code 147 */ 148 //GIT_EXTERN 149 int git_config_add_backend(libgit2_d.types.git_config* cfg, .git_config_backend* file, libgit2_d.config.git_config_level_t level, const (libgit2_d.types.git_repository)* repo, int force); 150 151 /** @} */