@@ -19,6 +19,14 @@ - (NSString *) arbitraryHashForString:(NSString*)concat;
19
19
20
20
@end
21
21
22
+ // -parseHeader: returns an array of dictionaries with these keys
23
+ const NSString *kHeaderKeyName = @" name" ;
24
+ const NSString *kHeaderKeyContent = @" content" ;
25
+
26
+ // Keys for the author/committer dictionary
27
+ const NSString *kAuthorKeyName = @" name" ;
28
+ const NSString *kAuthorKeyEmail = @" email" ;
29
+ const NSString *kAuthorKeyDate = @" date" ;
22
30
23
31
@implementation PBWebCommitController
24
32
@@ -84,15 +92,29 @@ - (void)commitDetailsLoaded:(NSNotification *)notification
84
92
NSArray *headerItems = [self parseHeader: details];
85
93
NSString *header = [self htmlForHeader: headerItems withRefs: [self refsForCurrentCommit ]];
86
94
95
+ // In case the commit is a merge, we need to explicity give diff-tree the
96
+ // list of parents, or else it will yield an empty result.
97
+ // If it's not a merge, this won't hurt.
98
+ NSMutableArray *parentsArray = [NSMutableArray array ];
99
+
100
+ for (NSDictionary *item in headerItems) {
101
+ if ([[item objectForKey: kHeaderKeyName ] isEqualToString: @" parent" ]) {
102
+ [parentsArray addObject: [item objectForKey: kHeaderKeyContent ]];
103
+ break ;
104
+ }
105
+ }
106
+
107
+ NSString *parents = [parentsArray componentsJoinedByString: @" " ];
108
+
87
109
// File Stats
88
110
NSMutableDictionary *stats = [self parseStats: details];
89
111
90
112
// File list
91
- NSString *dt = [repository outputInWorkdirForArguments: [NSArray arrayWithObjects: @" diff-tree" , @" --root" , @" -r" , @" -C90%" , @" -M90%" , currentSha, nil ]];
113
+ NSString *dt = [repository outputInWorkdirForArguments: [NSArray arrayWithObjects: @" diff-tree" , @" --root" , @" -r" , @" -C90%" , @" -M90%" , currentSha, parents, nil ]];
92
114
NSString *fileList = [GLFileView parseDiffTree: dt withStats: stats];
93
115
94
116
// Diffs list
95
- NSString *d = [repository outputInWorkdirForArguments: [NSArray arrayWithObjects: @" diff-tree" , @" --root" , @" --cc" , @" -C90%" , @" -M90%" , currentSha, nil ]];
117
+ NSString *d = [repository outputInWorkdirForArguments: [NSArray arrayWithObjects: @" diff-tree" , @" --root" , @" --cc" , @" -C90%" , @" -M90%" , currentSha, parents, nil ]];
96
118
NSString *diffs = [GLFileView parseDiff: d];
97
119
98
120
NSString *html = [NSString stringWithFormat: @" %@%@ <div id='diffs'>%@ </div>" ,header,fileList,diffs];
@@ -132,15 +154,6 @@ - (NSMutableDictionary *)parseStats:(NSString *)txt
132
154
return stats;
133
155
}
134
156
135
- // -parseHeader: returns an array of dictionaries with these keys
136
- const NSString *kHeaderKeyName = @" name" ;
137
- const NSString *kHeaderKeyContent = @" content" ;
138
-
139
- // Keys for the author/committer dictionary
140
- const NSString *kAuthorKeyName = @" name" ;
141
- const NSString *kAuthorKeyEmail = @" email" ;
142
- const NSString *kAuthorKeyDate = @" date" ;
143
-
144
157
- (NSArray *)parseHeader : (NSString *)text
145
158
{
146
159
NSMutableArray *result = [NSMutableArray array ];
0 commit comments