Skip to content

Commit 4fa72a4

Browse files
committed
prefer directories in directory listing ordering
fixes #1776
1 parent 9ce9e4d commit 4fa72a4

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

src/org/opensolaris/opengrok/configuration/Configuration.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,11 @@ public final class Configuration {
243243
*/
244244
private boolean displayRepositories;
245245

246+
/**
247+
* If true, list directories first in xref directory listing.
248+
*/
249+
private boolean listDirsFirst = true;
250+
246251
/*
247252
* types of handling history for remote SCM repositories:
248253
* ON - index history and display it in webapp
@@ -928,6 +933,14 @@ public void setDisplayRepositories(boolean flag) {
928933
this.displayRepositories = flag;
929934
}
930935

936+
public boolean getListDirsFirst() {
937+
return listDirsFirst;
938+
}
939+
940+
public void setListDirsFirst(boolean flag) {
941+
listDirsFirst = flag;
942+
}
943+
931944
/**
932945
* Get the contents of a file or empty string if the file cannot be read.
933946
*/

src/org/opensolaris/opengrok/configuration/RuntimeEnvironment.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,6 +1190,14 @@ public void setDisplayRepositories(boolean flag) {
11901190
threadConfig.get().setDisplayRepositories(flag);
11911191
}
11921192

1193+
public boolean getListDirsFirst() {
1194+
return threadConfig.get().getListDirsFirst();
1195+
}
1196+
1197+
public void setListDirsFirst(boolean flag) {
1198+
threadConfig.get().setListDirsFirst(flag);
1199+
}
1200+
11931201
/**
11941202
* Read an configuration file and set it as the current configuration.
11951203
*

src/org/opensolaris/opengrok/web/PageConfig.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.ArrayList;
3838
import java.util.Arrays;
3939
import java.util.Collections;
40+
import java.util.Comparator;
4041
import java.util.EnumSet;
4142
import java.util.List;
4243
import java.util.Set;
@@ -391,15 +392,37 @@ public String canProcess() {
391392
*/
392393
public List<String> getResourceFileList() {
393394
if (dirFileList == null) {
394-
String[] files = null;
395+
File[] files = null;
395396
if (isDir() && getResourcePath().length() > 1) {
396-
files = getResourceFile().list();
397+
files = getResourceFile().listFiles();
397398
}
398399
if (files == null) {
399400
dirFileList = Collections.emptyList();
400401
} else {
401-
Arrays.sort(files, String.CASE_INSENSITIVE_ORDER);
402-
List<String> listOfFiles = Arrays.asList(files);
402+
List<String> listOfFiles;
403+
if (env.getListDirsFirst()) {
404+
Arrays.sort(files, new Comparator<File>() {
405+
@Override
406+
public int compare(File f1, File f2) {
407+
if (f1.isDirectory() && f2.isDirectory()) {
408+
return f1.getName().compareTo(f2.getName());
409+
} else if (f1.isFile() && f2.isFile()) {
410+
return f1.getName().compareTo(f2.getName());
411+
} else {
412+
if (f1.isFile() && f2.isDirectory())
413+
return 1;
414+
else
415+
return -1;
416+
}
417+
}
418+
});
419+
} else {
420+
Arrays.sort(files,
421+
(File f1, File f2) -> f1.getName().compareTo(f2.getName()));
422+
}
423+
listOfFiles = Arrays.asList(files).stream().
424+
map(f -> f.getName()).collect(Collectors.toList());
425+
403426
if (env.hasProjects() && getPath().isEmpty()) {
404427
/**
405428
* This denotes the source root directory, we need to filter
@@ -421,6 +444,7 @@ public List<String> getResourceFileList() {
421444
});
422445
return dirFileList = Collections.unmodifiableList(modifiableListOfFiles);
423446
}
447+
424448
dirFileList = Collections.unmodifiableList(listOfFiles);
425449
}
426450
}

0 commit comments

Comments
 (0)