Skip to content

Commit ec3335a

Browse files
committed
Implicit navigation and better messages
1 parent 3a184d3 commit ec3335a

File tree

7 files changed

+58
-12
lines changed

7 files changed

+58
-12
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,5 +333,6 @@ ASALocalRun/
333333
# MFractors (Xamarin productivity tool) working folder
334334
.mfractor/
335335
secrets/
336-
src/aggregator-cli/function-bin.zip
336+
src/aggregator-cli/FunctionRuntime.zip
337337
*.exe
338+
*.diagsession

src/aggregator-cli/test/test2.rule

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ if (self.Parent != null)
1010
}
1111
else
1212
{
13-
message = "Parent was not closed";
13+
message = "Parent was already closed";
1414
}
1515
parent.Description = parent.Description + " aggregator was here.";
1616
}

src/aggregator-function/AzureFunctionHandler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public async Task<HttpResponseMessage> Run(HttpRequestMessage req)
3434
try
3535
{
3636
string rule = context.FunctionName;
37-
log.LogInformation($"Welcome to {rule}");
37+
log.LogInformation($"Welcome to rule '{rule}'");
3838
}
3939
catch (Exception ex)
4040
{
@@ -86,7 +86,7 @@ public async Task<HttpResponseMessage> Run(HttpRequestMessage req)
8686
}
8787
else
8888
{
89-
log.LogInformation($"Returning {execResult}");
89+
log.LogInformation($"Returning '{execResult}' from '{context.FunctionName}'");
9090

9191
var resp = new HttpResponseMessage(HttpStatusCode.OK)
9292
{
@@ -97,7 +97,7 @@ public async Task<HttpResponseMessage> Run(HttpRequestMessage req)
9797
}
9898
catch (Exception ex)
9999
{
100-
log.LogWarning($"Rule failed: {ex.Message}");
100+
log.LogWarning($"Rule '{context.FunctionName}' failed: {ex.Message}");
101101

102102
var resp = new HttpResponseMessage(HttpStatusCode.NotImplemented)
103103
{

src/aggregator-function/Engine/WorkItemStore.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ public IList<WorkItemWrapper> GetWorkItems(IEnumerable<WorkItemRelationWrapper>
6161
return GetWorkItems(ids);
6262
}
6363

64-
internal void SaveChanges()
64+
internal (int created, int updated) SaveChanges()
6565
{
66+
int created = 0;
67+
int updated = 0;
6668
foreach (var item in _context.Tracker.NewWorkItems)
6769
{
6870
_context.Logger.WriteInfo($"Creating a {item.WorkItemType} workitem in {item.TeamProject}");
@@ -71,6 +73,7 @@ internal void SaveChanges()
7173
item.TeamProject,
7274
item.WorkItemType
7375
);
76+
created++;
7477
}
7578

7679
foreach (var item in _context.Tracker.ChangedWorkItems)
@@ -80,7 +83,9 @@ internal void SaveChanges()
8083
item.Changes,
8184
item.Id.Value
8285
);
86+
updated++;
8387
}
88+
return (created, updated);
8489
}
8590
}
8691
}

src/aggregator-function/Engine/WorkItemWrapper.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public IEnumerable<WorkItemRelationWrapper> Relations
140140
}
141141
}
142142

143-
public IEnumerable<WorkItemRelationWrapper> Children
143+
public IEnumerable<WorkItemRelationWrapper> ChildrenLinks
144144
{
145145
get
146146
{
@@ -149,6 +149,15 @@ public IEnumerable<WorkItemRelationWrapper> Children
149149
}
150150
}
151151

152+
public IEnumerable<WorkItemWrapper> Children
153+
{
154+
get
155+
{
156+
var store = new WorkItemStore(_context);
157+
return store.GetWorkItems(ChildrenLinks);
158+
}
159+
}
160+
152161
public IEnumerable<WorkItemRelationWrapper> RelatedLinks
153162
{
154163
get
@@ -167,7 +176,7 @@ public IEnumerable<WorkItemRelationWrapper> Hyperlinks
167176
}
168177
}
169178

170-
public WorkItemRelationWrapper Parent
179+
public WorkItemRelationWrapper ParentLink
171180
{
172181
get
173182
{
@@ -177,6 +186,15 @@ public WorkItemRelationWrapper Parent
177186
}
178187
}
179188

189+
public WorkItemWrapper Parent
190+
{
191+
get
192+
{
193+
var store = new WorkItemStore(_context);
194+
return store.GetWorkItem(ParentLink);
195+
}
196+
}
197+
180198
public WorkItemId<int> Id
181199
{
182200
get;

src/aggregator-function/RuleWrapper.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,16 @@ internal async Task<string> Execute(string aggregatorVersion, dynamic data)
108108
logger.WriteInfo($"Rule succeeded, no return value");
109109
}
110110

111-
logger.WriteVerbose($"Post-execution, save all changes...");
112-
store.SaveChanges();
113-
logger.WriteInfo($"Changes saved to VSTS");
111+
logger.WriteVerbose($"Post-execution, save any change...");
112+
var saveRes = store.SaveChanges();
113+
if (saveRes.created + saveRes.updated > 0)
114+
{
115+
logger.WriteInfo($"Changes saved to VSTS: {saveRes.created} created, {saveRes.updated} updated.");
116+
}
117+
else
118+
{
119+
logger.WriteInfo($"No changes saved to VSTS.");
120+
}
114121

115122
return result.ReturnValue;
116123
}

src/aggregator-function/test/test.rule

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,20 @@ if (self.Parent != null)
1010
parent.Description = parent.Description + " aggregator was here.";
1111
}
1212
return $"Hello { self.WorkItemType } #{ self.Id } - { self.Title }!";
13-
*/
1413
return self.PreviousRevision.PreviousRevision.Description;
14+
*/
15+
if (self.ParentLink != null)
16+
{
17+
var parent = self.Parent;
18+
var children = parent.Children;
19+
if (children.All(c => c.State == "Closed"))
20+
{
21+
parent.State = "Closed";
22+
return "Had to close parent";
23+
} else {
24+
return "Not all children are closed";
25+
}
26+
//parent.Description = parent.Description + " aggregator was here.";
27+
} else {
28+
return "No parent!";
29+
}

0 commit comments

Comments
 (0)