Merge changes I79768c0e,Ideb86f1d
* changes:
Use test API to create change with deleted/renamed file
Stop using deprecated method to create test changes
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java
index 2f55c21..07d1c7c 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerResolver.java
@@ -268,7 +268,7 @@
* Resolves the given {@link CodeOwnerReference}s to {@link CodeOwner}s.
*
* <p>The accounts for the given {@link CodeOwnerReference}s are loaded from the account cache in
- * parallel (via {@link AccountCache#get(Set)}.
+ * parallel (via {@link AccountCache#get(Collection)}.
*
* @param codeOwnerReferences the code owner references that should be resolved
* @param annotationsByCodeOwnerReference annotations by code owner reference
diff --git a/web/code-owners-service.ts b/web/code-owners-service.ts
index 9e38a6b..746f364 100644
--- a/web/code-owners-service.ts
+++ b/web/code-owners-service.ts
@@ -322,13 +322,15 @@
info: FetchedOwner;
}>
): Array<FetchedFile> {
- return files.map(file => {
- return {
- path: file.path,
- info: file.info,
- status: this.computeFileStatus(codeOwnerStatusMap, file.path),
- };
- });
+ return files
+ .map(file => {
+ return {
+ path: file.path,
+ info: file.info,
+ status: this.computeFileStatus(codeOwnerStatusMap, file.path),
+ };
+ })
+ .sort((a, b) => CodeOwnerService.specialFilePathCompare(a.path, b.path));
}
private isOnNewerPatchset(patchsetId: number) {
@@ -392,4 +394,30 @@
ownerService.reset();
ownerService = undefined;
}
+
+ // Copied from https://cs.opensource.google/gerrit/gerrit/gerrit/+/master:polygerrit-ui/app/utils/path-list-util.ts;l=10;drc=57014d5ba3e0b48e3372e3aa3c67463cb6e56bca
+ static specialFilePathCompare(a: string, b: string) {
+ const aLastDotIndex = a.lastIndexOf('.');
+ const aExt = a.substr(aLastDotIndex + 1);
+ const aFile = a.substr(0, aLastDotIndex) || a;
+
+ const bLastDotIndex = b.lastIndexOf('.');
+ const bExt = b.substr(bLastDotIndex + 1);
+ const bFile = b.substr(0, bLastDotIndex) || b;
+
+ // Sort header files above others with the same base name.
+ const headerExts = ['h', 'hh', 'hxx', 'hpp'];
+ if (aFile.length > 0 && aFile === bFile) {
+ if (headerExts.includes(aExt) && headerExts.includes(bExt)) {
+ return a.localeCompare(b);
+ }
+ if (headerExts.includes(aExt)) {
+ return -1;
+ }
+ if (headerExts.includes(bExt)) {
+ return 1;
+ }
+ }
+ return aFile.localeCompare(bFile) || a.localeCompare(b);
+ }
}