Jump To …

config.c

/*
 * libgit2 "config" example - shows how to use the config API
 *
 * Written by the libgit2 contributors
 *
 * To the extent possible under law, the author(s) have dedicated all copyright
 * and related and neighboring rights to this software to the public domain
 * worldwide. This software is distributed without any warranty.
 *
 * You should have received a copy of the CC0 Public Domain Dedication along
 * with this software. If not, see
 * <http://creativecommons.org/publicdomain/zero/1.0/>.
 */

#include "common.h"

static int config_get(git_config *cfg, const char *key)
{
  git_config_entry *entry;
  int error;

  if ((error = git_config_get_entry(&entry, cfg, key)) < 0) {
    if (error != GIT_ENOTFOUND)
      printf("Unable to get configuration: %s\n", git_error_last()->message);
    return 1;
  }

  puts(entry->value);

  /* Free the git_config_entry after use with `git_config_entry_free()`. */
  git_config_entry_free(entry);

  return 0;
}

static int config_set(git_config *cfg, const char *key, const char *value)
{
  if (git_config_set_string(cfg, key, value) < 0) {
    printf("Unable to set configuration: %s\n", git_error_last()->message);
    return 1;
  }
  return 0;
}

int lg2_config(git_repository *repo, int argc, char **argv)
{
  git_config *cfg;
  int error;

  if ((error = git_repository_config(&cfg, repo)) < 0) {
    printf("Unable to obtain repository config: %s\n", git_error_last()->message);
    goto out;
  }

  if (argc == 2) {
    error = config_get(cfg, argv[1]);
  } else if (argc == 3) {
    error = config_set(cfg, argv[1], argv[2]);
  } else {
    printf("USAGE: %s config <KEY> [<VALUE>]\n", argv[0]);
    error = 1;
  }

The configuration file must be freed once it's no longer being used by the user.

  git_config_free(cfg);
out:
  return error;
}