ruby_vsts 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ # VSTS namespace
2
+ module VSTS
3
+ # Ancestor class for all VSTS models
4
+ class BaseModel
5
+ # Convert camel-case to underscore-case, ie. helloWorld to hello_world
6
+ def underscore(word)
7
+ word.to_s.gsub(/::/, '/')
8
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
9
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
10
+ .tr("-", "_")
11
+ .downcase
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ # VSTS namespace
2
+ module VSTS
3
+ # Change model
4
+ class Change < BaseModel
5
+ attr_accessor :change_type, :item
6
+
7
+ # Create new change instance from a hash
8
+ # See https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/changesets#get-list-of-changes-in-a-changeset
9
+ #
10
+ # @param h [Hash] change data as returned by the VSTS API
11
+ def initialize(h = {})
12
+ @change_type = h["changeType"]
13
+ @item = Item.new(h["item"])
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,76 @@
1
+ # VSTS namespace
2
+ module VSTS
3
+ # Changeset model
4
+ class Changeset < BaseModel
5
+ attr_accessor :id, :url, :author, :checked_in_by, :created_date, :comment
6
+
7
+ # Create new changeset instance from a hash
8
+ #
9
+ # @param h [Hash] changeset data as returned by the VSTS API
10
+ def initialize(h = {})
11
+ @id = h["changesetId"]
12
+ @url = h["url"]
13
+ @author = Identity.new(h["author"])
14
+ @checked_in_by = Identity.new(h["checkedInBy"])
15
+ @created_date = DateTime.rfc3339(h["createdDate"])
16
+ @comment = h["comment"]
17
+ @_changes = nil
18
+ end
19
+
20
+ # Get changes in the changeset
21
+ # See https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/changesets#get-list-of-changes-in-a-changeset
22
+ #
23
+ # @param opts [Hash]
24
+ # @return [array of Change] list of changes in the changeset
25
+ def changes(opts = {})
26
+ return @_changes if @_changes.instance_of?(Array)
27
+ urlparams = APIClient.build_params(opts, [["$", :top], ["$", :skip]])
28
+ resp = APIClient.get("/changesets/#{id}/changes", area: "tfvc", urlparams: urlparams)
29
+ @_changes = resp.parsed["value"].map { |o| Change.new(o) }
30
+ end
31
+
32
+ # List changesets
33
+ # See https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/changesets#get-list-of-changesets
34
+ #
35
+ # @param search_criteria [Hash]
36
+ # @return [array of Changeset] search results
37
+ def self.find_all(search_criteria = {})
38
+ urlparams = APIClient.build_params(
39
+ search_criteria,
40
+ [
41
+ ["searchCriteria.", :itemPath],
42
+ ["searchCriteria.", :version],
43
+ ["searchCriteria.", :versionType],
44
+ ["searchCriteria.", :versionOption],
45
+ ["searchCriteria.", :author],
46
+ ["searchCriteria.", :fromId],
47
+ ["searchCriteria.", :toId],
48
+ ["searchCriteria.", :fromDate],
49
+ ["searchCriteria.", :toDate],
50
+ ["$", :top],
51
+ ["$", :skip],
52
+ ["$", :orderBy],
53
+ :maxCommentLength
54
+ ]
55
+ )
56
+ resp = APIClient.get("/changesets", area: "tfvc", urlparams: urlparams)
57
+ resp.parsed["value"].map { |o| Changeset.new(o) }
58
+ end
59
+
60
+ # Find specific changeset by id
61
+ # See https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/changesets#get-a-changeset
62
+ #
63
+ # @param id [int] the changeset id
64
+ # @param opts [Hash] options
65
+ # @option opts [int] :maxCommentLength
66
+ # @option opts [int] :maxChangeCount
67
+ # @option opts [boolean] :includeDetails
68
+ # @option opts [boolean] :includeWorkItems
69
+ # @return [Changeset, nil] the changeset found or nil
70
+ def self.find(id, opts = {})
71
+ urlparams = APIClient.build_params(opts, [:includeDetails, :includeWorkItems, :maxCommentLength, :maxChangeCount])
72
+ resp = APIClient.get("/changesets/#{id}", area: "tfvc", urlparams: urlparams)
73
+ Changeset.new(resp.parsed)
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,19 @@
1
+ # VSTS namespace
2
+ module VSTS
3
+ # Configuration class for ruby_vsts
4
+ class Configuration
5
+ attr_accessor :personal_access_token
6
+ attr_accessor :base_url, :collection, :team_project, :area, :api_version
7
+ attr_accessor :debug
8
+
9
+ def initialize
10
+ @personal_access_token = ""
11
+ @base_url = ""
12
+ @collection = "DefaultCollection"
13
+ @team_project = nil
14
+ @area = nil
15
+ @api_version = "1.0"
16
+ @debug = true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # VSTS namespace
2
+ module VSTS
3
+ # User (person) model
4
+ class Identity < BaseModel
5
+ attr_accessor :id, :display_name, :unique_name, :url, :image_url
6
+
7
+ # Create Identity from allowed hash values
8
+ def initialize(identity_hash = {})
9
+ identity_hash.select! { |k, _v| ["id", "displayName", "uniqueName", "url", "imageUrl"].include?(k) }
10
+ identity_hash.each do |k, v|
11
+ usk = underscore(k)
12
+ public_send("#{usk}=", v)
13
+ end
14
+ end
15
+ end
16
+ end
data/lib/vsts/item.rb ADDED
@@ -0,0 +1,34 @@
1
+ # VSTS namespace
2
+ module VSTS
3
+ # Item model
4
+ class Item < BaseModel
5
+ attr_accessor :version, :path, :url
6
+
7
+ # Create new item instance from a hash
8
+ # See https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/changesets#get-list-of-changes-in-a-changeset
9
+ #
10
+ # @param h [Hash] item data as returned by the VSTS API
11
+ def initialize(h = {})
12
+ @version = h["version"]
13
+ @path = h["path"]
14
+ @url = h["url"]
15
+ end
16
+
17
+ # Download TFVC item (ie. the file itself)
18
+ # See https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/items#get-a-file
19
+ # See https://www.visualstudio.com/en-us/docs/integrate/api/tfvc/items#get-a-specific-version
20
+ #
21
+ # @param opts [Hash] options
22
+ # @option opts [Symbol] :versionType requested version type (the version parameter is the version of this);
23
+ # can be :branch, :changeset, :shelveset, :change, :date, :mergeSource, :latest
24
+ # @option opts [int] :version the requested version number
25
+ # @option opts [Symbol, nil] :versionOptions can be specified as :previous to get the previous version to the one specified
26
+ # @return [String] the downloaded file contents
27
+ def get(opts = {})
28
+ urlparams = APIClient.build_params(opts, [:versionType, :version, :versionOptions])
29
+ urlparams[:path] = @path
30
+ resp = APIClient.get("/items", area: "tfvc", urlparams: urlparams)
31
+ resp.body
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module VSTS
2
+ VERSION = '0.1.1'.freeze
3
+ end
data/ruby_vsts.gemspec ADDED
@@ -0,0 +1,36 @@
1
+ basedir = File.expand_path(File.dirname(__FILE__))
2
+ require "#{basedir}/lib/vsts/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'ruby_vsts'
6
+ s.version = VSTS::VERSION
7
+ s.summary = 'An unofficial Microsoft Visual Studio Team Services (VSTS) API client in Ruby'
8
+ s.description = <<-ENDOFDESC
9
+ An API client to the Microsoft Visual Studio online Rest APIs. It can connect to VSTS via the public API
10
+ and query VSTS with a personal access token. May also work with TFS.
11
+ ENDOFDESC
12
+ s.author = 'Gabor Lengyel'
13
+ s.email = 'ruby_vsts@prodexity.com'
14
+ s.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
15
+ s.homepage = 'https://github.com/prodexity/ruby_vsts/'
16
+ s.license = 'MIT'
17
+
18
+ # s.test_files = s.files.grep(%r{^(test|spec|features)/})
19
+ # s.require_paths = %w(lib)
20
+
21
+ s.add_runtime_dependency 'rest-client', '~> 2.0'
22
+
23
+ s.add_development_dependency 'bundler', '~> 1.14'
24
+ s.add_development_dependency 'rake', '~> 12.0'
25
+ s.add_development_dependency 'rspec', '~> 3.5'
26
+ s.add_development_dependency 'webmock', '~> 3.0'
27
+ s.add_development_dependency 'simplecov', '~> 0.13'
28
+ s.add_development_dependency 'simplecov-json', '~> 0.2'
29
+ s.add_development_dependency 'rubocop', '~> 0.48'
30
+ s.add_development_dependency 'rubocop-rspec', '~> 1.15'
31
+ s.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
32
+ s.add_development_dependency 'yard', '~> 0.9'
33
+
34
+ s.cert_chain = ['certs/ruby_vsts-gem-public_cert.pem']
35
+ s.signing_key = File.expand_path("~/.ssh/ruby_vsts-gem-private_key.pem") if $PROGRAM_NAME.end_with?("gem")
36
+ end
@@ -0,0 +1,36 @@
1
+ {
2
+ "changesetId": 16,
3
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/16",
4
+ "author": {
5
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
6
+ "displayName": "Chuck Reinhart",
7
+ "uniqueName": "fabrikamfiber3@hotmail.com",
8
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
9
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
10
+ },
11
+ "checkedInBy": {
12
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
13
+ "displayName": "Chuck Reinhart",
14
+ "uniqueName": "fabrikamfiber3@hotmail.com",
15
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
16
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
17
+ },
18
+ "createdDate": "2014-03-24T20:21:02.727Z",
19
+ "_links": {
20
+ "self": {
21
+ "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/16"
22
+ },
23
+ "changes": {
24
+ "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/16/changes"
25
+ },
26
+ "workItems": {
27
+ "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/16/workItems"
28
+ },
29
+ "author": {
30
+ "href": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
31
+ },
32
+ "checkedInBy": {
33
+ "href": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "count": 1,
3
+ "value": [
4
+ {
5
+ "item": {
6
+ "version": 16,
7
+ "path": "$/Fabrikam-Fiber-TFVC/AuthSample-dev/Code/AuthSample.cs",
8
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/items/%24/Fabrikam-Fiber-TFVC/AuthSample-dev/Code/AuthSample.cs?versionType=Changeset&version=16"
9
+ },
10
+ "changeType": "edit"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,362 @@
1
+ {
2
+ "count": 18,
3
+ "value": [
4
+ {
5
+ "changesetId": 18,
6
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/18",
7
+ "author": {
8
+ "id": "d6245f20-2af8-44f4-9451-8107cb2767db",
9
+ "displayName": "Normal Paulk",
10
+ "uniqueName": "fabrikamfiber16@hotmail.com",
11
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db",
12
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db"
13
+ },
14
+ "checkedInBy": {
15
+ "id": "d6245f20-2af8-44f4-9451-8107cb2767db",
16
+ "displayName": "Normal Paulk",
17
+ "uniqueName": "fabrikamfiber16@hotmail.com",
18
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db",
19
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db"
20
+ },
21
+ "createdDate": "2014-05-12T22:41:16.963Z",
22
+ "comment": "Dropping in new Java sample"
23
+ },
24
+ {
25
+ "changesetId": 17,
26
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/17",
27
+ "author": {
28
+ "id": "d6245f20-2af8-44f4-9451-8107cb2767db",
29
+ "displayName": "Normal Paulk",
30
+ "uniqueName": "fabrikamfiber16@hotmail.com",
31
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db",
32
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db"
33
+ },
34
+ "checkedInBy": {
35
+ "id": "d6245f20-2af8-44f4-9451-8107cb2767db",
36
+ "displayName": "Normal Paulk",
37
+ "uniqueName": "fabrikamfiber16@hotmail.com",
38
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db",
39
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db"
40
+ },
41
+ "createdDate": "2014-05-12T22:38:06.613Z",
42
+ "comment": "Initial checkin"
43
+ },
44
+ {
45
+ "changesetId": 16,
46
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/16",
47
+ "author": {
48
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
49
+ "displayName": "Chuck Reinhart",
50
+ "uniqueName": "fabrikamfiber3@hotmail.com",
51
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
52
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
53
+ },
54
+ "checkedInBy": {
55
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
56
+ "displayName": "Chuck Reinhart",
57
+ "uniqueName": "fabrikamfiber3@hotmail.com",
58
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
59
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
60
+ },
61
+ "createdDate": "2014-03-24T20:21:02.727Z"
62
+ },
63
+ {
64
+ "changesetId": 15,
65
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/15",
66
+ "author": {
67
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
68
+ "displayName": "Chuck Reinhart",
69
+ "uniqueName": "fabrikamfiber3@hotmail.com",
70
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
71
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
72
+ },
73
+ "checkedInBy": {
74
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
75
+ "displayName": "Chuck Reinhart",
76
+ "uniqueName": "fabrikamfiber3@hotmail.com",
77
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
78
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
79
+ },
80
+ "createdDate": "2014-03-24T17:37:04.993Z"
81
+ },
82
+ {
83
+ "changesetId": 14,
84
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/14",
85
+ "author": {
86
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
87
+ "displayName": "Chuck Reinhart",
88
+ "uniqueName": "fabrikamfiber3@hotmail.com",
89
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
90
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
91
+ },
92
+ "checkedInBy": {
93
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
94
+ "displayName": "Chuck Reinhart",
95
+ "uniqueName": "fabrikamfiber3@hotmail.com",
96
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
97
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
98
+ },
99
+ "createdDate": "2014-03-24T16:52:10.41Z",
100
+ "comment": "Branched from $/Fabrikam-Fiber-TFVC/AuthSample-dev"
101
+ },
102
+ {
103
+ "changesetId": 13,
104
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/13",
105
+ "author": {
106
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
107
+ "displayName": "Chuck Reinhart",
108
+ "uniqueName": "fabrikamfiber3@hotmail.com",
109
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
110
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
111
+ },
112
+ "checkedInBy": {
113
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
114
+ "displayName": "Chuck Reinhart",
115
+ "uniqueName": "fabrikamfiber3@hotmail.com",
116
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
117
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
118
+ },
119
+ "createdDate": "2014-03-24T16:48:58.047Z",
120
+ "comment": "delete branch"
121
+ },
122
+ {
123
+ "changesetId": 12,
124
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/12",
125
+ "author": {
126
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
127
+ "displayName": "Chuck Reinhart",
128
+ "uniqueName": "fabrikamfiber3@hotmail.com",
129
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
130
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
131
+ },
132
+ "checkedInBy": {
133
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
134
+ "displayName": "Chuck Reinhart",
135
+ "uniqueName": "fabrikamfiber3@hotmail.com",
136
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
137
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
138
+ },
139
+ "createdDate": "2014-03-24T16:46:48.387Z"
140
+ },
141
+ {
142
+ "changesetId": 11,
143
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/11",
144
+ "author": {
145
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
146
+ "displayName": "Chuck Reinhart",
147
+ "uniqueName": "fabrikamfiber3@hotmail.com",
148
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
149
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
150
+ },
151
+ "checkedInBy": {
152
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
153
+ "displayName": "Chuck Reinhart",
154
+ "uniqueName": "fabrikamfiber3@hotmail.com",
155
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
156
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
157
+ },
158
+ "createdDate": "2014-03-24T16:44:36.153Z",
159
+ "comment": "Branched from $/Fabrikam-Fiber-TFVC/AuthSample"
160
+ },
161
+ {
162
+ "changesetId": 10,
163
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/10",
164
+ "author": {
165
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
166
+ "displayName": "Chuck Reinhart",
167
+ "uniqueName": "fabrikamfiber3@hotmail.com",
168
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
169
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
170
+ },
171
+ "checkedInBy": {
172
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
173
+ "displayName": "Chuck Reinhart",
174
+ "uniqueName": "fabrikamfiber3@hotmail.com",
175
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
176
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
177
+ },
178
+ "createdDate": "2014-03-24T16:44:13.297Z",
179
+ "comment": "Branched from $/Fabrikam-Fiber-TFVC/AuthSample"
180
+ },
181
+ {
182
+ "changesetId": 9,
183
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/9",
184
+ "author": {
185
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
186
+ "displayName": "Chuck Reinhart",
187
+ "uniqueName": "fabrikamfiber3@hotmail.com",
188
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
189
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
190
+ },
191
+ "checkedInBy": {
192
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
193
+ "displayName": "Chuck Reinhart",
194
+ "uniqueName": "fabrikamfiber3@hotmail.com",
195
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
196
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
197
+ },
198
+ "createdDate": "2014-03-21T19:32:02.213Z",
199
+ "comment": "rename the code folder"
200
+ },
201
+ {
202
+ "changesetId": 8,
203
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/8",
204
+ "author": {
205
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
206
+ "displayName": "Chuck Reinhart",
207
+ "uniqueName": "fabrikamfiber3@hotmail.com",
208
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
209
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
210
+ },
211
+ "checkedInBy": {
212
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
213
+ "displayName": "Chuck Reinhart",
214
+ "uniqueName": "fabrikamfiber3@hotmail.com",
215
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
216
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
217
+ },
218
+ "createdDate": "2014-03-21T19:04:03.253Z",
219
+ "comment": "comments"
220
+ },
221
+ {
222
+ "changesetId": 7,
223
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/7",
224
+ "author": {
225
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
226
+ "displayName": "Chuck Reinhart",
227
+ "uniqueName": "fabrikamfiber3@hotmail.com",
228
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
229
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
230
+ },
231
+ "checkedInBy": {
232
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
233
+ "displayName": "Chuck Reinhart",
234
+ "uniqueName": "fabrikamfiber3@hotmail.com",
235
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
236
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
237
+ },
238
+ "createdDate": "2014-03-20T22:19:04.647Z",
239
+ "comment": "rename"
240
+ },
241
+ {
242
+ "changesetId": 6,
243
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/6",
244
+ "author": {
245
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
246
+ "displayName": "Chuck Reinhart",
247
+ "uniqueName": "fabrikamfiber3@hotmail.com",
248
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
249
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
250
+ },
251
+ "checkedInBy": {
252
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
253
+ "displayName": "Chuck Reinhart",
254
+ "uniqueName": "fabrikamfiber3@hotmail.com",
255
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
256
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
257
+ },
258
+ "createdDate": "2014-03-19T18:16:41.153Z",
259
+ "comment": "Get builds using basic auth"
260
+ },
261
+ {
262
+ "changesetId": 5,
263
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/5",
264
+ "author": {
265
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
266
+ "displayName": "Chuck Reinhart",
267
+ "uniqueName": "fabrikamfiber3@hotmail.com",
268
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
269
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
270
+ },
271
+ "checkedInBy": {
272
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
273
+ "displayName": "Chuck Reinhart",
274
+ "uniqueName": "fabrikamfiber3@hotmail.com",
275
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
276
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
277
+ },
278
+ "createdDate": "2014-03-19T17:23:59.697Z",
279
+ "comment": "generated app"
280
+ },
281
+ {
282
+ "changesetId": 4,
283
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/4",
284
+ "author": {
285
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
286
+ "displayName": "Chuck Reinhart",
287
+ "uniqueName": "fabrikamfiber3@hotmail.com",
288
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
289
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
290
+ },
291
+ "checkedInBy": {
292
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
293
+ "displayName": "Chuck Reinhart",
294
+ "uniqueName": "fabrikamfiber3@hotmail.com",
295
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
296
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
297
+ },
298
+ "createdDate": "2014-01-24T19:20:53.547Z",
299
+ "comment": "Check-in the Lab default template"
300
+ },
301
+ {
302
+ "changesetId": 3,
303
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/3",
304
+ "author": {
305
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
306
+ "displayName": "Chuck Reinhart",
307
+ "uniqueName": "fabrikamfiber3@hotmail.com",
308
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
309
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
310
+ },
311
+ "checkedInBy": {
312
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
313
+ "displayName": "Chuck Reinhart",
314
+ "uniqueName": "fabrikamfiber3@hotmail.com",
315
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
316
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
317
+ },
318
+ "createdDate": "2014-01-24T19:20:51.963Z",
319
+ "comment": "Checking in new Team Foundation Build Automation files."
320
+ },
321
+ {
322
+ "changesetId": 2,
323
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/2",
324
+ "author": {
325
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
326
+ "displayName": "Chuck Reinhart",
327
+ "uniqueName": "fabrikamfiber3@hotmail.com",
328
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
329
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
330
+ },
331
+ "checkedInBy": {
332
+ "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
333
+ "displayName": "Chuck Reinhart",
334
+ "uniqueName": "fabrikamfiber3@hotmail.com",
335
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
336
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
337
+ },
338
+ "createdDate": "2014-01-24T19:20:46.577Z",
339
+ "comment": "Created team project folder $/Fabrikam-Fiber-TFVC via the Team Project Creation ",
340
+ "commentTruncated": true
341
+ },
342
+ {
343
+ "changesetId": 1,
344
+ "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/1",
345
+ "author": {
346
+ "id": "47d25e84-de54-49ce-8f3d-351c77422775",
347
+ "displayName": "[DefaultCollection]\\Project Collection Service Accounts",
348
+ "uniqueName": "vstfs:///Framework/Generic/d81542e4-cdfa-4333-b082-1ae2d6c3ad16\\Project Collection Service Accounts",
349
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/47d25e84-de54-49ce-8f3d-351c77422775",
350
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=47d25e84-de54-49ce-8f3d-351c77422775"
351
+ },
352
+ "checkedInBy": {
353
+ "id": "47d25e84-de54-49ce-8f3d-351c77422775",
354
+ "displayName": "[DefaultCollection]\\Project Collection Service Accounts",
355
+ "uniqueName": "vstfs:///Framework/Generic/d81542e4-cdfa-4333-b082-1ae2d6c3ad16\\Project Collection Service Accounts",
356
+ "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/47d25e84-de54-49ce-8f3d-351c77422775",
357
+ "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=47d25e84-de54-49ce-8f3d-351c77422775"
358
+ },
359
+ "createdDate": "2014-01-24T06:20:55.477Z"
360
+ }
361
+ ]
362
+ }