77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| const fs = require('fs')
 | |
| const path = require('path')
 | |
| 
 | |
| function isPositiveAnswer (value) {
 | |
|   const lowerValue = value.toLowerCase()
 | |
|   return lowerValue === 'yes' || lowerValue === '1' || lowerValue === 'true'
 | |
| }
 | |
| 
 | |
| exports.toBooleanConfig = function toBooleanConfig (configValue) {
 | |
|   if (configValue && typeof configValue === 'string') {
 | |
|     return (isPositiveAnswer(configValue))
 | |
|   }
 | |
|   return configValue
 | |
| }
 | |
| 
 | |
| exports.toArrayConfig = function toArrayConfig (configValue, separator = ',', fallback) {
 | |
|   if (configValue && typeof configValue === 'string') {
 | |
|     return (configValue.split(separator).map(arrayItem => arrayItem.trim()))
 | |
|   }
 | |
|   return fallback
 | |
| }
 | |
| 
 | |
| exports.toIntegerConfig = function toIntegerConfig (configValue) {
 | |
|   if (configValue && typeof configValue === 'string') {
 | |
|     return parseInt(configValue)
 | |
|   }
 | |
|   return configValue
 | |
| }
 | |
| 
 | |
| exports.getGitCommit = function getGitCommit (repodir) {
 | |
|   try {
 | |
|     // prefer using git to get the current ref, as poking in .git is very fragile
 | |
|     return require('child_process').execSync('git rev-parse HEAD', {
 | |
|       stdio: ['pipe', 'pipe', 'ignore'],
 | |
|       encoding: 'utf-8'
 | |
|     }).replace('\n', '')
 | |
|   } catch (e) {
 | |
|     // there was an error running git, try to parse refs ourselves
 | |
|     if (!fs.existsSync(repodir + '/.git/HEAD')) {
 | |
|       // there is no HEAD information
 | |
|       return undefined
 | |
|     }
 | |
|     let reference = fs.readFileSync(repodir + '/.git/HEAD', 'utf8')
 | |
|     if (reference.startsWith('ref: ')) {
 | |
|       // HEAD references another ref, try to get the commit SHA from .git/ref/heads
 | |
|       reference = reference.substr(5).replace('\n', '')
 | |
|       const refPath = path.resolve(repodir + '/.git', reference)
 | |
|       if (!fs.existsSync(refPath)) {
 | |
|         // ref does not exist in .git/ref/heads
 | |
|         return undefined
 | |
|       }
 | |
|       reference = fs.readFileSync(refPath, 'utf8')
 | |
|     }
 | |
|     reference = reference.replace('\n', '')
 | |
|     return reference
 | |
|   }
 | |
| }
 | |
| 
 | |
| exports.getGitHubURL = function getGitHubURL (repo, reference) {
 | |
|   // if it's not a github reference, we handle handle that anyway
 | |
|   if (!repo.startsWith('https://github.com') && !repo.startsWith('git@github.com')) {
 | |
|     return repo
 | |
|   }
 | |
|   if (repo.startsWith('git@github.com') || repo.startsWith('ssh://git@github.com')) {
 | |
|     repo = repo.replace(/^(ssh:\/\/)?git@github.com:/, 'https://github.com/')
 | |
|   }
 | |
| 
 | |
|   if (repo.endsWith('.git')) {
 | |
|     repo = repo.replace(/\.git$/, '/')
 | |
|   } else if (!repo.endsWith('/')) {
 | |
|     repo = repo + '/'
 | |
|   }
 | |
|   return repo + 'tree/' + reference
 | |
| }
 |