git2_credentials icon indicating copy to clipboard operation
git2_credentials copied to clipboard

Issue running example code and using in project

Open scizzorz opened this issue 5 years ago • 7 comments

Hello!

I was really struggling to understand the git2 callbacks for authentication and how I can make them behave the same way the standard git binary behaves out of the box, so this library seems extremely promising to me. Unfortunately, I've cloned the repo and tried to run the example, but it doesn't seem to work.

» cargo run --example clone -- --nocapture
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/clone --nocapture`
Error: Error { code: -1, klass: 12, message: "unsupported URL protocol" }

Modifying the git2 dependency to not disable the default features yields a different error message:

diff --git a/Cargo.toml b/Cargo.toml
index c852..7254 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@ exclude = ["/.github", ".dependabot/", "/docs/**", "/scripts", ".gitignore", "/t

 [dependencies]
 dirs = "2.0"
-git2 = { version = "^0.13", default-features = false }
+git2 = { version = "^0.13"}
 dialoguer = { version = "0.6.2", optional = true }
» cargo run --example clone -- --nocapture
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/clone --nocapture`
Error: Error { code: -1, klass: 23, message: "error authenticating: no auth sock variable" }

This same error pops up when I try to use this library in the project I'd actually like to use it in, so it stretches beyond just the example not working. I see in #9 and in https://github.com/davidB/git2_credentials/blob/master/src/ssh_config.rs#L9 that SSH keys should be supported, but I don't know how to enable them.

If there's some gitconfig setting that I need to update, that might be helpful to know, but I would like to know more information about how and why git itself doesn't require that setting to work as I expect.

Thanks!

scizzorz avatar Jun 08 '20 18:06 scizzorz

Thanks for reporting the issue. I removed the default feature from the git2 dependencies to not force them to user, the crate doesn't need the default git2's default feature. But the support of ssh / git scheme is provided as a git2's feature. I fixed the dependencies for examples. You can use the published crate for your project with the git2 dependencies, just not disabled the git2 features ;-). I used this crate into an other project if you want to see an other example: https://github.com/ffizer/ffizer/blob/master/src/git.rs#L57

Sorry for the issue.

davidB avatar Jun 08 '20 19:06 davidB

I forgot the second part of your question: the detection of the ssh config to used doesn't cover all case. What is currently "supported/tested" ?

  • works with ssh-agent / ssh-add (It's what I used with git cli and git2_credentials)
  • store the ssh configuration into a file named $HOME/.ssh/id_rsa or $HOME/.ssh/id_ed25519 and ask passphrase (I don't use it, maybe there is a bug)
  • http authentication

I don't know about "error authenticating: no auth sock variable" but I'm interested to have a solution.

davidB avatar Jun 08 '20 19:06 davidB

What is the output of ?

env | grep SSH_AUTH_SOCK

does the file exist ?

davidB avatar Jun 08 '20 19:06 davidB

I do not have $SSH_AUTH_SOCK defined in my environment. When I set it via:

eval $(ssh-agent)

and re-run my project, it appears to be stuck in an infinite loop. This may be caused by my code rather than a bug in the library, but I haven't looked into debugging it at all.

scizzorz avatar Jun 08 '20 21:06 scizzorz

@scizzorz did you find if the issue on this crate or on your side ?

davidB avatar Oct 06 '20 08:10 davidB

I did not. I ended up copying and pasting code from Cargo and then modifying it to suit my project's needs. Here's my modified code: https://github.com/xtfc/mold/blob/master/src/cargo.rs

scizzorz avatar Oct 06 '20 13:10 scizzorz

Ok, thanks for the link

davidB avatar Oct 06 '20 16:10 davidB