📄 p4fstat.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. * *//* * Portions of this software are based upon public domain software * originally written at the National Center for Supercomputing Applications, * University of Illinois, Urbana-Champaign. */package org.apache.tools.ant.taskdefs.optional.perforce;import java.io.File;import java.util.Vector;import java.util.ArrayList;import org.apache.tools.ant.Project;import org.apache.tools.ant.BuildException;import org.apache.tools.ant.DirectoryScanner;import org.apache.tools.ant.types.FileSet;/** * P4Fstat--find out which files are under Perforce control and which are not. * * <br><b>Example Usage:</b><br> * <pre> * <project name="p4fstat" default="p4fstat" * basedir="C:\dev\gnu"> * <target name="p4fstat" > * <p4fstat showfilter="all"> * <fileset dir="depot" includes="**\/*"/> * </p4fstat> * </target> * </project> * </pre> * * @ant.task category="scm" */public class P4Fstat extends P4Base { private int changelist; private String addCmd = ""; private Vector filesets = new Vector(); private static final int DEFAULT_CMD_LENGTH = 300; private int cmdLength = DEFAULT_CMD_LENGTH; private static final int SHOW_ALL = 0; private static final int SHOW_EXISTING = 1; private static final int SHOW_NON_EXISTING = 2; private int show = SHOW_NON_EXISTING; private FStatP4OutputHandler handler; private StringBuffer filelist; private int fileNum = 0; private int doneFileNum = 0; private boolean debug = false; private static final String EXISTING_HEADER = "Following files exist in perforce"; private static final String NONEXISTING_HEADER = "Following files do not exist in perforce"; /** * Sets the filter that one wants applied. * <table> * <tr><th>Option</th><th>Meaning</th></tr> * <tr><td>all</td><td>all files under Perforce control or not</td></tr> * <tr><td>existing</td><td>only files under Perforce control</td></tr> * <tr><td>non-existing</td><td>only files not under Perforce control or not</td></tr> * </table> * @param filter should be one of all|existing|non-existing. */ public void setShowFilter(String filter) { if (filter.equalsIgnoreCase("all")) { show = SHOW_ALL; } else if (filter.equalsIgnoreCase("existing")) { show = SHOW_EXISTING; } else if (filter.equalsIgnoreCase("non-existing")) { show = SHOW_NON_EXISTING; } else { throw new BuildException("P4Fstat: ShowFilter should be one of: " + "all, existing, non-existing"); } } /** * Sets optionally a change list number. * @param changelist change list that one wants information about. * @throws BuildException if the change list number is negative. */ public void setChangelist(int changelist) throws BuildException { if (changelist <= 0) { throw new BuildException("P4FStat: Changelist# should be a " + "positive number"); } this.changelist = changelist; } /** * Adds a fileset to be examined by p4fstat. * @param set the fileset to add. */ public void addFileset(FileSet set) { filesets.addElement(set); } /** * Executes the p4fstat task. * @throws BuildException if no files are specified. */ public void execute() throws BuildException { handler = new FStatP4OutputHandler(this); if (P4View != null) { addCmd = P4View; } P4CmdOpts = (changelist > 0) ? ("-c " + changelist) : ""; filelist = new StringBuffer(); for (int i = 0; i < filesets.size(); i++) { FileSet fs = (FileSet) filesets.elementAt(i); DirectoryScanner ds = fs.getDirectoryScanner(getProject()); String[] srcFiles = ds.getIncludedFiles(); if (srcFiles != null) { fileNum = srcFiles.length; for (int j = 0; j < srcFiles.length; j++) { File f = new File(ds.getBasedir(), srcFiles[j]); filelist.append(" ").append('"').append(f.getAbsolutePath()).append('"'); doneFileNum++; if (filelist.length() > cmdLength) { execP4Fstat(filelist); filelist = new StringBuffer(); } } if (filelist.length() > 0) { execP4Fstat(filelist); } } else { log("No files specified to query status on!", Project.MSG_WARN); } } if (show == SHOW_ALL || show == SHOW_EXISTING) { printRes(handler.getExisting(), EXISTING_HEADER); } if (show == SHOW_ALL || show == SHOW_NON_EXISTING) { printRes(handler.getNonExisting(), NONEXISTING_HEADER); } } /** * Return the number of files seen. * @return the number of files seen. */ public int getLengthOfTask() { return fileNum; } /** * Return the number of passes to make. * IS THIS BEING USED? * @return number of passes (how many filesets). */ int getPasses() { return filesets.size(); } private void printRes(ArrayList ar, String header) { log(header, Project.MSG_INFO); for (int i = 0; i < ar.size(); i++) { log((String) ar.get(i), Project.MSG_INFO); } } private void execP4Fstat(StringBuffer list) { String l = list.substring(0); if (debug) { log("Executing fstat " + P4CmdOpts + " " + addCmd + l + "\n", Project.MSG_INFO); } execP4Command("fstat " + P4CmdOpts + " " + addCmd + l, handler); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -