1111#import " PBGitCommit.h"
1212#import " PBGitDefaults.h"
1313#import " GLFileView.h"
14+ #import " PBWebCommitController.h"
1415
1516
1617@implementation PBDiffWindowController
@@ -36,28 +37,45 @@ + (void) showDiffWindowWithFiles:(NSArray *)filePaths fromCommit:(PBGitCommit *)
3637 diffCommit = [startCommit.repository headCommit ];
3738
3839 NSString *commitSelector = [NSString stringWithFormat: @" %@ ..%@ " , [startCommit realSha ], [diffCommit realSha ]];
39- NSMutableArray *arguments = [NSMutableArray arrayWithObjects: @" diff" , @" --no-ext-diff" , commitSelector, nil ];
40+ NSMutableArray *args = [NSMutableArray arrayWithObjects: @" diff" , @" --no-ext-diff" , commitSelector, nil ];
4041
4142 if (![PBGitDefaults showWhitespaceDifferences ])
42- [arguments insertObject: @" -w" atIndex: 1 ];
43+ [args insertObject: @" -w" atIndex: 1 ];
4344
4445 if (filePaths) {
45- [arguments addObject: @" --" ];
46- [arguments addObjectsFromArray: filePaths];
46+ [args addObject: @" --" ];
47+ [args addObjectsFromArray: filePaths];
4748 }
4849
4950 int retValue;
50- NSString *diff = [startCommit.repository outputInWorkdirForArguments: arguments retValue: &retValue];
51+ NSString *diff = [startCommit.repository outputInWorkdirForArguments: args retValue: &retValue];
5152 if (retValue) {
52- DLog (@" diff failed with retValue: %d for command: '%@ ' output: '%@ '" , retValue, [arguments componentsJoinedByString: @" " ], diff);
53+ DLog (@" diff failed with retValue: %d for command: '%@ ' output: '%@ '" , retValue, [args componentsJoinedByString: @" " ], diff);
5354 return ;
5455 }
5556
56- diff=[GLFileView parseDiff: diff];
57- diff=[diff stringByReplacingOccurrencesOfString: @" {SHA_PREV}" withString: [startCommit realSha ]];
58- diff=[diff stringByReplacingOccurrencesOfString: @" {SHA}" withString: [diffCommit realSha ]];
57+ // File Stats
58+ args = [NSMutableArray arrayWithObjects: @" show" , @" --numstat" , @" --summary" , @" --pretty=raw" , [startCommit realSha ], [diffCommit realSha ], nil ];
59+ if (![PBGitDefaults showWhitespaceDifferences ])
60+ [args insertObject: @" -w" atIndex: 1 ];
61+ NSString *details = [startCommit.repository outputInWorkdirForArguments: args];
62+ NSMutableDictionary *stats = [PBWebCommitController parseStats: details];
63+
64+ // File list
65+ args = [NSMutableArray arrayWithObjects: @" diff-tree" , @" --root" , @" -r" , @" -C90%" , @" -M90%" , nil ];
66+ [args addObject: [startCommit realSha ]];
67+ [args addObject: [diffCommit realSha ]];
68+ NSString *dt = [startCommit.repository outputInWorkdirForArguments: args];
69+ NSString *fileList = [GLFileView parseDiffTree: dt withStats: stats];
70+
71+ // Hunk list
72+ NSString *hunks = [GLFileView parseDiff: diff];
73+ hunks=[hunks stringByReplacingOccurrencesOfString: @" {SHA_PREV}" withString: [startCommit realSha ]];
74+ hunks=[hunks stringByReplacingOccurrencesOfString: @" {SHA}" withString: [diffCommit realSha ]];
5975
60- PBDiffWindowController *diffController = [[PBDiffWindowController alloc ] initWithDiff: diff];
76+ NSString *html = [NSString stringWithFormat: @" %@%@ " ,fileList,hunks];
77+
78+ PBDiffWindowController *diffController = [[PBDiffWindowController alloc ] initWithDiff: html];
6179 [diffController showWindow: nil ];
6280}
6381
0 commit comments