本文整理匯總了TypeScript中vsts-task-lib/task.stats函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript stats函數的具體用法?TypeScript stats怎麽用?TypeScript stats使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了stats函數的10個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: isFileExists
export function isFileExists(path: string): boolean {
try {
return tl.stats(path).isFile();
} catch (error) {
return false;
}
}
示例2: pathExistsAsFile
function pathExistsAsFile(path: string) {
try {
return tl.stats(path).isFile();
}
catch (error) {
return false;
}
}
示例3: Error
filesList.forEach(packageFile => {
if (!tl.stats(packageFile).isFile()) {
throw new Error(tl.loc("NotARegularFile", packageFile));
}
});
示例4:
filesList = filesList.filter(x => tl.stats(x).isFile());
示例5:
filesList = filesList.filter((x) => tl.stats(x).isFile() || tl.stats(x).isDirectory());
示例6: run
async function run() {
let sshHelper: SshHelper;
try {
tl.setResourcePath(path.join(__dirname, 'task.json'));
// read SSH endpoint input
const sshEndpoint = tl.getInput('sshEndpoint', true);
const username: string = tl.getEndpointAuthorizationParameter(sshEndpoint, 'username', false);
const password: string = tl.getEndpointAuthorizationParameter(sshEndpoint, 'password', true); //passphrase is optional
const privateKey: string = process.env['ENDPOINT_DATA_' + sshEndpoint + '_PRIVATEKEY']; //private key is optional, password can be used for connecting
const hostname: string = tl.getEndpointDataParameter(sshEndpoint, 'host', false);
let port: string = tl.getEndpointDataParameter(sshEndpoint, 'port', true); //port is optional, will use 22 as default port if not specified
if (!port) {
tl._writeLine(tl.loc('UseDefaultPort'));
port = '22';
}
// set up the SSH connection configuration based on endpoint details
let sshConfig;
if (privateKey) {
tl.debug('Using private key for ssh connection.');
sshConfig = {
host: hostname,
port: port,
username: username,
privateKey: privateKey,
passphrase: password
}
} else {
// use password
tl.debug('Using username and password for ssh connection.');
sshConfig = {
host: hostname,
port: port,
username: username,
password: password
}
}
// contents is a multiline input containing glob patterns
const contents: string[] = tl.getDelimitedInput('contents', '\n', true);
const sourceFolder: string = tl.getPathInput('sourceFolder', true, true);
let targetFolder: string = tl.getInput('targetFolder');
if (!targetFolder) {
targetFolder = "./";
} else {
// '~/' is unsupported
targetFolder = targetFolder.replace(/^~\//, "./");
}
// read the copy options
const cleanTargetFolder: boolean = tl.getBoolInput('cleanTargetFolder', false);
const overwrite: boolean = tl.getBoolInput('overwrite', false);
const failOnEmptySource: boolean = tl.getBoolInput('failOnEmptySource', false);
const flattenFolders: boolean = tl.getBoolInput('flattenFolders', false);
if (!tl.stats(sourceFolder).isDirectory()) {
throw tl.loc('SourceNotFolder');
}
// initialize the SSH helpers, set up the connection
sshHelper = new SshHelper(sshConfig);
await sshHelper.setupConnection();
if (cleanTargetFolder) {
tl._writeLine(tl.loc('CleanTargetFolder', targetFolder));
const cleanTargetFolderCmd = 'rm -rf "' + targetFolder + '"/*';
try {
await sshHelper.runCommandOnRemoteMachine(cleanTargetFolderCmd, null);
} catch (err) {
throw tl.loc('CleanTargetFolderFailed', err);
}
}
// identify the files to copy
const filesToCopy: string[] = getFilesToCopy(sourceFolder, contents);
// copy files to remote machine
if (filesToCopy) {
tl.debug('Number of files to copy = ' + filesToCopy.length);
tl.debug('filesToCopy = ' + filesToCopy);
let failureCount = 0;
tl._writeLine(tl.loc('CopyingFiles', filesToCopy.length));
for (const fileToCopy of filesToCopy) {
try {
tl.debug('fileToCopy = ' + fileToCopy);
let relativePath;
if (flattenFolders) {
relativePath = path.basename(fileToCopy);
} else {
relativePath = fileToCopy.substring(sourceFolder.length)
.replace(/^\\/g, "")
.replace(/^\//g, "");
}
tl.debug('relativePath = ' + relativePath);
const targetPath = path.posix.join(targetFolder, relativePath);
//.........這裏部分代碼省略.........
示例7: getFilesToCopy
// This method will find the list of matching files for the specified contents
// This logic is the same as the one used by CopyFiles task except for allowing dot folders to be copied
// This will be useful to put in the task-lib
function getFilesToCopy(sourceFolder: string, contents: string[]): string[] {
// include filter
const includeContents: string[] = [];
// exclude filter
const excludeContents: string[] = [];
// evaluate leading negations `!` on the pattern
for (const pattern of contents.map(x => x.trim())) {
let negate: boolean = false;
let numberOfNegations: number = 0;
for (const c of pattern) {
if (c === '!') {
negate = !negate;
numberOfNegations++;
} else {
break;
}
}
if (negate) {
tl.debug('exclude content pattern: ' + pattern);
const realPattern = pattern.substring(0, numberOfNegations) + path.join(sourceFolder, pattern.substring(numberOfNegations));
excludeContents.push(realPattern);
} else {
tl.debug('include content pattern: ' + pattern);
const realPattern = path.join(sourceFolder, pattern);
includeContents.push(realPattern);
}
}
// enumerate all files
let files: string[] = [];
const allPaths: string[] = tl.find(sourceFolder);
const allFiles: string[] = [];
// remove folder path
for (const p of allPaths) {
if (!tl.stats(p).isDirectory()) {
allFiles.push(p);
}
}
// if we only have exclude filters, we need add a include all filter, so we can have something to exclude.
if (includeContents.length === 0 && excludeContents.length > 0) {
includeContents.push('**');
}
tl.debug("counted " + allFiles.length + " files in the source tree");
// a map to eliminate duplicates
const pathsSeen = {};
// minimatch options
const matchOptions: tl.MatchOptions = { matchBase: true, dot: true };
if (os.platform() === 'win32') {
matchOptions.nocase = true;
}
// apply include filter
for (const pattern of includeContents) {
tl.debug('Include matching ' + pattern);
// let minimatch do the actual filtering
const matches: string[] = tl.match(allFiles, pattern, matchOptions);
tl.debug('Include matched ' + matches.length + ' files');
for (const matchPath of matches) {
if (!pathsSeen.hasOwnProperty(matchPath)) {
pathsSeen[matchPath] = true;
files.push(matchPath);
}
}
}
// apply exclude filter
for (const pattern of excludeContents) {
tl.debug('Exclude matching ' + pattern);
// let minimatch do the actual filtering
const matches: string[] = tl.match(files, pattern, matchOptions);
tl.debug('Exclude matched ' + matches.length + ' files');
files = [];
for (const matchPath of matches) {
files.push(matchPath);
}
}
return files;
}
示例8: Error
filesList.forEach(solutionFile => {
if (!tl.stats(solutionFile).isFile()) {
throw new Error(tl.loc("NotARegularFile", solutionFile));
}
});
示例9: pathExistsAsDirectory
export function pathExistsAsDirectory(path: string) {
return tl.exist(path) && tl.stats(path).isDirectory();
}
示例10: pathExistsAsFile
export function pathExistsAsFile(path: string) {
return tl.exist(path) && tl.stats(path).isFile();
}