Dear Maintainer,
PLM tracks student progress in an embedded jgit repository (plm.core.model.
tracking.GitSpy / GitUtils). Each run creates a commit.
If the user's git configuration enables commit signing (commit.gpgsign = true,
common on developer machines), jgit tries to sign these internal commits and
fails, dumping a stack trace to the student console on every run, in every
language mode (Java, Scala, ...):
org.eclipse.jgit.api.errors.ServiceUnavailableException: Signing service is
not available
at org.eclipse.jgit.api.CommitCommand.sign(CommitCommand.java:329)
at org.eclipse.jgit.api.CommitCommand.call(CommitCommand.java:283)
at plm.core.model.tracking.GitUtils.commit(...)
at plm.core.model.tracking.GitSpy.executed(...)
at plm.core.model.Game.fireProgressSpy(...)
at plm.core.model.LessonRunner.run(...)
To reproduce:
1. git config --global commit.gpgsign true (or have it set already)
2. Launch plm, run any exercise -> the stack trace above is printed.
Root cause: PLM's CommitCommand inherits the ambient commit.gpgsign setting.
Its internal bookkeeping commits should never be signed.
Fix: call setSign(false) on each CommitCommand in GitUtils (three call sites:
the empty initial commit, the manual-merge commit, and the per-run tracking
commit). A patch doing exactly this is prepared and will be forwarded upstream
(https://github.com/oster/PLM).
Thanks,
Juan