ext/rugged/rugged_cred.c in rugged-0.21.0 vs ext/rugged/rugged_cred.c in rugged-0.21.1b0
- old
+ new
@@ -86,22 +86,45 @@
static void rugged_cred_extract_default(git_cred **cred, VALUE rb_credential)
{
rugged_exception_check(git_cred_default_new(cred));
}
+static void rugged_cred_extract_username(git_cred **cred, VALUE rb_credential)
+{
+ VALUE rb_username = rb_iv_get(rb_credential, "@username");
+ Check_Type(rb_username, T_STRING);
+
+ rugged_exception_check(git_cred_username_new(cred, StringValueCStr(rb_username)));
+}
+
void rugged_cred_extract(git_cred **cred, int allowed_types, VALUE rb_credential)
{
if (rb_obj_is_kind_of(rb_credential, rb_cRuggedCredUserPassword)) {
+ if (allowed_types & GIT_CREDTYPE_USERNAME) {
+ rugged_cred_extract_username(cred, rb_credential);
+ return;
+ }
+
if (!(allowed_types & GIT_CREDTYPE_USERPASS_PLAINTEXT))
rb_raise(rb_eArgError, "Invalid credential type");
rugged_cred_extract_userpass(cred, rb_credential);
} else if (rb_obj_is_kind_of(rb_credential, rb_cRuggedCredSshKey)) {
+ if (allowed_types & GIT_CREDTYPE_USERNAME) {
+ rugged_cred_extract_username(cred, rb_credential);
+ return;
+ }
+
if (!(allowed_types & GIT_CREDTYPE_SSH_KEY))
rb_raise(rb_eArgError, "Invalid credential type");
rugged_cred_extract_ssh_key(cred, rb_credential);
} else if (rb_obj_is_kind_of(rb_credential, rb_cRuggedCredSshKeyFromAgent)) {
+ if (allowed_types & GIT_CREDTYPE_USERNAME) {
+ rugged_cred_extract_username(cred, rb_credential);
+ return;
+ }
+
if (!(allowed_types & GIT_CREDTYPE_SSH_KEY))
rb_raise(rb_eArgError, "Invalid credential type");
rugged_credential_extract_ssh_key_from_agent(cred, rb_credential);
} else if (rb_obj_is_kind_of(rb_credential, rb_cRuggedCredDefault)) {