Skip to content

Commit c796914

Browse files
authored
Modify filter query parameter (#1761)
1 parent 1d825a3 commit c796914

File tree

1 file changed

+84
-24
lines changed

1 file changed

+84
-24
lines changed

src/code/V2ServerAPICalls.cs

Lines changed: 84 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ public override FindResults FindName(string packageName, bool includePrerelease,
355355
filterBuilder.AddCriterion($"Id eq '{packageName}'");
356356
}
357357

358-
filterBuilder.AddCriterion(includePrerelease ? "IsAbsoluteLatestVersion" : "IsLatestVersion");
358+
filterBuilder.AddCriterion(includePrerelease ? "IsAbsoluteLatestVersion eq true" : "IsLatestVersion eq true");
359359
if (type != ResourceType.None) {
360360
filterBuilder.AddCriterion(GetTypeFilterForRequest(type));
361361
}
@@ -424,7 +424,7 @@ public override FindResults FindNameWithTag(string packageName, string[] tags, b
424424
filterBuilder.AddCriterion($"Id eq '{packageName}'");
425425
}
426426

427-
filterBuilder.AddCriterion(includePrerelease ? "IsAbsoluteLatestVersion" : "IsLatestVersion");
427+
filterBuilder.AddCriterion(includePrerelease ? "IsAbsoluteLatestVersion eq true" : "IsLatestVersion eq true");
428428
if (type != ResourceType.None) {
429429
filterBuilder.AddCriterion(GetTypeFilterForRequest(type));
430430
}
@@ -915,14 +915,26 @@ private string FindAllFromTypeEndPoint(bool includePrerelease, bool isSearchingM
915915
// JFrog/Artifactory requires an empty search term to enumerate all packages in the feed
916916
if (_isJFrogRepo) {
917917
queryBuilder.SearchTerm = "''";
918-
}
919918

920-
if (includePrerelease) {
921-
queryBuilder.AdditionalParameters["includePrerelease"] = "true";
922-
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
923-
} else {
924-
filterBuilder.AddCriterion("IsLatestVersion");
919+
if (includePrerelease) {
920+
queryBuilder.AdditionalParameters["includePrerelease"] = "true";
921+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsAbsoluteLatestVersion correctly
922+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion eq true");
923+
} else {
924+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsLatestVersion correctly
925+
filterBuilder.AddCriterion("IsLatestVersion eq true");
926+
}
925927
}
928+
else {
929+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
930+
if (includePrerelease) {
931+
queryBuilder.AdditionalParameters["includePrerelease"] = "true";
932+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
933+
} else {
934+
filterBuilder.AddCriterion("IsLatestVersion");
935+
}
936+
}
937+
926938
var requestUrlV2 = $"{Repository.Uri}{typeEndpoint}/Search()?{queryBuilder.BuildQueryString()}";
927939
return HttpRequestCall(requestUrlV2, out errRecord);
928940
}
@@ -952,16 +964,24 @@ private string FindTagFromEndpoint(string[] tags, bool includePrerelease, bool i
952964
queryBuilder.AdditionalParameters["$orderby"] = "Id desc";
953965
}
954966

955-
// JFrog/Artifactory requires an empty search term to enumerate all packages in the feed
956-
if (_isJFrogRepo) {
957-
queryBuilder.SearchTerm = "''";
958-
}
959-
960967
if (includePrerelease) {
961968
queryBuilder.AdditionalParameters["includePrerelease"] = "true";
962-
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
969+
if (_isJFrogRepo) {
970+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsAbsoluteLatestVersion correctly
971+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion eq true");
972+
}
973+
else {
974+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
975+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
976+
}
963977
} else {
964-
filterBuilder.AddCriterion("IsLatestVersion");
978+
if (_isJFrogRepo) {
979+
filterBuilder.AddCriterion("IsLatestVersion eq true");
980+
}
981+
else {
982+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
983+
filterBuilder.AddCriterion("IsLatestVersion");
984+
}
965985
}
966986

967987
filterBuilder.AddCriterion($"substringof('PS{(isSearchingModule ? "Module" : "Script")}', Tags) eq true");
@@ -996,12 +1016,25 @@ private string FindCommandOrDscResource(string[] tags, bool includePrerelease, b
9961016

9971017
if (includePrerelease) {
9981018
queryBuilder.AdditionalParameters["includePrerelease"] = "true";
999-
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
1019+
if (_isJFrogRepo) {
1020+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsAbsoluteLatestVersion correctly
1021+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion eq true");
1022+
}
1023+
else {
1024+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
1025+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
1026+
}
10001027
} else {
1001-
filterBuilder.AddCriterion("IsLatestVersion");
1028+
if (_isJFrogRepo) {
1029+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsLatestVersion correctly
1030+
filterBuilder.AddCriterion("IsLatestVersion eq true");
1031+
}
1032+
else {
1033+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
1034+
filterBuilder.AddCriterion("IsLatestVersion");
1035+
}
10021036
}
10031037

1004-
10051038
// can only find from Modules endpoint
10061039
var tagPrefix = isSearchingForCommands ? "PSCommand_" : "PSDscResource_";
10071040

@@ -1038,12 +1071,25 @@ private string FindNameGlobbing(string packageName, ResourceType type, bool incl
10381071

10391072
if (includePrerelease) {
10401073
queryBuilder.AdditionalParameters["includePrerelease"] = "true";
1041-
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
1074+
if (_isJFrogRepo) {
1075+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsAbsoluteLatestVersion correctly
1076+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion eq true");
1077+
}
1078+
else {
1079+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
1080+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
1081+
}
10421082
} else {
1043-
filterBuilder.AddCriterion("IsLatestVersion");
1083+
if (_isJFrogRepo) {
1084+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsLatestVersion correctly
1085+
filterBuilder.AddCriterion("IsLatestVersion eq true");
1086+
}
1087+
else {
1088+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
1089+
filterBuilder.AddCriterion("IsLatestVersion");
1090+
}
10441091
}
10451092

1046-
10471093
var names = packageName.Split(new char[] {'*'}, StringSplitOptions.RemoveEmptyEntries);
10481094

10491095
if (names.Length == 0)
@@ -1131,14 +1177,28 @@ private string FindNameGlobbingWithTag(string packageName, string[] tags, Resour
11311177
queryBuilder.AdditionalParameters["$orderby"] = "Id desc";
11321178
}
11331179

1180+
// JFrog/Artifactory requires an empty search term to enumerate all packages in the feed
11341181
if (includePrerelease) {
11351182
queryBuilder.AdditionalParameters["includePrerelease"] = "true";
1136-
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
1183+
if (_isJFrogRepo) {
1184+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsAbsoluteLatestVersion correctly
1185+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion eq true");
1186+
}
1187+
else {
1188+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
1189+
filterBuilder.AddCriterion("IsAbsoluteLatestVersion");
1190+
}
11371191
} else {
1138-
filterBuilder.AddCriterion("IsLatestVersion");
1192+
if (_isJFrogRepo) {
1193+
// note: we add 'eq true' because some PMPs (currently we know of JFrog, but others may do this too) will proxy the query unedited to the upstream remote and if that's PSGallery, it doesn't handle IsLatestVersion correctly
1194+
filterBuilder.AddCriterion("IsLatestVersion eq true");
1195+
}
1196+
else {
1197+
// For ADO, 'IsLatestVersion eq true' and 'IsAbsoluteLatestVersion eq true' in the filter create a bad request error, so we use 'IsLatestVersion' or 'IsAbsoluteLatestVersion' only
1198+
filterBuilder.AddCriterion("IsLatestVersion");
1199+
}
11391200
}
11401201

1141-
11421202
var names = packageName.Split(new char[] {'*'}, StringSplitOptions.RemoveEmptyEntries);
11431203

11441204
if (!_isPSGalleryRepo)

0 commit comments

Comments
 (0)