Skip to content

Commit 6ff8137

Browse files
committed
JS: Also sort files in legacy extractor
1 parent 6d15397 commit 6ff8137

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,15 @@ public int compare(Path f1, Path f2) {
559559
}
560560
};
561561

562+
/**
563+
* Like {@link #PATH_ORDERING} but for {@link File} objects.
564+
*/
565+
public static final Comparator<File> FILE_ORDERING = new Comparator<File>() {
566+
public int compare(File f1, File f2) {
567+
return PATH_ORDERING.compare(f1.toPath(), f2.toPath());
568+
}
569+
};
570+
562571
/** Extract all supported candidate files that pass the filters. */
563572
private void extractSource() throws IOException {
564573
// default extractor
@@ -577,11 +586,11 @@ private void extractSource() throws IOException {
577586
Set<Path> filesToExtract = new LinkedHashSet<>();
578587
List<Path> tsconfigFiles = new ArrayList<>();
579588
findFilesToExtract(defaultExtractor, filesToExtract, tsconfigFiles);
580-
589+
581590
tsconfigFiles = tsconfigFiles.stream()
582591
.sorted(PATH_ORDERING)
583592
.collect(Collectors.toList());
584-
593+
585594
filesToExtract = filesToExtract.stream()
586595
.sorted(PATH_ORDERING)
587596
.collect(Collectors.toCollection(() -> new LinkedHashSet<>()));
@@ -695,7 +704,7 @@ private String getChildAsString(JsonObject obj, String name) {
695704
* @return a path or null
696705
*/
697706
public static Path tryRelativize(Path from, Path to) {
698-
Path relative = from.relativize(to);
707+
Path relative = from.relativize(to);
699708
if (relative.startsWith("..") || relative.isAbsolute()) {
700709
return null;
701710
}

javascript/extractor/src/com/semmle/js/extractor/Main.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.List;
88
import java.util.Set;
99
import java.util.regex.Pattern;
10+
import java.util.stream.Collectors;
1011

1112
import com.semmle.js.extractor.ExtractorConfig.HTMLHandling;
1213
import com.semmle.js.extractor.ExtractorConfig.Platform;
@@ -77,8 +78,8 @@ public class Main {
7778
private PathMatcher includeMatcher, excludeMatcher;
7879
private FileExtractor fileExtractor;
7980
private ExtractorState extractorState;
80-
private final Set<File> projectFiles = new LinkedHashSet<>();
81-
private final Set<File> files = new LinkedHashSet<>();
81+
private Set<File> projectFiles = new LinkedHashSet<>();
82+
private Set<File> files = new LinkedHashSet<>();
8283
private final Set<File> extractedFiles = new LinkedHashSet<>();
8384

8485
/* used to detect cyclic directory hierarchies */
@@ -138,6 +139,16 @@ public void run(String[] args) {
138139
if (containsTypeScriptFiles()) {
139140
tsParser.verifyInstallation(!ap.has(P_QUIET));
140141
}
142+
143+
// Sort files for determinism
144+
projectFiles = projectFiles.stream()
145+
.sorted(AutoBuild.FILE_ORDERING)
146+
.collect(Collectors.toCollection(() -> new LinkedHashSet<>()));
147+
148+
files = files.stream()
149+
.sorted(AutoBuild.FILE_ORDERING)
150+
.collect(Collectors.toCollection(() -> new LinkedHashSet<>()));
151+
141152
for (File projectFile : projectFiles) {
142153

143154
long start = verboseLogStartTimer(ap, "Opening project " + projectFile);

0 commit comments

Comments
 (0)