[ 
https://issues.apache.org/jira/browse/NETBEANS-3972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17084891#comment-17084891
 ] 

Kevin Andrews commented on NETBEANS-3972:
-----------------------------------------

I'd suggest we need to implement:

org.netbeans.libs.git.jgit.commands.CommitCommand.java
 * detection and setting of `commit.setSign(repo.getConfig().commit.gpgsign);` 
when the current repo instance has a config setup of commit.gpgsign
 * commit.setSigningKey() should work with the public hash as the following 
comment was left on the end of the jgit gpg implementation task:

{code:java}
The changes that just went in allow signing commits in JGit. BouncyCastle will 
be used for signing. Signing will lookup GPG keys in the usual locations (eg., 
~/.gnupg/pubring.kbx). Support for 'user.signingkey' is included. Thus, if the 
config value is set it will be used for looking up an appropriate key. If it's 
not set, the committers email address will be used to find a suitable key.{code}

 * ideally being able to set this value on a per-repo bases should be good 
enough in the repo git config, i can't personally see a usecase for signing 
different commits in the same repo with different keys (however this could be 
handy for others?)
 * If the key is password protected (and gpg-agent isn't supported by 
bouncycastleGPG ) then we need to pass a credentialprovider to 
commit.setCredentialsProvider - this bit i'm stuck on and could do with some 
guidance before I can raise a pull request (java isn't my strong point)

> Unable to git commit changes with GPG signing
> ---------------------------------------------
>
>                 Key: NETBEANS-3972
>                 URL: https://issues.apache.org/jira/browse/NETBEANS-3972
>             Project: NetBeans
>          Issue Type: Bug
>          Components: versioncontrol - Git
>    Affects Versions: 12.0, 11.3
>            Reporter: Kevin Andrews
>            Priority: Minor
>
> After setting up git GPG key signing on the repo config:
> {code:java}
> [user] 
> name = XX
> email =  XX
> signingkey = XXXXXX
> [commit] 
> gpgsign = true{code}
> I can commit in a terminal and commits are signed, however through NetBeans I 
> get the following error after entering a commit message and clicking commit:
> {code:java}
> <record>
>   <date>2020-03-06T21:35:15</date>
>   <millis>1583530515293</millis>
>   <sequence>21894</sequence>
>   <logger>org.netbeans.ui.focus</logger>
>   <level>500</level>
>   <thread>138</thread>
>   <message>LOG_WINDOW_ACTIVATED</message>
>   <key>LOG_WINDOW_ACTIVATED</key>
>   <catalog>org.netbeans.core.ui.warmup.Bundle</catalog>
>   <param>25</param>
> </record>
> <record>
>   <date>2020-03-06T21:35:17</date>
>   <millis>1583530517740</millis>
>   <sequence>21895</sequence>
>   <logger>org.netbeans.ui.actions</logger>
>   <level>400</level>
>   <thread>22</thread>
>   <message>UI_ACTION_BUTTON_PRESS</message>
>   <key>UI_ACTION_BUTTON_PRESS</key>
>   <catalog>org.openide.awt.Bundle</catalog>
>   <param>javax.swing.JMenuItem[Commit...]</param>
>   <param>javax.swing.JMenuItem</param>
>   
> <param>org.netbeans.modules.versioning.util.SystemActionBridge[Commit...]</param>
>   <param>org.netbeans.modules.versioning.util.SystemActionBridge</param>
>   <param>Commit...</param>
> </record>
> <record>
>   <date>2020-03-06T21:35:17</date>
>   <millis>1583530517740</millis>
>   <sequence>21896</sequence>
>   <logger>org.netbeans.ui.SystemActionBridge</logger>
>   <level>400</level>
>   <thread>22</thread>
>   <message>UI_ACTION_BUTTON_PRESS</message>
>   <key>UI_ACTION_BUTTON_PRESS</key>
>   <catalog>org.openide.awt.Bundle</catalog>
>   <param></param>
>   <param></param>
>   
> <param>org.netbeans.modules.git.ui.commit.CommitAction[Co&amp;mmit...]</param>
>   <param>org.netbeans.modules.git.ui.commit.CommitAction</param>
>   <param>Co&amp;mmit...</param>
> </record>
> <record>
>   <date>2020-03-06T21:35:19</date>
>   <millis>1583530519266</millis>
>   <sequence>21898</sequence>
>   <logger>org.netbeans.ui.vcs</logger>
>   <level>800</level>
>   <thread>138</thread>
>   <message>USG_VCS_CMD</message>
>   <key>USG_VCS_CMD</key>
>   <catalog>org.netbeans.modules.versioning.util.Bundle</catalog>
>   <param>GIT</param>
>   <param>11</param>
>   <param>0</param>
>   <param>commit</param>
>   <param>INTERNAL</param>
> </record>
> <record>
>   <date>2020-03-06T21:35:19</date>
>   <millis>1583530519266</millis>
>   <sequence>21899</sequence>
>   <logger>org.netbeans.modules.git</logger>
>   <level>800</level>
>   <thread>138</thread>
>   <message>org.eclipse.jgit.api.errors.JGitInternalException: missing 
> credentials provider</message>
>   <exception>
>     <message>org.netbeans.libs.git.GitException: 
> org.eclipse.jgit.api.errors.JGitInternalException: missing credentials 
> provider</message>
>     <frame>
>       <class>org.netbeans.libs.git.jgit.commands.CommitCommand</class>
>       <method>run</method>
>       <line>153</line>
>       <file>${netBeansDir}modules/org-netbeans-libs-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.libs.git.jgit.commands.GitCommand$1</class>
>       <method>run</method>
>       <line>57</line>
>       <file>${netBeansDir}modules/org-netbeans-libs-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.libs.git.jgit.commands.GitCommand$1</class>
>       <method>run</method>
>       <line>54</line>
>       <file>${netBeansDir}modules/org-netbeans-libs-git.jar</file>
>     </frame>
>     <frame>
>       <class>java.security.AccessController</class>
>       <method>doPrivileged</method>
>       <file>jrt:/java.base/java/security/AccessController.class</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.libs.git.jgit.commands.GitCommand</class>
>       <method>execute</method>
>       <line>54</line>
>       <file>${netBeansDir}modules/org-netbeans-libs-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.libs.git.GitClient</class>
>       <method>commit</method>
>       <line>480</line>
>       <file>${netBeansDir}modules/org-netbeans-libs-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitClient$9</class>
>       <method>call</method>
>       <line>297</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitClient$9</class>
>       <method>call</method>
>       <line>293</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       
> <class>org.netbeans.modules.git.client.GitClient$CommandInvoker$1$1</class>
>       <method>call</method>
>       <line>933</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       
> <class>org.netbeans.modules.git.client.GitClient$CommandInvoker$1</class>
>       <method>call</method>
>       <line>956</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.FilesystemInterceptor</class>
>       <method>runWithoutExternalEvents</method>
>       <line>473</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.Git</class>
>       <method>runWithoutExternalEvents</method>
>       <line>259</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitClient$CommandInvoker</class>
>       <method>runMethodIntern</method>
>       <line>966</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitClient$CommandInvoker</class>
>       <method>runMethod</method>
>       <line>893</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitClient$CommandInvoker</class>
>       <method>access$300</method>
>       <line>869</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitClient</class>
>       <method>commit</method>
>       <line>293</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       
> <class>org.netbeans.modules.git.ui.commit.CommitAction$CommitProgressSupport</class>
>       <method>commit</method>
>       <line>342</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       
> <class>org.netbeans.modules.git.ui.commit.CommitAction$CommitProgressSupport</class>
>       <method>perform</method>
>       <line>233</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitProgressSupport</class>
>       <method>performIntern</method>
>       <line>92</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.git.client.GitProgressSupport</class>
>       <method>run</method>
>       <line>85</line>
>       <file>${netBeansDir}modules/org-netbeans-modules-git.jar</file>
>     </frame>
>     <frame>
>       <class>org.openide.util.RequestProcessor$Task</class>
>       <method>run</method>
>       <line>1418</line>
>       <file>${netbeans.home}lib/org-openide-util.jar</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.modules.openide.util.GlobalLookup</class>
>       <method>execute</method>
>       <line>45</line>
>       <file>${netbeans.home}lib/org-openide-util-lookup.jar</file>
>     </frame>
>     <frame>
>       <class>org.openide.util.lookup.Lookups</class>
>       <method>executeWith</method>
>       <line>278</line>
>       <file>${netbeans.home}lib/org-openide-util-lookup.jar</file>
>     </frame>
>     <frame>
>       <class>org.openide.util.RequestProcessor$Processor</class>
>       <method>run</method>
>       <line>2033</line>
>       <file>${netbeans.home}lib/org-openide-util.jar</file>
>     </frame>
>   </exception>
>   <exception>
>    <message>org.eclipse.jgit.api.errors.JGitInternalException: missing 
> credentials provider</message>
>     <frame>
>       <class>org.eclipse.jgit.lib.internal.BouncyCastleGpgSigner</class>
>       <method>sign</method>
>       <line>162</line>
>       
> <file>bundleresource://139.fwk454866309/org/eclipse/jgit/lib/internal/BouncyCastleGpgSigner.class</file>
>     </frame>
>     <frame>
>       <class>org.eclipse.jgit.api.CommitCommand</class>
>       <method>call</method>
>       <line>271</line>
>       
> <file>bundleresource://139.fwk454866309/org/eclipse/jgit/api/CommitCommand.class</file>
>     </frame>
>     <frame>
>       <class>org.netbeans.libs.git.jgit.commands.CommitCommand</class>
>       <method>run</method>
>       <line>138</line>
>       <file>${netBeansDir}modules/org-netbeans-libs-git.jar</file>
>     </frame>
>    <more>23</more>
>   </exception>
>   <exception>
>    <message>org.bouncycastle.openpgp.PGPException: missing credentials 
> provider</message>
>     <frame>
>       
> <class>org.eclipse.jgit.lib.internal.BouncyCastleGpgKeyPassphrasePrompt</class>
>       <method>getPassphrase</method>
>       <line>120</line>
>       
> <file>bundleresource://139.fwk454866309/org/eclipse/jgit/lib/internal/BouncyCastleGpgKeyPassphrasePrompt.class</file>
>     </frame>
>     <frame>
>       <class>org.eclipse.jgit.lib.internal.BouncyCastleGpgKeyLocator</class>
>       <method>findSecretKeyForKeyBoxPublicKey</method>
>       <line>395</line>
>       
> <file>bundleresource://139.fwk454866309/org/eclipse/jgit/lib/internal/BouncyCastleGpgKeyLocator.class</file>
>     </frame>
>     <frame>
>       <class>org.eclipse.jgit.lib.internal.BouncyCastleGpgKeyLocator</class>
>       <method>findSecretKey</method>
>       <line>292</line>
>       
> <file>bundleresource://139.fwk454866309/org/eclipse/jgit/lib/internal/BouncyCastleGpgKeyLocator.class</file>
>     </frame>
>     <frame>
>       <class>org.eclipse.jgit.lib.internal.BouncyCastleGpgSigner</class>
>       <method>locateSigningKey</method>
>       <line>124</line>
>       
> <file>bundleresource://139.fwk454866309/org/eclipse/jgit/lib/internal/BouncyCastleGpgSigner.class</file>
>     </frame>
>     <frame>
>       <class>org.eclipse.jgit.lib.internal.BouncyCastleGpgSigner</class>
>       <method>sign</method>
>       <line>133</line>
>       
> <file>bundleresource://139.fwk454866309/org/eclipse/jgit/lib/internal/BouncyCastleGpgSigner.class</file>
>     </frame>
>    <more>25</more>
>   </exception>
> </record>
> ==> .netbeans/11.3/var/log/messages.log <==
> WARNING [org.netbeans.modules.progress.spi.InternalHandle]: Cannot call 
> progress on a task that was never started at 
> org.netbeans.modules.git.client.GitProgressSupport.setProgressMessage(GitProgressSupport.java:258)
> INFO [org.netbeans.modules.git]: 
> org.eclipse.jgit.api.errors.JGitInternalException: missing credentials 
> provider
> org.bouncycastle.openpgp.PGPException: missing credentials provider
>       at 
> org.eclipse.jgit.lib.internal.BouncyCastleGpgKeyPassphrasePrompt.getPassphrase(BouncyCastleGpgKeyPassphrasePrompt.java:120)
>       at 
> org.eclipse.jgit.lib.internal.BouncyCastleGpgKeyLocator.findSecretKeyForKeyBoxPublicKey(BouncyCastleGpgKeyLocator.java:395)
>       at 
> org.eclipse.jgit.lib.internal.BouncyCastleGpgKeyLocator.findSecretKey(BouncyCastleGpgKeyLocator.java:292)
>       at 
> org.eclipse.jgit.lib.internal.BouncyCastleGpgSigner.locateSigningKey(BouncyCastleGpgSigner.java:124)
>       at 
> org.eclipse.jgit.lib.internal.BouncyCastleGpgSigner.sign(BouncyCastleGpgSigner.java:133)
> Caused: org.eclipse.jgit.api.errors.JGitInternalException: missing 
> credentials provider
>       at 
> org.eclipse.jgit.lib.internal.BouncyCastleGpgSigner.sign(BouncyCastleGpgSigner.java:162)
>       at org.eclipse.jgit.api.CommitCommand.call(CommitCommand.java:271)
>       at 
> org.netbeans.libs.git.jgit.commands.CommitCommand.run(CommitCommand.java:138)
> Caused: org.netbeans.libs.git.GitException
>       at 
> org.netbeans.libs.git.jgit.commands.CommitCommand.run(CommitCommand.java:153)
>       at 
> org.netbeans.libs.git.jgit.commands.GitCommand$1.run(GitCommand.java:57)
>       at 
> org.netbeans.libs.git.jgit.commands.GitCommand$1.run(GitCommand.java:54)
>       at java.base/java.security.AccessController.doPrivileged(Native Method)
>       at 
> org.netbeans.libs.git.jgit.commands.GitCommand.execute(GitCommand.java:54)
>       at org.netbeans.libs.git.GitClient.commit(GitClient.java:480)
>       at org.netbeans.modules.git.client.GitClient$9.call(GitClient.java:297)
>       at org.netbeans.modules.git.client.GitClient$9.call(GitClient.java:293)
>       at 
> org.netbeans.modules.git.client.GitClient$CommandInvoker$1$1.call(GitClient.java:933)
>       at 
> org.netbeans.modules.git.client.GitClient$CommandInvoker$1.call(GitClient.java:956)
>       at 
> org.netbeans.modules.git.FilesystemInterceptor.runWithoutExternalEvents(FilesystemInterceptor.java:473)
>       at org.netbeans.modules.git.Git.runWithoutExternalEvents(Git.java:259)
>       at 
> org.netbeans.modules.git.client.GitClient$CommandInvoker.runMethodIntern(GitClient.java:966)
>       at 
> org.netbeans.modules.git.client.GitClient$CommandInvoker.runMethod(GitClient.java:893)
>       at 
> org.netbeans.modules.git.client.GitClient$CommandInvoker.access$300(GitClient.java:869)
>       at org.netbeans.modules.git.client.GitClient.commit(GitClient.java:293)
>       at 
> org.netbeans.modules.git.ui.commit.CommitAction$CommitProgressSupport.commit(CommitAction.java:342)
> [catch] at 
> org.netbeans.modules.git.ui.commit.CommitAction$CommitProgressSupport.perform(CommitAction.java:233)
>       at 
> org.netbeans.modules.git.client.GitProgressSupport.performIntern(GitProgressSupport.java:92)
>       at 
> org.netbeans.modules.git.client.GitProgressSupport.run(GitProgressSupport.java:85)
>       at 
> org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1418)
>       at 
> org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
>       at org.openide.util.lookup.Lookups.executeWith(Lookups.java:278)
>       at 
> org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033)
> {code}
> Happy to help test, just let me know what to do.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to