41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google Inc. All Rights Reserved. | ||
|  |  * | ||
|  |  * Use of this source code is governed by an MIT-style license that can be | ||
|  |  * found in the LICENSE file at https://angular.io/license
 | ||
|  |  */ | ||
|  | 
 | ||
|  | import {exec} from 'shelljs'; | ||
|  | import {getRepoBaseDir} from './config'; | ||
|  | 
 | ||
|  | /** | ||
|  |  * A list of all files currently in the repo which have been modified since the provided sha. | ||
|  |  * | ||
|  |  * git diff | ||
|  |  * Deleted files (--diff-filter=d) are not included as they are not longer present in the repo | ||
|  |  * and can not be checked anymore. | ||
|  |  * | ||
|  |  * git ls-files | ||
|  |  * Untracked files (--others), which are not matched by .gitignore (--exclude-standard) | ||
|  |  * as they are expected to become tracked files. | ||
|  |  */ | ||
|  | export function allChangedFilesSince(sha = 'HEAD') { | ||
|  |   const diffFiles = gitOutputAsArray(`git diff --name-only --diff-filter=d ${sha}`); | ||
|  |   const untrackedFiles = gitOutputAsArray(`git ls-files --others --exclude-standard`); | ||
|  |   // Use a set to deduplicate the list as its possible for a file to show up in both lists.
 | ||
|  |   return Array.from(new Set([...diffFiles, ...untrackedFiles])); | ||
|  | } | ||
|  | 
 | ||
|  | export function allFiles() { | ||
|  |   return gitOutputAsArray(`git ls-files`); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function gitOutputAsArray(cmd: string) { | ||
|  |   return exec(cmd, {cwd: getRepoBaseDir(), silent: true}) | ||
|  |       .split('\n') | ||
|  |       .map(x => x.trim()) | ||
|  |       .filter(x => !!x); | ||
|  | } |