[ 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&mmit...]</param> > <param>org.netbeans.modules.git.ui.commit.CommitAction</param> > <param>Co&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