Skip to content

Commit 8676e86

Browse files
author
David Catmull
committed
fix display for merge commits, which stashes happen to be
git diff-tree has to be explicitly given the list of parents
1 parent c02046e commit 8676e86

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

PBWebCommitController.m

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ - (NSString *) arbitraryHashForString:(NSString*)concat;
1919

2020
@end
2121

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";
2230

2331
@implementation PBWebCommitController
2432

@@ -84,15 +92,29 @@ - (void)commitDetailsLoaded:(NSNotification *)notification
8492
NSArray *headerItems = [self parseHeader:details];
8593
NSString *header = [self htmlForHeader:headerItems withRefs:[self refsForCurrentCommit]];
8694

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+
87109
// File Stats
88110
NSMutableDictionary *stats = [self parseStats:details];
89111

90112
// 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]];
92114
NSString *fileList = [GLFileView parseDiffTree:dt withStats:stats];
93115

94116
// 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]];
96118
NSString *diffs = [GLFileView parseDiff:d];
97119

98120
NSString *html = [NSString stringWithFormat:@"%@%@<div id='diffs'>%@</div>",header,fileList,diffs];
@@ -132,15 +154,6 @@ - (NSMutableDictionary *)parseStats:(NSString *)txt
132154
return stats;
133155
}
134156

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-
144157
- (NSArray *)parseHeader:(NSString *)text
145158
{
146159
NSMutableArray *result = [NSMutableArray array];

0 commit comments

Comments
 (0)