X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=examples%2Fnetwork%2Fls-remote.c;h=b22ac47a0f52394c361210621a1cd7fa3c0251ed;hb=255836ddac05418f6bb2d68d27f5ff290669e2a9;hp=77a9f215d10a37d439dd9673a31dce67856a32dc;hpb=2401262778fa50cea30d1988cec45dcb82b50712;p=libgit2.git diff --git a/examples/network/ls-remote.c b/examples/network/ls-remote.c index 77a9f215d..b22ac47a0 100644 --- a/examples/network/ls-remote.c +++ b/examples/network/ls-remote.c @@ -4,83 +4,39 @@ #include #include "common.h" -static void show_refs(git_headarray *refs) +static int show_ref__cb(git_remote_head *head, void *payload) { - int i; - git_remote_head *head; + char oid[GIT_OID_HEXSZ + 1] = {0}; -// Take each head that the remote has advertised, store the string -// representation of the OID in a buffer and print it - - for(i = 0; i < refs->len; ++i){ - char oid[GIT_OID_HEXSZ + 1] = {0}; - head = refs->heads[i]; - git_oid_fmt(oid, &head->oid); - printf("%s\t%s\n", oid, head->name); - } -} - -int use_unnamed(git_repository *repo, const char *url) -{ - git_remote *remote = NULL; - git_headarray refs; - int error; - - // Create an instance of a remote from the URL. The transport to use - // is detected from the URL - error = git_remote_new(&remote, repo, url); - if (error < GIT_SUCCESS) - goto cleanup; - - // When connecting, the underlying code needs to know wether we - // want to push or fetch - error = git_remote_connect(remote, GIT_DIR_FETCH); - if (error < GIT_SUCCESS) - goto cleanup; - - // With git_remote_ls we can retrieve the advertised heads - error = git_remote_ls(remote, &refs); - if (error < GIT_SUCCESS) - goto cleanup; - - show_refs(&refs); - -cleanup: - git_remote_free(remote); - - return error; + (void)payload; + git_oid_fmt(oid, &head->oid); + printf("%s\t%s\n", oid, head->name); + return 0; } -int use_remote(git_repository *repo, char *name) +static int use_remote(git_repository *repo, char *name) { git_remote *remote = NULL; - git_config *cfg = NULL; - git_headarray refs; int error; - // Load the local configuration for the repository - error = git_repository_config(&cfg, repo, NULL, NULL); - if (error < GIT_SUCCESS) - return error; - // Find the remote by name - error = git_remote_get(&remote, cfg, name); - if (error < GIT_SUCCESS) - goto cleanup; + error = git_remote_load(&remote, repo, name); + if (error < 0) { + error = git_remote_create_inmemory(&remote, repo, NULL, name); + if (error < 0) + goto cleanup; + } - error = git_remote_connect(remote, GIT_DIR_FETCH); - if (error < GIT_SUCCESS) - goto cleanup; + git_remote_set_cred_acquire_cb(remote, &cred_acquire_cb, NULL); - error = git_remote_ls(remote, &refs); - if (error < GIT_SUCCESS) + error = git_remote_connect(remote, GIT_DIRECTION_FETCH); + if (error < 0) goto cleanup; - show_refs(&refs); + error = git_remote_ls(remote, &show_ref__cb, NULL); cleanup: git_remote_free(remote); - return error; } @@ -89,16 +45,14 @@ cleanup: int ls_remote(git_repository *repo, int argc, char **argv) { - git_headarray heads; - git_remote_head *head; - int error, i; + int error; - /* If there's a ':' in the name, assume it's an URL */ - if (strchr(argv[1], ':') != NULL) { - error = use_unnamed(repo, argv[1]); - } else { - error = use_remote(repo, argv[1]); + if (argc < 2) { + fprintf(stderr, "usage: %s ls-remote \n", argv[-1]); + return EXIT_FAILURE; } + error = use_remote(repo, argv[1]); + return error; }