mirror of
				https://github.com/theoludwig/programming-challenges.git
				synced 2025-09-11 23:11:21 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			1017 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1017 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import simpleGit from 'simple-git'
 | |
| 
 | |
| import { Challenge } from './Challenge'
 | |
| import { Solution } from './Solution'
 | |
| 
 | |
| const git = simpleGit()
 | |
| 
 | |
| const solutionsRegex = new RegExp(
 | |
|   /challenges\/[\s\S]*\/solutions\/(c|cpp|cs|dart|java|javascript|python|rust|typescript)\/[\s\S]*\/(solution|Solution).(c|cpp|cs|dart|java|js|py|rs|ts)/
 | |
| )
 | |
| 
 | |
| class GitAffected {
 | |
|   public async getAffectedSolutions (): Promise<Solution[]> {
 | |
|     await git.add('.')
 | |
|     const diff = await git.diff(['--name-only', '--staged'])
 | |
|     const affectedSolutionsPaths = diff.split('\n').filter((currentDiff) => {
 | |
|       return solutionsRegex.test(currentDiff)
 | |
|     })
 | |
|     return affectedSolutionsPaths.map((solution) => {
 | |
|       const [, challengeName, , programmingLanguageName, solutionName] =
 | |
|         solution.split('/')
 | |
|       return new Solution({
 | |
|         challenge: new Challenge({
 | |
|           name: challengeName
 | |
|         }),
 | |
|         name: solutionName,
 | |
|         programmingLanguageName
 | |
|       })
 | |
|     })
 | |
|   }
 | |
| }
 | |
| 
 | |
| export const gitAffected = new GitAffected()
 |