Full Code of microsoft/azure-repos-vscode for AI

master 6bc90f085308 cached
168 files
1.0 MB
244.4k tokens
863 symbols
1 requests
Download .txt
Showing preview only (1,121K chars total). Download the full file or copy to clipboard to get everything.
Repository: microsoft/azure-repos-vscode
Branch: master
Commit: 6bc90f085308
Files: 168
Total size: 1.0 MB

Directory structure:
gitextract_ylv2h823/

├── .gitattributes
├── .gitignore
├── .vscode/
│   ├── launch.json
│   ├── settings.json
│   └── tasks.json
├── .vscodeignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── DEPRECATED.md
├── LICENSE.txt
├── README.md
├── TFVC_README.md
├── ThirdPartyNotices.txt
├── gulpfile.js
├── package.json
├── patches/
│   └── vso-node-api/
│       └── handlers/
│           └── ntlm.js
├── src/
│   ├── clients/
│   │   ├── baseclient.ts
│   │   ├── buildclient.ts
│   │   ├── coreapiclient.ts
│   │   ├── feedbackclient.ts
│   │   ├── gitclient.ts
│   │   ├── httpclient.ts
│   │   ├── repositoryinfoclient.ts
│   │   ├── soapclient.ts
│   │   ├── teamservicesclient.ts
│   │   ├── tfscatalogsoapclient.ts
│   │   └── witclient.ts
│   ├── contexts/
│   │   ├── externalcontext.ts
│   │   ├── gitcontext.ts
│   │   ├── repocontextfactory.ts
│   │   ├── repositorycontext.ts
│   │   ├── servercontext.ts
│   │   └── tfvccontext.ts
│   ├── credentialstore/
│   │   ├── credential.ts
│   │   ├── credentialstore.ts
│   │   ├── interfaces/
│   │   │   └── icredentialstore.ts
│   │   ├── linux/
│   │   │   ├── file-token-storage.ts
│   │   │   └── linux-file-api.ts
│   │   ├── osx/
│   │   │   ├── osx-keychain-api.ts
│   │   │   ├── osx-keychain-parser.js
│   │   │   └── osx-keychain.js
│   │   └── win32/
│   │       ├── win-credstore-api.ts
│   │       ├── win-credstore-parser.js
│   │       └── win-credstore.js
│   ├── extension.ts
│   ├── extensionmanager.ts
│   ├── helpers/
│   │   ├── constants.ts
│   │   ├── credentialmanager.ts
│   │   ├── logger.ts
│   │   ├── repoutils.ts
│   │   ├── settings.ts
│   │   ├── strings.ts
│   │   ├── urlbuilder.ts
│   │   ├── useragentprovider.ts
│   │   ├── utils.ts
│   │   ├── vscodeutils.interfaces.ts
│   │   └── vscodeutils.ts
│   ├── info/
│   │   ├── credentialinfo.ts
│   │   ├── extensionrequesthandler.ts
│   │   ├── repositoryinfo.ts
│   │   └── userinfo.ts
│   ├── services/
│   │   ├── build.ts
│   │   ├── coreapi.ts
│   │   ├── gitvc.ts
│   │   ├── telemetry.ts
│   │   └── workitemtracking.ts
│   ├── team-extension.ts
│   └── tfvc/
│       ├── commands/
│       │   ├── add.ts
│       │   ├── argumentbuilder.ts
│       │   ├── checkin.ts
│       │   ├── commandhelper.ts
│       │   ├── delete.ts
│       │   ├── findconflicts.ts
│       │   ├── findworkspace.ts
│       │   ├── getfilecontent.ts
│       │   ├── getinfo.ts
│       │   ├── getversion.ts
│       │   ├── rename.ts
│       │   ├── resolveconflicts.ts
│       │   ├── status.ts
│       │   ├── sync.ts
│       │   └── undo.ts
│       ├── interfaces.ts
│       ├── scm/
│       │   ├── commithoverprovider.ts
│       │   ├── decorationprovider.ts
│       │   ├── model.ts
│       │   ├── resource.ts
│       │   ├── resourcegroups.ts
│       │   ├── status.ts
│       │   └── tfvccontentprovider.ts
│       ├── tfcommandlinerunner.ts
│       ├── tfvc-extension.ts
│       ├── tfvcerror.ts
│       ├── tfvcoutput.ts
│       ├── tfvcrepository.ts
│       ├── tfvcscmprovider.ts
│       ├── tfvcsettings.ts
│       ├── tfvcversion.ts
│       ├── uihelper.ts
│       └── util.ts
├── test/
│   ├── contexts/
│   │   ├── contexthelper.ts
│   │   ├── externalcontext.test.ts
│   │   ├── gitcontext.test.ts
│   │   ├── servercontext.test.ts
│   │   └── testrepos/
│   │       ├── emptyconfig/
│   │       │   └── dotgit/
│   │       │       └── config
│   │       ├── githubrepo/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       └── config
│   │       ├── gitrepo/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── jeyou/
│   │       │                   └── approved-pr
│   │       ├── gitrepo-old-ssh/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       ├── gitrepo-ssh/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       ├── gitrepo-ssh.v3/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       ├── tfsrepo/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       └── tfsrepo-ssh/
│   │           └── dotgit/
│   │               ├── HEAD
│   │               ├── config
│   │               └── refs/
│   │                   └── heads/
│   │                       └── master
│   ├── helpers/
│   │   ├── logger.test.ts
│   │   ├── repoutils.test.ts
│   │   ├── testrepos/
│   │   │   └── gitreposubfolder/
│   │   │       ├── dotgit/
│   │   │       │   └── config
│   │   │       └── folder/
│   │   │           └── subfolder/
│   │   │               └── README.md
│   │   ├── urlbuilder.test.ts
│   │   └── utils.test.ts
│   ├── index.ts
│   ├── info/
│   │   ├── credentialinfo.test.ts
│   │   ├── repositoryinfo.test.ts
│   │   └── userinfo.test.ts
│   ├── services/
│   │   ├── build.test.ts
│   │   ├── gitvc.test.ts
│   │   └── workitemtracking.test.ts
│   └── tfvc/
│       ├── commands/
│       │   ├── add.test.ts
│       │   ├── argumentbuilder.test.ts
│       │   ├── checkin.test.ts
│       │   ├── commandhelper.test.ts
│       │   ├── delete.test.ts
│       │   ├── findconflicts.test.ts
│       │   ├── findworkspace.test.ts
│       │   ├── getfilecontent.test.ts
│       │   ├── getinfo.test.ts
│       │   ├── getversion.test.ts
│       │   ├── rename.test.ts
│       │   ├── resolveconflicts.test.ts
│       │   ├── status.test.ts
│       │   ├── sync.test.ts
│       │   └── undo.test.ts
│       ├── scm/
│       │   ├── resourcegroup.test.ts
│       │   └── status.test.ts
│       ├── tfvcerror.test.ts
│       └── tfvcversion.test.ts
├── test-integration/
│   ├── clients/
│   │   └── teamservicesclient.integration.test.ts
│   ├── contexts/
│   │   └── servercontext.integration.test.ts
│   ├── helpers/
│   │   └── credentialmanager.test.ts
│   ├── helpers-integration/
│   │   ├── mocks.ts
│   │   └── testsettings.ts
│   ├── index.ts
│   └── services/
│       ├── build.integration.test.ts
│       ├── gitvc.integration.test.ts
│       └── workitemtracking.integration.test.ts
├── tsconfig.json
└── tslint.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto


================================================
FILE: .gitignore
================================================
node_modules/
out/
*.vsix
team-extension.log
*.zip
.taskkey


================================================
FILE: .vscode/launch.json
================================================
// A launch configuration that compiles the extension and then opens it inside a new window
// "preLaunchTask": "npm"
{
	"version": "0.1.0",
	"configurations": [
		{
			"name": "Launch Extension",
			"type": "extensionHost",
			"request": "launch",
			"runtimeExecutable": "${execPath}",
			"args": ["--extensionDevelopmentPath=${workspaceRoot}" ],
			"stopOnEntry": false,
			"sourceMaps": true,
			"outDir": "${workspaceRoot}/out/src",
			"preLaunchTask": "publishbuild"
		},
		{
			"name": "Launch Tests",
			"type": "extensionHost",
			"request": "launch",
			"runtimeExecutable": "${execPath}",
			"args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ],
			"stopOnEntry": false,
			"sourceMaps": true,
			"outDir": "${workspaceRoot}/out/test",
			"preLaunchTask": "publishall"
		},
		{
			"name": "Launch Integration Tests",
			"type": "extensionHost",
			"request": "launch",
			"runtimeExecutable": "${execPath}",
			"args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test-integration" ],
			"stopOnEntry": false,
			"sourceMaps": true,
			"outDir": "${workspaceRoot}/out/test-integration",
			"preLaunchTask": "publishall"
		}
	]
}

================================================
FILE: .vscode/settings.json
================================================
// Place your settings in this file to overwrite default and user settings.
{
	"files.exclude": {
		"out": false // set this to true to hide the "out" folder with the compiled JS files
	},
	"search.exclude": {
		"out": true // set this to false to include "out" folder in search results
	},
	"typescript.tsdk": "./node_modules/typescript/lib" // we want to use the TS server from our node_modules folder to control its version
}

================================================
FILE: .vscode/tasks.json
================================================
// Available variables which can be used inside of strings.
// ${workspaceRoot}: the root folder of the team
// ${file}: the current opened file
// ${fileBasename}: the current opened file's basename
// ${fileDirname}: the current opened file's dirname
// ${fileExtname}: the current opened file's extension
// ${cwd}: the current working directory of the spawned process

{
	"version": "0.1.0",
	"command": "gulp",
	"isShellCommand": true,
	"problemMatcher": "$gulp-tsc",
	"args": [
		"--no-color"
	],
	"tasks": [
		{
			"isBuildCommand": true,
			"taskName": "publishall",
			"showOutput": "always"
		},
		{
			"isTestCommand": true,
			"taskName": "test",
			"showOutput": "always"
		},
		{
			"isBuildCommand": false,
			"taskName": "clean",
			"showOutput": "always"
		}
	]
}

================================================
FILE: .vscodeignore
================================================
.vscode/**
typings/**
out/test/**
out/test-integration/**
out/results/**
test/**
test-integration/**
src/**
**/*.map
.gitignore
tsconfig.json
gulpfile.js
tsd.json
tslint.json
team-extension.log
**/*.zip
.taskkey

================================================
FILE: CHANGELOG.md
================================================


## [v1.161.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.161.1) (2020-09-04)

The Azure Repos VS Code extension has been sunsetted.
Learn more at in our [deprecation notice](https://aka.ms/AA9k2vv).
This version of the extension contains no functional changes other than a message box directing you to that notice.

## [v1.161.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.161.0) (2019-11-06)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.149.2...v1.161.0)

**Closed issues:**

- Feature request: Change default for restrict workspace [\#329](https://github.com/microsoft/azure-repos-vscode/issues/329)
- Source Control Panel Blank - VSCode 1.40.0-insider [\#586](https://github.com/microsoft/azure-repos-vscode/issues/586)
- Octicons not Rendering in bottom task bar [\#572](https://github.com/microsoft/azure-repos-vscode/issues/572)
- Source Control window \(TFVC\) is blank but icon shows changes [\#571](https://github.com/microsoft/azure-repos-vscode/issues/571)
- vsts [\#568](https://github.com/microsoft/azure-repos-vscode/issues/568)
- explorer in vs code gets closed [\#567](https://github.com/microsoft/azure-repos-vscode/issues/567)
- I am using a local workspace, but it is saying that I am using a server workspace [\#552](https://github.com/microsoft/azure-repos-vscode/issues/552)
- The setting team.pinnedQueries in VSCode doesn't return the correct result [\#549](https://github.com/microsoft/azure-repos-vscode/issues/549)
- "Browse your pull requests" open incorrect url [\#534](https://github.com/microsoft/azure-repos-vscode/issues/534)
- Extension causes high cpu load [\#533](https://github.com/microsoft/azure-repos-vscode/issues/533)
- TFS 2017 on premise - No source control providers registered [\#531](https://github.com/microsoft/azure-repos-vscode/issues/531)
- Azure Repos taskbar missing [\#530](https://github.com/microsoft/azure-repos-vscode/issues/530)
- Extension causes high cpu load [\#501](https://github.com/microsoft/azure-repos-vscode/issues/501)
- Extension causes high cpu load [\#495](https://github.com/microsoft/azure-repos-vscode/issues/495)
- Extension causes high cpu load [\#487](https://github.com/microsoft/azure-repos-vscode/issues/487)

**Merged pull requests:**

- Fix undefined access error [\#590](https://github.com/microsoft/azure-repos-vscode/pull/590) ([joaomoreno](https://github.com/joaomoreno))
- Updated icon references to match vscode documentation [\#573](https://github.com/microsoft/azure-repos-vscode/pull/573) ([AVDW](https://github.com/AVDW))
- Use vscode.env.openExternal to open browser windows when available [\#498](https://github.com/microsoft/azure-repos-vscode/pull/498) ([Chuxel](https://github.com/Chuxel))

## [v1.149.2](https://github.com/microsoft/azure-repos-vscode/tree/v1.149.2) (2019-02-26)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.144.1...v1.149.2)

**Closed issues:**

- Extension causes high cpu load [\#484](https://github.com/microsoft/azure-repos-vscode/issues/484)
- Extension causes high cpu load [\#482](https://github.com/microsoft/azure-repos-vscode/issues/482)
- Extension causes high cpu load [\#481](https://github.com/microsoft/azure-repos-vscode/issues/481)
- Extension causes high cpu load [\#480](https://github.com/microsoft/azure-repos-vscode/issues/480)
- Extension causes high cpu load [\#478](https://github.com/microsoft/azure-repos-vscode/issues/478)
- Extension causes high cpu load [\#475](https://github.com/microsoft/azure-repos-vscode/issues/475)
- Extension causes high cpu load [\#474](https://github.com/microsoft/azure-repos-vscode/issues/474)
- Extension causes high cpu load [\#470](https://github.com/microsoft/azure-repos-vscode/issues/470)
- Replace the user of the 'open' and 'opener' modules with vscode.open command [\#464](https://github.com/microsoft/azure-repos-vscode/issues/464)
- Extension causes high cpu load [\#462](https://github.com/microsoft/azure-repos-vscode/issues/462)
- Feature Request: Start pipelines from VS Code [\#453](https://github.com/microsoft/azure-repos-vscode/issues/453)
- Unable to configure Azure DevOps PAT [\#452](https://github.com/microsoft/azure-repos-vscode/issues/452)

**Merged pull requests:**

- Don't bypass TLS verification [\#490](https://github.com/microsoft/azure-repos-vscode/pull/490) ([jrbriggs](https://github.com/jrbriggs))

## [v1.144.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.144.1) (2018-11-05)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.142.0...v1.144.1)

**Closed issues:**

- "Azure Repos" extension not found in search [\#440](https://github.com/microsoft/azure-repos-vscode/issues/440)
- VSTS is now Azure Repos : Finishing touches [\#437](https://github.com/microsoft/azure-repos-vscode/issues/437)
- August 20 update error [\#424](https://github.com/microsoft/azure-repos-vscode/issues/424)

**Merged pull requests:**

- Set a minimum 10 minute polling interval [\#450](https://github.com/microsoft/azure-repos-vscode/pull/450) ([jrbriggs](https://github.com/jrbriggs))

## [v1.142.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.142.0) (2018-10-04)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.136.0...v1.142.0)

**Closed issues:**

- "Associate Work Items" not getting reflected in VSTS UI [\#430](https://github.com/microsoft/azure-repos-vscode/issues/430)
- TFVC only shows changes for one folder [\#426](https://github.com/microsoft/azure-repos-vscode/issues/426)
- New files/folders add to the project are not reflected as pending changes [\#422](https://github.com/microsoft/azure-repos-vscode/issues/422)
- Cannot link VS Code in OSX to VSTS [\#421](https://github.com/microsoft/azure-repos-vscode/issues/421)

**Merged pull requests:**

- Update references to Azure Repos/DevOps [\#429](https://github.com/microsoft/azure-repos-vscode/pull/429) ([kaylangan](https://github.com/kaylangan))

## [v1.136.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.136.0) (2018-05-23)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.133.0...v1.136.0)

**Closed issues:**

- VSTS has stopped tracking changes [\#403](https://github.com/microsoft/azure-repos-vscode/issues/403)
- New-TfsChangeset used in powershell script as a build step [\#402](https://github.com/microsoft/azure-repos-vscode/issues/402)
- \(Team\)Unable to store credentials for this Host: [\#396](https://github.com/microsoft/azure-repos-vscode/issues/396)
- VSTS modal dialog close event [\#390](https://github.com/microsoft/azure-repos-vscode/issues/390)
- Can not "Associate work items" after updating to VScode 1.16 [\#314](https://github.com/microsoft/azure-repos-vscode/issues/314)

**Merged pull requests:**

- Add support for azure.com and other SSH URL formats [\#407](https://github.com/microsoft/azure-repos-vscode/pull/407) ([jeschu1](https://github.com/jeschu1))
- Consuming new version of vsts-device-flow-auth [\#406](https://github.com/microsoft/azure-repos-vscode/pull/406) ([chrispat](https://github.com/chrispat))
- Update readme to clarify TF.exe authentication [\#372](https://github.com/microsoft/azure-repos-vscode/pull/372) ([b-e-n-j](https://github.com/b-e-n-j))

## [v1.133.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.133.0) (2018-04-03)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.122.0...v1.133.0)

**Fixed bugs:**

- Unable to find the TF executable [\#295](https://github.com/microsoft/azure-repos-vscode/issues/295)

**Closed issues:**

- What is the future of this extension? [\#370](https://github.com/microsoft/azure-repos-vscode/issues/370)
- VSTS does not prompt for credentials when adding a TFS folder [\#368](https://github.com/microsoft/azure-repos-vscode/issues/368)
- There's no audio with the TFVC Source Code Control in Visual Studio Code video [\#363](https://github.com/microsoft/azure-repos-vscode/issues/363)
- Is there a way to enforce code review with this extension \#question  [\#354](https://github.com/microsoft/azure-repos-vscode/issues/354)
- Cannot sign in to TFS: Could not load type 'Microsoft.TeamFoundation.Common.TeamFoundationIdentityReference' [\#353](https://github.com/microsoft/azure-repos-vscode/issues/353)
- Can't associate Work Items from another Team Project [\#351](https://github.com/microsoft/azure-repos-vscode/issues/351)
- The associate work item, not populating commit message [\#341](https://github.com/microsoft/azure-repos-vscode/issues/341)
- VSCode recommends this because I have git installed? [\#338](https://github.com/microsoft/azure-repos-vscode/issues/338)
- @CurrentIteration doesn't seem to be working pinned queries [\#337](https://github.com/microsoft/azure-repos-vscode/issues/337)
- Is this extension for Git based repos only? [\#336](https://github.com/microsoft/azure-repos-vscode/issues/336)
- Git repositories cloned from VSTS/visualstudio.com using the "new" url aren't detected by the vsts extension [\#333](https://github.com/microsoft/azure-repos-vscode/issues/333)
- VSTS PAT [\#327](https://github.com/microsoft/azure-repos-vscode/issues/327)
-  TF400324: Team Foundation services are not available from server  [\#320](https://github.com/microsoft/azure-repos-vscode/issues/320)
- Unable to find the TF executable [\#317](https://github.com/microsoft/azure-repos-vscode/issues/317)
- Incorrectly claiming I am using a server workspace [\#315](https://github.com/microsoft/azure-repos-vscode/issues/315)
- selecting them [\#307](https://github.com/microsoft/azure-repos-vscode/issues/307)
- Get latest source code from TFS [\#305](https://github.com/microsoft/azure-repos-vscode/issues/305)
- Soap Service error - can't connect to TFS Projects from company server [\#304](https://github.com/microsoft/azure-repos-vscode/issues/304)
- Visual Studio authentication popup  [\#303](https://github.com/microsoft/azure-repos-vscode/issues/303)
-     Team 00 关闭 错误command 'team.Signin' not found [\#301](https://github.com/microsoft/azure-repos-vscode/issues/301)
- Impossible to switch to TFS [\#290](https://github.com/microsoft/azure-repos-vscode/issues/290)
- \(team\) socket hang up / \(team\) undefined after switch to Azure VM [\#288](https://github.com/microsoft/azure-repos-vscode/issues/288)
- Unable to connect TFVC to the existing Team foundation server 2015 update 3 [\#287](https://github.com/microsoft/azure-repos-vscode/issues/287)

**Merged pull requests:**

- Remove all telemetry data that could potential conflict with GDPR requirements. [\#377](https://github.com/microsoft/azure-repos-vscode/pull/377) ([ermeckle](https://github.com/ermeckle))
- Fixed "Associate work items" command for git source control \(\#314\) [\#367](https://github.com/microsoft/azure-repos-vscode/pull/367) ([dougrday](https://github.com/dougrday))
- Fix VSTS URL detection for "new-style" SSH clones [\#334](https://github.com/microsoft/azure-repos-vscode/pull/334) ([bearcage](https://github.com/bearcage))
- Visual Studio TF.exe file location [\#321](https://github.com/microsoft/azure-repos-vscode/pull/321) ([OzBob](https://github.com/OzBob))

## [v1.122.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.122.0) (2017-08-14)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.121.1...v1.122.0)

**Closed issues:**

- \[Help\] How to connect to my TFS account?  [\#294](https://github.com/microsoft/azure-repos-vscode/issues/294)
- Error:KEY\_TF\_BAD\_EXIT\_CODE error in android studio while cloning [\#275](https://github.com/microsoft/azure-repos-vscode/issues/275)

**Merged pull requests:**

- Check for symlink, add telemetry [\#302](https://github.com/microsoft/azure-repos-vscode/pull/302) ([jeffyoung](https://github.com/jeffyoung))
- Two changes for Sprint 122 [\#300](https://github.com/microsoft/azure-repos-vscode/pull/300) ([jeffyoung](https://github.com/jeffyoung))
- Fix for tf.exe domain authentication [\#291](https://github.com/microsoft/azure-repos-vscode/pull/291) ([dfrencham](https://github.com/dfrencham))

## [v1.121.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.121.1) (2017-07-13)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.121.0...v1.121.1)

## [v1.121.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.121.0) (2017-07-13)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.119.2...v1.121.0)

**Closed issues:**

- Continual Info bar popup [\#277](https://github.com/microsoft/azure-repos-vscode/issues/277)
- TFS do not show or include files outside of currently opened project/folder [\#273](https://github.com/microsoft/azure-repos-vscode/issues/273)

**Merged pull requests:**

- Add 'device flow' authentication option [\#282](https://github.com/microsoft/azure-repos-vscode/pull/282) ([jeffyoung](https://github.com/jeffyoung))
- Prevent welcome message on re-initialization [\#278](https://github.com/microsoft/azure-repos-vscode/pull/278) ([jeffyoung](https://github.com/jeffyoung))

## [v1.119.2](https://github.com/microsoft/azure-repos-vscode/tree/v1.119.2) (2017-07-06)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.119.1...v1.119.2)

**Closed issues:**

- Documentation: Location of TF.exe for Visual Studio 2017 install [\#269](https://github.com/microsoft/azure-repos-vscode/issues/269)
- "Logging is disabled" message in Console [\#263](https://github.com/microsoft/azure-repos-vscode/issues/263)
- Associate Work Items always shown, even when SCM Provider not VSTS [\#262](https://github.com/microsoft/azure-repos-vscode/issues/262)
- Non-English version of the TF executable [\#254](https://github.com/microsoft/azure-repos-vscode/issues/254)

## [v1.119.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.119.1) (2017-07-06)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.119.0...v1.119.1)

**Fixed bugs:**

- Pull Request URLs are incorrect for repositories with "limited refs" enabled [\#244](https://github.com/microsoft/azure-repos-vscode/issues/244)
- Including an add and a delete for the same file [\#241](https://github.com/microsoft/azure-repos-vscode/issues/241)

**Closed issues:**

- TF10139: check-in policies have not been satisfied [\#266](https://github.com/microsoft/azure-repos-vscode/issues/266)
- TFS workspace detected, but cannot switch to SCM provider [\#260](https://github.com/microsoft/azure-repos-vscode/issues/260)
- EPIPE error, how to get more info? [\#257](https://github.com/microsoft/azure-repos-vscode/issues/257)
- Error: command 'team.signin' not found \[mapped drive\] [\#245](https://github.com/microsoft/azure-repos-vscode/issues/245)
- TFS 2017 on premise [\#65](https://github.com/microsoft/azure-repos-vscode/issues/65)

**Merged pull requests:**

- Add details regarding .tfignore, location of tf.exe [\#276](https://github.com/microsoft/azure-repos-vscode/pull/276) ([jeffyoung](https://github.com/jeffyoung))
- Bump vscode engine version to 1.12.0 \(use withProgress\) [\#271](https://github.com/microsoft/azure-repos-vscode/pull/271) ([jeffyoung](https://github.com/jeffyoung))
- Handle cloaked folders in TFVC workspaces [\#270](https://github.com/microsoft/azure-repos-vscode/pull/270) ([jeffyoung](https://github.com/jeffyoung))
- Several miscellaneous fixes [\#268](https://github.com/microsoft/azure-repos-vscode/pull/268) ([jeffyoung](https://github.com/jeffyoung))
- Package file updates \(updates for 'Associate Work Items' menu option\) [\#267](https://github.com/microsoft/azure-repos-vscode/pull/267) ([jeffyoung](https://github.com/jeffyoung))
- Remove console.log message [\#265](https://github.com/microsoft/azure-repos-vscode/pull/265) ([jeffyoung](https://github.com/jeffyoung))
- Fix matching workspace folders \(primarily for 'restrictWorkspace'\) [\#264](https://github.com/microsoft/azure-repos-vscode/pull/264) ([jeffyoung](https://github.com/jeffyoung))
- Doc updates, initialize Telemetry earlier [\#259](https://github.com/microsoft/azure-repos-vscode/pull/259) ([jeffyoung](https://github.com/jeffyoung))
- Add Welcome message on installation [\#256](https://github.com/microsoft/azure-repos-vscode/pull/256) ([jeffyoung](https://github.com/jeffyoung))
- Add "More Details" button in scenario when Non-Enu TF.exe is configured [\#255](https://github.com/microsoft/azure-repos-vscode/pull/255) ([jeffyoung](https://github.com/jeffyoung))

## [v1.119.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.119.0) (2017-06-15)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.118.2...v1.119.0)

**Implemented enhancements:**

- Disable Team extension by workspace settings [\#23](https://github.com/microsoft/azure-repos-vscode/issues/23)
- Can we get this to work through a proxy? [\#19](https://github.com/microsoft/azure-repos-vscode/issues/19)

**Fixed bugs:**

- 401 Unathorized when trying to connect to on-premises TFS2015 Update 2 \(SSL\) [\#59](https://github.com/microsoft/azure-repos-vscode/issues/59)

**Closed issues:**

- What do the colored letter icons mean next to file names? [\#252](https://github.com/microsoft/azure-repos-vscode/issues/252)
- Unable to signin [\#247](https://github.com/microsoft/azure-repos-vscode/issues/247)
- Sync operation against TFS 2015 Update 2 fails unexpectedly. [\#223](https://github.com/microsoft/azure-repos-vscode/issues/223)
- Unauthorized access to Team Server when signing in [\#111](https://github.com/microsoft/azure-repos-vscode/issues/111)
- VSTS icon does not appear on Mac [\#58](https://github.com/microsoft/azure-repos-vscode/issues/58)
- Unable to connect to VSTS [\#51](https://github.com/microsoft/azure-repos-vscode/issues/51)

**Merged pull requests:**

- Ensure Keep-Alive is true for HTTPS connections [\#253](https://github.com/microsoft/azure-repos-vscode/pull/253) ([jeffyoung](https://github.com/jeffyoung))
- Update Repository Url for Limited Refs [\#251](https://github.com/microsoft/azure-repos-vscode/pull/251) ([jeffyoung](https://github.com/jeffyoung))
- Add more helpful text for TFVC set up [\#250](https://github.com/microsoft/azure-repos-vscode/pull/250) ([jeffyoung](https://github.com/jeffyoung))
- Add delete menu to file explorer [\#249](https://github.com/microsoft/azure-repos-vscode/pull/249) ([jeffyoung](https://github.com/jeffyoung))

## [v1.118.2](https://github.com/microsoft/azure-repos-vscode/tree/v1.118.2) (2017-05-25)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.118.1...v1.118.2)

**Closed issues:**

- Error: \(team\) Failed to find api location for area: core id: 603fe2ac-9723-48b9-88ad-09305aa6c6e1 [\#212](https://github.com/microsoft/azure-repos-vscode/issues/212)

**Merged pull requests:**

- Generate consistent telemetry id [\#243](https://github.com/microsoft/azure-repos-vscode/pull/243) ([jeffyoung](https://github.com/jeffyoung))
- Replace deprecated node-uuid with uuid [\#242](https://github.com/microsoft/azure-repos-vscode/pull/242) ([jeffyoung](https://github.com/jeffyoung))

## [v1.118.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.118.1) (2017-05-22)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.118.0...v1.118.1)

**Fixed bugs:**

- Sync not working as -collection specified in the command line [\#224](https://github.com/microsoft/azure-repos-vscode/issues/224)
- TFS2015 Update 3 could not find a project collection \(encoding issue\) [\#219](https://github.com/microsoft/azure-repos-vscode/issues/219)

**Closed issues:**

- team.Reinitialize not found [\#221](https://github.com/microsoft/azure-repos-vscode/issues/221)

**Merged pull requests:**

- Handle exceptions from TFVC Initialize/Reinitialize [\#239](https://github.com/microsoft/azure-repos-vscode/pull/239) ([jeffyoung](https://github.com/jeffyoung))
- formatting tweak [\#238](https://github.com/microsoft/azure-repos-vscode/pull/238) ([vtbassmatt](https://github.com/vtbassmatt))
- Check for 'core id' error \(TFS2013 RTM+\) [\#237](https://github.com/microsoft/azure-repos-vscode/pull/237) ([jeffyoung](https://github.com/jeffyoung))
- Handle error when required WIT api isn't present [\#236](https://github.com/microsoft/azure-repos-vscode/pull/236) ([jeffyoung](https://github.com/jeffyoung))
- Ensure messageOptions contains a value \(not undefined\) [\#235](https://github.com/microsoft/azure-repos-vscode/pull/235) ([jeffyoung](https://github.com/jeffyoung))
- Fix matching TF.exe \(.EXE, .exe\) [\#234](https://github.com/microsoft/azure-repos-vscode/pull/234) ([jeffyoung](https://github.com/jeffyoung))
- Add version of TFVC tooling to debug log file [\#233](https://github.com/microsoft/azure-repos-vscode/pull/233) ([jeffyoung](https://github.com/jeffyoung))
- Properly initialize MessageItems for showErrorMessage [\#232](https://github.com/microsoft/azure-repos-vscode/pull/232) ([jeffyoung](https://github.com/jeffyoung))
- TFVC Readme update \(How to acquire TF.exe\) [\#231](https://github.com/microsoft/azure-repos-vscode/pull/231) ([jeffyoung](https://github.com/jeffyoung))

## [v1.118.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.118.0) (2017-05-15)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.117.3...v1.118.0)

**Fixed bugs:**

- running the contributed command [\#204](https://github.com/microsoft/azure-repos-vscode/issues/204)

**Closed issues:**

- Feature Request: VSTS Build Status Notifications [\#225](https://github.com/microsoft/azure-repos-vscode/issues/225)
- TF.exe missing??? [\#222](https://github.com/microsoft/azure-repos-vscode/issues/222)
- Workspace not detected? Cannot select SCM Provider [\#217](https://github.com/microsoft/azure-repos-vscode/issues/217)
- vsts-vscode no longer working with VS2017? [\#211](https://github.com/microsoft/azure-repos-vscode/issues/211)
- duplicated icons in status bar [\#141](https://github.com/microsoft/azure-repos-vscode/issues/141)

**Merged pull requests:**

- Update package description to include mention of TFVC [\#230](https://github.com/microsoft/azure-repos-vscode/pull/230) ([jeffyoung](https://github.com/jeffyoung))
- Detect TEE CLC not recogizing workspace created by TF.exe [\#229](https://github.com/microsoft/azure-repos-vscode/pull/229) ([jeffyoung](https://github.com/jeffyoung))
- Handle \_JAVA\_OPTIONS env var \(used to address a Java heap error\) [\#228](https://github.com/microsoft/azure-repos-vscode/pull/228) ([jeffyoung](https://github.com/jeffyoung))
- Decode collection url and team project name [\#227](https://github.com/microsoft/azure-repos-vscode/pull/227) ([jeffyoung](https://github.com/jeffyoung))
- Ensure a folder is opened before running commands [\#220](https://github.com/microsoft/azure-repos-vscode/pull/220) ([jeffyoung](https://github.com/jeffyoung))
- Change extension category to `SCM Providers` [\#210](https://github.com/microsoft/azure-repos-vscode/pull/210) ([joaomoreno](https://github.com/joaomoreno))

## [v1.117.3](https://github.com/microsoft/azure-repos-vscode/tree/v1.117.3) (2017-05-05)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.117.2...v1.117.3)

**Fixed bugs:**

- team.Reinitialize not found [\#209](https://github.com/microsoft/azure-repos-vscode/issues/209)

**Merged pull requests:**

- Re-fix duplicate icons [\#215](https://github.com/microsoft/azure-repos-vscode/pull/215) ([jeffyoung](https://github.com/jeffyoung))

## [v1.117.2](https://github.com/microsoft/azure-repos-vscode/tree/v1.117.2) (2017-05-04)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.117.1...v1.117.2)

**Fixed bugs:**

- arg.startsWith is not a function [\#203](https://github.com/microsoft/azure-repos-vscode/issues/203)

**Merged pull requests:**

- Updating README with Feedback changes [\#214](https://github.com/microsoft/azure-repos-vscode/pull/214) ([jeffyoung](https://github.com/jeffyoung))
- Telemetry tweaks [\#213](https://github.com/microsoft/azure-repos-vscode/pull/213) ([jeffyoung](https://github.com/jeffyoung))
- Ensure the feedback status item is always available [\#208](https://github.com/microsoft/azure-repos-vscode/pull/208) ([jeffyoung](https://github.com/jeffyoung))
- Credential Store: Ensure we reject promises on failure [\#207](https://github.com/microsoft/azure-repos-vscode/pull/207) ([jeffyoung](https://github.com/jeffyoung))
- Re-add Reinitialize [\#206](https://github.com/microsoft/azure-repos-vscode/pull/206) ([jeffyoung](https://github.com/jeffyoung))
- Fix 'args.startsWith is not a function' [\#205](https://github.com/microsoft/azure-repos-vscode/pull/205) ([jeffyoung](https://github.com/jeffyoung))
- Add Feedback icon to status bar [\#202](https://github.com/microsoft/azure-repos-vscode/pull/202) ([jeffyoung](https://github.com/jeffyoung))
- TFVC: Add telemetry specific to Exe and CLC [\#201](https://github.com/microsoft/azure-repos-vscode/pull/201) ([jeffyoung](https://github.com/jeffyoung))
- Miscellaneous fix-ups [\#200](https://github.com/microsoft/azure-repos-vscode/pull/200) ([jeffyoung](https://github.com/jeffyoung))

## [v1.117.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.117.1) (2017-05-01)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.117.0...v1.117.1)

**Implemented enhancements:**

- Add a Changelog file to the repo to enable native Changelog view in VS Code [\#183](https://github.com/microsoft/azure-repos-vscode/issues/183)

**Closed issues:**

- Non-English version of the TF Executable [\#192](https://github.com/microsoft/azure-repos-vscode/issues/192)
- Wrong url for action "Team : View history" [\#189](https://github.com/microsoft/azure-repos-vscode/issues/189)

**Merged pull requests:**

- Add message and telemetry for getting latest VS2015 Update [\#199](https://github.com/microsoft/azure-repos-vscode/pull/199) ([jeffyoung](https://github.com/jeffyoung))
- Fix finding version in a multiline stdout [\#198](https://github.com/microsoft/azure-repos-vscode/pull/198) ([jeffyoung](https://github.com/jeffyoung))
- Adding check for server workspaces [\#197](https://github.com/microsoft/azure-repos-vscode/pull/197) ([jeffyoung](https://github.com/jeffyoung))
- README and TFVC\_README updates [\#196](https://github.com/microsoft/azure-repos-vscode/pull/196) ([jeffyoung](https://github.com/jeffyoung))
- Update RemoteUrl if we have no collection in workspace [\#195](https://github.com/microsoft/azure-repos-vscode/pull/195) ([jeffyoung](https://github.com/jeffyoung))
- Fix TFVC history url [\#194](https://github.com/microsoft/azure-repos-vscode/pull/194) ([jeffyoung](https://github.com/jeffyoung))
- Handle signout properly [\#193](https://github.com/microsoft/azure-repos-vscode/pull/193) ([jeffyoung](https://github.com/jeffyoung))
- Removing ability to store token in User settings [\#190](https://github.com/microsoft/azure-repos-vscode/pull/190) ([jeffyoung](https://github.com/jeffyoung))

## [v1.117.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.117.0) (2017-04-24)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.116.1...v1.117.0)

**Implemented enhancements:**

- TFSVC is listing all changes from the tfs workspace not the current visual studio code workspa [\#179](https://github.com/microsoft/azure-repos-vscode/issues/179)

**Fixed bugs:**

- guid specified for parameter projectid must not be guid.empty [\#178](https://github.com/microsoft/azure-repos-vscode/issues/178)
- Not able to use TFVC; Getting Forbidden \(403\) [\#172](https://github.com/microsoft/azure-repos-vscode/issues/172)

**Closed issues:**

- TFVC fails with a non-English version of TF.exe [\#180](https://github.com/microsoft/azure-repos-vscode/issues/180)

**Merged pull requests:**

- Restrict workspace to VS Code workspace \(and others\) [\#186](https://github.com/microsoft/azure-repos-vscode/pull/186) ([jeffyoung](https://github.com/jeffyoung))
- Disable functionalithy when no team project is found [\#184](https://github.com/microsoft/azure-repos-vscode/pull/184) ([jeffyoung](https://github.com/jeffyoung))

## [v1.116.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.116.1) (2017-04-20)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.116.0...v1.116.1)

**Closed issues:**

- TFVC: Error when trying to configure location [\#177](https://github.com/microsoft/azure-repos-vscode/issues/177)
- Could not find a workspace with mappings [\#174](https://github.com/microsoft/azure-repos-vscode/issues/174)

**Merged pull requests:**

- Add SOAP client to get project collections from TFS [\#182](https://github.com/microsoft/azure-repos-vscode/pull/182) ([jeffyoung](https://github.com/jeffyoung))

## [v1.116.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.116.0) (2017-04-12)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.115.0...v1.116.0)

**Implemented enhancements:**

- Getting Started [\#147](https://github.com/microsoft/azure-repos-vscode/issues/147)

**Closed issues:**

- Team: Signin Issue [\#162](https://github.com/microsoft/azure-repos-vscode/issues/162)
- Signin doesn't work [\#160](https://github.com/microsoft/azure-repos-vscode/issues/160)

**Merged pull requests:**

- README updates for v1.116.0 [\#171](https://github.com/microsoft/azure-repos-vscode/pull/171) ([jeffyoung](https://github.com/jeffyoung))
- Fix up opening diffs and changes [\#170](https://github.com/microsoft/azure-repos-vscode/pull/170) ([jeffyoung](https://github.com/jeffyoung))
- Add 'Show Me' button on how to set up a PAT [\#169](https://github.com/microsoft/azure-repos-vscode/pull/169) ([jeffyoung](https://github.com/jeffyoung))
- Fixes for first few bug bash bugs [\#168](https://github.com/microsoft/azure-repos-vscode/pull/168) ([jeffyoung](https://github.com/jeffyoung))
- Additional changes for linter [\#167](https://github.com/microsoft/azure-repos-vscode/pull/167) ([jeffyoung](https://github.com/jeffyoung))
- Filter a couple more events [\#166](https://github.com/microsoft/azure-repos-vscode/pull/166) ([jeffyoung](https://github.com/jeffyoung))
- Multi-Select and Undo All [\#165](https://github.com/microsoft/azure-repos-vscode/pull/165) ([jeffyoung](https://github.com/jeffyoung))
- Several fixes for Mac+Linux [\#164](https://github.com/microsoft/azure-repos-vscode/pull/164) ([jeffyoung](https://github.com/jeffyoung))
- Take latest version of VS Code SCM changes [\#163](https://github.com/microsoft/azure-repos-vscode/pull/163) ([jeffyoung](https://github.com/jeffyoung))
- Add checks for non-ENU tf\(.exe\) [\#158](https://github.com/microsoft/azure-repos-vscode/pull/158) ([jeffyoung](https://github.com/jeffyoung))
- Move linting after build [\#157](https://github.com/microsoft/azure-repos-vscode/pull/157) ([jeffyoung](https://github.com/jeffyoung))
- Always show 'included' group [\#156](https://github.com/microsoft/azure-repos-vscode/pull/156) ([jeffyoung](https://github.com/jeffyoung))
- Take 1.11.0 of vscode.proposed.d.ts [\#155](https://github.com/microsoft/azure-repos-vscode/pull/155) ([jeffyoung](https://github.com/jeffyoung))
- Various linting updates [\#154](https://github.com/microsoft/azure-repos-vscode/pull/154) ([jeffyoung](https://github.com/jeffyoung))
- Get vscode version for user-agent string [\#153](https://github.com/microsoft/azure-repos-vscode/pull/153) ([jeffyoung](https://github.com/jeffyoung))
- Some refactoring [\#152](https://github.com/microsoft/azure-repos-vscode/pull/152) ([jeffyoung](https://github.com/jeffyoung))
- A couple of message updates [\#151](https://github.com/microsoft/azure-repos-vscode/pull/151) ([jeffyoung](https://github.com/jeffyoung))
- Send a custom User-Agent string in headers [\#150](https://github.com/microsoft/azure-repos-vscode/pull/150) ([jeffyoung](https://github.com/jeffyoung))
- Just a few more changes... [\#149](https://github.com/microsoft/azure-repos-vscode/pull/149) ([jeffyoung](https://github.com/jeffyoung))
- Update visibility of commands in palette [\#148](https://github.com/microsoft/azure-repos-vscode/pull/148) ([jeffyoung](https://github.com/jeffyoung))
- Some fixes related to the Undo menu option and command [\#145](https://github.com/microsoft/azure-repos-vscode/pull/145) ([jeffyoung](https://github.com/jeffyoung))
- Several fixes after doing some Tfvc conflicts testing [\#144](https://github.com/microsoft/azure-repos-vscode/pull/144) ([jeffyoung](https://github.com/jeffyoung))

## [v1.115.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.115.0) (2017-03-08)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.113.0...v1.115.0)

**Implemented enhancements:**

- Support projects where the git repository is not on VSTS [\#46](https://github.com/microsoft/azure-repos-vscode/issues/46)

**Fixed bugs:**

- Icons are duplicated [\#63](https://github.com/microsoft/azure-repos-vscode/issues/63)

**Closed issues:**

- Pinned queries: Unknown configuration setting [\#98](https://github.com/microsoft/azure-repos-vscode/issues/98)

**Merged pull requests:**

- Bump version to 115 [\#143](https://github.com/microsoft/azure-repos-vscode/pull/143) ([jeffyoung](https://github.com/jeffyoung))
- Fix up FindConflicts and showing of the nag message [\#142](https://github.com/microsoft/azure-repos-vscode/pull/142) ([jeffyoung](https://github.com/jeffyoung))
- Updating vsts icon [\#140](https://github.com/microsoft/azure-repos-vscode/pull/140) ([jpricket](https://github.com/jpricket))
- Use pinned query text, show PAT nag message, stop signout message [\#139](https://github.com/microsoft/azure-repos-vscode/pull/139) ([jeffyoung](https://github.com/jeffyoung))
- Fix polling in relation to re-initialization [\#138](https://github.com/microsoft/azure-repos-vscode/pull/138) ([jeffyoung](https://github.com/jeffyoung))
- renaming classes to make code more understandable [\#137](https://github.com/microsoft/azure-repos-vscode/pull/137) ([jpricket](https://github.com/jpricket))
- Fixing some dependency issues [\#136](https://github.com/microsoft/azure-repos-vscode/pull/136) ([jpricket](https://github.com/jpricket))
- Ensure we fail the build on errors [\#135](https://github.com/microsoft/azure-repos-vscode/pull/135) ([jeffyoung](https://github.com/jeffyoung))
- Passing arguments more securly via stdin [\#134](https://github.com/microsoft/azure-repos-vscode/pull/134) ([jpricket](https://github.com/jpricket))
- Fixing the problem with Include/Exclude [\#133](https://github.com/microsoft/azure-repos-vscode/pull/133) ([jpricket](https://github.com/jpricket))
- Adding tests for resourcegroup [\#132](https://github.com/microsoft/azure-repos-vscode/pull/132) ([jpricket](https://github.com/jpricket))
- Adding tests for commandhelper and find workspace [\#131](https://github.com/microsoft/azure-repos-vscode/pull/131) ([jpricket](https://github.com/jpricket))
- adding tests for sync, resolve, info, and rename [\#130](https://github.com/microsoft/azure-repos-vscode/pull/130) ([jpricket](https://github.com/jpricket))
- Remove collection option from checkin \(tf.exe\) [\#129](https://github.com/microsoft/azure-repos-vscode/pull/129) ([jeffyoung](https://github.com/jeffyoung))
- Boost FindConflicts code coverage [\#128](https://github.com/microsoft/azure-repos-vscode/pull/128) ([jeffyoung](https://github.com/jeffyoung))
- Adding tests for several commands [\#127](https://github.com/microsoft/azure-repos-vscode/pull/127) ([jpricket](https://github.com/jpricket))
- Track whether CLC or EXE is being used for TFVC [\#126](https://github.com/microsoft/azure-repos-vscode/pull/126) ([jeffyoung](https://github.com/jeffyoung))
- Additional unit tests [\#125](https://github.com/microsoft/azure-repos-vscode/pull/125) ([jeffyoung](https://github.com/jeffyoung))
- Making collection optional in argumentbuilder [\#124](https://github.com/microsoft/azure-repos-vscode/pull/124) ([jpricket](https://github.com/jpricket))
- Fix up status command for tf.exe support [\#123](https://github.com/microsoft/azure-repos-vscode/pull/123) ([jeffyoung](https://github.com/jeffyoung))
- Fixing the TODO EXEs in the code [\#122](https://github.com/microsoft/azure-repos-vscode/pull/122) ([jpricket](https://github.com/jpricket))
- Adding simple fixes to get the EXE working [\#121](https://github.com/microsoft/azure-repos-vscode/pull/121) ([jpricket](https://github.com/jpricket))
- Initial tf.exe framework [\#120](https://github.com/microsoft/azure-repos-vscode/pull/120) ([jeffyoung](https://github.com/jeffyoung))
- Ensure we have a context before resolve and delete [\#119](https://github.com/microsoft/azure-repos-vscode/pull/119) ([jeffyoung](https://github.com/jeffyoung))
- Fixing an issue where we called tf resolve without credentials [\#118](https://github.com/microsoft/azure-repos-vscode/pull/118) ([jpricket](https://github.com/jpricket))
- Adding tests for Logger [\#117](https://github.com/microsoft/azure-repos-vscode/pull/117) ([jeffyoung](https://github.com/jeffyoung))
- Getting the TFVC folder to 100% [\#116](https://github.com/microsoft/azure-repos-vscode/pull/116) ([jpricket](https://github.com/jpricket))
- Mo Tests, Mo Tests, Mo Tests [\#115](https://github.com/microsoft/azure-repos-vscode/pull/115) ([jpricket](https://github.com/jpricket))
- Improve our code coverage [\#114](https://github.com/microsoft/azure-repos-vscode/pull/114) ([jeffyoung](https://github.com/jeffyoung))
- Added TFS Proxy settings [\#113](https://github.com/microsoft/azure-repos-vscode/pull/113) ([jpricket](https://github.com/jpricket))
- Add rename context menu \(and experience\) [\#112](https://github.com/microsoft/azure-repos-vscode/pull/112) ([jeffyoung](https://github.com/jeffyoung))
- Add delete \(when files deleted in Explorer\) [\#110](https://github.com/microsoft/azure-repos-vscode/pull/110) ([jeffyoung](https://github.com/jeffyoung))
- Moving AssociateWorkItems to the team extension [\#109](https://github.com/microsoft/azure-repos-vscode/pull/109) ([jpricket](https://github.com/jpricket))
- Added associate work items command [\#108](https://github.com/microsoft/azure-repos-vscode/pull/108) ([jpricket](https://github.com/jpricket))
- Some refactoring and parsing of WIT ids from commit message [\#107](https://github.com/microsoft/azure-repos-vscode/pull/107) ([jpricket](https://github.com/jpricket))
- Expose Telemetry service globally [\#106](https://github.com/microsoft/azure-repos-vscode/pull/106) ([jeffyoung](https://github.com/jeffyoung))
- Adding commands and icons for Resolve actions [\#105](https://github.com/microsoft/azure-repos-vscode/pull/105) ([jpricket](https://github.com/jpricket))
- Creating the Conflicts section in the viewlet [\#104](https://github.com/microsoft/azure-repos-vscode/pull/104) ([jpricket](https://github.com/jpricket))
- Adding OpenDiff, OpenFile commands and menu items [\#103](https://github.com/microsoft/azure-repos-vscode/pull/103) ([jeffyoung](https://github.com/jeffyoung))
- Added Sync command and tests [\#102](https://github.com/microsoft/azure-repos-vscode/pull/102) ([jpricket](https://github.com/jpricket))
- Add ability to include/exclude changes [\#101](https://github.com/microsoft/azure-repos-vscode/pull/101) ([jeffyoung](https://github.com/jeffyoung))
- Adding Checkin and hooking it up to the viewlet [\#100](https://github.com/microsoft/azure-repos-vscode/pull/100) ([jpricket](https://github.com/jpricket))
- Support undo from viewlet \(inline\) [\#99](https://github.com/microsoft/azure-repos-vscode/pull/99) ([jeffyoung](https://github.com/jeffyoung))
- Skeleton menu items [\#97](https://github.com/microsoft/azure-repos-vscode/pull/97) ([jeffyoung](https://github.com/jeffyoung))
- Move team commands into Team category [\#96](https://github.com/microsoft/azure-repos-vscode/pull/96) ([jeffyoung](https://github.com/jeffyoung))
- Adding TFVC Undo command [\#95](https://github.com/microsoft/azure-repos-vscode/pull/95) ([jeffyoung](https://github.com/jeffyoung))
- Cleaning up the code and fixing some bugs [\#94](https://github.com/microsoft/azure-repos-vscode/pull/94) ([jpricket](https://github.com/jpricket))
- Fixing a few bugs/issues [\#93](https://github.com/microsoft/azure-repos-vscode/pull/93) ([jpricket](https://github.com/jpricket))
- Adding SCMContentProvider implementation for TFVC [\#92](https://github.com/microsoft/azure-repos-vscode/pull/92) ([jpricket](https://github.com/jpricket))

## [v1.113.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.113.0) (2017-02-07)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.108.0...v1.113.0)

**Closed issues:**

- Ability to select a 'Team' under a 'Project' [\#60](https://github.com/microsoft/azure-repos-vscode/issues/60)
- Work items from visualstudio.com should not be visiblewhen they are in a resolved or fixed state. [\#57](https://github.com/microsoft/azure-repos-vscode/issues/57)

**Merged pull requests:**

- Add signin/signout, version to 1.113.0 [\#91](https://github.com/microsoft/azure-repos-vscode/pull/91) ([jeffyoung](https://github.com/jeffyoung))
- Adding xml2js to ThirdPartyNotices file \(TPN\) [\#90](https://github.com/microsoft/azure-repos-vscode/pull/90) ([jeffyoung](https://github.com/jeffyoung))
- Viewlet shows list of files [\#89](https://github.com/microsoft/azure-repos-vscode/pull/89) ([jpricket](https://github.com/jpricket))
- Support external contexts [\#88](https://github.com/microsoft/azure-repos-vscode/pull/88) ([jeffyoung](https://github.com/jeffyoung))
- Show history for TFVC repositories [\#87](https://github.com/microsoft/azure-repos-vscode/pull/87) ([jeffyoung](https://github.com/jeffyoung))
- Updating mocha \(to 3\) and vscode components to 1.7 [\#86](https://github.com/microsoft/azure-repos-vscode/pull/86) ([jpricket](https://github.com/jpricket))
- Added GetInfo command to TFVC commands [\#85](https://github.com/microsoft/azure-repos-vscode/pull/85) ([jpricket](https://github.com/jpricket))
- Additional error cases, ensure intialization by repo type [\#84](https://github.com/microsoft/azure-repos-vscode/pull/84) ([jeffyoung](https://github.com/jeffyoung))
- Adding some debug logging [\#83](https://github.com/microsoft/azure-repos-vscode/pull/83) ([jpricket](https://github.com/jpricket))
- Fixing the version output and adding tests [\#82](https://github.com/microsoft/azure-repos-vscode/pull/82) ([jpricket](https://github.com/jpricket))
- Add telemetry for TFVC support [\#81](https://github.com/microsoft/azure-repos-vscode/pull/81) ([jeffyoung](https://github.com/jeffyoung))
- Added simple logging of commands to output window [\#80](https://github.com/microsoft/azure-repos-vscode/pull/80) ([jpricket](https://github.com/jpricket))
- Refactored extension classes [\#79](https://github.com/microsoft/azure-repos-vscode/pull/79) ([jpricket](https://github.com/jpricket))
- Several changes [\#78](https://github.com/microsoft/azure-repos-vscode/pull/78) ([jeffyoung](https://github.com/jeffyoung))
- Restrict Tfvc messages we display in VSC ui [\#77](https://github.com/microsoft/azure-repos-vscode/pull/77) ([jeffyoung](https://github.com/jeffyoung))
- Properly handle Team Services collections [\#76](https://github.com/microsoft/azure-repos-vscode/pull/76) ([jeffyoung](https://github.com/jeffyoung))
- Add add'l error handling and logging [\#75](https://github.com/microsoft/azure-repos-vscode/pull/75) ([jeffyoung](https://github.com/jeffyoung))
- Adding env vars to speed up CLC and force English [\#74](https://github.com/microsoft/azure-repos-vscode/pull/74) ([jpricket](https://github.com/jpricket))
- Add support for TFS on-prem \(TFVC\) [\#73](https://github.com/microsoft/azure-repos-vscode/pull/73) ([jeffyoung](https://github.com/jeffyoung))
- Adding CLC version checks as well as localizing [\#72](https://github.com/microsoft/azure-repos-vscode/pull/72) ([jpricket](https://github.com/jpricket))
- Updated FindWorkspace to get mappings [\#71](https://github.com/microsoft/azure-repos-vscode/pull/71) ([jpricket](https://github.com/jpricket))
- Updating chai references to imports [\#70](https://github.com/microsoft/azure-repos-vscode/pull/70) ([jeffyoung](https://github.com/jeffyoung))
- Initial extension integration with Tfvc support [\#69](https://github.com/microsoft/azure-repos-vscode/pull/69) ([jeffyoung](https://github.com/jeffyoung))
- Status cmd is working - still have a few TODOs [\#68](https://github.com/microsoft/azure-repos-vscode/pull/68) ([jpricket](https://github.com/jpricket))
- Update build and wit integration tests [\#67](https://github.com/microsoft/azure-repos-vscode/pull/67) ([jeffyoung](https://github.com/jeffyoung))
- TFVC command framework in place [\#66](https://github.com/microsoft/azure-repos-vscode/pull/66) ([jpricket](https://github.com/jpricket))
- Disable collection of all unhandled exceptions [\#61](https://github.com/microsoft/azure-repos-vscode/pull/61) ([jeffyoung](https://github.com/jeffyoung))

## [v1.108.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.108.0) (2016-10-24)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.104.1...v1.108.0)

**Fixed bugs:**

- Can't connect to TFS 2015 OnPremise [\#41](https://github.com/microsoft/azure-repos-vscode/issues/41)

**Closed issues:**

- Do not see in documentation how to connect to existing TFS [\#44](https://github.com/microsoft/azure-repos-vscode/issues/44)
- Associate work items with Git commit/push [\#43](https://github.com/microsoft/azure-repos-vscode/issues/43)

**Merged pull requests:**

- Updating vscode extension to vso-node-api v5.1.1 [\#56](https://github.com/microsoft/azure-repos-vscode/pull/56) ([jeffyoung](https://github.com/jeffyoung))
- Allow markdown in Marketplace to render as GitHub [\#53](https://github.com/microsoft/azure-repos-vscode/pull/53) ([jeffyoung](https://github.com/jeffyoung))
- Fix the third-party notices link [\#52](https://github.com/microsoft/azure-repos-vscode/pull/52) ([mortonfox](https://github.com/mortonfox))
- Add task to upload code coverage report files [\#50](https://github.com/microsoft/azure-repos-vscode/pull/50) ([jeffyoung](https://github.com/jeffyoung))
- Adding more tests for several objects [\#49](https://github.com/microsoft/azure-repos-vscode/pull/49) ([jeffyoung](https://github.com/jeffyoung))
- Use gulp-istanbul for code coverage on cmd line [\#48](https://github.com/microsoft/azure-repos-vscode/pull/48) ([jeffyoung](https://github.com/jeffyoung))
- Adding additional unit tests and new integration tests [\#47](https://github.com/microsoft/azure-repos-vscode/pull/47) ([jeffyoung](https://github.com/jeffyoung))
- Update README.md, add link for more information [\#45](https://github.com/microsoft/azure-repos-vscode/pull/45) ([jeffyoung](https://github.com/jeffyoung))

## [v1.104.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.104.1) (2016-08-03)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.104.0...v1.104.1)

**Fixed bugs:**

- error trying to perform any command [\#24](https://github.com/microsoft/azure-repos-vscode/issues/24)

**Closed issues:**

- Recognize when local folder is pushed to team project [\#27](https://github.com/microsoft/azure-repos-vscode/issues/27)

**Merged pull requests:**

- Improve checking of Team Foundation Server server name formats [\#42](https://github.com/microsoft/azure-repos-vscode/pull/42) ([jeffyoung](https://github.com/jeffyoung))

## [v1.104.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.104.0) (2016-08-02)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.103.0...v1.104.0)

**Fixed bugs:**

- 'create new bug' results in title that is encoded \(OS X Safari only\) [\#37](https://github.com/microsoft/azure-repos-vscode/issues/37)
- Cannot read property 'SendException' of undefined [\#35](https://github.com/microsoft/azure-repos-vscode/issues/35)
- v15.17 of ApplicationInsights bloats extension VSIX [\#31](https://github.com/microsoft/azure-repos-vscode/issues/31)

**Merged pull requests:**

- README updates for 104 release [\#39](https://github.com/microsoft/azure-repos-vscode/pull/39) ([jeffyoung](https://github.com/jeffyoung))
- Remove call to encodeURIComponent  [\#38](https://github.com/microsoft/azure-repos-vscode/pull/38) ([jeffyoung](https://github.com/jeffyoung))
- Report no requestHandler via feedbackClient [\#36](https://github.com/microsoft/azure-repos-vscode/pull/36) ([jeffyoung](https://github.com/jeffyoung))
- Add 'Team Foundation Server' keyword [\#34](https://github.com/microsoft/azure-repos-vscode/pull/34) ([jeffyoung](https://github.com/jeffyoung))
- Add filewatcher to config \(remote origin change\) [\#33](https://github.com/microsoft/azure-repos-vscode/pull/33) ([jeffyoung](https://github.com/jeffyoung))
- Pin version of ApplicationInsights to 15.16 [\#32](https://github.com/microsoft/azure-repos-vscode/pull/32) ([jeffyoung](https://github.com/jeffyoung))
- Improve Team Services login experience [\#30](https://github.com/microsoft/azure-repos-vscode/pull/30) ([jeffyoung](https://github.com/jeffyoung))
- Show 'No Git repo' message when appropriate [\#29](https://github.com/microsoft/azure-repos-vscode/pull/29) ([jeffyoung](https://github.com/jeffyoung))
- Fix 'collection in the domain' issue \(\#24\) [\#28](https://github.com/microsoft/azure-repos-vscode/pull/28) ([jeffyoung](https://github.com/jeffyoung))
- Add VSTS to search keyword list [\#26](https://github.com/microsoft/azure-repos-vscode/pull/26) ([chrisdias](https://github.com/chrisdias))

## [v1.103.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.103.0) (2016-07-08)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.100.0...v1.103.0)

**Fixed bugs:**

- "create pull request" doesn't populate source branch [\#18](https://github.com/microsoft/azure-repos-vscode/issues/18)

**Merged pull requests:**

- Add Team Foundation Server 2015 support [\#22](https://github.com/microsoft/azure-repos-vscode/pull/22) ([jeffyoung](https://github.com/jeffyoung))

## [v1.100.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.100.0) (2016-05-02)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.99.0...v1.100.0)

**Closed issues:**

- Question: Will this work with VSTS and git-tfs? [\#13](https://github.com/microsoft/azure-repos-vscode/issues/13)

**Merged pull requests:**

- Pinned Query Status Bar Item [\#17](https://github.com/microsoft/azure-repos-vscode/pull/17) ([mmanela](https://github.com/mmanela))
- Refactoring original Settings into Account Settings and Settings [\#16](https://github.com/microsoft/azure-repos-vscode/pull/16) ([jeffyoung](https://github.com/jeffyoung))
- Refactoring into Info objects  [\#15](https://github.com/microsoft/azure-repos-vscode/pull/15) ([jeffyoung](https://github.com/jeffyoung))
- Limiting keywords to five \(latest vsce requirement\) [\#14](https://github.com/microsoft/azure-repos-vscode/pull/14) ([jeffyoung](https://github.com/jeffyoung))

## [v1.99.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.99.0) (2016-04-14)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/1.99.0...v1.99.0)

## [1.99.0](https://github.com/microsoft/azure-repos-vscode/tree/1.99.0) (2016-04-14)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/v1.98.0...1.99.0)

**Implemented enhancements:**

- Could this work with my own Team Foundation Server ? [\#11](https://github.com/microsoft/azure-repos-vscode/issues/11)

**Merged pull requests:**

- Adding additional telemetry for WIT [\#12](https://github.com/microsoft/azure-repos-vscode/pull/12) ([jeffyoung](https://github.com/jeffyoung))
- Update README with information on the maximum number of returned work… [\#9](https://github.com/microsoft/azure-repos-vscode/pull/9) ([jeffyoung](https://github.com/jeffyoung))
- Return a maximum of 200 work items with an option to open browser for… [\#8](https://github.com/microsoft/azure-repos-vscode/pull/8) ([jeffyoung](https://github.com/jeffyoung))
- Check for accounts ending with ".visualstudio.com" in accessTokens [\#7](https://github.com/microsoft/azure-repos-vscode/pull/7) ([jeffyoung](https://github.com/jeffyoung))
- Remove confusing statement about basic authentication [\#6](https://github.com/microsoft/azure-repos-vscode/pull/6) ([jeffyoung](https://github.com/jeffyoung))
- Add telemetry to track 'startup' event [\#5](https://github.com/microsoft/azure-repos-vscode/pull/5) ([jeffyoung](https://github.com/jeffyoung))
- Update README.md with links to videos and a section on Support [\#4](https://github.com/microsoft/azure-repos-vscode/pull/4) ([jeffyoung](https://github.com/jeffyoung))
-  team.appInsights.enabled default value should be bool [\#3](https://github.com/microsoft/azure-repos-vscode/pull/3) ([gaessaki](https://github.com/gaessaki))
- Fixing the fomatting of the first numbered list in the readme [\#2](https://github.com/microsoft/azure-repos-vscode/pull/2) ([buckh](https://github.com/buckh))
- CONTRIBUTING: Fix link to Node packages. [\#1](https://github.com/microsoft/azure-repos-vscode/pull/1) ([joshgav](https://github.com/joshgav))

## [v1.98.0](https://github.com/microsoft/azure-repos-vscode/tree/v1.98.0) (2016-03-25)

[Full Changelog](https://github.com/microsoft/azure-repos-vscode/compare/83ec5c4274e1a2ab89d3520fdfb4b74457009e26...v1.98.0)



\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*


================================================
FILE: CONTRIBUTING.md
================================================
# Azure Repos Extension Contributor Guide
The instructions below will help you set up your development environment to contribute to this repository.
Make sure you've already cloned the repo.  :smile:

## Ways to Contribute
Interested in contributing to the azure-repos-vscode project? There are plenty of ways to contribute, all of which help make the project better.
* Submit a [bug report](https://github.com/Microsoft/azure-repos-vscode/issues/new) or [feature request](https://github.com/Microsoft/azure-repos-vscode/issues/new) through the Issue Tracker
* Review the [source code changes](https://github.com/Microsoft/azure-repos-vscode/pulls)
* Submit a code fix for a bug (see `Submitting Pull Requests` below)
* Participate in [discussions](https://github.com/Microsoft/azure-repos-vscode/issues)

## Set up Node, npm and gulp

### Node and npm
**Windows and Mac OSX**: Download and install node from [nodejs.org](http://nodejs.org/)

**Linux**: Install [using package manager](https://nodejs.org/en/download/package-manager/)

From a terminal ensure at least node 5.4.1 and npm 3:
```bash
$ node -v && npm -v
v5.9.0
3.8.2
```
**Note**: To get npm version 3.8.2, you may need to update npm after installing node.  To do that:
```bash
[sudo] npm install npm -g
```

**Note2**: Our CI service uses Node 11. Node 14 appears to be incompatible. Your mileage may vary.

### Gulp
Install gulp
```bash
[sudo] npm install gulp -g
```
From the root of the repo, install all of the build dependencies:
```bash
[sudo] npm install --greedy
```

### Install the Visual Studio Code Extension Manager (VSCE)
Before packaging via gulp, ensure that you have the "vsce" tool installed globally.  Otherwise, the package step will fail.

From the root of the repo, run:
```bash
[sudo] npm install vsce -g
```

## Build
To build the extension, run the following from the root of the repo:

```bash
gulp
```
This command will create the out\src and out\test folders at the root of the repository. 

## Tests
Tests should be run with changes.  Before you run tests, make sure you have built the extension.  Run the following from the root of the repo:

```bash
gulp test
```
To run the tests within Visual Studio Code, change the debug profile to "Launch Tests" and press `F5`.

## Package
The package command will package the extension into a Visual Studio extension installer (.vsix file).
It will also transpile the TypeScript into the out\src and out\test folders.

From the root of the repo:
```bash
gulp package
```
The VSIX package will be created in the root of the repository.

## Code Structure
The code is structured between the Visual Studio Code extension file, the Azure Repos extension object, and the clients, contexts, helpers and services.

### Visual Studio Code Extension file
This is the file with the code called by Visual Studio Code to bootstrap the extension.  **extension.ts** should be thin and delegate to the Azure Repos Extension object.

### Azure Repos Extension object
This is the object intended to have small methods that call to the feature-specific clients that manipulate the UI and make calls to Azure DevOps via the service objects.  When adding new commands, the functions that are called should be defined here.

### Clients
These are the clients used to talk to the services (see Services below).  The clients can manipulate the UI but should be the only objects calling the feature-specific services.

### Contexts
* Git - This context is meant to contain the client-side Git configuration information
* Server - This context is meant to contain the server-side information needed when making calls to Azure DevOps

### Helpers
These are classes used to define constants, a logger, settings (configuration), strings and various utility functions.

### Info
These are classes used to hold data about particular objects (credentials, repository and user).

### Services
All of the communication to Azure DevOps should be done via services found in this folder.  These services should not know anything about the client-side types used to manipulate the Visual Studio Code UI.  The Q Promise APIs found in the vso-node-api package is the model used in this extension.

## Debugging
To debug the extension, make sure you've installed all of the npm packages as instructed earlier.  Then, open the root of the repository in Visual Studio Code and press F5.  If you have the extension already installed, you'll need to uninstall it via the Command Palette and try again.

During debugging, you may want to control how often polling occurs for build status and pull request updates.  Or you may want to turn on debug console and `winston` logging.  The [README.md](README.md) file has instructions on how to change those settings.

## Code Styles
1. The various gulp commands will run `tslint` and flag any errors.  Please ensure that the code stays clean.
2. All source files must have the following lines at the top:
```
 /*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
```
3. We keep LF line-endings on the server. Please set the `core.safecrlf` git config property to true.
```
git config core.safecrlf true
```

## Contribution License Agreement
In order to contribute, you will need to sign a [Contributor License Agreement](https://cla.microsoft.com/).

## Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.

## Submitting Pull Requests
We welcome pull requests!  Fork this repo and send us your contributions.  Go [here](https://help.github.com/articles/using-pull-requests/) to get familiar with GitHub pull requests.

Before submitting your request, ensure that both `gulp` and `gulp test` succeed.

**UPDATE**: With a recent commit, integration tests were added under the *test-integration* folder.  These tests are run by the CI build and the results are reported back to any pull request as a "build check".  The
integration tests are not runnable outside of the CI build without setting up additional infrastructure.  As such, it isn't required that a contributor run these tests before submitting the pull request.
However, if an issue arises that breaks the integration tests, please file an issue and I'll follow up as quickly as possible.  Note that the build for this repo is set to build every night and runs unit
and integration tests at that time.


================================================
FILE: DEPRECATED.md
================================================
# Sunsetting the Azure Repos VS Code extension

We're sunsetting this Azure Repos VS Code extension.
On 2020-11-06 (Nov 6, 2020), we'll remove it from the VS Code Marketplace and archive the repository.
If you still have it installed, you may continue to use it, but it will not receive any further investment or updates.

## Why are we doing this?

Since we launched the extension four and a half years ago, Visual Studio Code has seen incredible adoption.
Azure DevOps and Azure Repos have similarly continued to see amazing growth.
However, use of TFVC, the centralized source control system, with VS Code has declined.
The majority of VS Code users prefer Git, and therefore use of the extension has declined dramatically in the last 1-2 years.
VS Code has great native Git support.
Therefore we have taken the decision to discontinue support of this extension.
Developers still using TFVC with VS Code will need to use an external version control client such as [the `tf` command line](https://docs.microsoft.com/azure/devops/repos/tfvc/use-team-foundation-version-control-commands).

## What happened?

1. We shipped a final update which contains this notice but contains no other functional changes, bug fixes, etc.

2. On 2020-11-06 we unpublished the extension from the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/).
Those who already have it installed can continue to use it, but without support from Microsoft.
The extension won't receive any updates, bug fixes, or security fixes, so you use it at your own risk.

3. We archived the [GitHub repository](https://github.com/microsoft/azure-repos-vscode) putting it into a read-only state.
This will not delete the code or historical issues (though all open issues and PRs were closed).
The repository is still readable and forkable.

## Is there any action for me?

If you want to keep using the extension, no, there's no action.
It will remain installed in your copy of VS Code.

If you want to stop using the extension, you can uninstall it on VS Code's extensions page.
If you do, you won't be able to reinstall it from the Marketplace.

## Thank you

To everyone who used the extension, provided feedback, or contributed bug fixes, THANK YOU!


================================================
FILE: LICENSE.txt
================================================
Azure Repos Extension for Visual Studio Code 

Copyright (c) Microsoft Corporation

All rights reserved. 

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal 
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
# Azure Repos Extension for Visual Studio Code

**DEPRECATION NOTICE**:
This extension is no longer receiving updates.
[Learn more here](https://aka.ms/AA9k2vv).

---

This extension allows you to connect to Azure DevOps Services and Team Foundation Server and provides support for [Team Foundation Version Control (TFVC)](TFVC_README.md#quick-start). 
It allows you to monitor your builds and manage your pull requests and work items for your TFVC or Git source repositories. The extension uses your local repository information 
to connect to either Azure DevOps Services or Team Foundation Server 2015 Update 2 (and later).

![Azure Repos extension](assets/vscode.png)

Here is the [Walkthrough of the Azure Repos extension for Visual Studio Code](https://youtu.be/sk6LrzQX4P8)
video that shows many of the features of the extension.

## Prerequisites
### Azure DevOps Services
If you are using the extension with Azure DevOps Services, ensure you have an Azure DevOps Services organization. If you do
not have one, [sign up for Azure DevOps Services](https://aka.ms/SignupAzureDevOps/?campaign=azure~repos~vscode~readme).

### Team Foundation Server
If you are planning on using the extension with Team Foundation Server, you **must** be running Team Foundation
Server 2015 Update 2 or later. Earlier versions of Team Foundation Server are not supported.

### Clone your Git repository
With Git, the extension uses the remote origin of your repository to determine how to connect to Azure DevOps Services (or your Team Foundation Server), in most cases you will need to have a Git repository already cloned locally. If you intend on cloning an existing repository, do so before proceeding. If you do not have a Git repository cloned locally but already have an Azure DevOps Services organization (or a Team Foundation Server instance), you may create a local repository (via `git init`) and once you set the "origin" remote for that local repository, the extension will detect the change to the remote and attempt to contact Azure DevOps Services (or Team Foundation Server).

### Create your TFVC workspace
With TFVC, the extension uses information about the current workspace to determine how to connect to Azure DevOps Services (or your Team Foundation Server). Workspaces can be created using the Visual Studio IDE, Eclipse or with the JetBrains IDEs (e.g, Android Studio, IntelliJ).

**Note:** At this time, you will need to have a ***local*** TFVC workspace already available on your local machine. More information about the difference between the two types (and how to determine which one you're using) can be found [here](TFVC_README.md#what-is-the-difference-between-a-local-and-server-workspace-how-can-i-tell-which-one-im-working-with). The issue tracking support for Server workspaces is [here](https://github.com/Microsoft/azure-repos-vscode/issues/176).

## Installation
First, you will need to install [Visual Studio Code](https://code.visualstudio.com/download) `1.12.0` or later.

To install the extension with the latest version of Visual Studio Code (version 1.13.1 is the latest as of this writing), bring up the Visual Studio Code Command Palette (`F1`), type `install` and choose `Extensions: Install Extensions`. In the `Search Extensions in Marketplace` text box, type `team`. Find the `Azure Repos` extension published by *Microsoft* and click the `Install` button. Restart Visual Studio Code.

## Authentication
### Azure DevOps Services
If you are connecting to Azure DevOps Services, you will need a personal access token (PAT). With the release of v1.121.0 of the extension, you have a choice of whether you would like to create a token yourself manually and provide it when prompted, or use a new experience in which you are authenticated to Azure DevOps Services using your web browser. In the new experience, a personal access token is still created on your behalf but only after you are authenticated. The created token has *All Scopes* permissions but can be updated in your profile settings. Both tokens (manual or the new experience) are stored securely on your machine.

#### Manual Token Creation
Should you wish to create a personal access token yourself, go [here](https://aka.ms/gtgzt4) to read how. You can also [view our video](https://youtu.be/t6gGfj8WOgg) on how to do the same.
* Git repositories require that you create your token with the **Build (read)**, **Code (read)** and **Work items (read)** scopes to ensure full functionality. You can also use *All Scopes*, but the minimum required scopes are those listed above.
* TFVC repositories require tokens with *All Scopes*. Anything less will cause the extension to fail.

#### Browser-based Authentication
When using the new authentication experience, you will be prompted to copy a *device code* used to identify yourself to the authentication system. Once you accept the prompt to begin authentication, your default web browser will be opened to a login page. After supplying that device code and having it verified, you will then be prompted to authenticate with Azure DevOps Services normally (e.g., username and password, multi-factor authentication, etc.). Once you are authenticated to Azure DevOps Services, a personal access token will be created for you and the extension will be initialized normally. To see what this experience is like, [view this video](https://youtu.be/HnDNdm1WCIo).

### Team Foundation Server
If you are connecting to Team Foundation Server, you will only need your NTLM credentials (domain name, server name and password). It is assumed that you have the proper permissions on the TFS Server.

Details on how to connect to either Azure DevOps Services or Team Foundation Server are found in the next section.

## TFVC Support
Once you have a local TFVC workspace available, you must configure the TFVC support in Visual Studio Code. You can find that information (including demo videos) in our [TFVC documentation](TFVC_README.md).

## Open a local Repository folder
Once you have installed the extension, open either the root folder or a sub-folder of the repository. Once an Azure DevOps Services
 or Team Foundation Server 2015 Update 2 (or later) repository is detected by the extension, you will need to provide
your credentials (if credentials weren't already found). If you are required to provide your credentials, there will be an
indicator in the status bar whose message will indicate that you need to sign in.

The indicator looks like this:

![Team Error indicator](assets/team-error.png)

To sign in, run the `team signin` command or simply click on that indicator. If your repository is hosted on Azure Repos,
you will be prompted to enter your personal access token. When you do, it will be stored securely on your
computer and used to connect. If your repository is on Team Foundation Server 2015 Update
2 or later, you will be prompted to enter your username and password. After both are provided, they will
be stored securely on your computer and used to connect to your TFS server.

Once your credentials are verified, the status bar indicators will be active and the remaining commands will
be ready to use. The stored credentials will be used for each connection to the server until they are either
removed by the `team signout` command or overwritten by a subsequent `team signin` command.

**Note:** In order for the extension to be activated, a repository *folder* must be opened. The extension
won't be activated if only a single *file* in the repository is opened.

## Status Bar Indicators
* ![Team Project indicator](assets/project-indicator.png) – This status bar item is populated with the name
of the team project to which the repository belongs. Clicking on the item will open your browser to the team website.

* ![Pull Requests indicator](assets/pullrequest-indicator.png) – ***Git only*** This status bar item is a count of active
pull requests that you either requested yourself or were added to explicitly as a reviewer. Clicking the
item will display that list of pull requests in the quick pick list. Choosing one will take you to that
pull request in your browser. This indicator will update its status every 5 minutes.

* ![Build Status indicator](assets/buildstatus-indicator.png) – This status bar item shows the status of
the build for this particular repository and branch. Hovering over the item will provide additional
information about which build was referenced (if any). Clicking on the item will take you to that build’s
summary page in your browser. This indicator will update its status every 5 minutes.

* ![Pinned Work Item Query Status indicator](assets/pinnedquery-indicator.png) – This status bar item shows
the number of items returned by your pinned work item query. If you have not configured a pinned query it
defaults to the work items assigned to you. Clicking the item will show you the work items the query returns.
This indicator will update its status every 5 minutes.

* ![Feedback indicator](assets/feedback-indicator.png) – Clicking this status bar item allows you to quickly send
feedback about the Azure Repos extension.

## Commands
In addition to the status bar integrations, the extension also provides several commands for interacting with
Azure DevOps Services and Team Foundation Server. In the Command Palette (`F1`), type `team` and choose a command.

* `team associate work items` – Prompts you to choose a work item that is assigned to you (or from the results
of your custom query). Choosing a work item will add it to the current commit/check-in message.

* `team create bug` – Opens your browser to the webpage used to create a new bug. If a single line of text is
highlighted in Visual Studio Code, it will be used as the title of the bug. The bug will be assigned to you.
You can then choose to update the fields, save, cancel, etc.

* `team create pull request` – ***Git only*** Opens your browser for a new pull request based on the current repository and
branch. Before creating the pull request, ensure that you save, commit and push any changes you have before
running the command. Doing so will ensure that all of your latest changes are part of the pull request.

* `team create task` – Opens your browser to the webpage used to create a new task. If a single line of text
is highlighted in Visual Studio Code, it will be used as the title of the task. The task will be assigned to
you. You can then choose to update the fields, save, cancel, etc.

* `team create work item` – Prompts you to choose a work item type from the list available in your team project.
Once you make a selection, your browser is opened to the webpage used to create the work item. If a single line
f text is highlighted in Visual Studio Code, it will be used as the title of the task. The work item will be
assigned to you. You can then choose to update the fields, save, cancel, etc.

* `team send feedback` – Prompts you to either send a smile or a frown. After choosing, you can provide us
feedback of up to 1000 characters. Optionally, provide your email address so we can contact if you needed. If
you do not want to provide your email address, just leave it empty (we'll still get your feedback). *Note:*
Feedback can be sent even if telemetry reporting is disabled.

* `team signin` – Use this command to sign in to an Azure DevOps Services organization or Team Foundation Server 2015 Update 2
(and later) server. When your credentials are provided, they will be stored securely on your computer. The saved
credentials will be used for that organization until they are removed by the `team signout` command or overwritten by a
subsequent `team signin` command. See the "Secure Credential Storage" topic below for more details.

* `team signout` – Use this command to sign out from an Azure DevOps Services organization or Team Foundation Server 2015 Update 2
(and later) server. Signing out will remove your credentials from your local computer. To sign back in, you will
need to run the `team signin` command again.

* `team view blame` – ***Git only*** If a file in the repository is opened in the editor, it will open your browser to the
blame page for that file in the current branch in the server repository.

* `team view build summary` – Same behavior as clicking on the Build Status status bar item.

* `team view history` – If a file in the repository is opened in the editor, it will open your browser to the
history page for that file in the current branch in the server repository. Otherwise, the history of the current
branch in the server repository will be opened.  This command does support TFVC repositories.

* `team view pull requests` – ***Git only*** Same behavior as clicking on the Pull Requests status bar item.

* `team view website` – Same behavior as clicking on the team project status bar item.

* `team view work items` – Prompts you to choose a work item that is assigned to you, sorted by ChangedDate descending.
Choosing a work item will open it in your browser. This command will return a maximum of 200 results with an option
to "Browse additional work items...". Choosing that option will open your browser to show all of the results of your query.

* `team view work item queries` – Prompts you to choose a query stored in your “My Queries” folder in your team project.
Choosing a query will run it and display the results in the Quick Pick list. Choosing one of the results will open that
work item in your browser. This command will return a maximum of 200 results with an option to "Browse additional
work items...". Choosing that option will open your browser to show all of the results of your query.

## Secure Credential Storage
When you run the `team signin` command, the credentials that you provide will be stored securely on your computer. On
Windows, your credentials wil be stored by Windows Credential Manager. On macOS, your credentials will be stored in the
Keychain. On Linux, your credentials will be stored in a file on your local file system in a subdirectory of your
home folder. That file is created only with RW rights for the user running Visual Studio Code. It is **not encrypted**
on disk.

## How to disable telemetry reporting
The Azure Repos extension collects usage data and sends it to Microsoft to help improve our products
and services. Read our [privacy statement](http://go.microsoft.com/fwlink/?LinkId=528096&clcid=0x409) to learn more.

If you don’t wish to send usage data to Microsoft, add the following entry to Settings (**File > Preferences > Settings**):
```javascript
    "team.appInsights.enabled": "false"
```

## Polling interval
The polling interval for the pull request and build status bar indicators defaults to ten minutes. You can change this
value in the Visual Studio Code Settings by adding an entry like the one below. The minimum value is 10.
```javascript
"team.pollingInterval": 12
```

## Logging
There may be times when you need to enable file logging to troubleshoot an issue. There are five levels of logging (`error`,
`warn`, `info`, `verbose` and `debug`). Since logging is disabled by default, you can add an entry like the one shown below
to Visual Studio Code's Settings. Once you are finished logging, either remove the setting or set it to an empty string.
```javascript
"team.logging.level": "debug"
```
The log file will be placed at the root of your workspace and will be named `team-extension.log`.

### Private builds
In order to facilitate more debugging, you may be provided with a "private build" of the extension. The private build will
likely come in the form of a .ZIP file named similarly to the VSIX that gets deployed to the Marketplace (e.g., `team-0.117.0.vsix.zip`).

To install the private build, you must uninstall the previous version and then _side load_ the new one. First, remove the
.ZIP extension from the file and then follow [these instructions](https://code.visualstudio.com/docs/editor/extension-gallery#_install-from-a-vsix) to install the VSIX.

## Pinned Work Item Queries
You can customize the pinned work item query by adding the following in the Visual Studio Code Settings. You need to
provide the following:

* `account`: For Azure DevOps Services, set `account` to either `organization.visualstudio.com` or `dev.azure.com/organization`.
For Team Foundation Server, if your server URL is `http://servername:8080/tfs` then set `account` to `servername:8080`.
* `queryText` or `queryPath`

**Using Query Text**
  ```javascript
    "team.pinnedQueries": [
        {
            "account": "dev.azure.com/organization",
            "queryText": "SELECT * FROM WorkItems WHERE [System.AssignedTo] = @me AND [System.ChangedDate] > @Today - 14"
        }
    ]
  ```
  
**Using Query Path**
  ```javascript
    "team.pinnedQueries": [
        {
            "account": "dev.azure.com/organization",
            "queryPath": "Shared Queries/My Folder/My Query"
        }
    ]
  ```
  
You can also create a *global* pinned query which will be the default if you have not configured one by
replacing *dev.azure.com/organization* with *global* in the previous examples.

## Using External (non-Microsoft) Source Repositories
Starting with version 1.113.0, you can now use the extension with repositories that are **not** hosted with either Azure DevOps Services or Team Foundation Server. You will be able to monitor your builds (for a specific build definition) and work items that *are* hosted with either Azure DevOps Services or Team Foundation Server by specifying your server information. To do this, set the following settings in VS Code. It is recommended that you set these in your Workspace Settings (and not User Settings). You will, of course, still need to authenticate (provide credentials).

**Note:** If you're using a Team Foundation Version Control repository, you should *not* use these settings. Have a look at the [TFVC Quick Start](TFVC_README.md#quick-start).

  ```javascript
    "team.remoteUrl": "https://organization.visualstudio.com",
    "team.teamProject": "myTeamProject",
    "team.buildDefinitionId": 42,
  ```
  
To determine your build definition id, open the build summary for the build you'd like to monitor and grab the value of the _buildId=_ parameter in the url.

## Support
Support for this extension is provided on our [GitHub Issue Tracker](https://github.com/Microsoft/azure-repos-vscode/issues). You
can submit a [bug report](https://github.com/Microsoft/azure-repos-vscode/issues/new), a [feature request](https://github.com/Microsoft/azure-repos-vscode/issues/new)
or participate in [discussions](https://github.com/Microsoft/azure-repos-vscode/issues).

## Contributing to the Extension
See the [developer documentation](CONTRIBUTING.md) for details on how to contribute to this extension.

## Code of Conduct
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.

## Privacy Statement
The [Microsoft Visual Studio Product Family Privacy Statement](http://go.microsoft.com/fwlink/?LinkId=528096&clcid=0x409)
describes the privacy statement of this software.

## License
This extension is [licensed under the MIT License](LICENSE.txt). Please see the [third-party notices](ThirdPartyNotices.txt)
file for additional copyright notices and license terms applicable to portions of the software.


================================================
FILE: TFVC_README.md
================================================
# Team Foundation Version Control (TFVC) Support

This extension provides TFVC support by way of the Source Control Viewlet in Visual Studio Code.

Here are the currently supported features provided by the extension:
- Execute all basic version control actions such as add, delete, rename, move, etc.
- View local changes and history for your files
- Include and Exclude changes (and move files between the two states)
- Merge conflicts from updates
- Check-in and update local files
- Integrated TFVC Output window
- Support for a TFS proxy
- Associate work items to check-ins *(TEE CLC only)*
- Support for **Local** workspaces created with either Visual Studio, the JetBrains IDEs or Eclipse ([details](#what-is-the-difference-between-a-local-and-server-workspace-how-can-i-tell-which-one-im-working-with))

![Team Foundation Version Control Viewlet](assets/tfvc-viewlet.png)

## Quick Start
Below is a short list of steps to get up-and-running with TFVC support. Be sure to check out the other TFVC documentation on this page.
- [Install the Azure Repos extension](#the-visual-studio-code-extension) for Visual Studio Code.
- For Azure DevOps Services, ensure you have a Personal Access Token (PAT) with All Scopes available. Team Foundation Server requires your domain credentials. [More info...](#authentication)
- Ensure you have a [TF command line client installed](#tfvc-command-line-client) (either TF.exe or the TEE CLC).
- Set the [`tfvc.location`](#configure-tfvc-support) VS Code setting to the full path of your TF command line client.
- Open a folder containing a *Local* TFVC Workspace and sign in when prompted. [More info...](#open-a-local-tfvc-repository-folder)
- Set the SCM Provider to `TFVC`. [Read how...](https://code.visualstudio.com/updates/v1_13#_install-additional-scm-providers)

## Getting Started Videos
Below are a few videos to help get you started using TFVC quickly.
- [TFVC Source Code Control for Visual Studio Code](https://youtu.be/6IzJ2UPGmoQ) - This video shows you how to set up
the TFVC support on Windows and demonstrates much of the functionality available for Team Foundation Version Control. The
features shown in this video apply equally well to the TFVC support on macOS and Linux.
- [Set up and Configure the TEE CLC on Linux (and macOS)](https://youtu.be/VPNaEIVZfr0) - This video demonstrates how to set
up the Team Explorer Everywhere Command Line Client (TEE CLC) on Ubuntu. On macOS and Linux, the CLC provides the TFVC capability
to the extension.
- [Set up the Azure Repos extension for Visual Studio Code](https://youtu.be/t6gGfj8WOgg) - If you haven't used the extension
before, this video will show you how to set it up, create a personal access token and get up and running.
- [Walkthrough of the Azure Repos extension for Visual Studio Code](https://youtu.be/sk6LrzQX4P8) - This is a walkthrough of
most of the features of the Azure Repos extension.

## Prerequisites
### Azure DevOps Services
If you are using the extension with Azure DevOps Services, ensure you have an Azure DevOps Services organization. If you do
not have one, [sign up for Azure DevOps Services](https://aka.ms/SignupAzureDevOps/?campaign=azure~repos~vscode~tfvcreadme).

### Team Foundation Server
If you are planning on using the extension with Team Foundation Server, you **must** be running Team Foundation
Server 2015 Update 2 or later. Earlier versions of Team Foundation Server are not supported.

## Installation
First, you will need to install [Visual Studio Code](https://code.visualstudio.com/download) `1.11.1` or later.

### The Visual Studio Code Extension
To install the extension with the latest version of Visual Studio Code (version 1.11.1 is the latest as of this writing), bring
up the Visual Studio Code Command Palette (`F1`), type `install` and choose `Extensions: Install Extensions`. In the `Search Extensions in Marketplace`
text box, type `team`. Find the `Azure Repos` extension published by *Microsoft* and click the `Install` button.
Restart Visual Studio Code.

### TFVC Command Line Client
In order to provide TFVC support in Visual Studio Code, the extension relies on the use of a TF command line client. Therefore,
you will need to have one already installed and configured. TFVC support will not work without an available command line client.

#### Visual Studio IDE (Windows)
With a typical installation of Visual Studio, the Windows version of the TFVC command line client (tf.exe) is available under
the `Program Files (x86)` folder. It will typically be placed in a location similar to
`C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\TF.exe`. On the 2017 version of Visual Studio Community, it can be found in a location similar to `C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe`. Visual Studio Community can be downloaded from [here](https://www.visualstudio.com/free-developer-offers/).

#### Eclipse, JetBrains IDEs (Windows, macOS, Linux)
If you typically use Eclipse or one of the JetBrains IDEs (e.g., Android Studio, IntelliJ), you will need to download and
extract a version of the Team Explorer Everywhere Command Line Client (TEE CLC). As of this update, the latest version can
be downloaded from [TEE-CLC-14.114.0.zip](https://github.com/Microsoft/team-explorer-everywhere/releases/download/v14.114.0/TEE-CLC-14.114.0.zip).
After downloading, extract it to a folder and open a Terminal window.

From that Terminal window, ensure that at least Java 8 is installed and available (run `java -version` to check
the version). Once Java is configured properly, you will need to accept the TEE End User License Agreement by
running `tf eula`. Make sure to read the EULA and accept it by entering `y`. The extension will not function properly
until this EULA is accepted.

If you are using the TEE CLC, see how to set it up by viewing [this video](https://youtu.be/VPNaEIVZfr0).

## Authentication
### Azure DevOps Services
If you are connecting to Azure DevOps Services, you will need a personal access token (PAT).
The latest version of the extension will prompt for your token and store it securely. In previous versions of the
extension, you needed to create a token and store it in your Visual Studio Code settings.

If you do not have a personal access token yet, you will need to create one on your Azure DevOps Services organization.
To create the token, go [here](https://aka.ms/gtgzt4) to read how. You can also [view our video](https://youtu.be/t6gGfj8WOgg)
on how to do the same.
* TFVC repositories require tokens with *All Scopes*. Anything less will cause the extension to fail.

In addition to connecting to Azure DevOps Services using a personal access token (PAT), the TF.exe command line client needs
its own access to the remote repository, otherwise TFVC will fail:
* Open a command prompt with the correct version of TF.exe in its PATH
* Enter "tf workspace"
* If this opens a login prompt, enter your credentials
* You can then close the Workspace window

### Team Foundation Server
If you are connecting to Team Foundation Server, you will only need your NTLM credentials (domain name, server name
and password). It is assumed that you have the proper permissions on the TFS Server.

## Configure TFVC Support
To configure TFVC support, you must provide the location to the TF command line client used by the extension to perform
TFVC actions. To set this location, add the following entry to Settings (**File > Preferences > Settings**):
```javascript
    "tfvc.location": "<path-to-tf-command-line>"
```
If you plan to use the TFVC command line provided by the Visual Studio IDE, the value to provide will be similar to `C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\TF.exe`.

If you plan to use the TEE CLC, the value to provide will be similar to `/home/username/TEE-CLC-14.114.0/tf`. On Windows,
the entry should point to `tf.cmd`. On macOS and Linux, it should point to the script `tf`. If you are using the TEE CLC,
see how to do this by viewing [this video](https://youtu.be/VPNaEIVZfr0).

## Team Foundation Version Control
To get an overview of the TFVC support provided by the extension, view [this video](https://youtu.be/6IzJ2UPGmoQ). Although
it demonstrates the extension running on Windows, the TFVC functionality will work the same on macOS and Linux. Further
information is detailed below.

### Open a local TFVC Repository folder
Once you have installed the extension, open either the root folder or a sub-folder of the TFVC repository. Once a Team
Services or Team Foundation Server 2015 Update 2 (or later) repository is detected by the extension, you will need to provide
your credentials (if credentials weren't already found). If you are required to provide your credentials, there will be an
indicator in the status bar whose message will indicate that you need to sign in.

The indicator looks like this:

![Team Error indicator](assets/team-error.png)

To sign in, run the `team signin` command or simply click on that indicator. If your repository
is hosted on Azure Repos, you will be prompted to enter your personal access token. When you do, it will be
stored securely on your computer and used to connect. If your repository is on Team Foundation 
Server 2015 Update 2 or later, you will be prompted to enter your username and password. After both are provided, they will
be stored securely on your computer and used to connect to your TFS server.

Once your credentials are verified, the status bar indicators will be active and the remaining commands will
be ready to use. The stored credentials will be used for each connection to the server until they are either
removed by the `team signout` command or overwritten by a subsequent `team signin` command.

**Note:** In order for the extension to be activated, a repository *folder* must be opened. The extension
won't be activated if only a single *file* in the repository is opened.

### The TFVC Source Control Viewlet
![Team Foundation Version Control Viewlet](assets/tfvc-viewlet.png)

This is the Team Foundation Version Control Viewlet. It displays lists of any conflicting changes (to be resolved before
the next check-in), included changes (changes to be included in the next check-in), excluded changes (changes to keep but
excluded from check-in). The viewlet also provides right-click context menus to allow additional functionality like Undo,
Include and Exclude.

#### Check In and Refresh
![TFVC Check In Refresh](assets/tfvc-checkin-refresh.png)
* `Check In` – This `check mark` button is used to check in your changes. You will not be prompted for a comment so make sure you provide
one before clicking.
* `Refresh` – This `circular arrow` button runs the TFVC `Status` command and processes the results.

#### The '...' Menu
This menu provides access to additional commands provided by the TFVC source provider.

![TFVC ... Menu](assets/tfvc-more-menu.png)

* `Sync` – This option runs the `Get` command and handles any conflicts or errors.
* `Associate Work Items` – In order to associate work items to your check-in, select this option. The list of work items
assigned to you (or returned from your custom query) will be displayed for you to choose. Choosing one adds it to your check-in comment.
* `Check In` – Use this option to check in your changes.
* `Undo All` - If there are file modifications, this command will prompt for confirmation and then undo all of the changes.
* `Show TFVC Output` – Use this option to display the `TFVC Output` window which shows the TFVC commands run during this session.
* `Switch SCM Provider... >` – This option is provided by VS Code and allows you to change between the available source control
providers (e.g, Git, TFVC, etc.).

#### Resolving Conflicts
When conflicts need to be resolved, you can use these commands to do so. There are inline icons which also provide this functionality.

![TFVC Resolve Conflicts](assets/tfvc-resolve-conflicts.png)

* `Open Diff` – Opens the diff view between the modified file and the versioned file.
* `Open File` – Opens the modified file in the editor.
* `Resolve: Take Theirs` – Resolves the conflict as `Take Theirs`.
* `Resolve: Keep Yours` – Resolves the conflict as `Keep Yours`.
* `Undo` – Reverts the changes made to the file.

***Note:*** Resolving conflicts between branches is not supported in the extension. At this time, these conflicts are best addressed
in an IDE or at the command line.

### File Explorer
Access to renaming a file is provided on Visual Studio Code's File Explorer menu.

![TFVC Rename](assets/tfvc-rename.png)

* `Delete (TFVC)` – To properly delete a file in TFVC using the `Delete` command, use this option on Visual Studio Code's File Explorer. Since 1.119.0, the extension will no longer automatically promote candidate deletions to a TFVC delete.

* `Rename (TFVC)` – To properly rename a file in TFVC using the `Rename` command (instead of `Delete` and `Add`), use this option on Visual Studio Code's File Explorer. You will prompted for a new file name.

## Additional Information
### Specifying a TFS Proxy
To configure a TFS proxy server, you must provide the URL to that server in the Visual Studio Code Settings (**File > Preferences > Settings**):
  ```javascript
    "tfvc.proxy": "http://servername:9999/proxy"
  ```

### Restricting Status changes to the current VS Code Workspace
By default, TFVC support shows status across the entire mapped workspace regardless of the folder you may have open in Visual Studio Code. If you
prefer to see just the status of changes for the currently opened VS Code workspace, you can do so by setting the following flag in the Visual
Studio Code Settings (**File > Preferences > Settings**):
  ```javascript
    "tfvc.restrictWorkspace": true
  ```

## Frequently Asked Questions
### *I received the "It appears you have configured a non-English version of the TF executable. Please ensure an English version is properly configured." error message after configuring TF.exe. How can I get the extension to work properly?*
When TF.exe is configured as the tool to communicate with your TFS server (the TEE CLC does not have this problem), it will output status messages in
the language of the configured operating system. So if the operating system is configured for German, the status messages will be output in German. The
extension parses the output of TF.exe to show status in the SCM Viewlet. Today, the extension expects the messages to be output in English (thus the 
error message you received). This message is an attempt to identify the issue.

While there isn't a fix (e.g, an update to TF.exe that allows it to always output English status messages), one workaround is to rename the folder on disk from where the localized resources are being loaded by TF.exe. If the folder containing the localized resources cannot be located, the .NET Framework will fallback to the resources stored in TF.exe itself (the English ones). To locate the folder that needs to be renamed, open the folder that
contains the TF.exe you have configured. In that folder are folders such as `de`, `fr`, `it`, `es`. Simply rename that folder with another name and restart Visual Studio Code. If you would rather not update that particular installation of Visual Studio (as such a change would affect Visual Studio as well), you can install the [standalone Team Explorer 2017 version of Visual Studio](#how-can-i-acquire-tfexe-do-i-need-a-version-of-visual-studio), configure the TF.exe that ships with it and rename the folder in that instance.

### *Is it required that I have a TFVC workspace already on my local machine to use the TFVC support?*
Since release 1.116.0, yes, it is a requirement that you have an existing workspace on your local machine.

### *Can I use the Team Explorer Everywhere Command Line Client (TEE CLC) to provide the TFVC functionality on Windows?*
Yes. If you use Eclipse or one of JetBrain's IDEs (e.g, Android Studio, IntelliJ) on Windows, then you will want to use the TEE CLC to provide
the TFVC support.

### *How do I set up the CLC on Windows?*
While the TEE CLC is primarily for macOS and Linux users it can also be used on Windows. In order to use the CLC on Windows, you need to do the following:
- Download and install a version of [Java 8 for Windows](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html).
  - Make sure to install the version (i.e., x86 or x64) that matches your processor architecture
- Ensure the path to `java.exe` is a part of your `PATH` environment variable.
  - Check that you can successully run `java -version`
- Download and unzip the [latest version](https://github.com/Microsoft/team-explorer-everywhere/releases) of the TEE CLC to a local folder of your choice.
  - The file you need to download is of the format `TEE-CLC-14.114.0.zip`
- Open a command prompt and run `{path-to-tf.cmd} eula` and accept the End User License Agreement.
- From within Visual Studio Code, update your `tfvc.location` setting to the full path to `tf.cmd` (e.g., `C:\TEE-CLC-14.111.1\tf.cmd`).
- The last thing that you **must** do is run the `tf workspaces` command as detailed [here](#i-have-workspaces-created-with-visual-studio-can-i-use-the-tee-clc-to-work-with-them) so that the CLC is aware of the workspaces in the specified collection. (Each tool, tf.cmd and tf.exe, keeps its own local cache of workspaces.)

Finally, there's also a [video](https://youtu.be/VPNaEIVZfr0) that shows how to do this on Linux (the same high-level steps apply on Windows).

### *Which instructions do I follow to set up TFVC functionality on the macOS?*
You will follow the same instructions for setting up the TEE CLC as is shown on Ubuntu in [this video](https://youtu.be/VPNaEIVZfr0).

### *I have workspaces created with Visual Studio. Can I use the TEE CLC to work with them?*
This should be possible. However, you will need to make the TEE CLC aware of those workspaces by running the `tf workspaces -collection:<collection-url>` command.

### *Using the TEE CLC, I am unable to access an existing local workspace. What can I do?*
This error may mean you are attempting to access a workspace created by TF.exe from the TEE CLC. First, using the CLC, run the `tf workspaces` command as detailed [here](#i-have-workspaces-created-with-visual-studio-can-i-use-the-tee-clc-to-work-with-them) 
to help the CLC be aware of the workspaces in the specified collection. You may also need to run the `tf workfold` command from the local folder being accessed from Visual Studio Code. Running both commands should make the TEE CLC aware of the workspace and 
as well as verify that access to it is possible.

***Note:*** You will also have to do this if you move between versions of TF.exe (e.g., workspaces created with VS2015 will not be able to be detected with the TF.exe that ships with VS2017 until `tf workspaces` is run with the 2017 TF.exe; and vice-versa). Each major version of TF.exe stores its
workspace information in a different folder on disk. This behavior is "by-design".

### *My TFS server requires associating work items to a check-in via check-in policies but I can't check in with TF.exe. What can I do?*
Unfortunately, TF.exe doesn't provide the ability to associate work items on check in. The most TF.exe can do is submit a check in *comment* with a reference to the work item (which will not actually associate the work item). In order to enable checking in to 
servers that have check-in policies enabled, you must use the TEE CLC (which does provide support for associating work items on check-in). Follow [these instructions](#how-do-i-set-up-the-clc-on-windows) to set up the TEE CLC on Windows.

### *Many files are showing up in the TFVC Viewlet that don't show up in the Visual Studio IDE. How can I ignore them?*
The Visual Studio IDE shows these files as 'Detected Changes' and simply displays the number of them. The TFVC Viewlet will display each file individually. See [this issue](https://github.com/Microsoft/azure-repos-vscode/issues/248) for an example of what you may see. To properly ignore these files,
create a `.tfignore` file and add it to the root folder of your TFVC repository. (You will also want to check this file in.) You can find the official documentation on how to do this [here](https://www.visualstudio.com/en-us/docs/tfvc/add-files-server#customize-which-files-are-ignored-by-version-control).
To get started easily, copy this [example file](https://www.visualstudio.com/en-us/docs/tfvc/add-files-server#tfignore-file-example), place it in the root of your repository, update it as necessary and check it in. For example, if you want to ignore all files under the `node_modules` folder, you
would add a `\node_modules` entry to the `.tfignore` file.

### *I already have Visual Studio installed. How can I determine the location of TF.exe?*
Here's a tip from **@dsolodow** ([original comment](https://github.com/Microsoft/azure-repos-vscode/issues/269#issuecomment-311837077)): _When you install Visual Studio, it creates a Start Menu shortcut called "Developer Command Prompt for VS YEAR" where YEAR is 2015, 2017, etc. If you launch that, and then at that prompt run `where tf.exe` it will give you the full path to it that you can then put into the settings.json._

### *How can I acquire TF.exe? Do I need a version of Visual Studio?*
Yes, you do need a version of Visual Studio. While TF.exe comes with the Community, Enterprise and Professional versions of Visual Studio 2017, there is also a free, standalone "Visual Studio Team Explorer 2017" version that contains TF.exe. You can find all 
of the versions of Visual Studio (including Team Explorer) on the [Visual Studio 2017 Downloads](https://www.visualstudio.com/downloads/) page (which needs to be expanded first). It is listed under the "Visual Studio 2017" section on that page. The release 
notes for Team Explorer 2017 can be found [here](https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes-v15.1#te).

### *Where is the support for Server workspaces?*
At this time, it's still on the backlog. The issue tracking support for Server workspaces is [here](https://github.com/Microsoft/azure-repos-vscode/issues/176).

### *What is the difference between a Local and Server workspace? How can I tell which one I'm working with?*
You can read about the differences between the two in [our documentation](https://www.visualstudio.com/en-us/docs/tfvc/decide-between-using-local-server-workspace).
Using `tf.exe` on Windows, you can determine which type of workspace you have by running `tf workspace` from the folder where your workspace resides. When you do, a dialog box similar to the one below will be displayed and you can see the type of workspace in the `Location` field (you may need to click the `Advanced >>` button). To change
the type of workspace, update the `Location` field and click `OK`.

![Azure Repos extension](assets/tf-workspace-dialog.png)

## Further Information
For information on other features of the extension, support, licensing, privacy, or contributing code, please review the main [README](README.md) file.


================================================
FILE: ThirdPartyNotices.txt
================================================

THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
Do Not Translate or Localize

Azure Repos Extension for Visual Studio Code incorporates third party material 
(and other Microsoft material) from the projects listed below. The original copyright notice 
and the license under which Microsoft received such third party material are set forth below. 
Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or 
otherwise. 


1.  Application Insights for Node.js (https://github.com/Microsoft/ApplicationInsights-node.js)
2.  event-stream (https://github.com/dominictarr/event-stream)
3.  git-repo-info (https://github.com/rwjblue/git-repo-info)
4.  node-open (https://github.com/pwnall/node-open)
5.  node-url (https://github.com/defunctzombie/node-url)
6.  opener (https://github.com/domenic/opener)
7.  parse-git-config (https://github.com/jonschlinkert/parse-git-config)
8.  path (https://github.com/jinder/path)
9.  readable-stream (https://github.com/nodejs/readable-stream)
10. request-promise-native (https://github.com/request/request-promise-native)
11. underscore (https://github.com/jashkenas/underscore)
12. uuid (https://github.com/kelektiv/node-uuid)
13. vso-node-api (https://github.com/Microsoft/vso-node-api)
14. vsts-device-flow-auth (https://github.com/Microsoft/vsts-device-flow-auth)
15. winston (https://github.com/winstonjs/winston)
16. xml2js (https://github.com/Leonidas-from-XIV/node-xml2js)
17. xmldoc (https://github.com/nfarina/xmldoc)


%% Application Insights for Node.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright (c) Microsoft Corporation

All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

=========================================
END OF Application Insights for Node.js NOTICES, INFORMATION, AND LICENSE

%% event-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
Copyright (c) 2011 Dominic Tarr

Provided for Informational Purposes Only
 
MIT License
 
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the Software), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF event-stream NOTICES, INFORMATION, AND LICENSE

%% git-repo-info NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT) 

Copyright (c) Robert Jackson

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

=========================================
END OF git-repo-info NOTICES, INFORMATION, AND LICENSE

%% node-open NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright (c) 2012 Jay Jordan

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF node-open NOTICES, INFORMATION, AND LICENSE

%% node-url NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright Joyent, Inc. and other Node contributors.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
=========================================
END OF node-url NOTICES, INFORMATION, AND LICENSE

%% opener NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================

Copyright � 2012�2015 Domenic Denicola <d@domenic.me>
Licensed under the WTFPL Version 2 (http://www.wtfpl.net/about/)
=========================================
END OF opener NOTICES, INFORMATION, AND LICENSE

%% parse-git-config NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright (c) 2015 Jon Schlinkert

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
=========================================
END OF parse-git-config NOTICES, INFORMATION, AND LICENSE

%% path NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright Joyent, Inc. and other Node contributors. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
=========================================
END OF path NOTICES, INFORMATION, AND LICENSE

%% readable-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
Copyright Joyent, Inc. and other Node contributors. All rights reserved.

Provided for Informational Purposes Only
 
MIT License
 
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the Software), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF readable-stream NOTICES, INFORMATION, AND LICENSE

%% request-promise-native NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
ISC License

Copyright (c) 2017, Nicolai Kamenzky and contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
=========================================
END OF request-promise-native NOTICES, INFORMATION, AND LICENSE

%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
Copyright (c) 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative
Reporters & Editors
 
Provided for Informational Purposes Only
 
MIT License
 
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the Software), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF underscore  NOTICES, INFORMATION, AND LICENSE

%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright (c) 2010-2016 Robert Kieffer and other contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

=========================================
END OF uuid NOTICES, INFORMATION, AND LICENSE

%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright (c) 2015 Microsoft

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
=========================================
END OF vso-node-api NOTICES, INFORMATION, AND LICENSE

%% vsts-device-flow-auth NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
MIT License

Copyright (c) Microsoft Corporation. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
=========================================
END OF vsts-device-flow-auth NOTICES, INFORMATION, AND LICENSE

%% winston NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
The MIT License (MIT)

Copyright (c) 2010 Charlie Robbins

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

=========================================
END OF winston NOTICES, INFORMATION, AND LICENSE

%% xml2js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
Copyright 2010, 2011, 2012, 2013. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.

=========================================
END OF xml2js NOTICES, INFORMATION, AND LICENSE

%% xmldoc NOTICES, INFORMATION, AND LICENSE BEGIN HERE
=========================================
Copyright 2012 Nick Farina.
All rights reserved.

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

=========================================
END OF xmldoc NOTICES, INFORMATION, AND LICENSE

================================================
FILE: gulpfile.js
================================================
'use strict';

var gulp  = require('gulp'),
    mocha = require('gulp-mocha'),
    gutil = require('gulp-util');
var exec  = require('child_process').exec;
var tslint = require('gulp-tslint');
var typescript = require('gulp-typescript');
var sourcemaps = require('gulp-sourcemaps');
var del = require('del');
var argv = require('yargs').argv;
var istanbul = require('gulp-istanbul');
var tl = require('vsts-task-lib');
var path = require('path');

// Default to list reporter when run directly.
// CI build can pass 'reporter=junit' to create JUnit results files
var reporterUnitTest = { reporter: 'list' };
var reporterIntegrationTest = { reporter: 'list' };
if (argv.reporter === "junit") {
    reporterUnitTest = { reporter: 'mocha-junit-reporter', reporterOptions: { mochaFile: 'out/results/tests/test-unittestresults.xml'} } ;
    reporterIntegrationTest = { reporter: 'mocha-junit-reporter', reporterOptions: { mochaFile: 'out/results/tests/test-integrationtestresults.xml'} } ;
}

function errorHandler(err) {
    console.error(err.message);
    process.exit(1);
}

gulp.task('clean', function (done) {
    return del(['out/**', '!out', '!out/src/credentialstore/linux', '!out/src/credentialstore/osx', '!out/src/credentialstore/win32'], done);
});

gulp.task('copyresources', ['clean'],  function() {
    return gulp.src('resources/**/*')
        .pipe(gulp.dest('out/resources'));
});

gulp.task('build', ['copyresources'], function () {
    let tsProject = typescript.createProject('./tsconfig.json');
    let tsResult = tsProject.src()
        .pipe(sourcemaps.init())
        .pipe(tsProject())
        .on('error', errorHandler);

    return tsResult.js
        .pipe(sourcemaps.write('.', {
            sourceRoot: function (file) {
                // This override is needed because of a bug in sourcemaps base logic.
                // "file.base"" is the out dir where all the js and map files are located.
                return file.base;
            }
        }))
        .pipe(gulp.dest('./out'));
});

gulp.task('tslint', ['build'], function () {
    return gulp.src(['./src/**/*.ts', './test/**/*.ts', './test-integration/**/*.ts'])
        .pipe(tslint({ configuration: "tslint.json", formatter: "verbose" }))
        .pipe(tslint.report({ emitError: true, summarizeFailureOutput: true }))
        .on('error', errorHandler);
});

gulp.task('publishbuild', ['tslint'], function () {
    gulp.src(['./src/credentialstore/**/*.js'])
        .pipe(gulp.dest('./out/src/credentialstore'));
    gulp.src(['./src/credentialstore/bin/win32/*'])
        .pipe(gulp.dest('./out/src/credentialstore/bin/win32'));
});

gulp.task('publishall', ['publishbuild'], function () {
    gulp.src(['./test/contexts/testrepos/**/*'])
        .pipe(gulp.dest('./out/test/contexts/testrepos'));
    gulp.src(['./test/helpers/testrepos/**/*'])
        .pipe(gulp.dest('./out/test/helpers/testrepos'));
    gulp.src(['./patches/vso-node-api/handlers/ntlm.js'])
        .pipe(gulp.dest('./node_modules/vso-node-api/handlers'));
});

//Tests will fail with MODULE_NOT_FOUND if I try to run 'publishBuild' before test target
//gulp.task('test', ['publishBuild'], function() {
gulp.task('test', function() {
    return gulp.src(['out/test/**/*.js'], {read: false})
    .pipe(mocha(reporterUnitTest))
    .on('error', errorHandler);
});

gulp.task('test-integration', function() {
    return gulp.src(['out/test-integration/**/*.js'], {read: false})
    .pipe(mocha(reporterIntegrationTest))
    .on('error', errorHandler);
});

gulp.task('test-coverage', function() {
    //credentialstore is brought in from separate repository, exclude it here
    //exclude the files we know we can't get coverage on (e.g., vscode, etc.)
    return gulp.src(['out/src/**/*.js', '!out/src/credentialstore/**'
        ,'!out/src/extension.js'
        ,'!out/src/extensionmanager.js'
        ,'!out/src/team-extension.js'
        ,'!out/src/clients/baseclient.js'
        ,'!out/src/clients/buildclient.js'
        ,'!out/src/clients/coreapiclient.js'
        ,'!out/src/clients/feedbackclient.js'
        ,'!out/src/clients/gitclient.js'
        ,'!out/src/clients/httpclient.js'
        ,'!out/src/clients/repositoryinfoclient.js'
        ,'!out/src/clients/soapclient.js'
        ,'!out/src/clients/tfscatalogsoapclient.js'
        ,'!out/src/clients/witclient.js'
        ,'!out/src/contexts/repocontextfactory.js'
        ,'!out/src/contexts/tfvccontext.js'
        ,'!out/src/helpers/settings.js'
        ,'!out/src/helpers/vscodeutils.interfaces.js'
        ,'!out/src/helpers/vscodeutils.js'
        ,'!out/src/services/telemetry.js'
        ,'!out/src/services/coreapi.js'
        ,'!out/src/tfvc/tfvcrepository.js'
        ,'!out/src/tfvc/tfvc-extension.js'
        ,'!out/src/tfvc/tfcommandlinerunner.js'
        ,'!out/src/tfvc/tfvcoutput.js'
        ,'!out/src/tfvc/tfvcscmprovider.js'
        ,'!out/src/tfvc/tfvcsettings.js'
        ,'!out/src/tfvc/uihelper.js'
        ,'!out/src/tfvc/util.js'
        ,'!out/src/tfvc/scm/commithoverprovider.js'
        ,'!out/src/tfvc/scm/decorationprovider.js'
        ,'!out/src/tfvc/scm/model.js'
        ,'!out/src/tfvc/scm/resource.js'
        ,'!out/src/tfvc/scm/tfvccontentprovider.js'
    ])
    .pipe(istanbul({includeUntested: true}))
    //.pipe(istanbul())
    .pipe(istanbul.hookRequire()) //for using node.js
    .on('finish', function() {
        gulp.src('out/test*/**/*.js')
          .pipe(mocha(reporterUnitTest))
          .pipe(istanbul.writeReports(
              {
                  dir: 'out/results/coverage',
                  reporters: ['cobertura','html'],
                  reportOpts: { dir: 'out/results/coverage' }
              }
          ));
    })
    .on('error', errorHandler);
});

//The following task is used by the CI build to upload code coverage files
//Added due to race condition between writeReports and ccPublisher.publish
//It's OK for this to fail if the coverage file doesn't exist
gulp.task('upload-coverage-file', function() {
    var ccPublisher = new tl.CodeCoveragePublisher();
    ccPublisher.publish('cobertura', path.join(__dirname, 'out/results/coverage/cobertura-coverage.xml'), path.join(__dirname, 'out/results/coverage'), "");
});

gulp.task('test-all', ['test', 'test-integration'], function() { });

gulp.task('packageonly', function (cb) {
  exec('vsce package', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
});

gulp.task('package', ['publishall'], function (cb) {
  exec('vsce package', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
});

gulp.task('vsce-version', function (cb) {
  exec('vsce -Version', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
});

gulp.task('default', ['publishall']);


================================================
FILE: package.json
================================================
{
  "name": "team",
  "displayName": "Azure Repos",
  "description": "Connect to Azure Repos and work with Git and Team Foundation Version Control (TFVC) repositories. Manage your pull requests, work items, and more.",
  "version": "1.161.1",
  "publisher": "ms-vsts",
  "icon": "assets/team.png",
  "markdown": "standard",
  "galleryBanner": {
    "color": "#313131",
    "theme": "dark"
  },
  "keywords": [
    "VSTS",
    "Team Foundation Server",
    "Team Services",
    "Visual Studio Team Services",
    "TFVC",
    "Azure Repos"
  ],
  "categories": [
    "SCM Providers",
    "Other"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/Microsoft/azure-repos-vscode.git"
  },
  "bugs": "https://github.com/Microsoft/azure-repos-vscode/issues",
  "license": "SEE LICENSE IN LICENSE.txt",
  "homepage": "https://github.com/Microsoft/azure-repos-vscode/blob/master/README.md",
  "engines": {
    "vscode": "^1.12.0"
  },
  "enableProposedApi": false,
  "activationEvents": [
    "*"
  ],
  "main": "./out/src/extension",
  "contributes": {
    "menus": {
      "commandPalette": [
        {
          "command": "team.OpenBlamePage",
          "when": "scmProvider != tfvc"
        },
        {
          "command": "tfvc.Undo",
          "when": "false"
        },
        {
          "command": "tfvc.UndoAll",
          "when": "false"
        },
        {
          "command": "tfvc.ResolveTakeTheirs",
          "when": "false"
        },
        {
          "command": "tfvc.ResolveKeepYours",
          "when": "false"
        },
        {
          "command": "tfvc.Include",
          "when": "false"
        },
        {
          "command": "tfvc.Exclude",
          "when": "false"
        },
        {
          "command": "tfvc.Checkin",
          "when": "false"
        },
        {
          "command": "tfvc.Delete",
          "when": "false"
        },
        {
          "command": "tfvc.Rename",
          "when": "false"
        },
        {
          "command": "tfvc.Open",
          "when": "false"
        },
        {
          "command": "tfvc.OpenFile",
          "when": "false"
        },
        {
          "command": "tfvc.OpenDiff",
          "when": "false"
        },
        {
          "command": "tfvc.Refresh",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "tfvc.ShowOutput",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "tfvc.Sync",
          "when": "scmProvider == tfvc"
        }
      ],
      "explorer/context": [
        {
          "command": "tfvc.Delete",
          "group": "9_cutcopypaste",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "tfvc.Rename",
          "group": "9_cutcopypaste",
          "when": "scmProvider == tfvc"
        }
      ],
      "scm/title": [
        {
          "command": "tfvc.Checkin",
          "group": "navigation@1",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "tfvc.Refresh",
          "group": "navigation@2",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "tfvc.Sync",
          "group": "1_sync@1",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "team.AssociateWorkItems",
          "group": "3_commit@3",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "team.AssociateWorkItems",
          "group": "3_commit@5",
          "when": "scmProvider == git"
        },
        {
          "command": "tfvc.Checkin",
          "group": "3_commit@4",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "tfvc.UndoAll",
          "group": "3_commit@5",
          "when": "scmProvider == tfvc"
        },
        {
          "command": "tfvc.ShowOutput",
          "group": "5_output",
          "when": "scmProvider == tfvc"
        }
      ],
      "scm/resourceState/context": [
        {
          "command": "tfvc.OpenDiff",
          "when": "scmProvider == tfvc",
          "group": "navigation@1"
        },
        {
          "command": "tfvc.OpenFile",
          "when": "scmProvider == tfvc",
          "group": "navigation@2"
        },
        {
          "command": "tfvc.Undo",
          "when": "scmProvider == tfvc && scmResourceGroup != conflicts",
          "group": "3_commit@1"
        },
        {
          "command": "tfvc.Include",
          "when": "scmProvider == tfvc && scmResourceGroup == excluded",
          "group": "1_modification@1"
        },
        {
          "command": "tfvc.Exclude",
          "when": "scmProvider == tfvc && scmResourceGroup == included",
          "group": "1_modification@1"
        },
        {
          "command": "tfvc.ResolveTakeTheirs",
          "when": "scmProvider == tfvc && scmResourceGroup == conflicts",
          "group": "1_modification@1"
        },
        {
          "command": "tfvc.ResolveKeepYours",
          "when": "scmProvider == tfvc && scmResourceGroup == conflicts",
          "group": "1_modification@2"
        },
        {
          "command": "tfvc.Undo",
          "when": "scmProvider == tfvc && scmResourceGroup == conflicts",
          "group": "9_cutcopypaste"
        },
        {
          "command": "tfvc.Undo",
          "when": "scmProvider == tfvc",
          "group": "inline@1"
        },
        {
          "command": "tfvc.Include",
          "when": "scmProvider == tfvc && scmResourceGroup == excluded",
          "group": "inline@2"
        },
        {
          "command": "tfvc.Exclude",
          "when": "scmProvider == tfvc && scmResourceGroup == included",
          "group": "inline@2"
        },
        {
          "command": "tfvc.ResolveTakeTheirs",
          "when": "scmProvider == tfvc && scmResourceGroup == conflicts",
          "group": "inline@2"
        },
        {
          "command": "tfvc.ResolveKeepYours",
          "when": "scmProvider == tfvc && scmResourceGroup == conflicts",
          "group": "inline@3"
        }
      ]
    },
    "configuration": {
      "type": "object",
      "title": "Azure Repos",
      "properties": {
        "team.appInsights.enabled": {
          "type": "boolean",
          "default": true,
          "description": "Enables Application Insights telemetry collection for the Azure Repos extension."
        },
        "team.logging.level": {
          "type": "string",
          "default": "",
          "description": "Set the logging level for the extension (error, warn, info, verbose, debug)."
        },
        "team.pinnedQueries": {
          "type": "array",
          "default": [
            {
              "account": "",
              "queryText": "",
              "queryPath": ""
            }
          ],
          "description": "Specify the account and either the queryText or queryPath of the query you'd like to monitor.  If specified, queryText is preferred over queryPath."
        },
        "team.pollingInterval": {
          "type": "number",
          "default": 5,
          "description": "Specify the number of minutes to wait when polling for new builds and pull requests."
        },
        "team.remoteUrl": {
          "type": "string",
          "default": "",
          "description": "[Not for TFVC] Specify the url to a project collection to use when your source code repository is not hosted with Microsoft. Requires team.teamProject."
        },
        "team.teamProject": {
          "type": "string",
          "default": "",
          "description": "[Not for TFVC] Specify the team project to use when your source code repository is not hosted with Microsoft. Requires team.remoteUrl."
        },
        "team.buildDefinitionId": {
          "type": "number",
          "default": 0,
          "description": "[Not for TFVC] Specify the team project's build definition Id to monitor when your source code repository is not hosted with Microsoft. Requires both team.remoteUrl and team.teamProject."
        },
        "team.showWelcomeMessage": {
          "type": "boolean",
          "default": true,
          "description": "Tracks whether the extension should display the Welcome message after the initial installation."
        },
        "team.showFarewellMessage": {
          "type": "boolean",
          "default": true,
          "description": "Show the deprecation message again?"
        },
        "tfvc.location": {
          "type": "string",
          "default": "",
          "description": "[Required for TFVC] Specify the full path to the TF executable or script to use for TFVC functionality."
        },
        "tfvc.proxy": {
          "type": "string",
          "default": "",
          "description": "[Optional for TFVC] Specify the full URL (ex. http://servername:9999/proxy) to the TFS proxy to use for TFVC functionality."
        },
        "tfvc.restrictWorkspace": {
          "type": "boolean",
          "default": false,
          "description": "[Optional for TFVC] Restricts the TFVC workspace to the currently open VS Code workspace."
        }
      }
    },
    "commands": [
      {
        "command": "team.AssociateWorkItems",
        "title": "Associate Work Items",
        "category": "Team"
      },
      {
        "command": "team.OpenNewTask",
        "title": "Create Task",
        "category": "Team"
      },
      {
        "command": "team.OpenNewBug",
        "title": "Create Bug",
        "category": "Team"
      },
      {
        "command": "team.OpenFileHistory",
        "title": "View History",
        "category": "Team"
      },
      {
        "command": "team.OpenBlamePage",
        "title": "View Blame",
        "category": "Team"
      },
      {
        "command": "team.OpenNewPullRequest",
        "title": "Create Pull Request",
        "category": "Team"
      },
      {
        "command": "team.OpenNewWorkItem",
        "title": "Create Work Item",
        "category": "Team"
      },
      {
        "command": "team.GetPullRequests",
        "title": "View Pull Requests",
        "category": "Team"
      },
      {
        "command": "team.OpenBuildSummaryPage",
        "title": "View Build Summary",
        "category": "Team"
      },
      {
        "command": "team.OpenTeamSite",
        "title": "View Website",
        "category": "Team"
      },
      {
        "command": "team.ViewWorkItems",
        "title": "View Work Items",
        "category": "Team"
      },
      {
        "command": "team.ViewWorkItemQueries",
        "title": "View Work Item Queries",
        "category": "Team"
      },
      {
        "command": "team.SendFeedback",
        "title": "Send Feedback",
        "category": "Team"
      },
      {
        "command": "team.Signin",
        "title": "Signin",
        "category": "Team"
      },
      {
        "command": "team.Signout",
        "title": "Signout",
        "category": "Team"
      },
      {
        "command": "tfvc.Checkin",
        "title": "Check In",
        "category": "TFVC",
        "icon": {
          "light": "resources/icons/light/check.svg",
          "dark": "resources/icons/dark/check.svg"
        }
      },
      {
        "command": "tfvc.Exclude",
        "title": "Exclude",
        "category": "TFVC",
        "icon": {
          "light": "resources/icons/light/unstage.svg",
          "dark": "resources/icons/dark/unstage.svg"
        }
      },
      {
        "command": "tfvc.Include",
        "title": "Include",
        "category": "TFVC",
        "icon": {
          "light": "resources/icons/light/stage.svg",
          "dark": "resources/icons/dark/stage.svg"
        }
      },
      {
        "command": "tfvc.Open",
        "title": "Open",
        "category": "TFVC"
      },
      {
        "command": "tfvc.OpenDiff",
        "title": "Open Diff",
        "category": "TFVC"
      },
      {
        "command": "tfvc.OpenFile",
        "title": "Open File",
        "category": "TFVC"
      },
      {
        "command": "tfvc.Delete",
        "title": "Delete (TFVC)",
        "category": "TFVC"
      },
      {
        "command": "tfvc.Rename",
        "title": "Rename (TFVC)",
        "category": "TFVC"
      },
      {
        "command": "tfvc.ShowOutput",
        "title": "Show TFVC Output",
        "category": "TFVC"
      },
      {
        "command": "tfvc.Refresh",
        "title": "Refresh",
        "category": "TFVC",
        "icon": {
          "light": "resources/icons/light/refresh.svg",
          "dark": "resources/icons/dark/refresh.svg"
        }
      },
      {
        "command": "tfvc.ResolveKeepYours",
        "title": "Resolve: Keep Yours",
        "category": "TFVC",
        "icon": {
          "light": "resources/icons/light/resolve-keepyours.svg",
          "dark": "resources/icons/dark/resolve-keepyours.svg"
        }
      },
      {
        "command": "tfvc.ResolveTakeTheirs",
        "title": "Resolve: Take Theirs",
        "category": "TFVC",
        "icon": {
          "light": "resources/icons/light/resolve-taketheirs.svg",
          "dark": "resources/icons/dark/resolve-taketheirs.svg"
        }
      },
      {
        "command": "tfvc.Sync",
        "title": "Sync",
        "category": "TFVC"
      },
      {
        "command": "tfvc.Undo",
        "title": "Undo",
        "category": "TFVC",
        "icon": {
          "light": "resources/icons/light/clean.svg",
          "dark": "resources/icons/dark/clean.svg"
        }
      },
      {
        "command": "tfvc.UndoAll",
        "title": "Undo All",
        "category": "TFVC"
      }
    ]
  },
  "scripts": {
    "compile": "tsc -watch -p ./",
    "postinstall": "node ./node_modules/vscode/bin/install"
  },
  "devDependencies": {
    "@types/applicationinsights": "0.15.33",
    "@types/chai": "^3.4.1",
    "@types/mocha": "^2.2.32",
    "@types/node": "^6.0.40",
    "@types/q": "^0.0.32",
    "@types/uuid": "^2.0.29",
    "@types/winston": "2.3.1",
    "@types/xml2js": "^0.0.32",
    "@types/xmldoc": "^0.5.0",
    "chai": "^3.4.1",
    "del": "^2.2.0",
    "gulp-istanbul": "^1.1.1",
    "gulp-mocha": "^3.0.1",
    "gulp-sourcemaps": "^2.4.0",
    "gulp-tslint": "^7.1.0",
    "gulp-typescript": "^3.1.4",
    "gulp-util": "^3.0.7",
    "mocha-junit-reporter": "^1.12.0",
    "should": "^8.1.1",
    "tslint": "^4.0.0",
    "typescript": "2.3.4",
    "vscode": "^1.0.0",
    "vsts-task-lib": "^0.9.18",
    "yargs": "^5.0.0"
  },
  "dependencies": {
    "applicationinsights": "0.15.16",
    "event-stream": "^3.3.2",
    "fs": "0.0.2",
    "git-repo-info": "^1.1.2",
    "gulp": "^3.9.1",
    "open": "0.0.5",
    "opener": "^1.4.1",
    "parse-git-config": "^0.3.1",
    "path": "^0.12.7",
    "readable-stream": "^2.1.4",
    "request-promise-native": "^1.0.4",
    "underscore": "^1.8.3",
    "url": "^0.11.0",
    "uuid": "^3.0.1",
    "vso-node-api": "^5.1.1",
    "vsts-device-flow-auth": "^1.136.0",
    "winston": "2.3.1",
    "xml2js": "^0.4.17",
    "xmldoc": "^0.5.1"
  }
}


================================================
FILE: patches/vso-node-api/handlers/ntlm.js
================================================
"use strict";
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
var http = require("http");
var https = require("https");
var _ = require("underscore");
var ntlm = require("../opensource/node-http-ntlm/ntlm");
var NtlmCredentialHandler = (function () {
    function NtlmCredentialHandler(username, password, domain, workstation) {
        this.username = username;
        this.password = password;
        if (domain !== undefined) {
            this.domain = domain;
        }
        if (workstation !== undefined) {
            this.workstation = workstation;
        }
    }
    NtlmCredentialHandler.prototype.prepareRequest = function (options) {
        // No headers or options need to be set.  We keep the credentials on the handler itself.
        // If a (proxy) agent is set, remove it as we don't support proxy for NTLM at this time
        if (options.agent) {
            delete options.agent;
        }
    };
    NtlmCredentialHandler.prototype.canHandleAuthentication = function (res) {
        if (res && res.statusCode === 401) {
            // Ensure that we're talking NTLM here
            // Once we have the www-authenticate header, split it so we can ensure we can talk NTLM
            var wwwAuthenticate = res.headers['www-authenticate'];
            if (wwwAuthenticate !== undefined) {
                var mechanisms = wwwAuthenticate.split(', ');
                var idx = mechanisms.indexOf("NTLM");
                if (idx >= 0) {
                    // Check specifically for 'NTLM' since www-authenticate header can also contain
                    // the Authorization value to use in the form of 'NTLM TlRMTVNT....AAAADw=='
                    if (mechanisms[idx].length == 4) {
                        return true;
                    }
                }
            }
        }
        return false;
    };
    // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js
    NtlmCredentialHandler.prototype.handleAuthentication = function (httpClient, protocol, options, objs, finalCallback) {
        // Set up the headers for NTLM authentication
        var ntlmOptions = _.extend(options, {
            username: this.username,
            password: this.password,
            domain: this.domain || '',
            workstation: this.workstation || ''
        });
        var keepaliveAgent;
        if (httpClient.isSsl === true) {
            keepaliveAgent = new https.Agent({ keepAlive: true });
        }
        else {
            keepaliveAgent = new http.Agent({ keepAlive: true });
        }
        var self = this;
        // The following pattern of sending the type1 message following immediately (in a setImmediate) is
        // critical for the NTLM exchange to happen.  If we removed setImmediate (or call in a different manner)
        // the NTLM exchange will always fail with a 401.
        this.sendType1Message(httpClient, protocol, ntlmOptions, objs, keepaliveAgent, function (err, res) {
            if (err) {
                return finalCallback(err, null, null);
            }
            setImmediate(function () {
                self.sendType3Message(httpClient, protocol, ntlmOptions, objs, keepaliveAgent, res, finalCallback);
            });
        });
    };
    // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js
    NtlmCredentialHandler.prototype.sendType1Message = function (httpClient, protocol, options, objs, keepaliveAgent, callback) {
        var type1msg = ntlm.createType1Message(options);
        var type1options = {
            headers: {
                'Connection': 'keep-alive',
                'Authorization': type1msg
            },
            timeout: options.timeout || 0,
            agent: keepaliveAgent,
            // don't redirect because http could change to https which means we need to change the keepaliveAgent
            allowRedirects: false
        };
        type1options = _.extend(type1options, _.omit(options, 'headers'));
        httpClient.requestInternal(protocol, type1options, objs, callback);
    };
    // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js
    NtlmCredentialHandler.prototype.sendType3Message = function (httpClient, protocol, options, objs, keepaliveAgent, res, callback) {
        if (!res.headers['www-authenticate']) {
            return callback(new Error('www-authenticate not found on response of second request'));
        }
        // parse type2 message from server:
        var type2msg = ntlm.parseType2Message(res.headers['www-authenticate']);
        // create type3 message:
        var type3msg = ntlm.createType3Message(type2msg, options);
        // build type3 request:
        var type3options = {
            headers: {
                'Authorization': type3msg
            },
            allowRedirects: false,
            agent: keepaliveAgent
        };
        // pass along other options:
        type3options.headers = _.extend(type3options.headers, options.headers);
        type3options = _.extend(type3options, _.omit(options, 'headers'));
        // send type3 message to server:
        httpClient.requestInternal(protocol, type3options, objs, callback);
    };
    return NtlmCredentialHandler;
}());
exports.NtlmCredentialHandler = NtlmCredentialHandler;


================================================
FILE: src/clients/baseclient.ts
================================================
/*---------------------------------------------------------------------------------------------
*  Copyright (c) Microsoft Corporation. All rights reserved.
*  Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
"use strict";

import { StatusBarItem } from "vscode";
import { Logger } from "../helpers/logger";
import { Telemetry } from "../services/telemetry";
import { TeamServerContext} from "../contexts/servercontext";
import { CommandNames } from "../helpers/constants";
import { Strings } from "../helpers/strings";
import { Utils } from "../helpers/utils";
import { VsCodeUtils } from "../helpers/vscodeutils";

export abstract class BaseClient {
    protected _serverContext: TeamServerContext;
    protected _statusBarItem: StatusBarItem;

    constructor(context: TeamServerContext, statusBarItem: StatusBarItem) {
        this._serverContext = context;
        this._statusBarItem = statusBarItem;
    }

    protected handleError(err: Error, offlineText: string, polling: boolean, infoMessage?: string): void {
        const offline: boolean = Utils.IsOffline(err);
        const msg: string = Utils.GetMessageForStatusCode(err, err.message);
        const logPrefix: string = (infoMessage === undefined) ? "" : infoMessage + " ";

        //When polling, we never display an error, we only log it (no telemetry either)
        if (polling === true) {
            Logger.LogError(logPrefix + msg);
            if (offline === true) {
                if (this._statusBarItem !== undefined) {
                    this._statusBarItem.text = offlineText;
                    this._statusBarItem.tooltip = Strings.StatusCodeOffline + " " + Strings.ClickToRetryConnection;
                    this._statusBarItem.command = CommandNames.RefreshPollingStatus;
                }
            } else {
                //Could happen if PAT doesn't have proper permissions
                if (this._statusBarItem !== undefined) {
                    this._statusBarItem.text = offlineText;
                    this._statusBarItem.tooltip = msg;
                }
            }
        //If we aren't polling, we always log an error and, optionally, send telemetry
        } else {
            const logMessage: string = logPrefix + msg;
            if (offline === true) {
                Logger.LogError(logMessage);
            } else {
                Logger.LogError(logMessage);
                Telemetry.SendException(err);
            }
            VsCodeUtils.ShowErrorMessage(msg);
        }
    }
}


================================================
FILE: src/clients/buildclient.ts
================================================
/*---------------------------------------------------------------------------------------------
*  Copyright (c) Microsoft Corporation. All rights reserved.
*  Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
"use strict";

import { StatusBarItem } from "vscode";
import { Build, BuildBadge, BuildResult, BuildStatus } from "vso-node-api/interfaces/BuildInterfaces";
import { Logger } from "../helpers/logger";
import { BuildService } from "../services/build";
import { Telemetry } from "../services/telemetry";
import { TeamServerContext} from "../contexts/servercontext";
import { CommandNames, TelemetryEvents, WellKnownRepositoryTypes } from "../helpers/constants";
import { Strings } from "../helpers/strings";
import { Utils } from "../helpers/utils";
import { IRepositoryContext, RepositoryType } from "../contexts/repositorycontext";
import { BaseClient } from "./baseclient";

export class BuildClient extends BaseClient {
    private _buildSummaryUrl: string;

    constructor(context: TeamServerContext, statusBarItem: StatusBarItem) {
        super(context, statusBarItem);
    }

    //Gets any available build status information and adds it to the status bar
    public async DisplayCurrentBuildStatus(context: IRepositoryContext, polling: boolean, definitionId?: number): Promise<void> {
        try {
            const svc: BuildService = new BuildService(this._serverContext);
            Logger.LogInfo("Getting current build from badge...");
            let buildBadge: BuildBadge;
            if (context.Type === RepositoryType.GIT) {
                buildBadge = await svc.GetBuildBadge(this._serverContext.RepoInfo.TeamProject, WellKnownRepositoryTypes.TfsGit, this._serverContext.RepoInfo.RepositoryId, context.CurrentRef);
            } else if (context.Type === RepositoryType.TFVC || context.Type === RepositoryType.EXTERNAL && !definitionId) {
                //If either TFVC or External and no definition Id, show default builds page
                buildBadge = await this.getTfvcBuildBadge(svc, this._serverContext.RepoInfo.TeamProject);
            } else if (definitionId) {
                //TODO: Allow definitionId to override Git and TFVC defaults (above)?
                const builds: Build[] = await svc.GetBuildsByDefinitionId(this._serverContext.RepoInfo.TeamProject, definitionId);
                if (builds.length > 0) {
                    buildBadge = { buildId: builds[0].id, imageUrl: undefined };
                } else {
                    Logger.LogInfo(`Found zero builds for definition id ${definitionId}`);
                }
            }
            if (buildBadge && buildBadge.buildId !== undefined) {
                Logger.LogInfo("Found build id " + buildBadge.buildId.toString() + ". Getting build details...");
                const build: Build = await svc.GetBuildById(buildBadge.buildId);
                this._buildSummaryUrl = BuildService.GetBuildSummaryUrl(this._serverContext.RepoInfo.TeamProjectUrl, build.id.toString());
                Logger.LogInfo("Build summary info: " + build.id.toString() + " " + BuildStatus[build.status] +
                    " " + BuildResult[build.result] + " " + this._buildSummaryUrl);

                if (this._statusBarItem !== undefined) {
                    const icon: string = Utils.GetBuildResultIcon(build.result);
                    this._statusBarItem.command = CommandNames.OpenBuildSummaryPage;
                    this._statusBarItem.text = `$(package) ` + `$(${icon})`;
                    this._statusBarItem.tooltip = "(" + BuildResult[build.result] + ") " + Strings.NavigateToBuildSummary + " " + build.buildNumber;
                }
            } else {
                Logger.LogInfo("No builds were found for team " + this._serverContext.RepoInfo.TeamProject.toString() +
                    ", repo id " + this._serverContext.RepoInfo.RepositoryId.toString() + ", + branch " + (!context.CurrentBranch ? "UNKNOWN" : context.CurrentBranch.toString()));
                if (this._statusBarItem !== undefined) {
                    this._statusBarItem.command = CommandNames.OpenBuildSummaryPage;
                    this._statusBarItem.text = `$(package) ` + `$(dash)`;
                    this._statusBarItem.tooltip = context.Type === RepositoryType.GIT ? Strings.NoBuildsFound : Strings.NoTfvcBuildsFound;
                }
            }
        } catch (err) {
            this.handleError(err, BuildClient.GetOfflineBuildStatusText(), polling, "Failed to get current build status");
        }
    }

    //Gets the appropriate build for TFVC repositories and returns a 'BuildBadge' for it
    private async getTfvcBuildBadge(svc: BuildService, teamProjectId: string): Promise<BuildBadge> {
        //Create an build that doesn't exist and use as the default
        const emptyBuild: BuildBadge = { buildId: undefined, imageUrl: undefined };

        const builds: Build[] = await svc.GetBuilds(teamProjectId);
        if (builds.length === 0) {
            return emptyBuild;
        }

        let matchingBuild: Build;
        for (let idx: number = 0; idx < builds.length; idx++) {
            const b: Build = builds[idx];
            // Ignore canceled builds
            if (b.result === BuildResult.Canceled) {
                continue;
            }
            if (b.repository &&
                b.repository.type.toLowerCase() === "tfsversioncontrol") {
                    matchingBuild = b;
                    break;
            }
        }
        if (matchingBuild) {
            //We dont' use imageUrl (which is a SVG) since we don't actually render the badge.
            return { buildId: matchingBuild.id, imageUrl: undefined };
        }
        return emptyBuild;
    }

    public OpenBuildSummaryPage(): void {
        Telemetry.SendEvent(TelemetryEvents.OpenBuildSummaryPage);
        let url: string = this._buildSummaryUrl;
        if (url === undefined) {
            Logger.LogInfo("No build summary available, using build definitions url.");
            url = BuildService.GetBuildDefinitionsUrl(this._serverContext.RepoInfo.TeamProjectUrl);
        }
        Logger.LogInfo("OpenBuildSummaryPage: " + url);
        Utils.OpenUrl(url);
    }

    public static GetOfflineBuildStatusText() : string {
        return `$(package) ` + `???`;
    }
}


================================================
FILE: src/clients/coreapiclient.ts
================================================
/*---------------------------------------------------------------------------------------------
*  Copyright (c) Microsoft Corporation. All rights reserved.
*  Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
"use strict";

import { TeamProject, TeamProjectCollection } from "vso-node-api/interfaces/CoreInterfaces";
import { CoreApiService } from "../services/coreapi";

export class CoreApiClient {

    /* tslint:disable:no-empty */
    constructor() { }
    /* tslint:enable:no-empty */

    public async GetTeamProject(remoteUrl: string, teamProjectName: string): Promise<TeamProject> {
        const svc: CoreApiService = new CoreApiService(remoteUrl);
        const teamProject:TeamProject = await svc.GetTeamProject(teamProjectName);
        return teamProject;
    }

    public async GetProjectCollection(remoteUrl: string, collectionName: string): Promise<TeamProjectCollection> {
        const svc: CoreApiService = new CoreApiService(remoteUrl);
        const collection:TeamProjectCollection = await svc.GetProjectCollection(collectionName);
        return collection;
    }

}


================================================
FILE: src/clients/feedbackclient.ts
================================================
/*---------------------------------------------------------------------------------------------
*  Copyright (c) Microsoft Corporation. All rights reserved.
*  Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
"use strict";

import { Disposable, window } from "vscode";
import { Logger } from "../helpers/logger";
import { TelemetryEvents } from "../helpers/constants";
import { Strings } from "../helpers/strings";
import { Utils } from "../helpers/utils";
import { BaseQuickPickItem } from "../helpers/vscodeutils";
import { Telemetry } from "../services/telemetry";

export class FeedbackClient {

    //This feedback will go no matter whether Application Insights is enabled or not.
    public static async SendFeedback(): Promise<void> {
        try {
            const choices: BaseQuickPickItem[] = [];
            choices.push({ label: Strings.SendASmile, description: undefined, id: TelemetryEvents.SendASmile });
            choices.push({ label: Strings.SendAFrown, description: undefined, id: TelemetryEvents.SendAFrown });

            const choice: BaseQuickPickItem = await window.showQuickPick(choices, { matchOnDescription: false, placeHolder: Strings.SendFeedback });
            if (choice) {
                const value: string = await window.showInputBox({ value: undefined, prompt: Strings.SendFeedbackPrompt, placeHolder: undefined, password: false });
                if (value === undefined) {
                    const disposable = window.setStatusBarMessage(Strings.NoFeedbackSent);
                    setTimeout(() => disposable.dispose(), 1000 * 5);
                    return;
                }

                //This feedback will go no matter whether Application Insights is enabled or not.
                let trimmedValue: string = value.trim();
                if (trimmedValue.length > 1000) {
                    trimmedValue = trimmedValue.substring(0, 1000);
                }
                Telemetry.SendFeedback(choice.id, { "VSCode.Feedback.Comment" : trimmedValue } );

                const disposable: Disposable = window.setStatusBarMessage(Strings.ThanksForFeedback);
                setTimeout(() => disposable.dispose(), 1000 * 5);
            }
        } catch (err) {
            const message: string = Utils.GetMessageForStatusCode(0, err.message, "Failed getting SendFeedback selection");
            Logger.LogError(message);
            Telemetry.SendException(err);
        }
    }
}


================================================
FILE: src/clients/gitclient.ts
================================================
/*---------------------------------------------------------------------------------------------
*  Copyright (c) Microsoft Corporation. All rights reserved.
*  Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
"use strict";

import { StatusBarItem, window } from "vscode";
import { GitPullRequest, PullRequestStatus} from "vso-node-api/interfaces/GitInterfaces";
import { BaseQuickPickItem, VsCodeUtils } from "../helpers/vscodeutils";
import { CommandNames, TelemetryEvents } from "../helpers/constants";
import { Logger } from "../helpers/logger";
import { Strings } from "../helpers/strings";
import { Utils } from "../helpers/utils";
import { IRepositoryContext, RepositoryType } from "../contexts/repositorycontext";
import { TeamServerContext} from "../contexts/servercontext";
import { GitVcService, PullRequestScore } from "../services/gitvc";
import { Telemetry } from "../services/telemetry";
import { BaseClient } from "./baseclient";

import * as path from "path";

export class GitClient extends BaseClient {

    constructor(context: TeamServerContext, statusBarItem: StatusBarItem) {
        super(context, statusBarItem);
    }

    //Initial method to display, select and navigate to my pull requests
    public async GetMyPullRequests(): Promise<void> {
        Telemetry.SendEvent(TelemetryEvents.ViewPullRequests);

        try {
            const request: BaseQuickPickItem = await window.showQuickPick(this.getMyPullRequests(), { matchOnDescription: true, placeHolder: Strings.ChoosePullRequest });
            if (request) {
                Telemetry.SendEvent(TelemetryEvents.ViewPullRequest);
                let discUrl: string = undefined;
                if (request.id !== undefined) {
                    discUrl = GitVcService.GetPullRequestDiscussionUrl(this._serverContext.RepoInfo.RepositoryUrl, request.id);
                } else {
                    discUrl = GitVcService.GetPullRequestsUrl(this._serverContext.RepoInfo.RepositoryUrl);
                }
                Logger.LogInfo("Pull Request Url: " + discUrl);
                Utils.OpenUrl(discUrl);
            }
        } catch (err) {
            this.handleError(err, GitClient.GetOfflinePullRequestStatusText(), false, "Error selecting pull request from QuickPick");
        }
    }

    //Opens the blame page for the currently active file
    public OpenBlamePage(context: IRepositoryContext): void {
        this.ensureGitContext(context);
        let url: string = undefined;

        const editor = window.activeTextEditor;
        if (editor) {
            Telemetry.SendEvent(TelemetryEvents.OpenBlamePage);

            //Get the relative file path we can use to create the url
            let relativePath: string = "\\" + path.relative(context.RepositoryParentFolder, editor.document.fileName);
            relativePath = relativePath.split("\\").join("/");  //Replace all

            url = GitVcService.GetFileBlameUrl(context.RemoteUrl, relativePath, context.CurrentBranch);
            //Note: if file hasn't been pushed yet, blame link we generate won't point to anything valid (basically a 404)
            Logger.LogInfo("OpenBlame: " + url);
            Utils.OpenUrl(url);
        } else {
            const msg: string = Utils.GetMessageForStatusCode(0, Strings.NoSourceFileForBlame);
            Logger.LogError(msg);
            VsCodeUtils.ShowErrorMessage(msg);
        }
    }

    //Opens the file history page for the currently active file
    public OpenFileHistory(context: IRepositoryContext): void {
        this.ensureGitContext(context);
        let historyUrl: string = undefined;

        const editor = window.activeTextEditor;
        if (!editor) {
            Telemetry.SendEvent(TelemetryEvents.OpenRepositoryHistory);

            historyUrl = GitVcService.GetRepositoryHistoryUrl(context.RemoteUrl, context.CurrentBranch);
            Logger.LogInfo("OpenRepoHistory: " + historyUrl);
        } else {
            Telemetry.SendEvent(TelemetryEvents.OpenFileHistory);

            //Get the relative file path we can use to create the history url
            let relativePath: string = "\\" + path.relative(context.RepositoryParentFolder, editor.document.fileName);
            relativePath = relativePath.split("\\").join("/");  //Replace all

            historyUrl = GitVcService.GetFileHistoryUrl(context.RemoteUrl, relativePath, context.CurrentBranch);
            //Note: if file hasn't been pushed yet, history link we generate won't point to anything valid (basically a 404)
            Logger.LogInfo("OpenFileHistory: " + historyUrl);
        }

        Utils.OpenUrl(historyUrl);
    }

    public OpenNewPullRequest(remoteUrl: string, currentBranch: string): void {
        Telemetry.SendEvent(TelemetryEvents.OpenNewPullRequest);

        const url: string = GitVcService.GetCreatePullRequestUrl(remoteUrl, currentBranch);
        Logger.LogInfo("CreatePullRequestPage: " + url);
        Utils.OpenUrl(url);
    }

    public async PollMyPullRequests(): Promise<void> {
        try {
            const requests: BaseQuickPickItem[] = await this.getMyPullRequests();
            this._statusBarItem.tooltip = Strings.BrowseYourPullRequests;
            //Remove the default Strings.BrowseYourPullRequests item from the calculation
            this._statusBarItem.text = GitClient.GetPullRequestStatusText((requests.length - 1).toString());
        } catch (err) {
            this.handleError(err, GitClient.GetOfflinePullRequestStatusText(), true, "Attempting to poll my pull requests");
        }
    }

    private async getMyPullRequests(): Promise<BaseQuickPickItem[]> {
        const requestItems: BaseQuickPickItem[] = [];
        const requestIds: number[] = [];

        Logger.LogInfo("Getting pull requests that I requested...");
        const svc: GitVcService = new GitVcService(this._serverContext);
        const myPullRequests: GitPullRequest[] = await svc.GetPullRequests(this._serverContext.RepoInfo.RepositoryId, this._serverContext.UserInfo.Id, undefined, PullRequestStatus.Active);
        const icon: string = "search";
        const label: string = `$(${icon}) `;
        requestItems.push({ label: label + Strings.BrowseYourPullRequests, description: undefined, id: undefined });

        myPullRequests.forEach((pr) => {
            const score: PullRequestScore = GitVcService.GetPullRequestScore(pr);
            requestItems.push(this.getPullRequestLabel(pr.createdBy.displayName, pr.title, pr.description, pr.pullRequestId.toString(), score));
            requestIds.push(pr.pullRequestId);
        });
        Logger.LogInfo("Retrieved " + myPullRequests.length + " pull requests that I requested");

        Logger.LogInfo("Getting pull requests for which I'm a reviewer...");
        //Go get the active pull requests that I'm a reviewer for
        const myReviewPullRequests: GitPullRequest[] = await svc.GetPullRequests(this._serverContext.RepoInfo.RepositoryId, undefined, this._serverContext.UserInfo.Id, PullRequestStatus.Active);
        myReviewPullRequests.forEach((pr) => {
            const score: PullRequestScore = GitVcService.GetPullRequestScore(pr);
            if (requestIds.indexOf(pr.pullRequestId) < 0) {
                requestItems.push(this.getPullRequestLabel(pr.createdBy.displayName, pr.title, pr.description, pr.pullRequestId.toString(), score));
            }
        });
        Logger.LogInfo("Retrieved " + myReviewPullRequests.length + " pull requests that I'm the reviewer");

        //Remove the default Strings.BrowseYourPullRequests item from the calculation
        this._statusBarItem.text = GitClient.GetPullRequestStatusText((requestItems.length - 1).toString());
        this._statusBarItem.tooltip = Strings.BrowseYourPullRequests;
        this._statusBarItem.command = CommandNames.GetPullRequests;

        return requestItems;
    }

    private getPullRequestLabel(displayName: string, title: string, description: string, id: string, score: PullRequestScore): BaseQuickPickItem {
        let scoreIcon: string = "";
        if (score === PullRequestScore.Succeeded) {
            scoreIcon = "check";
        } else if (score === PullRequestScore.Failed) {
            scoreIcon = "stop";
        } else if (score === PullRequestScore.Waiting) {
            scoreIcon = "watch";
        } else if (score === PullRequestScore.NoResponse) {
            scoreIcon = "git-pull-request";
        }
        const scoreLabel: string = `$(${scoreIcon}) `;

        return { label: scoreLabel + " (" + displayName + ") " + title, description: description, id: id };
    }

    public static GetOfflinePullRequestStatusText() : string {
        return `$(git-pull-request) ???`;
    }

    //Sets the text on the pull request status bar
    public static GetPullRequestStatusText(total?: string) : string {
        if (!total) {
            return `$(git-pull-request) $(dash)`;
        }
        return `$(git-pull-request) ${total.toString()}`;
    }

    //Ensure that we don't accidentally send non-Git (e.g., TFVC) contexts to the Git client
    private ensureGitContext(context: IRepositoryContext): void {
        if (context.Type !== RepositoryType.GIT) {
            throw new Error("context sent to GitClient is not a Git context object.");
        }
    }
}


================================================
FILE: src/clients/httpclient.ts
================================================
/*---------------------------------------------------------------------------------------------
*  Copyright (c) Microsoft Corporation. All rights reserved.
*  Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
"use strict";

//jeyou: Brought over from vso-node-api (v5.1.2), added support for sending SOAP and handling gzip compression
/* tslint:disable */
import url = require("url");

import http = require("http");
import zlib = require("zlib");
import https = require("https");
import tunnel = require("tunnel");
import ifm = require("vso-node-api/interfaces/common/VsoBaseInterfaces");

http.globalAgent.maxSockets = 100;

export class HttpClient {
    userAgent: string;
    handlers: ifm.IRequestHandler[];
    socketTimeout: number;
    isSsl: boolean;

    constructor(userAgent: string, handlers?: ifm.IRequestHandler[], socketTimeout?: number) {
        this.userAgent = userAgent;
        this.handlers = handlers;
        if (socketTimeout) {
            this.socketTimeout = socketTimeout;
        } else {
            // Default 3 minutes
            this.socketTimeout = 3 * 60000;
        }
    }

    // POST, PATCH, PUT
    send(verb: string, requestUrl: string, objs: any, headers: ifm.IHeaders, onResult: (err: any, res: http.ClientResponse, contents: string) => void): void {
        var options = this._getOptions(verb, requestUrl, headers);
        this.request(options.protocol, options.options, objs, onResult);
    }

    _getOptions(method: string, requestUrl: string, headers: any): any {
        var parsedUrl: url.Url = url.parse(requestUrl);
        var usingSsl = parsedUrl.protocol === 'https:';
        var prot: any = usingSsl ? https : http;
        var defaultPort = usingSsl ? 443 : 80;
        this.isSsl = usingSsl;

        var proxyUrl: url.Url;
        if (process.env.HTTPS_PROXY && usingSsl) {
            proxyUrl = url.parse(process.env.HTTPS_PROXY);
        } else if (process.env.HTTP_PROXY) {
            proxyUrl = url.parse(process.env.HTTP_PROXY);
        }

        var options: any = {
            host: parsedUrl.hostname,
            port: parsedUrl.port || defaultPort,
            path: (parsedUrl.pathname || '') + (parsedUrl.search || ''),
            method: method,
            headers: headers || {}
        };

        //options.headers["Accept"] = contentType;
        options.headers["User-Agent"] = this.userAgent;

        var useProxy = proxyUrl && proxyUrl.hostname;
        if (useProxy) {
            var agentOptions: tunnel.TunnelOptions = {
                maxSockets: http.globalAgent.maxSockets,
                proxy: {
                    // TODO: support proxy-authorization
                    //proxyAuth: "user:password",
                    host: proxyUrl.hostname,
                    port: proxyUrl.port
                }
            };

            var tunnelAgent: Function;
            var overHttps = proxyUrl.protocol === 'https:';
            if (usingSsl) {
                tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
            } else {
                tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
            }
            
            options.agent = tunnelAgent(agentOptions);
        }

        if (this.handlers) {
            this.handlers.forEach((handler) => {
                handler.prepareRequest(options);
            });
        }

        return {
            protocol: prot,
            options: options,
        };
    }

    request(protocol: any, options: any, objs: any, onResult: (err: any, res: http.ClientResponse, contents: string) => void): void {
        // Set up a callback to pass off 401s to an authentication handler that can deal with it
        var callback = (err: any, res: http.ClientResponse, contents: string) => {
            var authHandler;
            if (this.handlers) {
                this.handlers.some(function (handler /*, index, handlers*/) {
                    // Find the first one that can handle the auth based on the response
                    if (handler.canHandleAuthentication(res)) {
                        authHandler = handler;
                        return true;
                    }
                    return false;
                });
            }
            if (authHandler !== undefined) {
                authHandler.handleAuthentication(this, protocol, options, objs, onResult);
            } else {
                // No auth handler found, call onResult normally
                onResult(err, res, contents);
            }
        };

        this.requestInternal(protocol, options, objs, callback);
    }

    requestInternal(protocol: any, options: any, objs: any, onResult: (err: any, res: http.ClientResponse, contents: string) => void): void {
        var reqData;
        var socket;

        if (objs) {
            reqData = objs;
        }

        var callbackCalled: boolean = false;
        var handleResult = (err: any, res: http.ClientResponse, contents: string) => {
            if (!callbackCalled) {
                callbackCalled = true;
                onResult(err, res, contents);
            }
        };

        var req = protocol.request(options, function (res) {
            var buffer = [];
            var output = '';

            // If we're handling gzip compression, don't set the encoding to utf8
            if (res.headers["content-encoding"] && res.headers["content-encoding"] === "gzip") {
                var gunzip = zlib.createGunzip();
                res.pipe(gunzip);

                gunzip.on('data', function(data) {
                    buffer.push(data.toString());
                }).on('end', function() {
                    handleResult(null, res, buffer.join(""));
                }).on('error', function(err) {
                    handleResult(err, null, null);
                });
            } else {
                res.setEncoding('utf8'); //Do this only if we expect we're getting a string back
                res.on('data', function (chunk) {
                    output += chunk;
                });
                res.on('end', function () {
                    // res has statusCode and headers
                    handleResult(null, res, output);
                });
            }
        });

        req.on('socket', function(sock) {
            socket = sock;
        });

        // If we ever get disconnected, we want the socket to timeout eventually
        req.setTimeout(this.socketTimeout, function() {
            if (socket) {
                socket.end();
            }
            handleResult(new Error('Request timeout: ' + options.path), null, null);
        });

        req.on('error', function (err) {
            // err has statusCode property
            // res should have headers
            handleResult(err, null, null);
        });

        if (reqData) {
            req.write(reqData, 'utf8');
        }

        req.end();
    }
}
/* tslint:enable */


================================================
FILE: src/clients/repositoryinfoclient.ts
================================================
/*---------------------------------------------------------------------------------------------
*  Copyright (c) Microsoft Corporation. All rights reserved.
*  Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
"use strict";

import VsoBaseInterfaces = require("vso-node-api/interfaces/common/VsoBaseInterfaces");
import { TeamProject, TeamProjectCollection } from "vso-node-api/interfaces/CoreInterfaces";
import { CoreApiClient } from "./coreapiclient";
import { Logger } from "../helpers/logger";
import { RepoUtils } from "../helpers/repoutils";
import { Strings } from "../helpers/strings";
import { IRepositoryContext, RepositoryType } from "../contexts/repositorycontext";
import { TeamServicesApi } from "./teamservicesclient";
import { TfsCatalogSoapClient } from "./tfscatalogsoapclient";
import { RepositoryInfo } from "../info/repositoryinfo";
import { TfvcContext } from "../contexts/tfvccontext";
import { Telemetry } from "../services/telemetry";

import * as url from "url";

export class RepositoryInfoClient {
    private _handler: VsoBaseInterfaces.IRequestHandler;
    private _repoContext: IRepositoryContext;

    constructor(context: IRepositoryContext, handler: VsoBaseInterfaces.IRequestHandler) {
        this._repoContext = context;
        this._handler = handler;
    }

    public async GetRepositoryInfo(): Promise<RepositoryInfo> {
        let repoInfo: any;
        let repositoryInfo: RepositoryInfo;
        let repositoryClient: TeamServicesApi;

        if (this._repoContext.Type === RepositoryType.GIT) {
            Logger.LogDebug(`Getting repository information for a Git repository at ${this._repoContext.RemoteUrl}`);
            repositoryClient = new TeamServicesApi(this._repoContext.RemoteUrl, [this._handler]);
            repoInfo = await repositoryClient.getVstsInfo();
            Logger.LogDebug(`Repository information blob:`);
            Logger.LogObject(repoInfo);
            this.verifyRepoInfo(repoInfo, `RepoInfo was undefined for a ${RepositoryType[this._repoContext.Type]} repo`);
            repositoryInfo = new RepositoryInfo(repoInfo);
            Logger.LogDebug(`Finished getting repository information for a Git repository at ${this._repoContext.RemoteUrl}`);
            return repositoryInfo;
        } else if (this._repoContext.Type === RepositoryType.TFVC || this._repoContext.Type === RepositoryType.EXTERNAL) {
            Logger.LogDebug(`Getting repository information for a TFVC repository at ${this._repoContext.RemoteUrl}`);
            //For TFVC, the teamProjectName is retrieved by tf.cmd and set on the context
            const teamProjectName: string = this._repoContext.TeamProjectName;
            this.verifyRepoInfo(this._repoContext.RemoteUrl, `RemoteUrl was undefined for a ${RepositoryType[this._repoContext.Type]} repo`);
            repositoryInfo = new RepositoryInfo(this._repoContext.RemoteUrl);

            let serverUrl: string;
            let collectionName: string;
            const isTeamServices: boolean = RepoUtils.IsTeamFoundationServicesRepo(this._repoContext.RemoteUrl);
            if (isTeamServices) {
                // The Team Services collection is ALWAYS defaultCollection, and both the url with defaultcollection
                // and the url without defaultCollection will validate just fine. However, it expects you to refer to
                // the collection by the account name. So, we just need to grab the account name and use that to
                // recreate the url.
                // If validation fails, we return false.
                collectionName = repositoryInfo.Account;
                if (RepoUtils.IsTeamFoundationServicesAzureRepo(this._repoContext.RemoteUrl)) {
                    serverUrl = `https://${repositoryInfo.Host}/${repositoryInfo.Account}/`;
                } else {
                    serverUrl = `https://${repositoryInfo.Account}.visualstudio.com/`;
                }
                const valid: boolean = await this.validateTfvcCollectionUrl(serverUrl);
                if (!valid) {
                    const errorMsg: string = `${Strings.UnableToValidateTeamServicesCollection} Collection name: '${collectionName}', Url: '${serverUrl}'`;
                    Logger.LogDebug(errorMsg);
                    throw new Error(errorMsg);
                }
                Logger.LogDebug(`Successfully validated the hosted TFVC repository. Collection name: '${collectionName}', 'Url: ${serverUrl}'`);
            } else { //This could be either a TFVC context or an External context
                serverUrl = this._repoContext.RemoteUrl;
                // A full Team Foundation Server collection url is required for the validate call to succeed.
                // So we try the url given. If that fails, we assume it is a server Url and the collection is
                // the defaultCollection. If that assumption fails we return false.
                Logger.LogDebug(`Starting the validation of the collection. Url: '${serverUrl}'`);
                let valid: boolean = await this.validateTfvcCollectionUrl(serverUrl);
                if (valid) {
                    const parts: string[] = this.splitTfvcCollectionUrl(serverUrl);
                    serverUrl = parts[0];
                    collectionName = parts[1];
                    Logger.LogDebug(`Validated the collection and splitting Url and Collection name. Collection name: '${collectionName}', Url: '${serverUrl}'`);
                } else {
                    Logger.LogDebug(`Unable to validate the collection. Url: '${serverUrl}' Attempting validation assuming 'DefaultCollection'...`);
                    collectionName = "DefaultCollection";
                    const remoteUrl: string = url.resolve(serverUrl, collectionName);
                    valid = await this.validateTfvcCollectionUrl(remoteUrl);
                    if (!valid) {
                        Logger.LogDebug(Strings.UnableToValidateCollectionAssumingDefaultCollection);
                        throw new Error(Strings.UnableToValidateCollectionAssumingDefaultCollection);
                    }
                    //Since we validated with the default collection, we need to update the repo context's RemoteUrl
                    if (this._repoContext.Type === RepositoryType.TFVC) {
                        const tfvcContext: TfvcContext = <TfvcContext>this._repoContext;
                        tfvcContext.RemoteUrl = remoteUrl;
                    }
                    Logger.LogDebug(`Validated the collection assuming 'DefaultCollection'.`);
                }
            }

            const coreApiClient: CoreApiClient = new CoreApiClient();
            let collection: TeamProjectCollection;
            Logger.LogDebug(`Getting project collection...  url: '${serverUrl}', and collection name: '${collectionName}'`);
            if (isTeamServices) {
                //The following call works for VSTS, TFS 2017 and TFS 2015U3 (multiple collections, spaces in the name), just not for non-admins on-prem (!)
                Logger.LogDebug(`Using REST to get the project collection information`);
                collection = await coreApiClient.GetProjectCollection(serverUrl, collectionName);
            } else {
                Logger.LogDebug(`Using SOAP to get the project collection information`);
                // When called on-prem without admin privileges: Error: Failed Request: Forbidden(403) - Access Denied: Jeff Young (TFS) needs the following permission(s) to perform this action: Edit instance-level information
                const tfsClient: TfsCatalogSoapClient = new TfsCatalogSoapClient(serverUrl, [this._handler]);
                collection = await tfsClient.GetProjectCollection(collectionName);
                if (!collection) {
                    const error: string = `Using SOAP, could not find a project collection object for ${collectionName} at ${serverUrl}`;
                    Logger.LogDebug(error);
                    throw new Error(error);
                }
            }
            Logger.LogDebug(`Found a project collection for url: '${serverUrl}' and collection name: '${collection.name}'.`);

            Logger.LogDebug(`Getting team project...  Url: '${serverUrl}', collection name: '${collectio
Download .txt
gitextract_ylv2h823/

├── .gitattributes
├── .gitignore
├── .vscode/
│   ├── launch.json
│   ├── settings.json
│   └── tasks.json
├── .vscodeignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── DEPRECATED.md
├── LICENSE.txt
├── README.md
├── TFVC_README.md
├── ThirdPartyNotices.txt
├── gulpfile.js
├── package.json
├── patches/
│   └── vso-node-api/
│       └── handlers/
│           └── ntlm.js
├── src/
│   ├── clients/
│   │   ├── baseclient.ts
│   │   ├── buildclient.ts
│   │   ├── coreapiclient.ts
│   │   ├── feedbackclient.ts
│   │   ├── gitclient.ts
│   │   ├── httpclient.ts
│   │   ├── repositoryinfoclient.ts
│   │   ├── soapclient.ts
│   │   ├── teamservicesclient.ts
│   │   ├── tfscatalogsoapclient.ts
│   │   └── witclient.ts
│   ├── contexts/
│   │   ├── externalcontext.ts
│   │   ├── gitcontext.ts
│   │   ├── repocontextfactory.ts
│   │   ├── repositorycontext.ts
│   │   ├── servercontext.ts
│   │   └── tfvccontext.ts
│   ├── credentialstore/
│   │   ├── credential.ts
│   │   ├── credentialstore.ts
│   │   ├── interfaces/
│   │   │   └── icredentialstore.ts
│   │   ├── linux/
│   │   │   ├── file-token-storage.ts
│   │   │   └── linux-file-api.ts
│   │   ├── osx/
│   │   │   ├── osx-keychain-api.ts
│   │   │   ├── osx-keychain-parser.js
│   │   │   └── osx-keychain.js
│   │   └── win32/
│   │       ├── win-credstore-api.ts
│   │       ├── win-credstore-parser.js
│   │       └── win-credstore.js
│   ├── extension.ts
│   ├── extensionmanager.ts
│   ├── helpers/
│   │   ├── constants.ts
│   │   ├── credentialmanager.ts
│   │   ├── logger.ts
│   │   ├── repoutils.ts
│   │   ├── settings.ts
│   │   ├── strings.ts
│   │   ├── urlbuilder.ts
│   │   ├── useragentprovider.ts
│   │   ├── utils.ts
│   │   ├── vscodeutils.interfaces.ts
│   │   └── vscodeutils.ts
│   ├── info/
│   │   ├── credentialinfo.ts
│   │   ├── extensionrequesthandler.ts
│   │   ├── repositoryinfo.ts
│   │   └── userinfo.ts
│   ├── services/
│   │   ├── build.ts
│   │   ├── coreapi.ts
│   │   ├── gitvc.ts
│   │   ├── telemetry.ts
│   │   └── workitemtracking.ts
│   ├── team-extension.ts
│   └── tfvc/
│       ├── commands/
│       │   ├── add.ts
│       │   ├── argumentbuilder.ts
│       │   ├── checkin.ts
│       │   ├── commandhelper.ts
│       │   ├── delete.ts
│       │   ├── findconflicts.ts
│       │   ├── findworkspace.ts
│       │   ├── getfilecontent.ts
│       │   ├── getinfo.ts
│       │   ├── getversion.ts
│       │   ├── rename.ts
│       │   ├── resolveconflicts.ts
│       │   ├── status.ts
│       │   ├── sync.ts
│       │   └── undo.ts
│       ├── interfaces.ts
│       ├── scm/
│       │   ├── commithoverprovider.ts
│       │   ├── decorationprovider.ts
│       │   ├── model.ts
│       │   ├── resource.ts
│       │   ├── resourcegroups.ts
│       │   ├── status.ts
│       │   └── tfvccontentprovider.ts
│       ├── tfcommandlinerunner.ts
│       ├── tfvc-extension.ts
│       ├── tfvcerror.ts
│       ├── tfvcoutput.ts
│       ├── tfvcrepository.ts
│       ├── tfvcscmprovider.ts
│       ├── tfvcsettings.ts
│       ├── tfvcversion.ts
│       ├── uihelper.ts
│       └── util.ts
├── test/
│   ├── contexts/
│   │   ├── contexthelper.ts
│   │   ├── externalcontext.test.ts
│   │   ├── gitcontext.test.ts
│   │   ├── servercontext.test.ts
│   │   └── testrepos/
│   │       ├── emptyconfig/
│   │       │   └── dotgit/
│   │       │       └── config
│   │       ├── githubrepo/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       └── config
│   │       ├── gitrepo/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── jeyou/
│   │       │                   └── approved-pr
│   │       ├── gitrepo-old-ssh/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       ├── gitrepo-ssh/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       ├── gitrepo-ssh.v3/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       ├── tfsrepo/
│   │       │   └── dotgit/
│   │       │       ├── HEAD
│   │       │       ├── config
│   │       │       └── refs/
│   │       │           └── heads/
│   │       │               └── master
│   │       └── tfsrepo-ssh/
│   │           └── dotgit/
│   │               ├── HEAD
│   │               ├── config
│   │               └── refs/
│   │                   └── heads/
│   │                       └── master
│   ├── helpers/
│   │   ├── logger.test.ts
│   │   ├── repoutils.test.ts
│   │   ├── testrepos/
│   │   │   └── gitreposubfolder/
│   │   │       ├── dotgit/
│   │   │       │   └── config
│   │   │       └── folder/
│   │   │           └── subfolder/
│   │   │               └── README.md
│   │   ├── urlbuilder.test.ts
│   │   └── utils.test.ts
│   ├── index.ts
│   ├── info/
│   │   ├── credentialinfo.test.ts
│   │   ├── repositoryinfo.test.ts
│   │   └── userinfo.test.ts
│   ├── services/
│   │   ├── build.test.ts
│   │   ├── gitvc.test.ts
│   │   └── workitemtracking.test.ts
│   └── tfvc/
│       ├── commands/
│       │   ├── add.test.ts
│       │   ├── argumentbuilder.test.ts
│       │   ├── checkin.test.ts
│       │   ├── commandhelper.test.ts
│       │   ├── delete.test.ts
│       │   ├── findconflicts.test.ts
│       │   ├── findworkspace.test.ts
│       │   ├── getfilecontent.test.ts
│       │   ├── getinfo.test.ts
│       │   ├── getversion.test.ts
│       │   ├── rename.test.ts
│       │   ├── resolveconflicts.test.ts
│       │   ├── status.test.ts
│       │   ├── sync.test.ts
│       │   └── undo.test.ts
│       ├── scm/
│       │   ├── resourcegroup.test.ts
│       │   └── status.test.ts
│       ├── tfvcerror.test.ts
│       └── tfvcversion.test.ts
├── test-integration/
│   ├── clients/
│   │   └── teamservicesclient.integration.test.ts
│   ├── contexts/
│   │   └── servercontext.integration.test.ts
│   ├── helpers/
│   │   └── credentialmanager.test.ts
│   ├── helpers-integration/
│   │   ├── mocks.ts
│   │   └── testsettings.ts
│   ├── index.ts
│   └── services/
│       ├── build.integration.test.ts
│       ├── gitvc.integration.test.ts
│       └── workitemtracking.integration.test.ts
├── tsconfig.json
└── tslint.json
Download .txt
SYMBOL INDEX (863 symbols across 89 files)

FILE: gulpfile.js
  function errorHandler (line 25) | function errorHandler(err) {

FILE: patches/vso-node-api/handlers/ntlm.js
  function NtlmCredentialHandler (line 9) | function NtlmCredentialHandler(username, password, domain, workstation) {

FILE: src/clients/baseclient.ts
  method constructor (line 20) | constructor(context: TeamServerContext, statusBarItem: StatusBarItem) {
  method handleError (line 25) | protected handleError(err: Error, offlineText: string, polling: boolean,...

FILE: src/clients/buildclient.ts
  class BuildClient (line 19) | class BuildClient extends BaseClient {
    method constructor (line 22) | constructor(context: TeamServerContext, statusBarItem: StatusBarItem) {
    method DisplayCurrentBuildStatus (line 27) | public async DisplayCurrentBuildStatus(context: IRepositoryContext, po...
    method getTfvcBuildBadge (line 74) | private async getTfvcBuildBadge(svc: BuildService, teamProjectId: stri...
    method OpenBuildSummaryPage (line 103) | public OpenBuildSummaryPage(): void {
    method GetOfflineBuildStatusText (line 114) | public static GetOfflineBuildStatusText() : string {

FILE: src/clients/coreapiclient.ts
  class CoreApiClient (line 10) | class CoreApiClient {
    method constructor (line 13) | constructor() { }
    method GetTeamProject (line 16) | public async GetTeamProject(remoteUrl: string, teamProjectName: string...
    method GetProjectCollection (line 22) | public async GetProjectCollection(remoteUrl: string, collectionName: s...

FILE: src/clients/feedbackclient.ts
  class FeedbackClient (line 15) | class FeedbackClient {
    method SendFeedback (line 18) | public static async SendFeedback(): Promise<void> {

FILE: src/clients/gitclient.ts
  class GitClient (line 22) | class GitClient extends BaseClient {
    method constructor (line 24) | constructor(context: TeamServerContext, statusBarItem: StatusBarItem) {
    method GetMyPullRequests (line 29) | public async GetMyPullRequests(): Promise<void> {
    method OpenBlamePage (line 51) | public OpenBlamePage(context: IRepositoryContext): void {
    method OpenFileHistory (line 75) | public OpenFileHistory(context: IRepositoryContext): void {
    method OpenNewPullRequest (line 100) | public OpenNewPullRequest(remoteUrl: string, currentBranch: string): v...
    method PollMyPullRequests (line 108) | public async PollMyPullRequests(): Promise<void> {
    method getMyPullRequests (line 119) | private async getMyPullRequests(): Promise<BaseQuickPickItem[]> {
    method getPullRequestLabel (line 156) | private getPullRequestLabel(displayName: string, title: string, descri...
    method GetOfflinePullRequestStatusText (line 172) | public static GetOfflinePullRequestStatusText() : string {
    method GetPullRequestStatusText (line 177) | public static GetPullRequestStatusText(total?: string) : string {
    method ensureGitContext (line 185) | private ensureGitContext(context: IRepositoryContext): void {

FILE: src/clients/httpclient.ts
  class HttpClient (line 19) | class HttpClient {
    method constructor (line 25) | constructor(userAgent: string, handlers?: ifm.IRequestHandler[], socke...
    method send (line 37) | send(verb: string, requestUrl: string, objs: any, headers: ifm.IHeader...
    method _getOptions (line 42) | _getOptions(method: string, requestUrl: string, headers: any): any {
    method request (line 102) | request(protocol: any, options: any, objs: any, onResult: (err: any, r...
    method requestInternal (line 127) | requestInternal(protocol: any, options: any, objs: any, onResult: (err...

FILE: src/clients/repositoryinfoclient.ts
  class RepositoryInfoClient (line 22) | class RepositoryInfoClient {
    method constructor (line 26) | constructor(context: IRepositoryContext, handler: VsoBaseInterfaces.IR...
    method GetRepositoryInfo (line 31) | public async GetRepositoryInfo(): Promise<RepositoryInfo> {
    method verifyRepoInfo (line 147) | private verifyRepoInfo(repoInfo: any, message: string) {
    method splitTfvcCollectionUrl (line 153) | private splitTfvcCollectionUrl(collectionUrl: string): string[] {
    method trimTrailingSeparators (line 176) | private trimTrailingSeparators(uri: string): string {
    method getTfvcRepoInfoBlob (line 191) | private getTfvcRepoInfoBlob(serverUrl: string, collectionId: string, c...
    method getProjectFromServer (line 217) | private async getProjectFromServer(coreApiClient: CoreApiClient, remot...
    method validateTfvcCollectionUrl (line 221) | private async validateTfvcCollectionUrl(serverUrl: string): Promise<bo...

FILE: src/clients/soapclient.ts
  function processResponse (line 40) | function processResponse(url, res, contents, onResult) {
  class SoapClient (line 73) | class SoapClient {
    method constructor (line 78) | constructor(userAgent: string, handlers?: ifm.IRequestHandler[]) {
    method post (line 82) | post(url: string, requestEnvelope: string, onResult: (err: any, status...
    method _sendSoap (line 86) | _sendSoap(verb: string, url: string, requestEnvelope: string, onResult...

FILE: src/clients/teamservicesclient.ts
  class TeamServicesApi (line 9) | class TeamServicesApi extends basem.ClientApiBase {
    method constructor (line 10) | constructor(baseUrl: string, handlers: VsoBaseInterfaces.IRequestHandl...
    method getVstsInfo (line 15) | public async getVstsInfo(): Promise<any> {
    method validateTfvcCollectionUrl (line 33) | public async validateTfvcCollectionUrl(): Promise<any> {

FILE: src/clients/tfscatalogsoapclient.ts
  class TfsCatalogSoapClient (line 17) | class TfsCatalogSoapClient {
    method constructor (line 40) | constructor(serverUrl: string, handlers: IRequestHandler[]) {
    method parseOrganizationRootPath (line 97) | private parseOrganizationRootPath(envelopeXml: any): string {
    method parseFoundationServerRootPath (line 188) | private parseFoundationServerRootPath(envelopeXml: any): string {
    method parseProjectCollections (line 489) | private parseProjectCollections(envelopeXml: any): any[] {
    method GetProjectCollection (line 514) | public GetProjectCollection(collectionName: string): Q.Promise<any> {
    method getCatalogDataFromServer (line 556) | private getCatalogDataFromServer(pathSpecs: string, queryOptions: stri...

FILE: src/clients/witclient.ts
  class WitClient (line 20) | class WitClient extends BaseClient {
    method constructor (line 24) | constructor(context: TeamServerContext, pinnedQuery: IPinnedQuery, sta...
    method CreateNewItem (line 30) | public CreateNewItem(itemType: string, taskTitle: string): void {
    method CreateNewWorkItem (line 39) | public async CreateNewWorkItem(taskTitle: string): Promise<void> {
    method ShowMyWorkItemQueries (line 59) | public async ShowMyWorkItemQueries(): Promise<void> {
    method ShowPinnedQueryWorkItems (line 87) | public async ShowPinnedQueryWorkItems(): Promise<void> {
    method ShowMyWorkItems (line 98) | public async ShowMyWorkItems(): Promise<void> {
    method ChooseWorkItems (line 108) | public async ChooseWorkItems(): Promise<string[]> {
    method showWorkItems (line 125) | private async showWorkItems(wiql: string): Promise<void> {
    method GetPinnedQueryResultCount (line 142) | public async GetPinnedQueryResultCount(): Promise<number> {
    method getPinnedQueryText (line 154) | private async getPinnedQueryText(): Promise<string> {
    method getMyWorkItemQueries (line 174) | private async getMyWorkItemQueries(): Promise<WorkItemQueryQuickPickIt...
    method getMyWorkItems (line 201) | private async getMyWorkItems(teamProject: string, wiql: string): Promi...
    method getUserName (line 220) | private getUserName(context: TeamServerContext): string {
    method getWorkItemTypes (line 233) | private async getWorkItemTypes(): Promise<BaseQuickPickItem[]> {
    method handleWitError (line 246) | private handleWitError(err: Error, offlineText: string, polling: boole...
    method logTelemetryForWorkItem (line 264) | private logTelemetryForWorkItem(wit: string): void {
    method PollPinnedQuery (line 277) | public PollPinnedQuery(): void {
    method GetOfflinePinnedQueryStatusText (line 286) | public static GetOfflinePinnedQueryStatusText() : string {
    method GetPinnedQueryStatusText (line 290) | public static GetPinnedQueryStatusText(total?: string) : string {

FILE: src/contexts/externalcontext.ts
  class ExternalContext (line 12) | class ExternalContext implements IRepositoryContext {
    method constructor (line 20) | constructor(rootPath: string) {
    method dispose (line 25) | public dispose() {
    method Initialize (line 30) | public async Initialize(settings: ISettings): Promise<boolean> {
    method TeamProjectName (line 45) | public get TeamProjectName(): string {
    method CurrentBranch (line 50) | public get CurrentBranch(): string {
    method CurrentRef (line 53) | public get CurrentRef(): string {
    method RepoFolder (line 58) | public get RepoFolder(): string {
    method IsSsh (line 61) | public get IsSsh(): boolean {
    method IsTeamFoundation (line 64) | public get IsTeamFoundation(): boolean {
    method IsTeamServices (line 67) | public get IsTeamServices(): boolean {
    method RemoteUrl (line 70) | public get RemoteUrl(): string {
    method RepositoryParentFolder (line 73) | public get RepositoryParentFolder(): string {
    method Type (line 76) | public get Type(): RepositoryType {

FILE: src/contexts/gitcontext.ts
  class GitContext (line 17) | class GitContext implements IRepositoryContext {
    method constructor (line 31) | constructor(rootPath: string, gitDir?: string) {
    method dispose (line 113) | public dispose() {
    method Initialize (line 118) | public async Initialize(): Promise<boolean> {
    method CurrentBranch (line 123) | public get CurrentBranch(): string {
    method CurrentRef (line 126) | public get CurrentRef(): string {
    method TeamProjectName (line 132) | public get TeamProjectName(): string {
    method RepoFolder (line 137) | public get RepoFolder(): string {
    method IsSsh (line 140) | public get IsSsh(): boolean {
    method IsTeamFoundation (line 143) | public get IsTeamFoundation(): boolean {
    method IsTeamServices (line 146) | public get IsTeamServices(): boolean {
    method RemoteUrl (line 149) | public get RemoteUrl(): string {
    method RepositoryParentFolder (line 152) | public get RepositoryParentFolder(): string {
    method Type (line 155) | public get Type(): RepositoryType {

FILE: src/contexts/repocontextfactory.ts
  class RepositoryContextFactory (line 15) | class RepositoryContextFactory {
    method CreateRepositoryContext (line 18) | public static async CreateRepositoryContext(path: string, settings: Se...
    method UpdateRepositoryContext (line 51) | public static UpdateRepositoryContext(currentRepo: IRepositoryContext,...

FILE: src/contexts/repositorycontext.ts
  type RepositoryType (line 9) | enum RepositoryType {
  type IRepositoryContext (line 16) | interface IRepositoryContext {

FILE: src/contexts/servercontext.ts
  class TeamServerContext (line 12) | class TeamServerContext {
    method constructor (line 21) | constructor(remoteUrl: string) {
    method CredentialHandler (line 27) | public get CredentialHandler(): IRequestHandler {
    method CredentialHandler (line 30) | public set CredentialHandler(handler: IRequestHandler)  {
    method RepoInfo (line 33) | public get RepoInfo(): RepositoryInfo {
    method RepoInfo (line 36) | public set RepoInfo(info: RepositoryInfo) {
    method UserInfo (line 39) | public get UserInfo(): UserInfo {
    method UserInfo (line 42) | public set UserInfo(info: UserInfo) {
    method CredentialInfo (line 45) | public get CredentialInfo(): CredentialInfo {
    method CredentialInfo (line 48) | public set CredentialInfo(info: CredentialInfo) {

FILE: src/contexts/tfvccontext.ts
  class TfvcContext (line 14) | class TfvcContext implements IRepositoryContext {
    method constructor (line 25) | constructor(rootPath: string) {
    method Initialize (line 30) | public async Initialize(): Promise<boolean> {
    method TeamProjectName (line 46) | public get TeamProjectName(): string {
    method TfvcRepository (line 50) | public get TfvcRepository(): TfvcRepository {
    method TfvcRepository (line 54) | public set TfvcRepository(newRepository: TfvcRepository) {
    method TfvcWorkspace (line 61) | public get TfvcWorkspace(): IWorkspace {
    method CurrentBranch (line 66) | public get CurrentBranch(): string {
    method CurrentRef (line 69) | public get CurrentRef(): string {
    method RepoFolder (line 74) | public get RepoFolder(): string {
    method IsSsh (line 77) | public get IsSsh(): boolean {
    method IsTeamFoundation (line 80) | public get IsTeamFoundation(): boolean {
    method IsTeamServices (line 83) | public get IsTeamServices(): boolean {
    method RemoteUrl (line 86) | public get RemoteUrl(): string {
    method RepositoryParentFolder (line 89) | public get RepositoryParentFolder(): string {
    method Type (line 92) | public get Type(): RepositoryType {
    method RemoteUrl (line 97) | public set RemoteUrl(remoteUrl: string) {

FILE: src/credentialstore/credential.ts
  class Credential (line 9) | class Credential {
    method constructor (line 14) | constructor(service: string, username: string, password: string) {
    method Service (line 20) | public get Service() : string {
    method Username (line 23) | public get Username() : string {
    method Password (line 26) | public get Password() : string {

FILE: src/credentialstore/credentialstore.ts
  class CredentialStore (line 21) | class CredentialStore implements ICredentialStore {
    method constructor (line 30) | constructor(prefix?: string, folder?: string, filename?: string) {
    method GetCredential (line 70) | public GetCredential(service: string) : Q.Promise<Credential> {
    method SetCredential (line 74) | public SetCredential(service: string, username: string, password: any)...
    method RemoveCredential (line 105) | public RemoveCredential(service: string) : Q.Promise<void> {
    method getCredentialByName (line 110) | public getCredentialByName(service: string, username: string) : Q.Prom...
    method removeCredentialByName (line 115) | public removeCredentialByName(service: string, username: string) : Q.P...

FILE: src/credentialstore/interfaces/icredentialstore.ts
  type ICredentialStore (line 13) | interface ICredentialStore {

FILE: src/credentialstore/linux/file-token-storage.ts
  class FileTokenStorage (line 17) | class FileTokenStorage {
    method constructor (line 20) | constructor(filename: string) {
    method AddEntries (line 24) | public AddEntries(newEntries: Array<any>, existingEntries: Array<any>)...
    method Clear (line 29) | public Clear() : Q.Promise<void> {
    method LoadEntries (line 33) | public LoadEntries() : Q.Promise<any> {
    method RemoveEntries (line 55) | public RemoveEntries(entriesToKeep: Array<any> /*, entriesToRemove?: A...
    method saveEntries (line 59) | private saveEntries(entries: Array<any>) : Q.Promise<void> {

FILE: src/credentialstore/linux/linux-file-api.ts
  class LinuxFileApi (line 23) | class LinuxFileApi implements ICredentialStore {
    method constructor (line 28) | constructor(folder: string, filename: string) {
    method GetCredential (line 34) | public GetCredential(service: string) : Q.Promise<Credential> {
    method SetCredential (line 53) | public SetCredential(service: string, username: string, password: stri...
    method RemoveCredential (line 78) | public RemoveCredential(service: string) : Q.Promise<void> {
    method getCredentialByName (line 100) | public getCredentialByName(service: string, username: string) : Q.Prom...
    method removeCredentialByName (line 119) | public removeCredentialByName(service: string, username: string) : Q.P...
    method createCredential (line 145) | private createCredential(cred: any) : Credential {
    method loadCredentials (line 149) | private loadCredentials() : Q.Promise<any> {

FILE: src/credentialstore/osx/osx-keychain-api.ts
  class OsxKeychainApi (line 21) | class OsxKeychainApi implements ICredentialStore {
    method constructor (line 24) | constructor(credentialPrefix: string) {
    method GetCredential (line 31) | public GetCredential(service: string) : Q.Promise<Credential> {
    method SetCredential (line 66) | public SetCredential(service: string, username: string, password: stri...
    method RemoveCredential (line 80) | public RemoveCredential(service: string) : Q.Promise<void> {
    method getCredentialByName (line 92) | public getCredentialByName(service: string, username: string) : Q.Prom...
    method removeCredentialByName (line 127) | public removeCredentialByName(service: string, username: string) : Q.P...
    method removeCredentials (line 155) | private removeCredentials(service: string): Q.Promise<void> {
    method listCredentials (line 176) | private listCredentials(service? : string) : Q.Promise<Array<Credentia...

FILE: src/credentialstore/osx/osx-keychain-parser.js
  function OsxSecurityParsingStream (line 40) | function OsxSecurityParsingStream() {
  function createParsingStream (line 128) | function createParsingStream() {

FILE: src/credentialstore/osx/osx-keychain.js
  function setPrefix (line 20) | function setPrefix(prefix) {
  function ensurePrefix (line 24) | function ensurePrefix(targetName) {
  function removePrefix (line 31) | function removePrefix(targetName) {
  function list (line 40) | function list() {
  function get (line 60) | function get(userName, service, callback) {
  function set (line 89) | function set(userName, service, description, password, callback) {
  function remove (line 115) | function remove(userName, service, description, callback) {

FILE: src/credentialstore/win32/win-credstore-api.ts
  class WindowsCredentialStoreApi (line 20) | class WindowsCredentialStoreApi implements ICredentialStore {
    method constructor (line 23) | constructor(credentialPrefix: string) {
    method GetCredential (line 29) | public GetCredential(service: string) : Q.Promise<Credential> {
    method SetCredential (line 52) | public SetCredential(service: string, username: string, password: any)...
    method RemoveCredential (line 67) | public RemoveCredential(service: string) : Q.Promise<void> {
    method getCredentialByName (line 88) | public getCredentialByName(service: string, username: string) : Q.Prom...
    method removeCredentialByName (line 110) | public removeCredentialByName(service: string, username: string) : Q.P...
    method createCredential (line 130) | private createCredential(cred: any) : Credential {
    method createTargetName (line 139) | private createTargetName(service: string, username: string) : string {
    method listCredentials (line 143) | private listCredentials() : Q.Promise<Array<any>> {

FILE: src/credentialstore/win32/win-credstore-parser.js
  function fieldNameToPropertyName (line 29) | function fieldNameToPropertyName(fieldName) {
  function WinCredStoreParsingStream (line 44) | function WinCredStoreParsingStream() {
  function createParsingStream (line 104) | function createParsingStream() {

FILE: src/credentialstore/win32/win-credstore.js
  function setPrefix (line 24) | function setPrefix(prefix) {
  function ensurePrefix (line 28) | function ensurePrefix(targetName) {
  function removePrefix (line 35) | function removePrefix(targetName) {
  function list (line 48) | function list() {
  function get (line 65) | function get(targetName, callback) {
  function set (line 105) | function set(targetName, credential, callback) {
  function remove (line 130) | function remove(targetName, callback) {

FILE: src/extension.ts
  function activate (line 14) | async function activate(context: ExtensionContext) {

FILE: src/extensionmanager.ts
  class ExtensionManager (line 37) | class ExtensionManager implements Disposable {
    method Initialize (line 50) | public async Initialize(): Promise<void> {
    method RepoContext (line 64) | public get RepoContext(): IRepositoryContext {
    method ServerContext (line 68) | public get ServerContext(): TeamServerContext {
    method CredentialManager (line 72) | public get CredentialManager(): CredentialManager {
    method FeedbackClient (line 76) | public get FeedbackClient(): FeedbackClient {
    method Settings (line 80) | public get Settings(): Settings {
    method Team (line 84) | public get Team(): TeamExtension {
    method Tfvc (line 88) | public get Tfvc(): TfvcExtension {
    method Reinitialize (line 93) | public Reinitialize(): void {
    method SendFeedback (line 98) | public SendFeedback(): void {
    method ensureMinimalInitialization (line 104) | private ensureMinimalInitialization(): boolean {
    method EnsureInitializedForTFVC (line 120) | public EnsureInitializedForTFVC(): boolean {
    method EnsureInitialized (line 125) | public EnsureInitialized(expectedType: RepositoryType): boolean {
    method DisplayErrorMessage (line 163) | public DisplayErrorMessage(message?: string): boolean {
    method DisplayWarningMessage (line 172) | public DisplayWarningMessage(message: string): void {
    method ReportError (line 177) | public ReportError(err: Error, message: string, showToUser: boolean = ...
    method RunCommand (line 202) | public RunCommand(funcToTry: (args) => void, ...args: string[]): void {
    method displayNoCredentialsMessage (line 210) | private displayNoCredentialsMessage(): void {
    method formatErrorLogMessage (line 231) | private formatErrorLogMessage(err): string {
    method initializeExtension (line 239) | private async initializeExtension(reinitializing: boolean): Promise<vo...
    method sendStartupTelemetry (line 394) | private sendStartupTelemetry(): void {
    method sendTfvcConfiguredTelemetry (line 407) | private sendTfvcConfiguredTelemetry(repository: TfvcRepository): void {
    method sendTfvcConnectedTelemetry (line 422) | private sendTfvcConnectedTelemetry(repository: TfvcRepository): void {
    method shouldDisplayTfvcError (line 432) | private shouldDisplayTfvcError(errorCode: string): boolean {
    method showWelcomeMessage (line 444) | private async showWelcomeMessage(): Promise<void> {
    method showFarewellMessage (line 462) | private async showFarewellMessage(): Promise<void> {
    method initializeStatusBars (line 478) | private initializeStatusBars(): void {
    method initializeClients (line 494) | private async initializeClients(repoType: RepositoryType): Promise<voi...
    method logDebugInformation (line 499) | private logDebugInformation(): void {
    method logStart (line 519) | private logStart(loggingLevel: string, rootPath: string): void {
    method resetErrorStatus (line 533) | private resetErrorStatus(): void {
    method setErrorStatus (line 537) | private setErrorStatus(message: string, commandOnClick?: string): void {
    method setupFileSystemWatcherOnHead (line 549) | private async setupFileSystemWatcherOnHead(): Promise<void> {
    method notifyBranchChanged (line 562) | private notifyBranchChanged(/*TODO: currentBranch: string*/): void {
    method setupFileSystemWatcherOnConfig (line 568) | private async setupFileSystemWatcherOnConfig(): Promise<void> {
    method showFeedbackItem (line 620) | private showFeedbackItem(): void {
    method cleanup (line 627) | private cleanup(preserveTeamExtension: boolean = false): void {
    method dispose (line 665) | public dispose() {
    method SignOut (line 670) | public SignOut(): void {

FILE: src/helpers/constants.ts
  class Constants (line 8) | class Constants {
  class CommandNames (line 24) | class CommandNames {
  class DeviceFlowConstants (line 46) | class DeviceFlowConstants {
  class TfvcCommandNames (line 53) | class TfvcCommandNames {
  class SettingNames (line 74) | class SettingNames {
  class TelemetryEvents (line 91) | class TelemetryEvents {
  class TfvcBaseTelemetryEvents (line 131) | class TfvcBaseTelemetryEvents {
  class TfvcTelemetryEvents (line 157) | class TfvcTelemetryEvents {
  class WellKnownRepositoryTypes (line 195) | class WellKnownRepositoryTypes {
  class WitQueries (line 199) | class WitQueries {
  class WitTypes (line 205) | class WitTypes {
  type MessageTypes (line 210) | enum MessageTypes {

FILE: src/helpers/credentialmanager.ts
  class CredentialManager (line 15) | class CredentialManager {
    method constructor (line 19) | constructor() {
    method GetCredentialHandler (line 25) | public static GetCredentialHandler() : IRequestHandler {
    method GetCredentials (line 29) | public GetCredentials(context: TeamServerContext) : Q.Promise<Credenti...
    method RemoveCredentials (line 45) | public RemoveCredentials(context:TeamServerContext) : Q.Promise<void> {
    method StoreCredentials (line 56) | public StoreCredentials(context:TeamServerContext, username: string, p...
    method getCredentials (line 67) | private getCredentials(context:TeamServerContext) : Q.Promise<Credenti...
    method getKeyFromContext (line 93) | private static getKeyFromContext(context:TeamServerContext): string {

FILE: src/helpers/logger.ts
  class Logger (line 12) | class Logger {
    method initalize (line 17) | private static initalize() {
    method addPid (line 29) | private static addPid(message: string): string {
    method LogDebug (line 33) | public static LogDebug(message: string) : void {
    method LogError (line 42) | public static LogError(message: string) : void {
    method LogInfo (line 52) | public static LogInfo(message: string) : void {
    method LogObject (line 60) | public static LogObject(object: any) : void {
    method LogWarning (line 69) | public static LogWarning(message: string) : void {
    method LogPath (line 78) | public static get LogPath(): string {
    method LogPath (line 82) | public static set LogPath(path: string) {
    method LoggingLevel (line 88) | public static get LoggingLevel(): LoggingLevel {
    method SetLoggingLevel (line 92) | public static SetLoggingLevel(level: string): void {
    method Now (line 121) | public static get Now() : string {
    method getNow (line 124) | private static getNow(): string {
    method addZero (line 133) | private static addZero(num: number, base?: number): string {
  type LoggingLevel (line 140) | enum LoggingLevel {

FILE: src/helpers/repoutils.ts
  class RepoUtils (line 27) | class RepoUtils {
    method IsTeamFoundationGitRepo (line 31) | public static IsTeamFoundationGitRepo(url: string): boolean {
    method IsTeamFoundationServicesRepo (line 60) | public static IsTeamFoundationServicesRepo(url: string): boolean {
    method IsTeamFoundationServicesAzureRepo (line 69) | public static IsTeamFoundationServicesAzureRepo(respositoryUrl: string...
    method IsTeamFoundationServicesV3SshRepo (line 85) | public static IsTeamFoundationServicesV3SshRepo(respositoryUrl: string...
    method ConvertSshV3ToUrl (line 89) | public static ConvertSshV3ToUrl(respositoryUrl: string): string {
    method IsTeamFoundationServerRepo (line 103) | public static IsTeamFoundationServerRepo(url: string): boolean {

FILE: src/helpers/settings.ts
  method readSetting (line 12) | protected readSetting<T>(name: string, defaultValue:T): T {
  method writeSetting (line 23) | protected writeSetting(name: string, value: any, global?: boolean): void {
  type IPinnedQuery (line 29) | interface IPinnedQuery {
  class PinnedQuerySettings (line 35) | class PinnedQuerySettings extends BaseSettings {
    method constructor (line 39) | constructor(account: string) {
    method getPinnedQuery (line 45) | private getPinnedQuery(account: string) : IPinnedQuery {
    method PinnedQuery (line 68) | public get PinnedQuery() : IPinnedQuery {
  type ISettings (line 73) | interface ISettings {
  class Settings (line 85) | class Settings extends BaseSettings implements ISettings {
    method constructor (line 96) | constructor() {
    method AppInsightsEnabled (line 120) | public get AppInsightsEnabled(): boolean {
    method AppInsightsKey (line 124) | public get AppInsightsKey(): string {
    method LoggingLevel (line 128) | public get LoggingLevel(): string {
    method PollingInterval (line 132) | public get PollingInterval(): number {
    method RemoteUrl (line 136) | public get RemoteUrl(): string {
    method TeamProject (line 140) | public get TeamProject(): string {
    method BuildDefinitionId (line 144) | public get BuildDefinitionId(): number {
    method ShowWelcomeMessage (line 148) | public get ShowWelcomeMessage(): boolean {
    method ShowWelcomeMessage (line 151) | public set ShowWelcomeMessage(value: boolean) {
    method ShowFarewellMessage (line 155) | public get ShowFarewellMessage(): boolean {
    method ShowFarewellMessage (line 158) | public set ShowFarewellMessage(value: boolean) {

FILE: src/helpers/strings.ts
  class Strings (line 8) | class Strings {

FILE: src/helpers/urlbuilder.ts
  class UrlBuilder (line 7) | class UrlBuilder {
    method Join (line 10) | public static Join(baseUrl: string, ...args: string[]): string {
    method AddQueryParams (line 32) | public static AddQueryParams(baseUrl: string, ...args: string[]) : str...
    method AddHashes (line 56) | public static AddHashes(baseUrl: string, ...args: string[]) : string {

FILE: src/helpers/useragentprovider.ts
  class UserAgentProvider (line 10) | class UserAgentProvider  {
    method UserAgent (line 13) | public static get UserAgent() : string {
    method VSCodeVersion (line 20) | public static set VSCodeVersion(vsCodeVersion: string) {

FILE: src/helpers/utils.ts
  class Utils (line 16) | class Utils {
    method FormatMessage (line 18) | public static FormatMessage(message: string): string {
    method FindGitFolder (line 27) | public static FindGitFolder(startingPath: string, gitDir?: string): st...
    method GetBuildResultIcon (line 49) | public static GetBuildResultIcon(result: BuildResult) : string {
    method GetMessageForStatusCode (line 67) | public static GetMessageForStatusCode(reason: any, message?: string, p...
    method IsProxyEnabled (line 106) | public static IsProxyEnabled(): boolean {
    method IsProxyIssue (line 113) | public static IsProxyIssue(reason: any): boolean {
    method IsOffline (line 133) | public static IsOffline(reason: any): boolean {
    method IsUnauthorized (line 146) | public static IsUnauthorized(reason: any): boolean {
    method OpenUrl (line 156) | public static OpenUrl(url: string) : void {

FILE: src/helpers/vscodeutils.interfaces.ts
  type IButtonMessageItem (line 9) | interface IButtonMessageItem {

FILE: src/helpers/vscodeutils.ts
  class BaseQuickPickItem (line 13) | class BaseQuickPickItem implements QuickPickItem {
  class WorkItemQueryQuickPickItem (line 19) | class WorkItemQueryQuickPickItem extends BaseQuickPickItem {
  class ButtonMessageItem (line 24) | class ButtonMessageItem implements MessageItem, IButtonMessageItem {
  class VsCodeUtils (line 31) | class VsCodeUtils {
    method GetActiveSelection (line 33) | public static GetActiveSelection(): string {
    method ShowErrorMessage (line 51) | public static async ShowErrorMessage(message: string, ...urlMessageIte...
    method ShowInfoMessage (line 55) | public static async ShowInfoMessage(message: string, ...urlMessageItem...
    method ShowWarningMessage (line 59) | public static async ShowWarningMessage(message: string): Promise<IButt...
    method showMessage (line 65) | private static async showMessage(message: string, type: MessageTypes, ...

FILE: src/info/credentialinfo.ts
  class CredentialInfo (line 10) | class CredentialInfo {
    method constructor (line 17) | constructor(username: string, password?: string, domain?: string, work...
    method CredentialHandler (line 28) | public get CredentialHandler() : IRequestHandler {
    method CredentialHandler (line 32) | public set CredentialHandler(handler : IRequestHandler) {
    method Domain (line 36) | public get Domain(): string {
    method Username (line 40) | public get Username(): string {
    method Password (line 44) | public get Password(): string {
    method Workstation (line 48) | public get Workstation(): string {

FILE: src/info/extensionrequesthandler.ts
  class ExtensionRequestHandler (line 14) | class ExtensionRequestHandler implements IRequestHandler {
    method constructor (line 24) | constructor(username: string, password?: string, domain?: string, work...
    method Domain (line 40) | public get Domain(): string {
    method Username (line 44) | public get Username(): string {
    method Password (line 48) | public get Password(): string {
    method Workstation (line 52) | public get Workstation(): string {
    method prepareRequest (line 57) | public prepareRequest(options: any): void {
    method canHandleAuthentication (line 65) | public canHandleAuthentication(res: IHttpResponse) : boolean {
    method handleAuthentication (line 69) | public handleAuthentication(httpClient: any, protocol: any, options: a...

FILE: src/info/repositoryinfo.ts
  class RepositoryInfo (line 16) | class RepositoryInfo {
    method constructor (line 43) | constructor (repositoryInfo: any) {
    method Account (line 112) | public get Account(): string {
    method AccountUrl (line 115) | public get AccountUrl(): string {
    method CollectionId (line 125) | public get CollectionId(): string {
    method CollectionName (line 128) | public get CollectionName(): string {
    method CollectionUrl (line 131) | public get CollectionUrl(): string {
    method Host (line 144) | public get Host(): string {
    method IsTeamFoundation (line 147) | public get IsTeamFoundation(): boolean {
    method IsTeamFoundationServer (line 150) | public get IsTeamFoundationServer(): boolean {
    method IsTeamServices (line 153) | public get IsTeamServices(): boolean {
    method Protocol (line 156) | public get Protocol(): string {
    method RepositoryId (line 159) | public get RepositoryId(): string {
    method RepositoryName (line 162) | public get RepositoryName(): string {
    method RepositoryUrl (line 165) | public get RepositoryUrl(): string {
    method TeamProjectUrl (line 168) | public get TeamProjectUrl(): string {
    method TeamProject (line 174) | public get TeamProject(): string {

FILE: src/info/userinfo.ts
  class UserInfo (line 7) | class UserInfo {
    method constructor (line 12) | constructor(id: string, providerDisplayName: string, customDisplayName...
    method Id (line 18) | public get Id(): string {
    method ProviderDisplayName (line 21) | public get ProviderDisplayName(): string {
    method CustomDisplayName (line 24) | public get CustomDisplayName(): string {

FILE: src/services/build.ts
  class BuildService (line 14) | class BuildService {
    method constructor (line 17) | constructor(context: TeamServerContext) {
    method GetBuildBadge (line 22) | public async GetBuildBadge(project: string, repoType: string, repoId: ...
    method GetBuildById (line 27) | public async GetBuildById(buildId: number): Promise<Build> {
    method GetBuildDefinitions (line 32) | public async GetBuildDefinitions(teamProject: string): Promise<Definit...
    method GetBuilds (line 37) | public async GetBuilds(teamProject: string): Promise<Build[]> {
    method GetBuildsByDefinitionId (line 45) | public async GetBuildsByDefinitionId(teamProject: string, definitionId...
    method GetBuildDefinitionUrl (line 54) | public static GetBuildDefinitionUrl(remoteUrl: string, definitionId: s...
    method GetBuildSummaryUrl (line 60) | public static GetBuildSummaryUrl(remoteUrl: string, buildId: string): ...
    method GetBuildDefinitionsUrl (line 67) | public static GetBuildDefinitionsUrl(remoteUrl: string): string {
    method GetBuildsUrl (line 73) | public static GetBuildsUrl(remoteUrl: string): string {

FILE: src/services/coreapi.ts
  class CoreApiService (line 12) | class CoreApiService {
    method constructor (line 15) | constructor(remoteUrl: string) {
    method GetProjectCollection (line 20) | public async GetProjectCollection(collectionName: string): Promise<Tea...
    method GetTeamProject (line 25) | public async GetTeamProject(projectName: string): Promise<TeamProject> {

FILE: src/services/gitvc.ts
  class GitVcService (line 15) | class GitVcService {
    method constructor (line 24) | constructor(context: TeamServerContext) {
    method GetPullRequests (line 30) | public async GetPullRequests(repositoryId: string, creatorId?: string,...
    method GetRepositories (line 37) | public async GetRepositories(project: string): Promise<GitRepository[]> {
    method GetFileBlameUrl (line 43) | public static GetFileBlameUrl(remoteUrl: string, currentFile: string, ...
    method GetFileHistoryUrl (line 51) | public static GetFileHistoryUrl(remoteUrl: string, currentFile: string...
    method GetRepositoryHistoryUrl (line 59) | public static GetRepositoryHistoryUrl(remoteUrl: string, currentBranch...
    method GetCreatePullRequestUrl (line 67) | public static GetCreatePullRequestUrl(remoteUrl: string, currentBranch...
    method GetPullRequestDiscussionUrl (line 74) | public static GetPullRequestDiscussionUrl(repositoryUrl: string, reque...
    method GetPullRequestsUrl (line 82) | public static GetPullRequestsUrl(repositoryUrl: string): string {
    method GetPullRequestScore (line 88) | public static GetPullRequestScore(pullRequest: GitPullRequest): PullRe...
  type PullRequestScore (line 132) | enum PullRequestScore {

FILE: src/services/telemetry.ts
  class Telemetry (line 17) | class Telemetry {
    method Initialize (line 30) | public static Initialize(settings: Settings, context?: TeamServerConte...
    method SendEvent (line 56) | public static SendEvent(event: string, properties?: any): void {
    method SendFeedback (line 64) | public static SendFeedback(event: string, properties?: any): void {
    method SendException (line 71) | public static SendException(err: Error, properties?: any): void {
    method ensureInitialized (line 80) | private static ensureInitialized(): void {
    method setUserId (line 87) | private static setUserId(): void {
    method setCommonProperties (line 102) | private static setCommonProperties(): void {

FILE: src/services/workitemtracking.ts
  class WorkItemTrackingService (line 17) | class WorkItemTrackingService {
    method constructor (line 20) | constructor(context: TeamServerContext) {
    method CreateWorkItem (line 25) | public async CreateWorkItem(context: TeamServerContext, itemType: stri...
    method GetWorkItems (line 33) | public async GetWorkItems(teamProject: string, wiql: string): Promise<...
    method GetWorkItemHierarchyItems (line 38) | public async GetWorkItemHierarchyItems(teamProject: string): Promise<Q...
    method GetWorkItemQuery (line 43) | public async GetWorkItemQuery(teamProject: string, queryPath: string):...
    method GetWorkItemTypes (line 48) | public async GetWorkItemTypes(teamProject: string): Promise<WorkItemTy...
    method GetWorkItemById (line 71) | public async GetWorkItemById(id: string): Promise<SimpleWorkItem> {
    method execWorkItemQuery (line 80) | private async execWorkItemQuery(teamProject: string, wiql: Wiql): Prom...
    method GetQueryResultCount (line 127) | public async GetQueryResultCount(teamProject: string, wiql: string): P...
    method GetEditWorkItemUrl (line 144) | public static GetEditWorkItemUrl(teamProjectUrl: string, workItemId: s...
    method GetNewWorkItemUrl (line 149) | public static GetNewWorkItemUrl(teamProjectUrl: string, issueType: str...
    method GetMyQueryResultsUrl (line 166) | public static GetMyQueryResultsUrl(teamProjectUrl: string, folderName:...
    method GetWorkItemsBaseUrl (line 171) | public static GetWorkItemsBaseUrl(teamProjectUrl: string): string {
  class SimpleWorkItem (line 180) | class SimpleWorkItem {
  class WorkItemFields (line 187) | class WorkItemFields {

FILE: src/team-extension.ts
  class TeamExtension (line 27) | class TeamExtension  {
    method constructor (line 41) | constructor(manager: ExtensionManager) {
    method DisplayCurrentBranchBuildStatus (line 46) | public DisplayCurrentBranchBuildStatus(): void {
    method GetMyPullRequests (line 55) | public GetMyPullRequests(): void {
    method IsSignedOut (line 67) | public get IsSignedOut(): boolean {
    method requestPersonalAccessToken (line 74) | private async requestPersonalAccessToken(): Promise<string> {
    method Signin (line 145) | public async Signin() {
    method Signout (line 212) | public Signout() {
    method OpenBlamePage (line 232) | public OpenBlamePage(): void {
    method OpenBuildSummaryPage (line 243) | public OpenBuildSummaryPage(): void {
    method OpenFileHistory (line 252) | public OpenFileHistory(): void {
    method OpenNewBug (line 267) | public OpenNewBug(): void {
    method OpenNewPullRequest (line 278) | public OpenNewPullRequest(): void {
    method OpenNewTask (line 289) | public OpenNewTask(): void {
    method OpenNewWorkItem (line 301) | public OpenNewWorkItem(): void {
    method OpenTeamProjectWebSite (line 311) | public OpenTeamProjectWebSite(): void {
    method RefreshPollingStatus (line 322) | public RefreshPollingStatus(): void {
    method ViewMyWorkItems (line 331) | public ViewMyWorkItems(): void {
    method ViewPinnedQueryWorkItems (line 340) | public ViewPinnedQueryWorkItems(): void {
    method ViewWorkItems (line 351) | public ViewWorkItems(): void {
    method AssociateWorkItems (line 359) | public async AssociateWorkItems(): Promise<void> {
    method appendToCheckinMessage (line 374) | private appendToCheckinMessage(line: string): void {
    method getDefaultUsername (line 385) | private getDefaultUsername() : string {
    method InitializeStatusBars (line 404) | public InitializeStatusBars() {
    method InitializeClients (line 433) | public InitializeClients(repoType: RepositoryType) : void {
    method chooseWorkItems (line 451) | private async chooseWorkItems(): Promise<string[]> {
    method pollBuildStatus (line 455) | private pollBuildStatus(): void {
    method pollMyPullRequests (line 462) | private pollMyPullRequests(): void {
    method pollPinnedQuery (line 475) | private pollPinnedQuery(): void {
    method refreshPollingItems (line 483) | private refreshPollingItems(): void {
    method startPolling (line 490) | private startPolling(): void {
    method withSourceControlInputBox (line 501) | private withSourceControlInputBox(fn: (input: SourceControlInputBox) =...
    method NotifyBranchChanged (line 519) | public NotifyBranchChanged(/*TODO: currentBranch: string*/) : void {
    method cleanup (line 523) | public cleanup(): void {
    method dispose (line 546) | dispose() {

FILE: src/tfvc/commands/add.ts
  class Add (line 17) | class Add implements ITfvcCommand<string[]> {
    method constructor (line 21) | public constructor(serverContext: TeamServerContext, itemPaths: string...
    method GetArguments (line 27) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 32) | public GetOptions(): any {
    method ParseOutput (line 42) | public async ParseOutput(executionResult: IExecutionResult): Promise<s...
    method GetExeArguments (line 69) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 74) | public GetExeOptions(): any {
    method ParseExeOutput (line 78) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getFileFromLine (line 82) | private getFileFromLine(line: string): string {

FILE: src/tfvc/commands/argumentbuilder.ts
  class ArgumentBuilder (line 14) | class ArgumentBuilder implements IArgumentProvider {
    method constructor (line 18) | public constructor(command: string, serverContext?: TeamServerContext,...
    method Add (line 36) | public Add(arg: string): ArgumentBuilder {
    method AddAll (line 41) | public AddAll(args: string[]): ArgumentBuilder {
    method AddSecret (line 50) | public AddSecret(arg: string): ArgumentBuilder {
    method AddSwitch (line 56) | public AddSwitch(switchName: string): ArgumentBuilder {
    method AddSwitchWithValue (line 60) | public AddSwitchWithValue(switchName: string, switchValue: string, isS...
    method Build (line 77) | public Build(): string[] {
    method BuildCommandLine (line 85) | public BuildCommandLine(): string {
    method escapeArgument (line 99) | private escapeArgument(arg: string) {
    method ToString (line 111) | public ToString(): string {
    method GetCommand (line 126) | public GetCommand(): string {
    method GetArguments (line 130) | public GetArguments(): string[] {
    method GetCommandLine (line 134) | public GetCommandLine(): string {
    method GetArgumentsForDisplay (line 138) | public GetArgumentsForDisplay(): string {
    method AddProxySwitch (line 142) | public AddProxySwitch(proxy: string) {

FILE: src/tfvc/commands/checkin.ts
  class Checkin (line 19) | class Checkin implements ITfvcCommand<string> {
    method constructor (line 25) | public constructor(serverContext: TeamServerContext, files: string[], ...
    method GetArguments (line 33) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 45) | public GetOptions(): any {
    method getComment (line 49) | private getComment(): string {
    method getAssociatedWorkItems (line 54) | private getAssociatedWorkItems(): string {
    method ParseOutput (line 81) | public async ParseOutput(executionResult: IExecutionResult): Promise<s...
    method GetExeArguments (line 89) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 101) | public GetExeOptions(): any {
    method ParseExeOutput (line 105) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...

FILE: src/tfvc/commands/commandhelper.ts
  class CommandHelper (line 18) | class CommandHelper {
    method RequireArgument (line 19) | public static RequireArgument(argument: any, argumentName: string) {
    method RequireStringArgument (line 25) | public static RequireStringArgument(argument: string, argumentName: st...
    method RequireStringArrayArgument (line 31) | public static RequireStringArrayArgument(argument: string[], argumentN...
    method HasError (line 37) | public static HasError(result: IExecutionResult, errorPattern: string)...
    method ProcessErrors (line 44) | public static ProcessErrors(result: IExecutionResult): void {
    method GetChangesetNumber (line 112) | public static GetChangesetNumber(stdout: string): string {
    method GetNewLineCharacter (line 127) | public static GetNewLineCharacter(stdout: string): string {
    method SplitIntoLines (line 134) | public static SplitIntoLines(stdout: string, skipWarnings?: boolean, f...
    method ParseXml (line 155) | public static async ParseXml(xml: string): Promise<any> {
    method TrimToXml (line 177) | public static TrimToXml(xml: string): string {
    method normalizeName (line 188) | private static normalizeName(name: string): string {
    method IsFilePath (line 199) | public static IsFilePath(line: string): boolean {
    method GetFilePath (line 212) | public static GetFilePath(filePath: string, filename: string, pathRoot...

FILE: src/tfvc/commands/delete.ts
  class Delete (line 18) | class Delete implements ITfvcCommand<string[]> {
    method constructor (line 22) | public constructor(serverContext: TeamServerContext, itemPaths: string...
    method GetArguments (line 28) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 33) | public GetOptions(): any {
    method ParseOutput (line 63) | public async ParseOutput(executionResult: IExecutionResult): Promise<s...
    method GetExeArguments (line 82) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 87) | public GetExeOptions(): any {
    method ParseExeOutput (line 91) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getFileFromLine (line 95) | private getFileFromLine(line: string): string {

FILE: src/tfvc/commands/findconflicts.ts
  class FindConflicts (line 20) | class FindConflicts implements ITfvcCommand<IConflict[]> {
    method constructor (line 24) | public constructor(serverContext: TeamServerContext, itemPath: string) {
    method GetArguments (line 30) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 38) | public GetOptions(): any {
    method ParseOutput (line 48) | public async ParseOutput(executionResult: IExecutionResult): Promise<I...
    method GetExeArguments (line 104) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 112) | public GetExeOptions(): any {
    method ParseExeOutput (line 116) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...

FILE: src/tfvc/commands/findworkspace.ts
  class FindWorkspace (line 21) | class FindWorkspace implements ITfvcCommand<IWorkspace> {
    method constructor (line 25) | public constructor(localPath: string, restrictWorkspace: boolean = fal...
    method GetArguments (line 31) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 45) | public GetOptions(): any {
    method ParseOutput (line 58) | public async ParseOutput(executionResult: IExecutionResult): Promise<I...
    method GetExeArguments (line 150) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 154) | public GetExeOptions(): any {
    method ParseExeOutput (line 167) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getValue (line 182) | private getValue(line: string): string {
    method getMapping (line 199) | private getMapping(line: string): IWorkspaceMapping {
    method getTeamProject (line 230) | private getTeamProject(serverPath: string): string {
    method pathIsWithin (line 246) | private pathIsWithin(openedPath: string, workspacePath: string): boole...
    method addTrailingSeparator (line 264) | private addTrailingSeparator(path: string, separator: string): string {

FILE: src/tfvc/commands/getfilecontent.ts
  class GetFileContent (line 19) | class GetFileContent implements ITfvcCommand<string> {
    method constructor (line 25) | public constructor(serverContext: TeamServerContext, localPath: string...
    method GetArguments (line 34) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 43) | public GetOptions(): any {
    method ParseOutput (line 47) | public async ParseOutput(executionResult: IExecutionResult): Promise<s...
    method GetExeArguments (line 65) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 74) | public GetExeOptions(): any {
    method ParseExeOutput (line 78) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...

FILE: src/tfvc/commands/getinfo.ts
  class GetInfo (line 19) | class GetInfo implements ITfvcCommand<IItemInfo[]> {
    method constructor (line 23) | public constructor(serverContext: TeamServerContext, itemPaths: string...
    method GetArguments (line 29) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 34) | public GetOptions(): any {
    method ParseOutput (line 57) | public async ParseOutput(executionResult: IExecutionResult): Promise<I...
    method GetExeArguments (line 115) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 119) | public GetExeOptions(): any {
    method ParseExeOutput (line 123) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getPropertyName (line 127) | private getPropertyName(name: string): string {

FILE: src/tfvc/commands/getversion.ts
  class GetVersion (line 20) | class GetVersion implements ITfvcCommand<string> {
    method GetArguments (line 21) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 26) | public GetOptions(): any {
    method ParseOutput (line 30) | public async ParseOutput(executionResult: IExecutionResult): Promise<s...
    method GetExeArguments (line 35) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 39) | public GetExeOptions(): any {
    method ParseExeOutput (line 43) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getVersion (line 48) | private async getVersion(executionResult: IExecutionResult, expression...

FILE: src/tfvc/commands/rename.ts
  class Rename (line 17) | class Rename implements ITfvcCommand<string> {
    method constructor (line 22) | public constructor(serverContext: TeamServerContext, sourcePath: strin...
    method GetArguments (line 30) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 36) | public GetOptions(): any {
    method ParseOutput (line 59) | public async ParseOutput(executionResult: IExecutionResult): Promise<s...
    method GetExeArguments (line 78) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 84) | public GetExeOptions(): any {
    method ParseExeOutput (line 88) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getFileFromLine (line 92) | private getFileFromLine(line: string): string {

FILE: src/tfvc/commands/resolveconflicts.ts
  class ResolveConflicts (line 20) | class ResolveConflicts implements ITfvcCommand<IConflict[]> {
    method constructor (line 25) | public constructor(serverContext: TeamServerContext, itemPaths: string...
    method GetArguments (line 33) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 40) | public GetOptions(): any {
    method ParseOutput (line 50) | public async ParseOutput(executionResult: IExecutionResult): Promise<I...
    method GetExeArguments (line 71) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 78) | public GetExeOptions(): any {
    method ParseExeOutput (line 82) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...

FILE: src/tfvc/commands/status.ts
  class Status (line 20) | class Status implements ITfvcCommand<IPendingChange[]> {
    method constructor (line 25) | public constructor(serverContext: TeamServerContext, ignoreFolders: bo...
    method GetArguments (line 31) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 45) | public GetOptions(): any {
    method ParseOutput (line 62) | public async ParseOutput(executionResult: IExecutionResult): Promise<I...
    method GetExeArguments (line 89) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 104) | public GetExeOptions(): any {
    method ParseExeOutput (line 133) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getPropertyName (line 199) | private getPropertyName(name: string): string {
    method add (line 212) | private add(changes: IPendingChange[], newChange: IPendingChange, igno...
    method convert (line 226) | private convert(jsonChange: any, isCandidate: boolean): IPendingChange {

FILE: src/tfvc/commands/sync.ts
  class Sync (line 20) | class Sync implements ITfvcCommand<ISyncResults> {
    method constructor (line 25) | public constructor(serverContext: TeamServerContext, itemPaths: string...
    method GetArguments (line 32) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 44) | public GetOptions(): any {
    method ParseOutput (line 68) | public async ParseOutput(executionResult: IExecutionResult): Promise<I...
    method GetExeArguments (line 94) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 106) | public GetExeOptions(): any {
    method ParseExeOutput (line 110) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getItemResults (line 114) | private getItemResults(stdout: string): ISyncItemResult[] {
    method getSyncResultFromLine (line 132) | private getSyncResultFromLine(folderPath: string, line: string): ISync...
    method getErrorMessages (line 199) | private getErrorMessages(stderr: string): ISyncItemResult[] {

FILE: src/tfvc/commands/undo.ts
  class Undo (line 17) | class Undo implements ITfvcCommand<string[]> {
    method constructor (line 21) | public constructor(serverContext: TeamServerContext, itemPaths: string...
    method GetArguments (line 27) | public GetArguments(): IArgumentProvider {
    method GetOptions (line 38) | public GetOptions(): any {
    method ParseOutput (line 47) | public async ParseOutput(executionResult: IExecutionResult): Promise<s...
    method GetExeArguments (line 83) | public GetExeArguments(): IArgumentProvider {
    method GetExeOptions (line 87) | public GetExeOptions(): any {
    method ParseExeOutput (line 91) | public async ParseExeOutput(executionResult: IExecutionResult): Promis...
    method getFileFromLine (line 96) | private getFileFromLine(line: string): string {

FILE: src/tfvc/interfaces.ts
  type ITfCommandLine (line 10) | interface ITfCommandLine {
  type IItemInfo (line 17) | interface IItemInfo {
  type ICheckinInfo (line 32) | interface ICheckinInfo {
  type IWorkspace (line 38) | interface IWorkspace {
  type IWorkspaceMapping (line 48) | interface IWorkspaceMapping {
  type IPendingChange (line 54) | interface IPendingChange {
  type SyncType (line 68) | enum SyncType {
  type ISyncItemResult (line 77) | interface ISyncItemResult {
  type ISyncResults (line 83) | interface ISyncResults {
  type IConflict (line 89) | interface IConflict {
  type AutoResolveType (line 95) | enum AutoResolveType {
  type IExecutionResult (line 104) | interface IExecutionResult {
  type ITfvcErrorData (line 110) | interface ITfvcErrorData {
  type IArgumentProvider (line 121) | interface IArgumentProvider {
  type ITfvcCommand (line 129) | interface ITfvcCommand<T> {

FILE: src/tfvc/scm/commithoverprovider.ts
  function isSCMInput (line 12) | function isSCMInput(uri: Uri) {
  type Diagnostic (line 16) | interface Diagnostic {
  class CommitHoverProvider (line 21) | class CommitHoverProvider implements HoverProvider {
    method constructor (line 29) | constructor() {
    method message (line 42) | public get message(): string | undefined {
    method message (line 50) | public set message(message: string | undefined) {
    method onVisibleTextEditors (line 64) | private onVisibleTextEditors(editors: TextEditor[]): void {
    method update (line 81) | private update(): void {
    method provideHover (line 88) | provideHover(document: TextDocument, position: Position): Hover | unde...
    method dispose (line 98) | dispose(): void {

FILE: src/tfvc/scm/decorationprovider.ts
  class DecorationProvider (line 11) | class DecorationProvider {
    method getDecorations (line 14) | public static getDecorations(statuses: Status[], conflictType?: Confli...
    method getDominantStatus (line 22) | private static getDominantStatus(statuses: Status[]) {
    method getIconUri (line 48) | private static getIconUri(iconName: string, theme: string): Uri {
    method getIconPath (line 52) | private static getIconPath(status: Status, theme: string): Uri | undef...
    method useStrikeThrough (line 66) | private static useStrikeThrough(status: Status, conflictType: Conflict...

FILE: src/tfvc/scm/model.ts
  class Model (line 21) | class Model implements Disposable {
    method onDidChange (line 29) | public get onDidChange(): Event<void> {
    method constructor (line 37) | public constructor(repositoryRoot: string, repository: TfvcRepository,...
    method dispose (line 56) | public dispose() {
    method ConflictsGroup (line 63) | public get ConflictsGroup(): ConflictsGroup { return this._conflictsGr...
    method IncludedGroup (line 64) | public get IncludedGroup(): IncludedGroup { return this._includedGroup; }
    method ExcludedGroup (line 65) | public get ExcludedGroup(): ExcludedGroup { return this._excludedGroup; }
    method Resources (line 67) | public get Resources(): ResourceGroup[] {
    method status (line 77) | private async status(): Promise<void> {
    method onFileSystemChange (line 89) | private onFileSystemChange(/*TODO: uri: Uri*/): void {
    method run (line 93) | private async run(fn: () => Promise<void>): Promise<void> {
    method Exclude (line 105) | public async Exclude(paths: string[]): Promise<void> {
    method Unexclude (line 118) | public async Unexclude(paths: string[]): Promise<void> {
    method Refresh (line 130) | public async Refresh(): Promise<void> {
    method update (line 134) | private async update(): Promise<void> {
    method conflictMatchesPendingChange (line 195) | private conflictMatchesPendingChange(change: IPendingChange, conflict:...

FILE: src/tfvc/scm/resource.ts
  class Resource (line 17) | class Resource implements SourceControlResourceState {
    method constructor (line 24) | constructor(change: IPendingChange, conflict: IConflict) {
    method PendingChange (line 35) | public get PendingChange(): IPendingChange { return this._change; }
    method Statuses (line 36) | public get Statuses(): Status[] { return this._statuses; }
    method ConflictType (line 37) | public get ConflictType(): ConflictType { return this._conflictType; }
    method HasStatus (line 39) | public HasStatus(status: Status): boolean {
    method IsVersioned (line 43) | get IsVersioned(): boolean { return this._version !== "0"; }
    method GetServerUri (line 48) | public GetServerUri(): Uri {
    method GetTitle (line 55) | public GetTitle(): string {
    method resourceUri (line 87) | get resourceUri(): Uri { return this._uri; }
    method decorations (line 88) | get decorations(): SourceControlResourceDecorations {
    method command (line 93) | get command(): Command {

FILE: src/tfvc/scm/resourcegroups.ts
  method id (line 11) | get id(): string { return this._id; }
  method label (line 12) | get label(): string { return this._label; }
  method resources (line 13) | get resources(): Resource[] { return this._resources; }
  method constructor (line 15) | public constructor(private _id: string,
  class ConflictsGroup (line 21) | class ConflictsGroup extends ResourceGroup {
    method constructor (line 24) | constructor(resources: Resource[]) {
  class IncludedGroup (line 29) | class IncludedGroup extends ResourceGroup {
    method constructor (line 32) | constructor(resources: Resource[]) {
  class ExcludedGroup (line 37) | class ExcludedGroup extends ResourceGroup {
    method constructor (line 40) | constructor(resources: Resource[]) {

FILE: src/tfvc/scm/status.ts
  function GetStatuses (line 7) | function GetStatuses(statusText: string): Status[] {
  type Status (line 33) | enum Status {
  type ConflictType (line 46) | enum ConflictType {

FILE: src/tfvc/scm/tfvccontentprovider.ts
  class TfvcContentProvider (line 14) | class TfvcContentProvider {
    method onDidChange (line 20) | get onDidChange(): Event<Uri> { return this._onDidChangeEmitter.event; }
    method constructor (line 22) | constructor(repository: TfvcRepository, rootPath: string, onTfvcChange...
    method fireChangeEvents (line 31) | private fireChangeEvents(): void {
    method provideTextDocumentContent (line 39) | async provideTextDocumentContent(uri: Uri): Promise<string> {
    method dispose (line 64) | dispose(): void {

FILE: src/tfvc/tfcommandlinerunner.ts
  class TfCommandLineRunner (line 29) | class TfCommandLineRunner {
    method CreateRepository (line 33) | public static CreateRepository(serverContext: TeamServerContext, repos...
    method GetCommandLine (line 38) | public static GetCommandLine(localPath?: string): ITfCommandLine {
    method CheckVersion (line 98) | public static CheckVersion(tfvc: ITfCommandLine, version: string): void {
    method Exec (line 127) | public static async Exec(tfvc: ITfCommandLine, cwd: string, args: IArg...
    method DisposeStatics (line 145) | public static DisposeStatics() {
    method run (line 165) | private static async run(tfvc: ITfCommandLine, args: IArgumentProvider...
    method getMatchingTfInstance (line 187) | private static async getMatchingTfInstance(tfvc: ITfCommandLine, optio...
    method startNewTfInstance (line 200) | private static async startNewTfInstance(tfvc: ITfCommandLine, options:...
    method optionsMatch (line 208) | private static optionsMatch(options1: any, options2: any): boolean {
    method spawn (line 212) | private static async spawn(location: string, options: any): Promise<cp...
    method runCommand (line 226) | private static async runCommand(argsForStandardInput: string, child: c...

FILE: src/tfvc/tfvc-extension.ts
  class TfvcExtension (line 28) | class TfvcExtension  {
    method constructor (line 32) | constructor(manager: ExtensionManager) {
    method Checkin (line 36) | public async Checkin(): Promise<void> {
    method Delete (line 59) | public async Delete(uri?: Uri): Promise<void> {
    method Exclude (line 85) | public async Exclude(resources?: Resource[]): Promise<void> {
    method Include (line 100) | public async Include(resources?: Resource[]): Promise<void> {
    method Open (line 148) | public async Open(resource?: Resource): Promise<void> {
    method OpenDiff (line 172) | public async OpenDiff(resource?: Resource): Promise<void> {
    method OpenFile (line 182) | public async OpenFile(resource?: Resource): Promise<void> {
    method Refresh (line 192) | public async Refresh(): Promise<void> {
    method Rename (line 203) | public async Rename(uri?: Uri): Promise<void> {
    method Resolve (line 232) | public async Resolve(resource: Resource, autoResolveType: AutoResolveT...
    method ShowOutput (line 252) | public async ShowOutput(): Promise<void> {
    method Sync (line 260) | public async Sync(): Promise<void> {
    method Undo (line 275) | public async Undo(resources?: Resource[]): Promise<void> {
    method UndoAll (line 305) | public async UndoAll(): Promise<void> {
    method ViewHistory (line 326) | public async ViewHistory(): Promise<void> {
    method displayErrors (line 371) | private async displayErrors(funcToTry: (prefix) => Promise<void>, pref...
    method InitializeClients (line 402) | public async InitializeClients(repoType: RepositoryType): Promise<void> {
    method showRepositoryHistory (line 412) | private showRepositoryHistory(): void {
    method dispose (line 419) | dispose() {

FILE: src/tfvc/tfvcerror.ts
  class TfvcError (line 11) | class TfvcError {
    method CreateArgumentMissingError (line 21) | public static CreateArgumentMissingError(argumentName: string): TfvcEr...
    method CreateInvalidStateError (line 32) | public static CreateInvalidStateError(): TfvcError {
    method CreateUnknownError (line 39) | public static CreateUnknownError(err: Error) {
    method constructor (line 47) | public constructor(data: ITfvcErrorData) {
    method toString (line 68) | public toString(): string {
  class TfvcErrorCodes (line 83) | class TfvcErrorCodes {
    method MissingArgument (line 84) | public static get MissingArgument(): string { return "MissingArgument"; }
    method AuthenticationFailed (line 85) | public static get AuthenticationFailed(): string { return "Authenticat...
    method NotAuthorizedToAccess (line 86) | public static get NotAuthorizedToAccess(): string { return "NotAuthori...
    method NotATfvcRepository (line 87) | public static get NotATfvcRepository(): string { return "NotATfvcRepos...
    method NotAnEnuTfCommandLine (line 88) | public static get NotAnEnuTfCommandLine(): string { return "NotAnEnuTf...
    method LocationMissing (line 89) | public static get LocationMissing(): string { return "TfvcLocationMiss...
    method NotFound (line 90) | public static get NotFound(): string { return "TfvcNotFound"; }
    method MinVersionWarning (line 91) | public static get MinVersionWarning(): string { return "TfvcMinVersion...
    method RepositoryNotFound (line 92) | public static get RepositoryNotFound(): string { return "RepositoryNot...
    method FileNotInMappings (line 93) | public static get FileNotInMappings(): string { return "FileNotInMappi...
    method FileNotInWorkspace (line 94) | public static get FileNotInWorkspace(): string { return "FileNotInWork...
    method InInvalidState (line 95) | public static get InInvalidState(): string { return "TfvcInInvalidStat...
    method NoItemsMatch (line 96) | public static get NoItemsMatch(): string { return "TfvcNoItemsMatch"; }
    method UnknownError (line 97) | public static get UnknownError(): string { return "UnknownError"; }
    method WorkspaceNotKnownToClc (line 98) | public static get WorkspaceNotKnownToClc(): string { return "Workspace...

FILE: src/tfvc/tfvcoutput.ts
  class TfvcOutput (line 9) | class TfvcOutput {
    method CreateChannel (line 12) | public static async CreateChannel(disposables: Disposable[]): Promise<...
    method AppendLine (line 23) | public static AppendLine(line: string) {
    method Show (line 29) | public static Show() {

FILE: src/tfvc/tfvcrepository.ts
  class TfvcRepository (line 33) | class TfvcRepository {
    method constructor (line 42) | public constructor(serverContext: TeamServerContext, tfCommandLine: IT...
    method TfvcLocation (line 57) | public get TfvcLocation(): string {
    method HasContext (line 61) | public get HasContext(): boolean {
    method IsExe (line 65) | public get IsExe(): boolean {
    method Path (line 69) | public get Path(): string {
    method RestrictWorkspace (line 73) | public get RestrictWorkspace(): boolean {
    method Add (line 77) | public async Add(itemPaths: string[]): Promise<string[]> {
    method Checkin (line 83) | public async Checkin(files: string[], comment: string, workItemIds: nu...
    method Delete (line 89) | public async Delete(itemPaths: string[]): Promise<string[]> {
    method FindConflicts (line 95) | public async FindConflicts(itemPath?: string): Promise<IConflict[]> {
    method FindWorkspace (line 101) | public async FindWorkspace(localPath: string): Promise<IWorkspace> {
    method GetInfo (line 107) | public async GetInfo(itemPaths: string[]): Promise<IItemInfo[]> {
    method GetFileContent (line 113) | public async GetFileContent(itemPath: string, versionSpec?: string): P...
    method GetStatus (line 119) | public async GetStatus(ignoreFiles?: boolean): Promise<IPendingChange[...
    method Rename (line 129) | public async Rename(sourcePath: string, destinationPath: string): Prom...
    method ResolveConflicts (line 135) | public async ResolveConflicts(itemPaths: string[], autoResolveType: Au...
    method Sync (line 141) | public async Sync(itemPaths: string[], recursive: boolean): Promise<IS...
    method Undo (line 147) | public async Undo(itemPaths: string[]): Promise<string[]> {
    method CheckVersion (line 153) | public async CheckVersion(): Promise<string> {
    method RunCommand (line 166) | public async RunCommand<T>(cmd: ITfvcCommand<T>): Promise<T> {
    method exec (line 182) | private async exec(args: IArgumentProvider, options: any = {}): Promis...

FILE: src/tfvc/tfvcscmprovider.ts
  class TfvcSCMProvider (line 29) | class TfvcSCMProvider {
    method constructor (line 39) | constructor(extensionManager: ExtensionManager) {
    method ClearCheckinMessage (line 44) | public static ClearCheckinMessage(): void {
    method GetCheckinInfo (line 48) | public static GetCheckinInfo(): ICheckinInfo {
    method getWorkItemIdsFromMessage (line 76) | private static getWorkItemIdsFromMessage(message: string) {
    method Exclude (line 96) | public static async Exclude(paths: string[]): Promise<void> {
    method Refresh (line 102) | public static async Refresh(): Promise<void> {
    method Unexclude (line 108) | public static async Unexclude(paths: string[]): Promise<void> {
    method Initialize (line 119) | public async Initialize(): Promise<void> {
    method onDidModelChange (line 142) | private onDidModelChange(): void {
    method Reinitialize (line 153) | public async Reinitialize(): Promise<void> {
    method setup (line 158) | private async setup(): Promise<void> {
    method cleanup (line 210) | private cleanup() {
    method onDidChange (line 224) | get onDidChange(): Event<this> {
    method count (line 228) | public get count(): number {
    method dispose (line 233) | dispose(): void {
    method HasItems (line 245) | public static HasItems(): boolean {
    method GetLeftResource (line 258) | public static  GetLeftResource(resource: Resource): Uri {
    method GetRightResource (line 271) | public static GetRightResource(resource: Resource): Uri {
    method getProviderInstance (line 280) | private static getProviderInstance(): TfvcSCMProvider {
    method OpenDiff (line 290) | public static async OpenDiff(resource: Resource): Promise<void> {

FILE: src/tfvc/tfvcsettings.ts
  class TfvcSettings (line 13) | class TfvcSettings extends BaseSettings {
    method constructor (line 18) | constructor() {
    method Location (line 34) | public get Location(): string {
    method Proxy (line 38) | public get Proxy(): string {
    method RestrictWorkspace (line 42) | public get RestrictWorkspace(): boolean {
  class SettingNames (line 47) | class SettingNames {
    method Location (line 48) | public static get Location(): string { return "tfvc.location"; }
    method Proxy (line 49) | public static get Proxy(): string { return "tfvc.proxy"; }
    method RestrictWorkspace (line 50) | public static get RestrictWorkspace(): string { return "tfvc.restrictW...

FILE: src/tfvc/tfvcversion.ts
  class TfvcVersion (line 10) | class TfvcVersion {
    method FromString (line 18) | public static FromString(version: string): TfvcVersion {
    method Compare (line 27) | public static Compare(version1: TfvcVersion, version2: TfvcVersion): n...
    method constructor (line 40) | public constructor(major: number, minor: number, revision: number, bui...
    method Major (line 47) | public get Major(): number { return this._major; }
    method Minor (line 48) | public get Minor(): number { return this._minor; }
    method Revision (line 49) | public get Revision(): number { return this._revision; }
    method Build (line 50) | public get Build(): string { return this._build; }
    method ToString (line 52) | public ToString(): string {

FILE: src/tfvc/uihelper.ts
  class UIHelper (line 14) | class UIHelper {
    method ChoosePendingChange (line 15) | public static async ChoosePendingChange(changes: IPendingChange[]): Pr...
    method ShowSyncResults (line 53) | public static async ShowSyncResults(syncResults: ISyncResults, showPop...
    method isSyncError (line 82) | private static isSyncError(type: SyncType): boolean {
    method GetDisplayTextForSyncType (line 97) | public static GetDisplayTextForSyncType(type: SyncType): string {
    method GetDisplayTextForAutoResolveType (line 109) | public static GetDisplayTextForAutoResolveType(type: AutoResolveType):...
    method GetFileName (line 121) | public static GetFileName(change: IPendingChange): string {
    method GetRelativePath (line 130) | public static GetRelativePath(change: IPendingChange): string {
    method PromptForConfirmation (line 138) | public static async PromptForConfirmation(message: string, okButtonTex...

FILE: src/tfvc/util.ts
  function log (line 10) | function log(...args: any[]): void {
  type IDisposable (line 14) | interface IDisposable {
  function dispose (line 18) | function dispose<T extends IDisposable>(disposables: T[]): T[] {
  function toDisposable (line 23) | function toDisposable(dispose: () => void): IDisposable {
  function combinedDisposable (line 27) | function combinedDisposable(disposables: IDisposable[]): IDisposable {
  function mapEvent (line 31) | function mapEvent<I, O>(event: Event<I>, map: (i: I) => O): Event<O> {
  function filterEvent (line 35) | function filterEvent<T>(event: Event<T>, filter: (e: T) => boolean): Eve...
  function anyEvent (line 39) | function anyEvent<T>(...events: Event<T>[]): Event<T> {
  function done (line 43) | function done<T>(promise: Promise<T>): Promise<void> {
  function once (line 47) | function once<T>(event: Event<T>): Event<T> {
  function eventToPromise (line 61) | function eventToPromise<T>(event: Event<T>): Promise<T> {

FILE: test-integration/helpers-integration/mocks.ts
  class Mocks (line 11) | class Mocks {
    method TeamServerContext (line 13) | public static TeamServerContext(repositoryUrl: string): TeamServerCont...
    method RepositoryInfo (line 17) | public static RepositoryInfo(): RepositoryInfo {

FILE: test-integration/helpers-integration/testsettings.ts
  class TestSettings (line 7) | class TestSettings {
    method SuiteTimeout (line 8) | public static get SuiteTimeout(): number {
    method TestTimeout (line 13) | public static get TestTimeout(): number {
    method Password (line 18) | public static get Password(): string {
    method SettingsPassword (line 30) | public static get SettingsPassword(): string {
    method Account (line 34) | public static get Account(): string {
    method AccountUrl (line 39) | public static get AccountUrl(): string {
    method AccountUser (line 44) | public static get AccountUser(): string {
    method BuildDefinitionId (line 49) | public static get BuildDefinitionId(): number {
    method BuildId (line 54) | public static get BuildId(): number {
    method CollectionName (line 59) | public static get CollectionName(): string {
    method RemoteRepositoryUrl (line 64) | public static get RemoteRepositoryUrl(): string {
    method RemoteTfvcRepositoryUrl (line 69) | public static get RemoteTfvcRepositoryUrl(): string {
    method RepositoryId (line 74) | public static get RepositoryId(): string {
    method RepositoryName (line 79) | public static get RepositoryName(): string {
    method TeamProject (line 84) | public static get TeamProject(): string {
    method WorkItemId (line 89) | public static get WorkItemId(): number {
    method WorkItemQueryId (line 94) | public static get WorkItemQueryId(): string {
    method WorkItemLinkQueryPath (line 99) | public static get WorkItemLinkQueryPath(): string {
    method WorkItemQueryPath (line 104) | public static get WorkItemQueryPath(): string {
    method WorkItemTwoHundredTasksQueryPath (line 109) | public static get WorkItemTwoHundredTasksQueryPath(): string {
    method WorkItemZeroResultsQueryPath (line 114) | public static get WorkItemZeroResultsQueryPath(): string {
    method ProjectGuid (line 119) | public static get ProjectGuid(): string {
    method CollectionGuid (line 124) | public static get CollectionGuid(): string {

FILE: test/contexts/contexthelper.ts
  class SettingsMock (line 10) | class SettingsMock implements ISettings {
    method constructor (line 12) | constructor(public AppInsightsEnabled: boolean, public AppInsightsKey:...
Condensed preview — 168 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,137K chars).
[
  {
    "path": ".gitattributes",
    "chars": 85,
    "preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n"
  },
  {
    "path": ".gitignore",
    "chars": 60,
    "preview": "node_modules/\nout/\n*.vsix\nteam-extension.log\n*.zip\n.taskkey\n"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 1239,
    "preview": "// A launch configuration that compiles the extension and then opens it inside a new window\n// \"preLaunchTask\": \"npm\"\n{\n"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 428,
    "preview": "// Place your settings in this file to overwrite default and user settings.\n{\n\t\"files.exclude\": {\n\t\t\"out\": false // set "
  },
  {
    "path": ".vscode/tasks.json",
    "chars": 780,
    "preview": "// Available variables which can be used inside of strings.\n// ${workspaceRoot}: the root folder of the team\n// ${file}:"
  },
  {
    "path": ".vscodeignore",
    "chars": 211,
    "preview": ".vscode/**\ntypings/**\nout/test/**\nout/test-integration/**\nout/results/**\ntest/**\ntest-integration/**\nsrc/**\n**/*.map\n.gi"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 53608,
    "preview": "\n\n## [v1.161.1](https://github.com/microsoft/azure-repos-vscode/tree/v1.161.1) (2020-09-04)\n\nThe Azure Repos VS Code ext"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 6894,
    "preview": "# Azure Repos Extension Contributor Guide\nThe instructions below will help you set up your development environment to co"
  },
  {
    "path": "DEPRECATED.md",
    "chars": 2233,
    "preview": "# Sunsetting the Azure Repos VS Code extension\n\nWe're sunsetting this Azure Repos VS Code extension.\nOn 2020-11-06 (Nov "
  },
  {
    "path": "LICENSE.txt",
    "chars": 1146,
    "preview": "Azure Repos Extension for Visual Studio Code \n\nCopyright (c) Microsoft Corporation\n\nAll rights reserved. \n\nMIT License\n\n"
  },
  {
    "path": "README.md",
    "chars": 19574,
    "preview": "# Azure Repos Extension for Visual Studio Code\n\n**DEPRECATION NOTICE**:\nThis extension is no longer receiving updates.\n["
  },
  {
    "path": "TFVC_README.md",
    "chars": 23234,
    "preview": "# Team Foundation Version Control (TFVC) Support\n\nThis extension provides TFVC support by way of the Source Control View"
  },
  {
    "path": "ThirdPartyNotices.txt",
    "chars": 22299,
    "preview": "\nTHIRD-PARTY SOFTWARE NOTICES AND INFORMATION\nDo Not Translate or Localize\n\nAzure Repos Extension for Visual Studio Code"
  },
  {
    "path": "gulpfile.js",
    "chars": 6861,
    "preview": "'use strict';\n\nvar gulp  = require('gulp'),\n    mocha = require('gulp-mocha'),\n    gutil = require('gulp-util');\nvar exe"
  },
  {
    "path": "package.json",
    "chars": 15015,
    "preview": "{\n  \"name\": \"team\",\n  \"displayName\": \"Azure Repos\",\n  \"description\": \"Connect to Azure Repos and work with Git and Team "
  },
  {
    "path": "patches/vso-node-api/handlers/ntlm.js",
    "chars": 5553,
    "preview": "\"use strict\";\n// Copyright (c) Microsoft. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in th"
  },
  {
    "path": "src/clients/baseclient.ts",
    "chars": 2647,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/buildclient.ts",
    "chars": 6450,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/coreapiclient.ts",
    "chars": 1232,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/feedbackclient.ts",
    "chars": 2584,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/gitclient.ts",
    "chars": 9434,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/httpclient.ts",
    "chars": 7112,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/repositoryinfoclient.ts",
    "chars": 13079,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/soapclient.ts",
    "chars": 3489,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/teamservicesclient.ts",
    "chars": 2351,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/tfscatalogsoapclient.ts",
    "chars": 47393,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/clients/witclient.ts",
    "chars": 15233,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/contexts/externalcontext.ts",
    "chars": 2807,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/contexts/gitcontext.ts",
    "chars": 6946,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/contexts/repocontextfactory.ts",
    "chars": 2915,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/contexts/repositorycontext.ts",
    "chars": 966,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/contexts/servercontext.ts",
    "chars": 1983,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/contexts/tfvccontext.ts",
    "chars": 3784,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/credential.ts",
    "chars": 943,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/credentialstore.ts",
    "chars": 4948,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/interfaces/icredentialstore.ts",
    "chars": 921,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/linux/file-token-storage.ts",
    "chars": 2849,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/linux/linux-file-api.ts",
    "chars": 6292,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/osx/osx-keychain-api.ts",
    "chars": 8225,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/osx/osx-keychain-parser.js",
    "chars": 3948,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/osx/osx-keychain.js",
    "chars": 3752,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/win32/win-credstore-api.ts",
    "chars": 6308,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/win32/win-credstore-parser.js",
    "chars": 2841,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/credentialstore/win32/win-credstore.js",
    "chars": 4119,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/extension.ts",
    "chars": 6748,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/extensionmanager.ts",
    "chars": 34557,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/constants.ts",
    "chars": 15265,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/credentialmanager.ts",
    "chars": 4111,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/logger.ts",
    "chars": 5404,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/repoutils.ts",
    "chars": 4758,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/settings.ts",
    "chars": 5829,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/strings.ts",
    "chars": 9891,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/urlbuilder.ts",
    "chars": 3134,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/useragentprovider.ts",
    "chars": 1121,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/utils.ts",
    "chars": 5611,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/vscodeutils.interfaces.ts",
    "chars": 654,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/helpers/vscodeutils.ts",
    "chars": 4075,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/info/credentialinfo.ts",
    "chars": 1959,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/info/extensionrequesthandler.ts",
    "chars": 3045,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/info/repositoryinfo.ts",
    "chars": 7262,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/info/userinfo.ts",
    "chars": 971,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/services/build.ts",
    "chars": 4132,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/services/coreapi.ts",
    "chars": 1192,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/services/gitvc.ts",
    "chars": 7102,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/services/telemetry.ts",
    "chars": 5602,
    "preview": "/*---------------------------------------------------------------------------------------------\r\n*  Copyright (c) Micros"
  },
  {
    "path": "src/services/workitemtracking.ts",
    "chars": 9340,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/team-extension.ts",
    "chars": 27601,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/add.ts",
    "chars": 3427,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/argumentbuilder.ts",
    "chars": 4741,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/checkin.ts",
    "chars": 4135,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/commandhelper.ts",
    "chars": 9858,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/delete.ts",
    "chars": 3723,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/findconflicts.ts",
    "chars": 5645,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/findworkspace.ts",
    "chars": 11981,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/getfilecontent.ts",
    "chars": 3410,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/getinfo.ts",
    "chars": 5848,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/getversion.ts",
    "chars": 3889,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/rename.ts",
    "chars": 3472,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/resolveconflicts.ts",
    "chars": 3642,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/status.ts",
    "chars": 10565,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/sync.ts",
    "chars": 8448,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/commands/undo.ts",
    "chars": 4213,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/interfaces.ts",
    "chars": 3019,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/scm/commithoverprovider.ts",
    "chars": 3463,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/scm/decorationprovider.ts",
    "chars": 3279,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/scm/model.ts",
    "chars": 8833,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/scm/resource.ts",
    "chars": 4180,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/scm/resourcegroups.ts",
    "chars": 1432,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/scm/status.ts",
    "chars": 1623,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/scm/tfvccontentprovider.ts",
    "chars": 2805,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Micros"
  },
  {
    "path": "src/tfvc/tfcommandlinerunner.ts",
    "chars": 12649,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/tfvc-extension.ts",
    "chars": 19943,
    "preview": "/*---------------------------------------------------------------------------------------------\r\n*  Copyright (c) Micros"
  },
  {
    "path": "src/tfvc/tfvcerror.ts",
    "chars": 4085,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/tfvcoutput.ts",
    "chars": 1137,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/tfvcrepository.ts",
    "chars": 8378,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/tfvcscmprovider.ts",
    "chars": 11436,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/tfvcsettings.ts",
    "chars": 1990,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/tfvcversion.ts",
    "chars": 2281,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/uihelper.ts",
    "chars": 6132,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "src/tfvc/util.ts",
    "chars": 2206,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/contexts/contexthelper.ts",
    "chars": 973,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/contexts/externalcontext.test.ts",
    "chars": 6157,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/contexts/gitcontext.test.ts",
    "chars": 9066,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/contexts/servercontext.test.ts",
    "chars": 2184,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/contexts/testrepos/emptyconfig/dotgit/config",
    "chars": 157,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/githubrepo/dotgit/HEAD",
    "chars": 23,
    "preview": "ref: refs/heads/master\n"
  },
  {
    "path": "test/contexts/testrepos/githubrepo/dotgit/config",
    "chars": 363,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/gitrepo/dotgit/HEAD",
    "chars": 34,
    "preview": "ref: refs/heads/jeyou/approved-pr\n"
  },
  {
    "path": "test/contexts/testrepos/gitrepo/dotgit/config",
    "chars": 703,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/gitrepo/dotgit/refs/heads/jeyou/approved-pr",
    "chars": 41,
    "preview": "6af83646f6ff33f312489fe333746009dbd5a5a4\n"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-old-ssh/dotgit/HEAD",
    "chars": 23,
    "preview": "ref: refs/heads/master\n"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-old-ssh/dotgit/config",
    "chars": 365,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-old-ssh/dotgit/refs/heads/master",
    "chars": 41,
    "preview": "1f9e7da1c871e1b12df8ea4dc87e355152264eb8\n"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-ssh/dotgit/HEAD",
    "chars": 23,
    "preview": "ref: refs/heads/master\n"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-ssh/dotgit/config",
    "chars": 364,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-ssh/dotgit/refs/heads/master",
    "chars": 41,
    "preview": "1f9e7da1c871e1b12df8ea4dc87e355152264eb8\n"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-ssh.v3/dotgit/HEAD",
    "chars": 23,
    "preview": "ref: refs/heads/master\n"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-ssh.v3/dotgit/config",
    "chars": 344,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/gitrepo-ssh.v3/dotgit/refs/heads/master",
    "chars": 41,
    "preview": "2f9e7da1c871e1b12df8ea4dc87e355152264eb8\n"
  },
  {
    "path": "test/contexts/testrepos/tfsrepo/dotgit/HEAD",
    "chars": 23,
    "preview": "ref: refs/heads/master\n"
  },
  {
    "path": "test/contexts/testrepos/tfsrepo/dotgit/config",
    "chars": 348,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/tfsrepo/dotgit/refs/heads/master",
    "chars": 41,
    "preview": "5b2a2c0d7886e3f4ef2b29b8fd8254184c857371\n"
  },
  {
    "path": "test/contexts/testrepos/tfsrepo-ssh/dotgit/HEAD",
    "chars": 23,
    "preview": "ref: refs/heads/master\n"
  },
  {
    "path": "test/contexts/testrepos/tfsrepo-ssh/dotgit/config",
    "chars": 344,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/contexts/testrepos/tfsrepo-ssh/dotgit/refs/heads/master",
    "chars": 41,
    "preview": "1f9e7da1c871e1b12df8ea4dc87e355152264eb8\n"
  },
  {
    "path": "test/helpers/logger.test.ts",
    "chars": 2065,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/helpers/repoutils.test.ts",
    "chars": 12398,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/helpers/testrepos/gitreposubfolder/dotgit/config",
    "chars": 157,
    "preview": "[core]\n\trepositoryformatversion = 0\n\tfilemode = false\n\tbare = false\n\tlogallrefupdates = true\n\tsymlinks = false\n\tignoreca"
  },
  {
    "path": "test/helpers/testrepos/gitreposubfolder/folder/subfolder/README.md",
    "chars": 29,
    "preview": "Just an empty README.md file."
  },
  {
    "path": "test/helpers/urlbuilder.test.ts",
    "chars": 8727,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/helpers/utils.test.ts",
    "chars": 8807,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/index.ts",
    "chars": 1482,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/info/credentialinfo.test.ts",
    "chars": 3718,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/info/repositoryinfo.test.ts",
    "chars": 30031,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/info/userinfo.test.ts",
    "chars": 843,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/services/build.test.ts",
    "chars": 1787,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/services/gitvc.test.ts",
    "chars": 4359,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/services/workitemtracking.test.ts",
    "chars": 2997,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/add.test.ts",
    "chars": 10792,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/argumentbuilder.test.ts",
    "chars": 6516,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/checkin.test.ts",
    "chars": 10621,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/commandhelper.test.ts",
    "chars": 17520,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/delete.test.ts",
    "chars": 12462,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/findconflicts.test.ts",
    "chars": 12920,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/findworkspace.test.ts",
    "chars": 30999,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/getfilecontent.test.ts",
    "chars": 9667,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/getinfo.test.ts",
    "chars": 24850,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/getversion.test.ts",
    "chars": 8994,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/rename.test.ts",
    "chars": 12503,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/resolveconflicts.test.ts",
    "chars": 9988,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/status.test.ts",
    "chars": 21822,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/sync.test.ts",
    "chars": 27055,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/commands/undo.test.ts",
    "chars": 21006,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/scm/resourcegroup.test.ts",
    "chars": 1522,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/scm/status.test.ts",
    "chars": 2430,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/tfvcerror.test.ts",
    "chars": 6202,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test/tfvc/tfvcversion.test.ts",
    "chars": 4552,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/clients/teamservicesclient.integration.test.ts",
    "chars": 4962,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/contexts/servercontext.integration.test.ts",
    "chars": 1889,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/helpers/credentialmanager.test.ts",
    "chars": 6116,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/helpers-integration/mocks.ts",
    "chars": 2297,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/helpers-integration/testsettings.ts",
    "chars": 5242,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/index.ts",
    "chars": 1482,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/services/build.integration.test.ts",
    "chars": 5302,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/services/gitvc.integration.test.ts",
    "chars": 4568,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "test-integration/services/workitemtracking.integration.test.ts",
    "chars": 11455,
    "preview": "/*---------------------------------------------------------------------------------------------\n*  Copyright (c) Microso"
  },
  {
    "path": "tsconfig.json",
    "chars": 506,
    "preview": "{\n    \"compilerOptions\": {\n        \"module\": \"commonjs\",\n        \"target\": \"es6\",\n        \"outDir\": \"out\",\n        \"sour"
  },
  {
    "path": "tslint.json",
    "chars": 1660,
    "preview": "{\n  \"rules\": {\n    \"align\": [true,\n        \"parameters\",\n        \"arguments\",\n        \"statements\"\n    ],\n    \"arrow-par"
  }
]

About this extraction

This page contains the full source code of the microsoft/azure-repos-vscode GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 168 files (1.0 MB), approximately 244.4k tokens, and a symbol index with 863 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!