Skip to content

Commit ad90b33

Browse files
committed
Initial file list stats on history view.
Based on kelan work
1 parent 8aa4333 commit ad90b33

File tree

5 files changed

+95
-22
lines changed

5 files changed

+95
-22
lines changed

GLFileView.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
- (NSString *)parseBlame:(NSString *)txt;
3131
+ (NSString *)parseHTML:(NSString *)txt;
3232
+ (NSString *)parseDiff:(NSString *)txt;
33-
+ (NSString *)parseDiffTree:(NSString *)txt;
33+
+ (NSString *)parseDiffTree:(NSString *)txt withStats:(NSMutableDictionary *)stats;
3434
+(BOOL)isStartDiff:(NSString *)line;
3535
+(BOOL)isStartBlock:(NSString *)line;
3636

GLFileView.m

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ - (void) showFile
9898
NSArray *files=[historyController.treeController selectedObjects];
9999
if ([files count]>0) {
100100
PBGitTree *file=[files objectAtIndex:0];
101-
101+
102102
NSString *fileTxt = @"";
103103
if(startFile==@"fileview"){
104104
fileTxt=[file textContents:&theError];
@@ -223,11 +223,21 @@ + (NSString *) parseHTML:(NSString *)txt
223223
return txt;
224224
}
225225

226-
+ (NSString *)parseDiffTree:(NSString *)txt
226+
+ (NSString *)parseDiffTree:(NSString *)txt withStats:(NSMutableDictionary *)stats
227227
{
228+
NSInteger granTotal=0;
229+
for(NSArray *stat in [stats allValues]){
230+
NSInteger add=[[stat objectAtIndex:0] integerValue];
231+
NSInteger rem=[[stat objectAtIndex:1] integerValue];
232+
NSInteger tot=add+rem;
233+
if(tot>granTotal)
234+
granTotal=tot;
235+
[stats setObject:[NSArray arrayWithObjects:[NSNumber numberWithInteger:add],[NSNumber numberWithInteger:rem],[NSNumber numberWithInteger:tot],nil] forKey:[stat objectAtIndex:2]];
236+
}
237+
228238
NSArray *lines = [txt componentsSeparatedByString:@"\n"];
229239
NSMutableString *res=[NSMutableString string];
230-
[res appendString:@"<ul>"];
240+
[res appendString:@"<table id='filelist'>"];
231241
int i;
232242
for (i=1; i<[lines count]; i++) {
233243
NSString *line=[lines objectAtIndex:i];
@@ -241,9 +251,22 @@ + (NSString *)parseDiffTree:(NSString *)txt
241251
txt=[NSString stringWithFormat:@"%@ -&gt; %@",file,[fileStatus objectAtIndex:2]];
242252
fileName=[fileStatus objectAtIndex:2];
243253
}
244-
[res appendString:[NSString stringWithFormat:@"<li><a class='%@' href='#%@' representedFile='%@'>%@</a></li>",status,file,fileName,txt]];
254+
255+
NSArray *stat=[stats objectForKey:fileName];
256+
NSInteger add=[[stat objectAtIndex:0] integerValue];
257+
NSInteger rem=[[stat objectAtIndex:1] integerValue];
258+
NSInteger tot=add+rem;
259+
260+
[res appendString:@"<tr><td class='name'>"];
261+
[res appendString:[NSString stringWithFormat:@"<a class='%@' href='#%@' representedFile='%@'>%@</a>",status,file,fileName,txt]];
262+
[res appendString:@"</td><td class='bar'>"];
263+
[res appendString:@"<div>"];
264+
[res appendString:[NSString stringWithFormat:@"<span class='add' style='width:%d%%'></span>",((add*100)/granTotal)]];
265+
[res appendString:[NSString stringWithFormat:@"<span class='rem' style='width:%d%%'></span>",((rem*100)/granTotal)]];
266+
[res appendString:@"</div>"];
267+
[res appendString:[NSString stringWithFormat:@"</td><td class='add'>+ %d</td><td class='rem'>- %d</td></tr>",add,rem]];
245268
}
246-
[res appendString:@"</ul>"];
269+
[res appendString:@"</table>"];
247270
return res;
248271
}
249272

PBWebHistoryController.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
@interface PBWebHistoryController : PBWebController {
2020
IBOutlet PBGitHistoryController* historyController;
2121
IBOutlet id<PBRefContextDelegate> contextMenuDelegate;
22-
22+
2323
PBGitSHA* currentSha;
2424
NSString* diff;
2525
}
2626

2727
- (void) changeContentTo: (PBGitCommit *) content;
2828
- (void) sendKey: (NSString*) key;
2929
- (NSString *)parseHeader:(NSString *)txt withRefs:(NSString *)badges;
30+
- (NSMutableDictionary *)parseStats:(NSString *)txt;
3031
- (NSString *) someMethodThatReturnsSomeHashForSomeString:(NSString*)concat;
3132

3233
@property (readonly) NSString* diff;

PBWebHistoryController.m

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ - (void) changeContentTo: (PBGitCommit *) content
5757
// but this caused some funny behaviour because NSTask's and NSThread's don't really
5858
// like each other. Instead, just do it async.
5959

60-
NSMutableArray *taskArguments = [NSMutableArray arrayWithObjects:@"show", @"--summary", @"--pretty=raw", [currentSha string], nil];
60+
NSMutableArray *taskArguments = [NSMutableArray arrayWithObjects:@"show", @"--numstat", @"--summary", @"--pretty=raw", [currentSha string], nil];
6161
if (![PBGitDefaults showWhitespaceDifferences])
6262
[taskArguments insertObject:@"-w" atIndex:1];
6363

@@ -102,10 +102,13 @@ - (void)commitDetailsLoaded:(NSNotification *)notification
102102

103103
// Header
104104
NSString *header=[self parseHeader:details withRefs:refs];
105-
105+
106+
// File Stats
107+
NSMutableDictionary *stats=[self parseStats:details];
108+
106109
// File list
107110
NSString *dt=[repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"diff-tree", @"-r", @"-C90%", @"-M90%", [currentSha string], nil]];
108-
NSString *fileList=[GLFileView parseDiffTree:dt];
111+
NSString *fileList=[GLFileView parseDiffTree:dt withStats:stats];
109112

110113
// Diffs list
111114
NSString *d=[repository outputInWorkdirForArguments:[NSArray arrayWithObjects:@"diff-tree", @"--cc", @"-C90%", @"-M90%", [currentSha string], nil]];
@@ -122,6 +125,25 @@ - (void)commitDetailsLoaded:(NSNotification *)notification
122125
#endif
123126
}
124127

128+
- (NSMutableDictionary *)parseStats:(NSString *)txt
129+
{
130+
NSArray *lines = [txt componentsSeparatedByString:@"\n"];
131+
NSMutableDictionary *stats=[NSMutableDictionary dictionary];
132+
int black=0;
133+
for(NSString *line in lines){
134+
if([line length]==0){
135+
black++;
136+
}else if(black==2){
137+
NSLog(@"l=%@",line);
138+
NSArray *file=[line componentsSeparatedByString:@"\t"];
139+
if([file count]==3){
140+
[stats setObject:file forKey:[file objectAtIndex:2]];
141+
}
142+
}
143+
}
144+
return stats;
145+
}
146+
125147
- (NSString *)parseHeader:(NSString *)txt withRefs:(NSString *)badges
126148
{
127149
NSArray *lines = [txt componentsSeparatedByString:@"\n"];

html/views/history/history.css

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -186,38 +186,67 @@ a.showdiff {
186186
background-color: #fca64f;
187187
}
188188

189-
#diff ul {
190-
list-style-type: none;
191-
margin: 0;
192-
padding: 10px 0;
189+
#filelist {
190+
font-size: 13px;
193191
}
194192

195-
#diff ul a {
193+
#filelist a {
196194
margin-left: 10px;
197195
padding-left: 20px;
198196
text-decoration: none;
199197
}
200198

201-
#diff ul a:hover {
199+
#filelist a:hover {
202200
text-decoration: underline;
203201
}
204202

205-
#diff ul a.A {
203+
#filelist a.A {
206204
background: url(../../images/added.png) no-repeat 0 center;
207205
}
208206

209-
#diff ul a.D {
207+
#filelist a.D {
210208
background: url(../../images/removed.png) no-repeat 0 center;
211209
}
212210

213-
#diff ul a.M {
211+
#filelist a.M {
214212
background: url(../../images/modified.png) no-repeat 0 center;
215213
}
216214

217-
#diff ul a.R,#diff ul a.C {
215+
#filelist a.R,#filelist a.C {
218216
background: url(../../images/renamed.png) no-repeat 0 center;
219217
}
220218

219+
#filelist{
220+
white-space: nowrap;
221+
width: 100%;
222+
}
223+
#filelist span.add,#filelist span.rem {
224+
display: block;
225+
height: 10px;
226+
border-top-left-radius: 5px;
227+
border-bottom-left-radius: 5px;
228+
float: right;
229+
clear: both;
230+
}
231+
232+
#filelist span.add{
233+
background-color: green;
234+
}
235+
236+
#filelist span.rem {
237+
background-color: red;
238+
}
239+
240+
#filelist td.bar {
241+
width: 50%;
242+
display: block;
243+
}
244+
245+
#filelist td.add,#filelist td.rem {
246+
width: 1%;
247+
text-align: right;
248+
}
249+
221250
#header {
222251
font-size: 13px;
223252
background-image: -webkit-gradient(linear,left top,left bottom, color-stop(.7, #EAF2f6), color-stop(1, #e3ebf3));
@@ -271,8 +300,6 @@ a.showdiff {
271300
padding-bottom: 5px;
272301
}
273302

274-
275-
276303
/*
277304
div.button
278305
{

0 commit comments

Comments
 (0)