Commit dc2beb7e by Peter Salomonsen

examples: additions and fixes

add example for git commit
fix example for git add
add example for git push
parent 705f4e85
...@@ -48,9 +48,11 @@ int lg2_add(git_repository *repo, int argc, char **argv) ...@@ -48,9 +48,11 @@ int lg2_add(git_repository *repo, int argc, char **argv)
git_index_matched_path_cb matched_cb = NULL; git_index_matched_path_cb matched_cb = NULL;
git_index *index; git_index *index;
git_strarray array = {0}; git_strarray array = {0};
struct index_options options; struct index_options options = {0};
struct args_info args = ARGS_INFO_INIT; struct args_info args = ARGS_INFO_INIT;
options.mode = INDEX_ADD;
/* Parse the options & arguments. */ /* Parse the options & arguments. */
parse_opts(NULL, &options, &args); parse_opts(NULL, &options, &args);
strarray_from_args(&array, &args); strarray_from_args(&array, &args);
......
/*
* libgit2 "commit" example - shows how to create a git commit
*
* 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"
/**
* This example demonstrates the libgit2 commit APIs to roughly
* simulate `git commit` with the commit message argument.
*
* This does not have:
*
* - Robust error handling
* - Most of the `git commit` options
*
* This does have:
*
* - Example of performing a git commit with a comment
*
*/
int lg2_commit(git_repository *repo, int argc, char **argv)
{
const char *opt = argv[1];
const char *comment = argv[2];
int error;
git_oid commit_oid,tree_oid;
git_tree *tree;
git_index *index;
git_object *parent = NULL;
git_reference *ref = NULL;
git_signature *signature;
/* Validate args */
if (argc < 3 || strcmp(opt, "-m") != 0) {
printf ("USAGE: %s -m <comment>\n", argv[0]);
return -1;
}
error = git_revparse_ext(&parent, &ref, repo, "HEAD");
if (error == GIT_ENOTFOUND) {
printf("HEAD not found. Creating first commit\n");
error = 0;
} else if (error != 0) {
const git_error *err = git_error_last();
if (err) printf("ERROR %d: %s\n", err->klass, err->message);
else printf("ERROR %d: no detailed info\n", error);
}
check_lg2(git_repository_index(&index, repo), "Could not open repository index", NULL);
check_lg2(git_index_write_tree(&tree_oid, index), "Could not write tree", NULL);;
check_lg2(git_index_write(index), "Could not write index", NULL);;
check_lg2(git_tree_lookup(&tree, repo, &tree_oid), "Error looking up tree", NULL);
check_lg2(git_signature_default(&signature, repo), "Error creating signature", NULL);
check_lg2(git_commit_create_v(
&commit_oid,
repo,
"HEAD",
signature,
signature,
NULL,
comment,
tree,
parent ? 1 : 0, parent), "Error creating commit", NULL);
git_index_free(index);
git_signature_free(signature);
git_tree_free(tree);
return error;
}
...@@ -59,6 +59,7 @@ extern int lg2_blame(git_repository *repo, int argc, char **argv); ...@@ -59,6 +59,7 @@ extern int lg2_blame(git_repository *repo, int argc, char **argv);
extern int lg2_cat_file(git_repository *repo, int argc, char **argv); extern int lg2_cat_file(git_repository *repo, int argc, char **argv);
extern int lg2_checkout(git_repository *repo, int argc, char **argv); extern int lg2_checkout(git_repository *repo, int argc, char **argv);
extern int lg2_clone(git_repository *repo, int argc, char **argv); extern int lg2_clone(git_repository *repo, int argc, char **argv);
extern int lg2_commit(git_repository *repo, int argc, char **argv);
extern int lg2_config(git_repository *repo, int argc, char **argv); extern int lg2_config(git_repository *repo, int argc, char **argv);
extern int lg2_describe(git_repository *repo, int argc, char **argv); extern int lg2_describe(git_repository *repo, int argc, char **argv);
extern int lg2_diff(git_repository *repo, int argc, char **argv); extern int lg2_diff(git_repository *repo, int argc, char **argv);
...@@ -71,6 +72,7 @@ extern int lg2_log(git_repository *repo, int argc, char **argv); ...@@ -71,6 +72,7 @@ extern int lg2_log(git_repository *repo, int argc, char **argv);
extern int lg2_ls_files(git_repository *repo, int argc, char **argv); extern int lg2_ls_files(git_repository *repo, int argc, char **argv);
extern int lg2_ls_remote(git_repository *repo, int argc, char **argv); extern int lg2_ls_remote(git_repository *repo, int argc, char **argv);
extern int lg2_merge(git_repository *repo, int argc, char **argv); extern int lg2_merge(git_repository *repo, int argc, char **argv);
extern int lg2_push(git_repository *repo, int argc, char **argv);
extern int lg2_remote(git_repository *repo, int argc, char **argv); extern int lg2_remote(git_repository *repo, int argc, char **argv);
extern int lg2_rev_list(git_repository *repo, int argc, char **argv); extern int lg2_rev_list(git_repository *repo, int argc, char **argv);
extern int lg2_rev_parse(git_repository *repo, int argc, char **argv); extern int lg2_rev_parse(git_repository *repo, int argc, char **argv);
......
...@@ -15,6 +15,7 @@ struct { ...@@ -15,6 +15,7 @@ struct {
{ "cat-file", lg2_cat_file, 1 }, { "cat-file", lg2_cat_file, 1 },
{ "checkout", lg2_checkout, 1 }, { "checkout", lg2_checkout, 1 },
{ "clone", lg2_clone, 0 }, { "clone", lg2_clone, 0 },
{ "commit", lg2_commit, 1 },
{ "config", lg2_config, 1 }, { "config", lg2_config, 1 },
{ "describe", lg2_describe, 1 }, { "describe", lg2_describe, 1 },
{ "diff", lg2_diff, 1 }, { "diff", lg2_diff, 1 },
...@@ -27,6 +28,7 @@ struct { ...@@ -27,6 +28,7 @@ struct {
{ "ls-files", lg2_ls_files, 1 }, { "ls-files", lg2_ls_files, 1 },
{ "ls-remote", lg2_ls_remote, 1 }, { "ls-remote", lg2_ls_remote, 1 },
{ "merge", lg2_merge, 1 }, { "merge", lg2_merge, 1 },
{ "push", lg2_push, 1 },
{ "remote", lg2_remote, 1 }, { "remote", lg2_remote, 1 },
{ "rev-list", lg2_rev_list, 1 }, { "rev-list", lg2_rev_list, 1 },
{ "rev-parse", lg2_rev_parse, 1 }, { "rev-parse", lg2_rev_parse, 1 },
......
/*
* libgit2 "push" example - shows how to push to remote
*
* 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"
/**
* This example demonstrates the libgit2 push API to roughly
* simulate `git push`.
*
* This does not have:
*
* - Robust error handling
* - Any of the `git push` options
*
* This does have:
*
* - Example of push to origin/master
*
*/
/** Entry point for this command */
int lg2_push(git_repository *repo, int argc, char **argv) {
git_push_options options;
git_remote* remote = NULL;
char *refspec = "refs/heads/master";
const git_strarray refspecs = {
&refspec,
1
};
/* Validate args */
if (argc > 1) {
printf ("USAGE: %s\n\nsorry, no arguments supported yet\n", argv[0]);
return -1;
}
check_lg2(git_remote_lookup(&remote, repo, "origin" ), "Unable to lookup remote", NULL);
check_lg2(git_push_options_init(&options, GIT_PUSH_OPTIONS_VERSION ), "Error initializing push", NULL);
check_lg2(git_remote_push(remote, &refspecs, &options), "Error pushing", NULL);
printf("pushed\n");
return 0;
}
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