tfs
Version:
NodeJS wrapper for Team Foundation Source Control CLI.
187 lines (159 loc) • 5.66 kB
JavaScript
var output = require('./utils/output'),
fileExists = require('./utils/fileExists'),
fs = require('fs'),
settingsPath = __dirname + '/../config/settings.json';
module.exports = setup;
/**
* Get TFS settings (after starting setting up if they don't exist yet)
*
* @version 1.3.0
*
* @return {object} Settings
*/
function setup() {
if (!fileExists(settingsPath)) {
buildSettings();
}
var settings = fs.readFileSync(settingsPath, 'utf8');
settings = JSON.parse(settings);
if (!settings.tfPath || !settings.vsArchitecture || !settings.vsVersion) {
buildSettings();
}
// Rebuild settings if TF.exe has been uninstalled/updated
if (!fileExists(settings.tfPath)) {
buildSettings();
}
return settings;
}
/**
* Look for TFS command line tool and create settings file
*/
function buildSettings() {
var pf32Path = process.env['ProgramFiles(x86)'],
pf64Path = process.env.ProgramFiles,
settings,
tfPath = '/Common7/IDE/TF.exe';
switch (true) {
case fileExists(pf32Path + '/Microsoft Visual Studio/2019/Enterprise', true):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/TF.exe',
vsArchitecture: 32,
vsVersion: 2019
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio/2019/Professional', true):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio/2019/Professional/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/TF.exe',
vsArchitecture: 32,
vsVersion: 2019
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio/2019/Community', true):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/TF.exe',
vsArchitecture: 32,
vsVersion: 2019
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio/2017/Enterprise', true):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio/2017/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/TF.exe',
vsArchitecture: 32,
vsVersion: 2017
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio/2017/Professional', true):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio/2017/Professional/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/TF.exe',
vsArchitecture: 32,
vsVersion: 2017
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio/2017/Community', true):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/TF.exe',
vsArchitecture: 32,
vsVersion: 2017
};
break;
case fileExists(pf64Path + '/Microsoft Visual Studio 14.0' + tfPath):
settings = {
tfPath: pf64Path + '/Microsoft Visual Studio 14.0' + tfPath,
vsArchitecture: 64,
vsVersion: 2015
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio 14.0' + tfPath):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio 14.0' + tfPath,
vsArchitecture: 32,
vsVersion: 2015
};
break;
case fileExists(pf64Path + '/Microsoft Visual Studio 12.0' + tfPath):
settings = {
tfPath: pf64Path + '/Microsoft Visual Studio 12.0' + tfPath,
vsArchitecture: 64,
vsVersion: 2013
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio 12.0' + tfPath):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio 12.0' + tfPath,
vsArchitecture: 32,
vsVersion: 2013
};
break;
case fileExists(pf64Path + '/Microsoft Visual Studio 11.0' + tfPath):
settings = {
tfPath: pf64Path + '/Microsoft Visual Studio 11.0' + tfPath,
vsArchitecture: 64,
vsVersion: 2012
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio 11.0' + tfPath):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio 11.0' + tfPath,
vsArchitecture: 32,
vsVersion: 2012
};
break;
case fileExists(pf64Path + '/Microsoft Visual Studio 10.0' + tfPath):
settings = {
tfPath: pf64Path + '/Microsoft Visual Studio 10.0' + tfPath,
vsArchitecture: 64,
vsVersion: 2010
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio 10.0' + tfPath):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio 10.0' + tfPath,
vsArchitecture: 32,
vsVersion: 2010
};
break;
case fileExists(pf64Path + '/Microsoft Visual Studio 9.0' + tfPath):
settings = {
tfPath: pf64Path + '/Microsoft Visual Studio 9.0' + tfPath,
vsArchitecture: 64,
vsVersion: 2008
};
break;
case fileExists(pf32Path + '/Microsoft Visual Studio 9.0' + tfPath):
settings = {
tfPath: pf32Path + '/Microsoft Visual Studio 9.0' + tfPath,
vsArchitecture: 32,
vsVersion: 2008
};
break;
case fileExists(__dirname + '/../test/.mock'):
settings = {};
break;
default:
output.error('Impossible to find you TF.exe');
break;
}
output.info('Writing ' + settingsPath);
var fileSource = JSON.stringify(settings, null, 2);
fs.writeFileSync(settingsPath, fileSource, 'utf8');
}