mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-02 10:01:12 +00:00
Adding credentials callback to ls-remote and fetch too.
This commit is contained in:
parent
d6d523486c
commit
255836ddac
@ -11,7 +11,8 @@ OBJECTS = \
|
|||||||
ls-remote.o \
|
ls-remote.o \
|
||||||
fetch.o \
|
fetch.o \
|
||||||
clone.o \
|
clone.o \
|
||||||
index-pack.o
|
index-pack.o \
|
||||||
|
common.o
|
||||||
|
|
||||||
all: $(OBJECTS)
|
all: $(OBJECTS)
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) -o git2 $(OBJECTS) $(LIBRARIES)
|
$(CC) $(CFLAGS) $(LDFLAGS) -o git2 $(OBJECTS) $(LIBRARIES)
|
||||||
|
@ -9,19 +9,6 @@
|
|||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Shamelessly borrowed from http://stackoverflow.com/questions/3417837/
|
|
||||||
* with permission of the original author, Martin Pool.
|
|
||||||
* http://sourcefrog.net/weblog/software/languages/C/unused.html
|
|
||||||
*/
|
|
||||||
#ifdef UNUSED
|
|
||||||
#elif defined(__GNUC__)
|
|
||||||
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
|
|
||||||
#elif defined(__LCLINT__)
|
|
||||||
# define UNUSED(x) /*@unused@*/ x
|
|
||||||
#else
|
|
||||||
# define UNUSED(x) x
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct progress_data {
|
typedef struct progress_data {
|
||||||
git_transfer_progress fetch_progress;
|
git_transfer_progress fetch_progress;
|
||||||
size_t completed_steps;
|
size_t completed_steps;
|
||||||
@ -63,24 +50,6 @@ static void checkout_progress(const char *path, size_t cur, size_t tot, void *pa
|
|||||||
print_progress(pd);
|
print_progress(pd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cred_acquire(git_cred **out,
|
|
||||||
const char * UNUSED(url),
|
|
||||||
const char * UNUSED(username_from_url),
|
|
||||||
unsigned int UNUSED(allowed_types),
|
|
||||||
void * UNUSED(payload))
|
|
||||||
{
|
|
||||||
char username[128] = {0};
|
|
||||||
char password[128] = {0};
|
|
||||||
|
|
||||||
printf("Username: ");
|
|
||||||
scanf("%s", username);
|
|
||||||
|
|
||||||
/* Yup. Right there on your terminal. Careful where you copy/paste output. */
|
|
||||||
printf("Password: ");
|
|
||||||
scanf("%s", password);
|
|
||||||
|
|
||||||
return git_cred_userpass_plaintext_new(out, username, password);
|
|
||||||
}
|
|
||||||
|
|
||||||
int do_clone(git_repository *repo, int argc, char **argv)
|
int do_clone(git_repository *repo, int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -107,7 +76,7 @@ int do_clone(git_repository *repo, int argc, char **argv)
|
|||||||
clone_opts.checkout_opts = checkout_opts;
|
clone_opts.checkout_opts = checkout_opts;
|
||||||
clone_opts.fetch_progress_cb = &fetch_progress;
|
clone_opts.fetch_progress_cb = &fetch_progress;
|
||||||
clone_opts.fetch_progress_payload = &pd;
|
clone_opts.fetch_progress_payload = &pd;
|
||||||
clone_opts.cred_acquire_cb = cred_acquire;
|
clone_opts.cred_acquire_cb = cred_acquire_cb;
|
||||||
|
|
||||||
// Do the clone
|
// Do the clone
|
||||||
error = git_clone(&cloned_repo, url, path, &clone_opts);
|
error = git_clone(&cloned_repo, url, path, &clone_opts);
|
||||||
|
34
examples/network/common.c
Normal file
34
examples/network/common.c
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#include "common.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* Shamelessly borrowed from http://stackoverflow.com/questions/3417837/
|
||||||
|
* with permission of the original author, Martin Pool.
|
||||||
|
* http://sourcefrog.net/weblog/software/languages/C/unused.html
|
||||||
|
*/
|
||||||
|
#ifdef UNUSED
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
|
||||||
|
#elif defined(__LCLINT__)
|
||||||
|
# define UNUSED(x) /*@unused@*/ x
|
||||||
|
#else
|
||||||
|
# define UNUSED(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int cred_acquire_cb(git_cred **out,
|
||||||
|
const char * UNUSED(url),
|
||||||
|
const char * UNUSED(username_from_url),
|
||||||
|
unsigned int UNUSED(allowed_types),
|
||||||
|
void * UNUSED(payload))
|
||||||
|
{
|
||||||
|
char username[128] = {0};
|
||||||
|
char password[128] = {0};
|
||||||
|
|
||||||
|
printf("Username: ");
|
||||||
|
scanf("%s", username);
|
||||||
|
|
||||||
|
/* Yup. Right there on your terminal. Careful where you copy/paste output. */
|
||||||
|
printf("Password: ");
|
||||||
|
scanf("%s", password);
|
||||||
|
|
||||||
|
return git_cred_userpass_plaintext_new(out, username, password);
|
||||||
|
}
|
@ -12,6 +12,12 @@ int fetch(git_repository *repo, int argc, char **argv);
|
|||||||
int index_pack(git_repository *repo, int argc, char **argv);
|
int index_pack(git_repository *repo, int argc, char **argv);
|
||||||
int do_clone(git_repository *repo, int argc, char **argv);
|
int do_clone(git_repository *repo, int argc, char **argv);
|
||||||
|
|
||||||
|
int cred_acquire_cb(git_cred **out,
|
||||||
|
const char * url,
|
||||||
|
const char * username_from_url,
|
||||||
|
unsigned int allowed_types,
|
||||||
|
void *payload);
|
||||||
|
|
||||||
#ifndef PRIuZ
|
#ifndef PRIuZ
|
||||||
/* Define the printf format specifer to use for size_t output */
|
/* Define the printf format specifer to use for size_t output */
|
||||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
|
@ -92,6 +92,7 @@ int fetch(git_repository *repo, int argc, char **argv)
|
|||||||
callbacks.update_tips = &update_cb;
|
callbacks.update_tips = &update_cb;
|
||||||
callbacks.progress = &progress_cb;
|
callbacks.progress = &progress_cb;
|
||||||
git_remote_set_callbacks(remote, &callbacks);
|
git_remote_set_callbacks(remote, &callbacks);
|
||||||
|
git_remote_set_cred_acquire_cb(remote, &cred_acquire_cb, NULL);
|
||||||
|
|
||||||
// Set up the information for the background worker thread
|
// Set up the information for the background worker thread
|
||||||
data.remote = remote;
|
data.remote = remote;
|
||||||
|
@ -27,6 +27,7 @@ static int use_remote(git_repository *repo, char *name)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
git_remote_set_cred_acquire_cb(remote, &cred_acquire_cb, NULL);
|
||||||
|
|
||||||
error = git_remote_connect(remote, GIT_DIRECTION_FETCH);
|
error = git_remote_connect(remote, GIT_DIRECTION_FETCH);
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user