Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved "include" fix performance: optimized normalizePath method #3063

Merged
merged 3 commits into from Jul 28, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -25,6 +25,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* Encapsulates the information stored in the change log XML file.
Expand All @@ -34,6 +36,15 @@ public class DatabaseChangeLog implements Comparable<DatabaseChangeLog>, Conditi
private static final ThreadLocal<DatabaseChangeLog> PARENT_CHANGE_LOG = new ThreadLocal<>();
private static final Logger LOG = Scope.getCurrentScope().getLog(DatabaseChangeLog.class);

public static final Pattern CLASSPATH_PATTERN = Pattern.compile("classpath:");
public static final Pattern SLASH_PATTERN = Pattern.compile("^/");
public static final Pattern NON_CLASSPATH_PATTERN = Pattern.compile("^classpath:");
public static final Pattern DOUBLE_BACK_SLASH_PATTERN = Pattern.compile("\\\\");
public static final Pattern DOUBLE_SLASH_PATTERN = Pattern.compile("//+");
public static final Pattern SLASH_DOT_SLASH_PATTERN = Pattern.compile("/\\./");
public static final Pattern NO_LETTER_PATTERN = Pattern.compile("^[a-zA-Z]:");
public static final Pattern DOT_SLASH_PATTERN = Pattern.compile("^\\.?/");

private PreconditionContainer preconditionContainer = new GlobalPreconditionContainer();
private String physicalFilePath;
private String logicalFilePath;
Expand Down Expand Up @@ -130,10 +141,8 @@ public String getLogicalFilePath() {
if (returnPath == null) {
return null;
}

return returnPath
.replaceAll("\\\\", "/")
.replaceFirst("^/", "");
String path = DOUBLE_BACK_SLASH_PATTERN.matcher(returnPath).replaceAll("/");
return SLASH_PATTERN.matcher(path).replaceFirst("");
}

public void setLogicalFilePath(String logicalFilePath) {
Expand Down Expand Up @@ -647,11 +656,10 @@ public boolean include(String fileName,

String relativeBaseFileName = this.getPhysicalFilePath();
if (isRelativePath) {
relativeBaseFileName = relativeBaseFileName.replaceFirst("classpath:", "");
relativeBaseFileName = CLASSPATH_PATTERN.matcher(relativeBaseFileName).replaceFirst("");
fileName = FilenameUtil.concat(FilenameUtil.getDirectory(relativeBaseFileName), fileName);
}

fileName = fileName.replaceFirst("classpath:", "");
fileName = CLASSPATH_PATTERN.matcher(fileName).replaceFirst("");
DatabaseChangeLog changeLog;
try {
DatabaseChangeLog rootChangeLog = ROOT_CHANGE_LOG.get();
Expand Down Expand Up @@ -725,14 +733,12 @@ public static String normalizePath(String filePath) {
if (filePath == null) {
return null;
}
return filePath.replaceFirst("^classpath:", "")
.replaceAll("\\\\", "/")
.replaceAll("//+", "/")
.replaceAll("/\\./", "/")
.replaceFirst("^[a-zA-Z]:", "")
.replaceFirst("^\\.?/", "")
;

String noClassPathReplaced = NON_CLASSPATH_PATTERN.matcher(filePath).replaceFirst("");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you, @lzxgyh - This is a nice improvement to code readability!

String doubleBackSlashReplaced = DOUBLE_BACK_SLASH_PATTERN.matcher(noClassPathReplaced).replaceAll("/");
String doubleSlashReplaced = DOUBLE_SLASH_PATTERN.matcher(doubleBackSlashReplaced).replaceAll("/");
String slashDotSlashReplaced =SLASH_DOT_SLASH_PATTERN.matcher(doubleSlashReplaced).replaceAll("/");
String noLetterReplaced = NO_LETTER_PATTERN.matcher(slashDotSlashReplaced).replaceFirst("");
return DOT_SLASH_PATTERN.matcher(noLetterReplaced).replaceFirst("");
}

public void clearCheckSums() {
Expand Down