7
7
8
8
import com .google .common .collect .Sets ;
9
9
import com .intellij .openapi .util .Pair ;
10
+ import com .magento .idea .magento2uct .packages .SupportedVersion ;
11
+
12
+ import java .util .ArrayList ;
13
+ import java .util .Comparator ;
10
14
import java .util .HashMap ;
15
+ import java .util .LinkedList ;
11
16
import java .util .List ;
12
17
import java .util .Map ;
13
18
import java .util .Set ;
@@ -68,12 +73,26 @@ public static Pair<Map<String, Boolean>, Map<String, String>> unionVersionDataWi
68
73
final boolean shouldKeepNew
69
74
) {
70
75
final Map <String , Boolean > union = new HashMap <>();
71
- final Map <String , Boolean > removedUnion = new HashMap <>();
76
+ Map <String , Boolean > removedUnion = new HashMap <>();
72
77
final Map <String , String > changelog = new HashMap <>();
78
+ final List <String > versions = new LinkedList <>(versioningData .keySet ());
79
+
80
+ versions .sort ((key1 , key2 ) -> {
81
+ final SupportedVersion version1 = SupportedVersion .getVersion (key1 );
82
+ final SupportedVersion version2 = SupportedVersion .getVersion (key2 );
83
+
84
+ if (version1 == null || version2 == null ) {
85
+ return 0 ;
86
+ }
87
+
88
+ return version1 .compareTo (version2 );
89
+ });
90
+
91
+ for (final String version : versions ) {
92
+ final Map <String , Boolean > vData = versioningData .get (version );
73
93
74
- for (final Map .Entry <String , Map <String , Boolean >> vData : versioningData .entrySet ()) {
75
94
final Set <Map .Entry <String , Boolean >> removedSet = Sets .filter (
76
- vData .getValue (). entrySet (),
95
+ vData .entrySet (),
77
96
entry -> !entry .getValue ()
78
97
);
79
98
final Map <String , Boolean > removedData = removedSet .stream ().collect (
@@ -85,7 +104,7 @@ public static Pair<Map<String, Boolean>, Map<String, String>> unionVersionDataWi
85
104
removedUnion .putAll (removedData );
86
105
87
106
final Sets .SetView <Map .Entry <String , Boolean >> newDataSet = Sets .difference (
88
- vData .getValue (). entrySet (),
107
+ vData .entrySet (),
89
108
removedSet
90
109
);
91
110
final Map <String , Boolean > newData = newDataSet .stream ().collect (Collectors .toMap (
@@ -94,11 +113,27 @@ public static Pair<Map<String, Boolean>, Map<String, String>> unionVersionDataWi
94
113
));
95
114
union .putAll (newData );
96
115
97
- if (!excludeFromChangelog .contains (vData .getKey ())) {
116
+ final Sets .SetView <Map .Entry <String , Boolean >> returnedSet = Sets .intersection (
117
+ newData .entrySet (),
118
+ removedUnion .entrySet ()
119
+ );
120
+
121
+ if (!returnedSet .isEmpty ()) {
122
+ final Sets .SetView <Map .Entry <String , Boolean >> updatedRemovedUnionSet =
123
+ Sets .difference (removedUnion .entrySet (), returnedSet );
124
+ removedUnion = new HashMap <>(updatedRemovedUnionSet .stream ().collect (
125
+ Collectors .toMap (
126
+ Map .Entry ::getKey ,
127
+ Map .Entry ::getValue
128
+ )
129
+ ));
130
+ }
131
+
132
+ if (!excludeFromChangelog .contains (version )) {
98
133
if (shouldKeepNew ) {
99
- newData .forEach ((key , value ) -> changelog .put (key , vData . getKey () ));
134
+ newData .forEach ((key , value ) -> changelog .put (key , version ));
100
135
} else {
101
- removedData .forEach ((key , value ) -> changelog .put (key , vData . getKey () ));
136
+ removedData .forEach ((key , value ) -> changelog .put (key , version ));
102
137
}
103
138
}
104
139
}
0 commit comments