From: gmungoc Date: Mon, 12 Sep 2016 08:59:16 +0000 (+0100) Subject: JAL-2119 case-sensitive href filename checking X-Git-Tag: Release_2_10_0~45^2~2 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=048c16087dcab837f2ef3d8dbebbc112b91320ce;p=jalview.git JAL-2119 case-sensitive href filename checking --- diff --git a/utils/HelpLinksChecker.java b/utils/HelpLinksChecker.java index a0853a9..9463758 100644 --- a/utils/HelpLinksChecker.java +++ b/utils/HelpLinksChecker.java @@ -64,7 +64,7 @@ public class HelpLinksChecker if (args.length == 0 || args.length > 2 || (args.length == 2 && !args[1].equals("-nointernet"))) { - System.out.println("Usage: [-nointernet]"); + log("Usage: [-nointernet]"); return; } @@ -84,11 +84,11 @@ public class HelpLinksChecker */ void checkLinks(String helpDirectoryPath) throws IOException { - System.out.println("Checking help file links"); + log("Checking help file links"); File helpFolder = new File(helpDirectoryPath).getCanonicalFile(); if (!helpFolder.exists()) { - System.out.println("Can't find " + helpDirectoryPath); + log("Can't find " + helpDirectoryPath); return; } @@ -159,7 +159,7 @@ public class HelpLinksChecker unusedTargets.remove(image); if (!tocTargets.containsKey(image)) { - System.out.println(String.format( + log(String.format( "Invalid image '%s' at line %d of %s", image, lineNo, HELP_HS)); invalidImageCount++; @@ -177,29 +177,29 @@ public class HelpLinksChecker */ private void reportResults(Map unusedTargets) { - System.out.println("\nResults:"); - System.out.println(targetCount + " distinct help targets"); - System.out.println(mapCount + " help mappings"); - System.out.println(invalidTargetCount + " invalid targets"); - System.out.println(unusedTargets.size() + " unused targets"); + log("\nResults:"); + log(targetCount + " distinct help targets"); + log(mapCount + " help mappings"); + log(invalidTargetCount + " invalid targets"); + log(unusedTargets.size() + " unused targets"); for (String target : unusedTargets.keySet()) { - System.out.println(String.format(" %s: %s", target, + log(String.format(" %s: %s", target, unusedTargets.get(target))); } - System.out.println(invalidMapUrlCount + " invalid map urls"); - System.out.println(invalidImageCount + " invalid image attributes"); - System.out.println(String.format( - "%d internal href links (%d with anchors - not checked)", - internalHrefCount, anchorRefCount)); - System.out.println(invalidInternalHrefCount + log(invalidMapUrlCount + " invalid map urls"); + log(invalidImageCount + " invalid image attributes"); + log(String.format( + "%d internal href links (%d with anchors)", internalHrefCount, + anchorRefCount)); + log(invalidInternalHrefCount + " invalid internal href links"); - System.out.println(invalidAnchorRefCount + log(invalidAnchorRefCount + " invalid internal anchor links"); - System.out.println(externalHrefCount + " external href links"); + log(externalHrefCount + " external href links"); if (internetAvailable) { - System.out.println(invalidExternalHrefCount + log(invalidExternalHrefCount + " invalid external href links"); } else @@ -210,8 +210,18 @@ public class HelpLinksChecker if (invalidInternalHrefCount > 0 || invalidExternalHrefCount > 0 || invalidImageCount > 0 || invalidAnchorRefCount > 0) { + log("*** Failed ***"); System.exit(1); } + log("*** Success ***"); + } + + /** + * @param s + */ + static void log(String s) + { + System.out.println(s); } /** @@ -262,7 +272,7 @@ public class HelpLinksChecker internalHrefCount++; File hrefFile = href.equals("") ? htmlFile : new File(htmlFolder, href); - if (!hrefFile.exists()) + if (hrefFile != htmlFile && !fileExists(hrefFile, href)) { badLink = true; invalidInternalHrefCount++; @@ -274,7 +284,7 @@ public class HelpLinksChecker { if (!checkAnchorExists(hrefFile, anchor)) { - System.out.println(String.format( + log(String.format( "Invalid anchor: %s at line %d of %s", anchor, lineNo, getPath(htmlFile))); invalidAnchorRefCount++; @@ -284,7 +294,7 @@ public class HelpLinksChecker } if (badLink) { - System.out.println(String.format( + log(String.format( "Invalid href %s at line %d of %s", href, lineNo, getPath(htmlFile))); } @@ -295,6 +305,35 @@ public class HelpLinksChecker } /** + * Performs a case-sensitive check that the href'd file exists + * + * @param hrefFile + * @return + * @throws IOException + */ + boolean fileExists(File hrefFile, String href) throws IOException + { + if (!hrefFile.exists()) + { + return false; + } + + /* + * On Mac or Windows, file.exists() is not case sensitive, so do an + * additional check with case sensitivity + */ + int slashPos = href.lastIndexOf("/"); + String expectedFileName = slashPos == -1 ? href : href + .substring(slashPos + 1); + String cp = hrefFile.getCanonicalPath(); + slashPos = cp.lastIndexOf("/"); + String actualFileName = slashPos == -1 ? cp : cp + .substring(slashPos + 1); + + return expectedFileName.equals(actualFileName); + } + + /** * Reads the file and checks for the presence of the given html anchor * * @param hrefFile @@ -392,7 +431,7 @@ public class HelpLinksChecker mapCount++; if (targets.containsKey(target)) { - System.out.println(String.format( + log(String.format( "Duplicate target mapping to %s at line %d of %s", target, lineNo, HELP_JHM)); } @@ -416,7 +455,7 @@ public class HelpLinksChecker } if (!new File(helpFolder, url).exists()) { - System.out.println(String.format( + log(String.format( "Invalid url path '%s' at line %d of %s", url, lineNo, HELP_JHM)); invalidMapUrlCount++; @@ -459,7 +498,7 @@ public class HelpLinksChecker unusedTargets.remove(target); if (!tocTargets.containsKey(target)) { - System.out.println(String.format( + log(String.format( "Invalid target '%s' at line %d of %s", target, lineNo, HELP_TOC_XML)); invalidTargetCount++;