⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chmod.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
字号:
/* *  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.tools.ant.taskdefs;import java.io.File;import java.io.IOException;import org.apache.tools.ant.BuildException;import org.apache.tools.ant.Project;import org.apache.tools.ant.taskdefs.condition.Os;import org.apache.tools.ant.types.Commandline;import org.apache.tools.ant.types.FileSet;import org.apache.tools.ant.types.PatternSet;/** * Chmod equivalent for unix-like environments. * * @since Ant 1.1 * * @ant.task category="filesystem" * @todo Refactor so it does not extend from ExecuteOn and then turn around *       and unsupport several attributes. */public class Chmod extends ExecuteOn {    private FileSet defaultSet = new FileSet();    private boolean defaultSetDefined = false;    private boolean havePerm = false;    /**     * Chmod task for setting file and directory permissions.     */    public Chmod() {        super.setExecutable("chmod");        super.setParallel(true);        super.setSkipEmptyFilesets(true);    }    /**     * Set the project of this task.     * Calls the super class and sets the project on dhe default FileSet.     * @param project the project for this task.     * @see org.apache.tools.ant.ProjectComponent#setProject     */    public void setProject(Project project) {        super.setProject(project);        defaultSet.setProject(project);    }    /**     * The file or single directory of which the permissions must be changed.     * @param src the source file or directory.     */    public void setFile(File src) {        FileSet fs = new FileSet();        fs.setFile(src);        addFileset(fs);    }    /**     * The directory which holds the files whose permissions must be changed.     * @param src the directory.     */    public void setDir(File src) {        defaultSet.setDir(src);    }    /**     * Set the new permissions.     * @param perm the new permissions.     */    public void setPerm(String perm) {        createArg().setValue(perm);        havePerm = true;    }    /**     * Add a name entry on the include list.     * @return a NameEntry to be configured.     */    public PatternSet.NameEntry createInclude() {        defaultSetDefined = true;        return defaultSet.createInclude();    }    /**     * Add a name entry on the exclude list.     * @return a nameentry to be configured.     */    public PatternSet.NameEntry createExclude() {        defaultSetDefined = true;        return defaultSet.createExclude();    }    /**     * Add a set of patterns.     * @return a patternset to be configured.     */    public PatternSet createPatternSet() {        defaultSetDefined = true;        return defaultSet.createPatternSet();    }    /**     * Sets the set of include patterns. Patterns may be separated by a comma     * or a space.     *     * @param includes the string containing the include patterns.     */    public void setIncludes(String includes) {        defaultSetDefined = true;        defaultSet.setIncludes(includes);    }    /**     * Sets the set of exclude patterns. Patterns may be separated by a comma     * or a space.     *     * @param excludes the string containing the exclude patterns.     */    public void setExcludes(String excludes) {        defaultSetDefined = true;        defaultSet.setExcludes(excludes);    }    /**     * Sets whether default exclusions should be used or not.     *     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions     *                           should be used, "false"|"off"|"no" when they     *                           shouldn't be used.     */    public void setDefaultexcludes(boolean useDefaultExcludes) {        defaultSetDefined = true;        defaultSet.setDefaultexcludes(useDefaultExcludes);    }    /**     * Check the attributes and nested elements.     */    protected void checkConfiguration() {        if (!havePerm) {            throw new BuildException("Required attribute perm not set in chmod",                                     getLocation());        }        if (defaultSetDefined && defaultSet.getDir(getProject()) != null) {            addFileset(defaultSet);        }        super.checkConfiguration();    }    /**     * Carry out the chmoding.     * @throws BuildException on error.     */    public void execute() throws BuildException {        /*         * In Ant 1.1, <chmod dir="foo" /> means, change the permissions         * of directory foo, not anything inside of it.  This is the case the         * second branch of the if statement below catches for backwards         * compatibility.         */        if (defaultSetDefined || defaultSet.getDir(getProject()) == null) {            try {                super.execute();            } finally {                if (defaultSetDefined && defaultSet.getDir(getProject()) != null) {                    filesets.removeElement(defaultSet);                }            }        } else if (isValidOs()) {            // we are chmodding the given directory            Execute execute = prepareExec();            Commandline cloned = (Commandline) cmdl.clone();            cloned.createArgument().setValue(defaultSet.getDir(getProject())                                             .getPath());            try {                execute.setCommandline(cloned.getCommandline());                runExecute(execute);            } catch (IOException e) {                throw new BuildException("Execute failed: " + e, e, getLocation());            } finally {                // close the output file if required                logFlush();            }        }    }    /**     * Set the executable.     * This is not allowed for Chmod.     * @param e ignored.     * @throws BuildException always.     * @ant.attribute ignore="true"     */    public void setExecutable(String e) {        throw new BuildException(getTaskType()            + " doesn\'t support the executable attribute", getLocation());    }    /**     * Set the command.     * This is not allowed for Chmod.     * @param cmdl ignored.     * @throws BuildException always.     * @ant.attribute ignore="true"     */    public void setCommand(Commandline cmdl) {        throw new BuildException(getTaskType()            + " doesn\'t support the command attribute", getLocation());    }    /**     * This is not allowed for Chmod.     * @param skip ignored.     * @throws BuildException always.     * @ant.attribute ignore="true"     */    public void setSkipEmptyFilesets(boolean skip) {        throw new BuildException(getTaskType()            + " doesn\'t support the skipemptyfileset attribute", getLocation());    }    /**     * This is not allowed for Chmod.     * @param b ignored.     * @throws BuildException always.     * @ant.attribute ignore="true"     */    public void setAddsourcefile(boolean b) {        throw new BuildException(getTaskType()            + " doesn\'t support the addsourcefile attribute", getLocation());    }    /**     * Check if the os is valid.     * Always include unix.     * @return true if the os is valid.     */    protected boolean isValidOs() {        return Os.isFamily(Os.FAMILY_UNIX) && super.isValidOs();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -