Ben Zahler created JCRVLT-388:
---------------------------------
Summary: Subpackage not installed in defined order
Key: JCRVLT-388
URL: https://issues.apache.org/jira/browse/JCRVLT-388
Project: Jackrabbit FileVault
Issue Type: Bug
Reporter: Ben Zahler
I have a package with subpackages that need to be installed in a specific order.
In my case, one package contains the content and the other package contains
permissions to be installed on top of that content.
My package has the following filter:
<workspaceFilter version="1.0">
<filter
root="/etc/packages/com.axa.ch.aem/aem-apps-sites-content-3.57.2-SNAPSHOT.zip"
/>
<filter
root="/etc/packages/com.axa.ch.aem/aem-permissions-author-3.57.2-SNAPSHOT.zip"
/>
</workspaceFilter>
*Expected*: aem-apps-sites-content is installed first, then
aem-permissions-author
*Actual*: Installation order is not deterministic and not defined by the filter
definition.
I did check the source code and found out that the order is defined from
reading the files in the zip file (using java.util.zip), so this cannot (and
probably should be) changed.
My suggesion is to order the subpages by adding the following method to
Importer.java and calling it from here:
[https://github.com/apache/jackrabbit-filevault/blob/60c66c3cb7fe456c6e1fd6599736afdddec862a4/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java#L472|https://github.com/apache/jackrabbit-filevault/blob/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java#L472]
{color:#808080}private List<String> getOrderedSubPackages(){{color}
List<String> orderedSubPackages = {color:#cc7832}new
{color}LinkedList<>(){color:#cc7832};
{color}{color:#cc7832} if
{color}({color:#cc7832}this{color}.{color:#9876aa}filter {color}==
{color:#cc7832}null {color}||
{color:#cc7832}this{color}.{color:#9876aa}subPackages {color}==
{color:#cc7832}null {color}||
{color:#cc7832}this{color}.{color:#9876aa}subPackages{color}.isEmpty()) {
{color:#cc7832}return {color}orderedSubPackages{color:#cc7832};
{color} }
{color:#cc7832}final {color}List<String> unOrderedSubPackages =
{color:#cc7832}new
{color}ArrayList<>({color:#cc7832}this{color}.{color:#9876aa}subPackages{color}){color:#cc7832};{color}{color:#cc7832}
{color}{color:#cc7832}
{color}{color:#cc7832} for {color}(PathFilterSet filterSet :
{color:#cc7832}this{color}.{color:#9876aa}filter{color}.getFilterSets()) {
{color:#cc7832}for {color}(String subPackage : unOrderedSubPackages) {
{color:#cc7832}if {color}(filterSet.contains(subPackage) &&
!orderedSubPackages.contains(subPackage)) {
orderedSubPackages.add(subPackage){color:#cc7832};
{color} }
}
}
{color:#cc7832}return {color}orderedSubPackages{color:#cc7832};
{color}}
Let me know if you think this makes sense, if yes I'm happy to check out/ build
the code and provide a patch with unit tests.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)