aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/OSGI-INF
Commit message (Collapse)AuthorAgeFilesLines
* ShutdownHook: run on bundle deactivation if in OSGiThomas Wolf2024-03-081-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Running as a JVM shutdown hook is far too late in an OSGi framework; by the time the JVM shuts down, the OSGi framework will normally already have deactivated and unloaded bundles, and thus the JGit cleanup code may try to work with unloaded classes for which there will be no classloader anymore. When JGit is used in an OSGi framework, the cleanups must run on bundle deactivation, not on JVM shut down. Add a declarative OSGi service CleanupService. This is a normal Java class that has no dependencies on any OSGi bundle or interface, but that is declared in the MANIFEST.MF and in an OSGi Service XML as an OSGi immediate component. Set the bundle activation policy to "lazy". (A declarative service is used instead of a bundle activator because the latter would need to implement the OSGi interface BundleActivator, but JGit should not have dependencies on OSGi.) When JGit runs in an OSGi framework, the framework will create an instance of CleanupService through the no-args constructor when (and before) the first class from this bundle is loaded. This instance thus knows that it is operating in OSGi, and will run the ShutdownHook when the bundle is deactivated: bundle deactivation will deactivate the CleanupService instance. When JGit does not run in an OSGi framework, the OSGi service declaration will be ignored, and there will be no already existing CleanupService instance. We create one lazily, which thus knows that it is not operating in OSGi, and which will use a JVM shutdown hook to run the ShutdownHook. This also reverts commit e6d83d61eade6dee223757d149a4df9650752a55. Bug: jgit-36 Change-Id: I9c621b0707453c087f638974312ea1bf8ec30c31 Signed-off-by: Thomas Wolf <twolf@apache.org>
* OSGi: move plugin localization to subdirectoryThomas Wolf2023-09-121-0/+2
OSGi can have its plugin localization at an arbitrary place; there is no need to have it in a top-level plugin.properties file. In non-OSGi environments having the files at the root level may mean that these files clash with each other, or, as in the referenced bug, with some third-party plug-in's plugin.properties, which may not even have anything to do with localization. Move our OSGi localization to a subfolder OSGI-INF/l10n. For OSGi environments, that's just as good, and for non-OSGi environments it avoid clashes with other root level items on the classpath or in a fat JAR. For fragments, use neither plugin.properties (which would clash with the host plug-in's plugin.properties) nor fragment.properties (which might clash with other fragments for the same fragment host bundle). Instead use names "relative" to the host bundle. Bug: 582394 Change-Id: Ifbcd046d912e2cfe86c0f7259c5ca8de599d9aa1 Signed-off-by: Thomas Wolf <twolf@apache.org>