ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/tomcat/buildutil/CheckEol.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/tomcat/buildutil/CheckEol.java
Status
scanned
Type
file
Name
CheckEol.java
Extension
.java
Programming language
Java
Mime type
text/plain
File type
ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
5898 (5.8 KB)
MD5
7c16beccc9813530cfd93d75bb0842a8
SHA1
3b94e2e74ac93714de0cff944b6ed0b95bff21ae
SHA256
dc6a7cd0d24bb643af992bd029b77d6a8b6cc08b36beeef0fad495f122e2c490
SHA512

      
    
SHA1_git
b1527e233c48483c63c9fd15cdccbe059eb097bb
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
CheckEol.java | 5.8 KB |

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tomcat.buildutil; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.FileSet; /** * Ant task that checks that all the files in the given fileset have end-of-line delimiters that are appropriate. * <p> * The goal is to check whether we have problems with Subversion's svn:eol-style property or Git's autocrlf setting when * files are committed on one OS and then checked on another one. */ public class CheckEol extends Task { /** The files to be checked */ private final List<FileSet> filesets = new ArrayList<>(); /** The line ending mode (either LF, CRLF, or null for OS specific) */ private Mode mode; /** * Sets the files to be checked * * @param fs The fileset to be checked. */ public void addFileset(FileSet fs) { filesets.add(fs); } /** * Sets the line ending mode. * * @param mode The line ending mode (either LF or CRLF) */ public void setMode(String mode) { this.mode = Mode.valueOf(mode.toUpperCase(Locale.ENGLISH)); } private Mode getMode() { if (mode != null) { return mode; } else { if (" ".equals(System.lineSeparator())) { return Mode.LF; } else if (" ".equals(System.lineSeparator())) { return Mode.CRLF; } } return null; } /** * Perform the check * * @throws BuildException if an error occurs during execution of this task. */ @Override public void execute() throws BuildException { Mode mode = getMode(); if (mode == null) { log("Line ends check skipped, because OS line ends setting is neither LF nor CRLF.", Project.MSG_VERBOSE); return; } int count = 0; List<CheckFailure> errors = new ArrayList<>(); // Step through each file and check. for (FileSet fs : filesets) { DirectoryScanner ds = fs.getDirectoryScanner(getProject()); File basedir = ds.getBasedir(); String[] files = ds.getIncludedFiles(); if (files.length > 0) { log("Checking line ends in " + files.length + " file(s)"); for (String filename : files) { File file = new File(basedir, filename); log("Checking file '" + file + "' for correct line ends", Project.MSG_DEBUG); try { check(file, errors, mode); } catch (IOException ioe) { throw new BuildException("Could not check file '" + file.getAbsolutePath() + "'", ioe); } count++; } } } if (count > 0) { log("Done line ends check in " + count + " file(s), " + errors.size() + " error(s) found."); } if (!errors.isEmpty()) { String message = "The following files have wrong line ends: " + errors; // We need to explicitly write the message to the log, because // long BuildException messages may be trimmed. E.g. I observed // this problem with Eclipse IDE 3.7. log(message, Project.MSG_ERR); throw new BuildException(message); } } private enum Mode { LF, CRLF } private record CheckFailure(File file, int line, String value) { @Override public String toString() { return System.lineSeparator() + file + ": uses " + value + " on line " + line; } } private void check(File file, List<CheckFailure> errors, Mode mode) throws IOException { try (FileInputStream fis = new FileInputStream(file); BufferedInputStream is = new BufferedInputStream(fis)) { int line = 1; int prev = -1; int ch; while ((ch = is.read()) != -1) { if (ch == ' ') { if (mode == Mode.LF && prev == ' ') { errors.add(new CheckFailure(file, line, "CRLF")); return; } else if (mode == Mode.CRLF && prev != ' ') { errors.add(new CheckFailure(file, line, "LF")); return; } line++; } else if (prev == ' ') { errors.add(new CheckFailure(file, line, "CR")); return; } prev = ch; } } } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
18.45
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-4bde3f57-78aa-4201-96bf-531cba09e7de apache-2.0 Apache-2.0
URL Start line End line
http://www.apache.org/licenses/LICENSE-2.0 9 9