Skip to content

Commit 1efa7b1

Browse files
Merge pull request #50 from spotify/redacted
Speed improvements and a new `fetchedFromCache` property
2 parents cea39d2 + a67766b commit 1efa7b1

File tree

17 files changed

+183
-38
lines changed

17 files changed

+183
-38
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ This script assumes that the `xclogparser` executable is installed and present i
4848

4949
>Note: Errors thrown in post-action run scripts are silenced, so it could be hard to notice simple mistakes.
5050
51+
>Note: Since Xcode 11, `xcodebuild` only generates the .xcactivitylog build logs when the option `--resultBundlePath`. If you're compiling with that command and not with Xcode, be sure to set that option to a valid path.
52+
5153
The run script is executed in a temporary directory by Xcode, so you may find it useful to immediately open the generated output with `open MyAppLogs` at the end of the script.
5254
The Finder will automatically open the output folder after a build completes and you can then view the generated HTML page that contains a nice visualization of your build! ✨
5355

Resources/css/styles.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,7 @@ main.main {
7373
color: gray;
7474
text-decoration: none;
7575
}
76+
77+
.xc-card-body {
78+
padding: .75em;
79+
}

Resources/index.html

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,23 @@
3636
<div class="col-md-2 col-sm-1">
3737
<div class="card xc-topboxes text-white bg-primary info-box">
3838
<div class="card-header" id="schema-title">Schema</div>
39-
<div class="card-body">
39+
<div class="xc-card-body card-body">
4040
<div id="schema" class="card-text"></div>
4141
</div> <!-- card body -->
4242
</div> <!-- card-->
4343
</div> <!-- col -->
4444
<div class="col-md-2 col-sm-1">
4545
<div id="status-box" class="card xc-topboxes text-white info-box">
4646
<div class="card-header">Build status</div>
47-
<div class="card-body">
47+
<div class="xc-card-body card-body">
4848
<div id="build-status" class="card-text"></div>
4949
</div> <!-- card body -->
5050
</div> <!-- card-->
5151
</div> <!-- col -->
5252
<div class="col-md-2 col-sm-1">
5353
<div class="card text-white xc-topboxes bg-info info-box">
5454
<div class="card-header">Build time</div>
55-
<div class="card-body">
55+
<div class="xc-card-body card-body">
5656
<div id="build-time" class="card-text"></div>
5757
</div> <!-- card-body -->
5858
</div> <!-- card -->
@@ -61,7 +61,7 @@
6161
<div class="col-md-2 col-sm-1">
6262
<div class="card text-white xc-topboxes bg-info info-box">
6363
<div class="card-header" id="targets-title">Number of targets</div>
64-
<div class="card-body">
64+
<div class="xc-card-body card-body">
6565
<div id="targets" class="card-text"></div>
6666
</div> <!-- card-body -->
6767
</div> <!-- card -->
@@ -70,17 +70,39 @@
7070
<div class="col-md-2 col-sm-1">
7171
<div class="card text-white xc-topboxes objc info-box">
7272
<div class="card-header">C files</div>
73-
<div class="card-body">
74-
<div id="c-files" class="card-text"></div>
73+
<div class="xc-card-body card-body">
74+
<div class="card-block">
75+
<div class="row">
76+
<div class="col">
77+
<div id="c-files-compiled" class="card-text"></div>
78+
</div>
79+
</div>
80+
<div class="row">
81+
<div class="col">
82+
<div id="c-files-total" class="card-text"></div>
83+
</div>
84+
</div>
85+
</div> <!-- card-block -->
7586
</div> <!-- card-body -->
7687
</div> <!-- card -->
7788
</div>
7889
<!--/.col-->
7990
<div class="col-md-2 col-sm-1">
8091
<div class="card text-white xc-topboxes swift info-box">
8192
<div class="card-header">Swift files</div>
82-
<div class="card-body">
83-
<div id="swift-files" class="card-text"></div>
93+
<div class="xc-card-body card-body">
94+
<div class="card-block">
95+
<div class="row">
96+
<div class="col">
97+
<div id="swift-files-compiled" class="card-text"></div>
98+
</div>
99+
</div>
100+
<div class="row">
101+
<div class="col">
102+
<div id="swift-files-total" class="card-text"></div>
103+
</div>
104+
</div>
105+
</div> <!-- card-block -->
84106
</div> <!-- card-body -->
85107
</div> <!-- card -->
86108
</div>

Resources/js/app.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,16 @@ function drawHeaders(target) {
9797
durationText += Math.round(duration.seconds()) + ' secs';
9898
document.getElementById('build-time').innerHTML = durationText;
9999
document.getElementById('targets').innerHTML = targets.length.toLocaleString('en');
100-
document.getElementById('c-files').innerHTML = cFiles.length.toLocaleString('en');
101-
document.getElementById('swift-files').innerHTML = swiftFiles.length.toLocaleString('en');
100+
const cCompiledFiles = cFiles.filter(function (file) {
101+
return file.fetchedFromCache == false;
102+
})
103+
const swiftCompiledFiles = swiftFiles.filter(function (file) {
104+
return file.fetchedFromCache == false;
105+
})
106+
document.getElementById('c-files-compiled').innerHTML = cCompiledFiles.length.toLocaleString('en') + ' compiled';
107+
document.getElementById('c-files-total').innerHTML = cFiles.length.toLocaleString('en') + ' total';
108+
document.getElementById('swift-files-compiled').innerHTML = swiftCompiledFiles.length.toLocaleString('en') + ' compiled';
109+
document.getElementById('swift-files-total').innerHTML = swiftFiles.length.toLocaleString('en') + ' total';
102110

103111
}
104112

Resources/js/step.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,15 @@ const timestampFormat = 'MMMM Do YYYY, h:mm:ss a';
4444

4545
showStep();
4646

47+
$(function () {
48+
$('[data-toggle="tooltip"]').tooltip()
49+
});
50+
4751
function showStep() {
4852
const step = loadStep();
4953
if (step != null) {
5054
$('#info-title').html(step.title);
55+
$('#info-cache').html(step.fetchedFromCache);
5156
$('#info-signature').html(step.signature);
5257
$('#info-arch').html(step.architecture);
5358
$('#info-url').html(step.documentURL);

Resources/step.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@
5555
<a id="info-url" href=""></a>
5656
</div>
5757
</div>
58+
<div class="row">
59+
<div class="col-sm-2">
60+
Fetched from cache
61+
</div>
62+
<div class="col-sm-10">
63+
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="right" title="If true, the target or file wasn't compiled but fetched from Xcode's internal cache">
64+
<div id="info-cache" href=""></div>
65+
</button>
66+
67+
</div>
68+
</div>
5869
<div class="row">
5970
<div class="col-sm-2">
6071
Duration

Sources/XCLogParser/activityparser/IDEActivityModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class IDEActivityLogSection: Encodable {
4242
public let messages: [IDEActivityLogMessage]
4343
public let wasCancelled: Bool
4444
public let isQuiet: Bool
45-
public let wasFetchedFromCache: Bool
45+
public var wasFetchedFromCache: Bool
4646
public let subtitle: String
4747
public let location: DVTDocumentLocation
4848
public let commandDetailDesc: String

Sources/XCLogParser/commands/Version.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ import Foundation
2121

2222
public struct Version {
2323

24-
public static let current = "0.2.0"
24+
public static let current = "0.2.1"
2525

2626
}

Sources/XCLogParser/generated/HtmlReporterResources.swift

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ main.main {
8282
text-decoration: none;
8383
}
8484
85+
.xc-card-body {
86+
padding: .75em;
87+
}
88+
8589
"""
8690

8791
public static let appJS =
@@ -185,8 +189,16 @@ function drawHeaders(target) {
185189
durationText += Math.round(duration.seconds()) + ' secs';
186190
document.getElementById('build-time').innerHTML = durationText;
187191
document.getElementById('targets').innerHTML = targets.length.toLocaleString('en');
188-
document.getElementById('c-files').innerHTML = cFiles.length.toLocaleString('en');
189-
document.getElementById('swift-files').innerHTML = swiftFiles.length.toLocaleString('en');
192+
const cCompiledFiles = cFiles.filter(function (file) {
193+
return file.fetchedFromCache == false;
194+
})
195+
const swiftCompiledFiles = swiftFiles.filter(function (file) {
196+
return file.fetchedFromCache == false;
197+
})
198+
document.getElementById('c-files-compiled').innerHTML = cCompiledFiles.length.toLocaleString('en') + ' compiled';
199+
document.getElementById('c-files-total').innerHTML = cFiles.length.toLocaleString('en') + ' total';
200+
document.getElementById('swift-files-compiled').innerHTML = swiftCompiledFiles.length.toLocaleString('en') + ' compiled';
201+
document.getElementById('swift-files-total').innerHTML = swiftFiles.length.toLocaleString('en') + ' total';
190202
191203
}
192204
@@ -621,23 +633,23 @@ public static let indexHTML =
621633
<div class="col-md-2 col-sm-1">
622634
<div class="card xc-topboxes text-white bg-primary info-box">
623635
<div class="card-header" id="schema-title">Schema</div>
624-
<div class="card-body">
636+
<div class="xc-card-body card-body">
625637
<div id="schema" class="card-text"></div>
626638
</div> <!-- card body -->
627639
</div> <!-- card-->
628640
</div> <!-- col -->
629641
<div class="col-md-2 col-sm-1">
630642
<div id="status-box" class="card xc-topboxes text-white info-box">
631643
<div class="card-header">Build status</div>
632-
<div class="card-body">
644+
<div class="xc-card-body card-body">
633645
<div id="build-status" class="card-text"></div>
634646
</div> <!-- card body -->
635647
</div> <!-- card-->
636648
</div> <!-- col -->
637649
<div class="col-md-2 col-sm-1">
638650
<div class="card text-white xc-topboxes bg-info info-box">
639651
<div class="card-header">Build time</div>
640-
<div class="card-body">
652+
<div class="xc-card-body card-body">
641653
<div id="build-time" class="card-text"></div>
642654
</div> <!-- card-body -->
643655
</div> <!-- card -->
@@ -646,7 +658,7 @@ public static let indexHTML =
646658
<div class="col-md-2 col-sm-1">
647659
<div class="card text-white xc-topboxes bg-info info-box">
648660
<div class="card-header" id="targets-title">Number of targets</div>
649-
<div class="card-body">
661+
<div class="xc-card-body card-body">
650662
<div id="targets" class="card-text"></div>
651663
</div> <!-- card-body -->
652664
</div> <!-- card -->
@@ -655,17 +667,39 @@ public static let indexHTML =
655667
<div class="col-md-2 col-sm-1">
656668
<div class="card text-white xc-topboxes objc info-box">
657669
<div class="card-header">C files</div>
658-
<div class="card-body">
659-
<div id="c-files" class="card-text"></div>
670+
<div class="xc-card-body card-body">
671+
<div class="card-block">
672+
<div class="row">
673+
<div class="col">
674+
<div id="c-files-compiled" class="card-text"></div>
675+
</div>
676+
</div>
677+
<div class="row">
678+
<div class="col">
679+
<div id="c-files-total" class="card-text"></div>
680+
</div>
681+
</div>
682+
</div> <!-- card-block -->
660683
</div> <!-- card-body -->
661684
</div> <!-- card -->
662685
</div>
663686
<!--/.col-->
664687
<div class="col-md-2 col-sm-1">
665688
<div class="card text-white xc-topboxes swift info-box">
666689
<div class="card-header">Swift files</div>
667-
<div class="card-body">
668-
<div id="swift-files" class="card-text"></div>
690+
<div class="xc-card-body card-body">
691+
<div class="card-block">
692+
<div class="row">
693+
<div class="col">
694+
<div id="swift-files-compiled" class="card-text"></div>
695+
</div>
696+
</div>
697+
<div class="row">
698+
<div class="col">
699+
<div id="swift-files-total" class="card-text"></div>
700+
</div>
701+
</div>
702+
</div> <!-- card-block -->
669703
</div> <!-- card-body -->
670704
</div> <!-- card -->
671705
</div>
@@ -910,6 +944,17 @@ public static let stepHTML =
910944
<a id="info-url" href=""></a>
911945
</div>
912946
</div>
947+
<div class="row">
948+
<div class="col-sm-2">
949+
Fetched from cache
950+
</div>
951+
<div class="col-sm-10">
952+
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="right" title="If true, the target or file wasn't compiled but fetched from Xcode's internal cache">
953+
<div id="info-cache" href=""></div>
954+
</button>
955+
956+
</div>
957+
</div>
913958
<div class="row">
914959
<div class="col-sm-2">
915960
Duration
@@ -1118,10 +1163,15 @@ const timestampFormat = 'MMMM Do YYYY, h:mm:ss a';
11181163
11191164
showStep();
11201165
1166+
$(function () {
1167+
$('[data-toggle="tooltip"]').tooltip()
1168+
});
1169+
11211170
function showStep() {
11221171
const step = loadStep();
11231172
if (step != null) {
11241173
$('#info-title').html(step.title);
1174+
$('#info-cache').html(step.fetchedFromCache);
11251175
$('#info-signature').html(step.signature);
11261176
$('#info-arch').html(step.architecture);
11271177
$('#info-url').html(step.documentURL);

Sources/XCLogParser/lexer/Lexer.swift

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ import Foundation
2222
public final class Lexer {
2323

2424
static let SLFHeader = "SLF"
25+
static let redactedTemplate = "/Users/<redacted>/"
2526

2627
let typeDelimiters: CharacterSet
2728
let filePath: String
2829
var classNames = [String]()
30+
var userDirToRedact: String?
2931

3032
lazy var userDirRegex: NSRegularExpression? = {
3133
do {
@@ -203,13 +205,19 @@ public final class Lexer {
203205
guard let regex = userDirRegex else {
204206
return string
205207
}
206-
207-
return regex.stringByReplacingMatches(in: string,
208-
options: .reportProgress,
209-
range: NSRange(location: 0, length: string.count),
210-
withTemplate: "/Users/<redacted>/")
208+
if let userDirToRedact = userDirToRedact {
209+
return string.replacingOccurrences(of: userDirToRedact, with: Self.redactedTemplate)
210+
} else {
211+
guard let firstMatch = regex.firstMatch(in: string,
212+
options: [],
213+
range: NSRange(location: 0, length: string.count)) else {
214+
return string
215+
}
216+
let userDir = string.substring(firstMatch.range)
217+
userDirToRedact = userDir
218+
return string.replacingOccurrences(of: userDir, with: Self.redactedTemplate)
219+
}
211220
}
212-
213221
}
214222

215223
extension Scanner {

0 commit comments

Comments
 (0)