]> source.dussan.org Git - sonarqube.git/commitdiff
Revert "SONAR-19233 Drop deprecated paging response fields"
authorJacek Poreda <jacek.poreda@sonarsource.com>
Wed, 2 Aug 2023 07:03:29 +0000 (09:03 +0200)
committersonartech <sonartech@sonarsource.com>
Wed, 2 Aug 2023 20:03:03 +0000 (20:03 +0000)
This reverts commit 9db233a378f3590359054b908c82d06ae095930b.

27 files changed:
server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/ws/ChangelogActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/rule/ws/SearchActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/usergroups/ws/UsersActionIT.java
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionComponentsIT/no_issue.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/apply_paging_with_one_component.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/default_page_size_is_100.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/empty_result.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/filter_by_leak_period.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/filter_by_leak_period_has_no_effect_on_prs.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/filter_by_main_scope.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/filter_by_main_scope_2.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/filter_by_test_scope.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/no_issue.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/paging.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/result_for_rule_search.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/issue/ws/SearchActionIT/search_by_variants_with_facets.json
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/qualityprofile/ws/ChangelogActionIT/changelog_example.json [new file with mode: 0644]
server/sonar-webserver-webapi/src/it/resources/org/sonar/server/rule/ws/SearchActionIT/paging.json
server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchResponseFormat.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangelogAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java
server/sonar-webserver-webapi/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java
sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRulesLoader.java
sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultActiveRulesLoaderTest.java
sonar-ws/src/main/protobuf/ws-issues.proto
sonar-ws/src/main/protobuf/ws-rules.proto

index d47b9957a4ef1e9b22882a69dc37e56555d55995..7d282d04319ecba8e211c0f79df4b9fce87d50d7 100644 (file)
@@ -80,6 +80,9 @@ public class ChangelogActionIT {
       .getInput();
 
     assertJson(response).isSimilarTo("{\n" +
+      "  \"total\": 1,\n" +
+      "  \"p\": 1,\n" +
+      "  \"ps\": 50,\n" +
       "  \"paging\": {\n" +
       "     \"pageIndex\": 1,\n" +
       "     \"pageSize\": 50,\n" +
@@ -176,7 +179,7 @@ public class ChangelogActionIT {
       .execute()
       .getInput();
 
-    assertJson(response).isSimilarTo("{\"paging\":{\"pageIndex\":1,\"pageSize\":50,\"total\":0},\"events\":[]}");
+    assertJson(response).isSimilarTo("{\"total\":0,\"p\":1,\"ps\":50,\"paging\":{\"pageIndex\":1,\"pageSize\":50,\"total\":0},\"events\":[]}");
   }
 
   @Test
@@ -344,14 +347,13 @@ public class ChangelogActionIT {
       .setChangeType(ActiveRuleChange.Type.ACTIVATED.name())
       .setData(ImmutableMap.of("severity", "MAJOR", "param_format", "^[A-Z][a-zA-Z0-9]*$", "ruleUuid", rule3.getUuid())));
 
-    String result = ws.newRequest()
+    ws.newRequest()
       .setMethod("GET")
       .setParam(PARAM_LANGUAGE, profile.getLanguage())
       .setParam(PARAM_QUALITY_PROFILE, profile.getName())
       .setParam("ps", "10")
       .execute()
-      .getInput();
-    assertJson(result).isSimilarTo(ws.getDef().responseExampleAsString());
+      .assertJson(this.getClass(), "changelog_example.json");
   }
 
   @Test
index 96ffd6534a73b9ed9fa6b2774492101c5c86b1c5..a99e9d26800240a950a93cfe6a486e2bc3d14fd9 100644 (file)
@@ -163,6 +163,8 @@ public class SearchActionIT {
       .setParam(WebService.Param.FIELDS, "actives")
       .executeProtobuf(Rules.SearchResponse.class);
 
+    assertThat(response.getTotal()).isZero();
+    assertThat(response.getP()).isOne();
     assertThat(response.getPaging().getTotal()).isZero();
     assertThat(response.getPaging().getPageIndex()).isOne();
     assertThat(response.getPaging().getPageSize()).isNotZero();
@@ -556,6 +558,7 @@ public class SearchActionIT {
     SearchResponse result = ws.newRequest()
       .setParam("f", "langName")
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -580,6 +583,7 @@ public class SearchActionIT {
     SearchResponse result = ws.newRequest()
       .setParam("f", "debtRemFn,remFnOverloaded,defaultDebtRemFn")
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -613,6 +617,7 @@ public class SearchActionIT {
     SearchResponse result = ws.newRequest()
       .setParam("f", "debtRemFn,remFnOverloaded,defaultDebtRemFn")
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -646,6 +651,7 @@ public class SearchActionIT {
     SearchResponse result = ws.newRequest()
       .setParam("f", "debtRemFn,remFnOverloaded,defaultDebtRemFn")
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -677,6 +683,7 @@ public class SearchActionIT {
       .setParam("f", "isTemplate")
       .setParam("is_template", "true")
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -700,6 +707,7 @@ public class SearchActionIT {
       .setParam("f", "templateKey")
       .setParam("template_key", templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey())
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -717,6 +725,7 @@ public class SearchActionIT {
 
     SearchResponse result = ws.newRequest().executeProtobuf(SearchResponse.class);
 
+    assertThat(result.getTotal()).isZero();
     assertThat(result.getPaging().getTotal()).isZero();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isZero();
@@ -735,6 +744,7 @@ public class SearchActionIT {
       .setParam("q", rule.getName())
       .setParam("activation", "true")
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -779,6 +789,7 @@ public class SearchActionIT {
       .setParam("activation", "true")
       .setParam("qprofile", profile.getKee())
       .executeProtobuf(SearchResponse.class);
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -835,6 +846,7 @@ public class SearchActionIT {
       .setParam("qprofile", profile.getKee())
       .executeProtobuf(SearchResponse.class);
 
+    assertThat(result.getTotal()).isOne();
     assertThat(result.getPaging().getTotal()).isOne();
     assertThat(result.getPaging().getPageIndex()).isOne();
     assertThat(result.getRulesCount()).isOne();
@@ -1048,12 +1060,14 @@ public class SearchActionIT {
     requestPopulator.accept(request);
     Rules.SearchResponse response = request.executeProtobuf(Rules.SearchResponse.class);
 
+    assertThat(response.getP()).isOne();
     assertThat(response.getPaging().getPageIndex()).isOne();
     assertThat(response.getPaging().getPageSize()).isNotZero();
     RuleKey[] expectedRuleKeys = stream(expectedRules).map(RuleDto::getKey).toList().toArray(new RuleKey[0]);
     assertThat(response.getRulesList())
       .extracting(r -> RuleKey.parse(r.getKey()))
       .containsExactlyInAnyOrder(expectedRuleKeys);
+    assertThat(response.getTotal()).isEqualTo(expectedRules.length);
     assertThat(response.getPaging().getTotal()).isEqualTo(expectedRules.length);
     assertThat(response.getRulesCount()).isEqualTo(expectedRules.length);
   }
index c0aa16ed73a7f2bfda73cbea3263f8e403ab8901..3888e144b20cc0656a09ed3ce2d1f9bd5e0bea9e 100644 (file)
@@ -71,7 +71,6 @@ public class UsersActionIT {
     assertThat(wsDef.since()).isEqualTo("5.2");
     assertThat(wsDef.isPost()).isFalse();
     assertThat(wsDef.changelog()).extracting(Change::getVersion, Change::getDescription).containsOnly(
-      tuple("10.2", "Response fields 'total', 's', 'ps' dropped"),
       tuple("10.0", "Field 'managed' added to the payload."),
       tuple("10.0", "Parameter 'id' is removed. Use 'name' instead."),
       tuple("9.8", "response fields 'total', 's', 'ps' have been deprecated, please use 'paging' object instead."),
@@ -116,6 +115,8 @@ public class UsersActionIT {
 
     assertJson(result).isSimilarTo("""
       {
+        "p": 1,
+        "total": 0,
         "paging": {
           "pageIndex": 1,
           "pageSize": 25,
@@ -254,6 +255,9 @@ public class UsersActionIT {
       .execute()
       .getInput()).isSimilarTo("""
       {
+        "p": 1,
+        "ps": 1,
+        "total": 2,
         "paging": {
           "pageIndex": 1,
           "pageSize": 1,
@@ -271,6 +275,9 @@ public class UsersActionIT {
       .execute()
       .getInput()).isSimilarTo("""
       {
+        "p": 2,
+        "ps": 1,
+        "total": 2,
         "paging": {
           "pageIndex": 2,
           "pageSize": 1,
diff --git a/server/sonar-webserver-webapi/src/it/resources/org/sonar/server/qualityprofile/ws/ChangelogActionIT/changelog_example.json b/server/sonar-webserver-webapi/src/it/resources/org/sonar/server/qualityprofile/ws/ChangelogActionIT/changelog_example.json
new file mode 100644 (file)
index 0000000..c40c1bb
--- /dev/null
@@ -0,0 +1,43 @@
+{
+  "total": 3,
+  "ps": 10,
+  "p": 1,
+  "paging": {
+    "pageSize": 10,
+    "total": 3,
+    "pageIndex": 1
+  },
+  "events": [
+    {
+      "date" : "2015-02-23T17:58:39+0100",
+      "action" : "ACTIVATED",
+      "authorLogin" : "anakin.skywalker",
+      "authorName" : "Anakin Skywalker",
+      "ruleKey" : "java:S2438",
+      "ruleName" : "\"Threads\" should not be used where \"Runnables\" are expected",
+      "params" : {
+        "severity" : "CRITICAL"
+      }
+    },
+    {
+      "date" : "2015-02-23T17:58:18+0100",
+      "action" : "DEACTIVATED",
+      "authorLogin" : "padme.amidala",
+      "authorName" : "Padme Amidala",
+      "ruleKey" : "java:S2162",
+      "ruleName" : "\"equals\" methods should be symmetric and work for subclasses"
+    },
+    {
+      "action" : "ACTIVATED",
+      "authorLogin" : "obiwan.kenobi",
+      "authorName" : "Obiwan Kenobi",
+      "ruleKey" : "java:S00101",
+      "ruleName" : "Class names should comply with a naming convention",
+      "date" : "2014-09-12T15:20:46+0200",
+      "params" : {
+        "severity" : "MAJOR",
+        "format" : "^[A-Z][a-zA-Z0-9]*$"
+      }
+    }
+  ]
+}
index e09c0347ba45e4e090405fbc47775612d0325143..674c74cca2e549fac635434621a562572c92c499 100644 (file)
@@ -194,7 +194,6 @@ public class SearchAction implements IssuesWsAction {
         + "<br/>When issue indexation is in progress returns 503 service unavailable HTTP code.")
       .setSince("3.6")
       .setChangelog(
-        new Change("10.2", "Response fields 'total', 's', 'ps' dropped"),
         new Change("10.2", format("Parameter '%s' renamed to '%s'", PARAM_COMPONENT_KEYS, PARAM_COMPONENTS)),
         new Change("10.1", "Add the 'codeVariants' parameter, facet and response field"),
         new Change("10.0", "Parameter 'sansTop25' is deprecated"),
index 1e769addf39c68862fc78abf20febfedc1bc12bb..3622343ea1bba97c548c89b11b8f119f97f13f3c 100644 (file)
@@ -101,7 +101,7 @@ public class SearchResponseFormat {
   SearchWsResponse formatSearch(Set<SearchAdditionalField> fields, SearchResponseData data, Paging paging, Facets facets) {
     SearchWsResponse.Builder response = SearchWsResponse.newBuilder();
 
-    response.setPaging(formatPaging(paging));
+    formatPaging(paging, response);
     ofNullable(data.getEffortTotal()).ifPresent(response::setEffortTotal);
     response.addAllIssues(createIssues(fields, data));
     response.addAllComponents(formatComponents(data));
@@ -142,6 +142,13 @@ public class SearchResponseFormat {
     return response.build();
   }
 
+  private static void formatPaging(Paging paging, SearchWsResponse.Builder response) {
+    response.setP(paging.pageIndex());
+    response.setPs(paging.pageSize());
+    response.setTotal(paging.total());
+    response.setPaging(formatPaging(paging));
+  }
+
   private static Common.Paging.Builder formatPaging(Paging paging) {
     return Common.Paging.newBuilder()
       .setPageIndex(paging.pageIndex())
index d04088c192b679dd5cb704dd3138455c4e00f1c5..57b3a8b902b30fc6cb3a112e51fa906f24fd110f 100644 (file)
@@ -70,7 +70,6 @@ public class ChangelogAction implements QProfileWsAction {
       .setDescription("Get the history of changes on a quality profile: rule activation/deactivation, change in parameters/severity. " +
         "Events are ordered by date in descending order (most recent first).")
       .setChangelog(
-        new org.sonar.api.server.ws.Change("10.2", "Response fields 'total', 's', 'ps' dropped"),
         new org.sonar.api.server.ws.Change("9.8", "response fields 'total', 's', 'ps' have been deprecated, please use 'paging' object instead"),
         new org.sonar.api.server.ws.Change("9.8", "The field 'paging' has been added to the response"))
       .setHandler(this)
@@ -145,6 +144,11 @@ public class ChangelogAction implements QProfileWsAction {
     Map<String, UserDto> usersByUuid, Map<String, RuleDto> rulesByRuleUuids) {
     json.beginObject();
     writePaging(json, total, page, pageSize);
+    json.name("paging").beginObject()
+      .prop("pageIndex", page)
+      .prop("pageSize", pageSize)
+      .prop("total", total)
+      .endObject();
     json.name("events").beginArray();
     changelogs.forEach(change -> {
       JsonWriter changeWriter = json.beginObject();
@@ -179,12 +183,14 @@ public class ChangelogAction implements QProfileWsAction {
     json.endObject();
   }
 
+  /**
+   * @deprecated since 9.8 - replaced by 'paging' object structure.
+   */
+  @Deprecated(since = "9.8")
   private static void writePaging(JsonWriter json, int total, int page, int pageSize) {
-    json.name("paging").beginObject()
-      .prop("pageIndex", page)
-      .prop("pageSize", pageSize)
-      .prop("total", total)
-      .endObject();
+    json.prop("total", total);
+    json.prop(Param.PAGE, page);
+    json.prop(Param.PAGE_SIZE, pageSize);
   }
 
   /**
index 2e406da2d2f730ff9343917ee20609012947891d..8f52faa0822dbadc2b47ddb4be3eddab52c6c439 100644 (file)
@@ -165,8 +165,7 @@ public class SearchAction implements RulesWsAction {
         new Change("10.0", "The value 'debtRemFn' for the 'f' parameter has been deprecated, use 'remFn' instead"),
         new Change("10.0", "The value 'defaultDebtRemFn' for the 'f' parameter has been deprecated, use 'defaultRemFn' instead"),
         new Change("10.0", "The value 'sansTop25' for the parameter 'facets' has been deprecated"),
-        new Change("10.0", "Parameter 'sansTop25' is deprecated"),
-        new Change("10.2", "Response fields 'total', 's', 'ps' dropped")
+        new Change("10.0", "Parameter 'sansTop25' is deprecated")
       );
 
     action.createParam(FACETS)
@@ -204,7 +203,7 @@ public class SearchAction implements RulesWsAction {
 
   private SearchResponse buildResponse(DbSession dbSession, SearchRequest request, SearchOptions context, SearchResult result, RuleQuery query) {
     SearchResponse.Builder responseBuilder = SearchResponse.newBuilder();
-    writePaging(responseBuilder, result, context);
+    writeStatistics(responseBuilder, result, context);
     doContextResponse(dbSession, request, result, responseBuilder, query);
     if (!context.getFacets().isEmpty()) {
       writeFacets(responseBuilder, request, context, result);
@@ -212,7 +211,10 @@ public class SearchAction implements RulesWsAction {
     return responseBuilder.build();
   }
 
-  private static void writePaging(SearchResponse.Builder response, SearchResult searchResult, SearchOptions context) {
+  private static void writeStatistics(SearchResponse.Builder response, SearchResult searchResult, SearchOptions context) {
+    response.setTotal(searchResult.total);
+    response.setP(context.getPage());
+    response.setPs(context.getLimit());
     response.setPaging(formatPaging(searchResult.total, context.getPage(), context.getLimit()));
   }
 
index b08e76f25963a60431467e0ebfdc950d96c9bbd0..01fc9477cfd907dd08fa3af468abce734004096f 100644 (file)
@@ -76,7 +76,6 @@ public class UsersAction implements UserGroupsWsAction {
       .addSearchQuery("freddy", "names", "logins")
       .addPagingParams(25)
       .setChangelog(
-        new Change("10.2", "Response fields 'total', 's', 'ps' dropped"),
         new Change("10.0", "Field 'managed' added to the payload."),
         new Change("10.0", "Parameter 'id' is removed. Use 'name' instead."),
         new Change("9.8", "response fields 'total', 's', 'ps' have been deprecated, please use 'paging' object instead."),
@@ -112,6 +111,11 @@ public class UsersAction implements UserGroupsWsAction {
         json.beginObject();
         writeMembers(json, users, userUuidToIsManaged);
         writePaging(json, paging);
+        json.name("paging").beginObject()
+          .prop("pageIndex", page)
+          .prop("pageSize", pageSize)
+          .prop("total", total)
+          .endObject();
         json.endObject();
       }
     }
@@ -134,12 +138,14 @@ public class UsersAction implements UserGroupsWsAction {
     json.endArray();
   }
 
+  /**
+   * @deprecated since 9.8 - replaced by 'paging' object structure.
+   */
+  @Deprecated(since = "9.8")
   private static void writePaging(JsonWriter json, Paging paging) {
-    json.name("paging").beginObject()
-      .prop("pageIndex", paging.pageIndex())
-      .prop("pageSize", paging.pageSize())
-      .prop("total", paging.total())
-      .endObject();
+    json.prop(Param.PAGE, paging.pageIndex())
+      .prop(Param.PAGE_SIZE, paging.pageSize())
+      .prop("total", paging.total());
   }
 
   private static String getMembership(String selected) {
index 6c1766f54e32519d1edfa865e0790c91bd3f6ad1..5768377de8e01ed37bd36aef3b9accc6ce4a1d15 100644 (file)
@@ -63,9 +63,9 @@ public class DefaultActiveRulesLoader implements ActiveRulesLoader {
       SearchResponse response = loadFromStream(wsClient.call(getRequest).contentStream());
       List<LoadedActiveRule> pageRules = readPage(response);
       ruleList.addAll(pageRules);
-      loaded += response.getPaging().getPageSize();
+      loaded += response.getPs();
 
-      if (response.getPaging().getTotal() <= loaded) {
+      if (response.getTotal() <= loaded) {
         break;
       }
       page++;
index 059a0efbe8d261fcad70032380003b574e8ab303..60b19337d23d40b69429b2a681d09388f38794c3 100644 (file)
@@ -33,7 +33,6 @@ import org.sonar.api.utils.MessageException;
 import org.sonar.scanner.WsTestUtil;
 import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
 import org.sonar.scanner.scan.branch.BranchConfiguration;
-import org.sonarqube.ws.Common;
 import org.sonarqube.ws.Rules;
 import org.sonarqube.ws.Rules.Active;
 import org.sonarqube.ws.Rules.ActiveList;
@@ -138,7 +137,8 @@ public class DefaultActiveRulesLoaderTest {
       });
 
     rules.setActives(actives);
-    rules.setPaging(Common.Paging.newBuilder().setPageSize(numberOfRules).setTotal(total));
+    rules.setPs(numberOfRules);
+    rules.setTotal(total);
     return new ByteArrayInputStream(rules.build().toByteArray());
   }
 
@@ -156,7 +156,8 @@ public class DefaultActiveRulesLoaderTest {
       });
 
     rules.setActives(actives);
-    rules.setPaging(Common.Paging.newBuilder().setPageSize(3).setTotal(3));
+    rules.setPs(3);
+    rules.setTotal(3);
     return new ByteArrayInputStream(rules.build().toByteArray());
   }
 }
index aa88ec340839080328fb613a97251a1896d39b65..d545fe7e75d71422ac9622c29809a9afc69ba867 100644 (file)
@@ -29,9 +29,9 @@ option optimize_for = SPEED;
 // Response of GET api/issues/search
 message SearchWsResponse {
   reserved 5;
-  reserved 1;
-  reserved 2;
-  reserved 3;
+  optional int64 total = 1 [deprecated=true];
+  optional int64 p = 2 [deprecated=true];
+  optional int32 ps = 3 [deprecated=true];
   optional sonarqube.ws.commons.Paging paging = 4;
 
   // Total amount of effort, only when the facet "total" is enabled
index 2e68e4c07661da2bd853dbb60a3e2c488f659da3..e1e242b8b81b818c1fa48d61c63447010486ba34 100644 (file)
@@ -41,9 +41,10 @@ message ListResponse {
 
 // WS api/rules/search
 message SearchResponse {
-  reserved 1;
-  reserved 2;
-  reserved 3;
+  optional int64 total = 1 [deprecated=true];
+  optional int32 p = 2 [deprecated=true];
+  optional int64 ps = 3 [deprecated=true];
+
   repeated Rule rules = 4;
   optional Actives actives = 5;
   optional QProfiles qProfiles = 6;