In my goals blog post I outlined that I wanted to fix this problem with displaying merge changesets. This is the only major problem remaining with my patch for bug 459727. I had talked to about in a previous post and at that time I thought that the problem was not with my code. However, it seems that I was mistaken. I had a little chat with ted and he seems to think that my problem is that I have merges within merges. This is why the right amount of pushes are not showing up.
I’ve been thinking how I can I solve this problem. I’m gonna have to alter my server side code. Currently it looks like the following:
def pushes_worker(query, repo): """Given a PushlogQuery, return a data structure mapping push IDs to a map of data about the push.""" pushes = {} for id, user, date, node in query.entries: mergeData = [] ctx = repo.changectx(node) if len(ctx.parents()) > 1: for cs in ctx.parents(): mergeData.append(hex(cs.node()) + '|-|' + clean(person(cs.user())) + '|-|' + clean(cs.description())) if id in pushes: # we get the pushes in reverse order pushes[id]['changesets'].insert(0, node) pushes[id]['mergeData'].insert(0, mergeData) else: pushes[id] = {'user': user, 'date': date, 'changesets': [node], 'formattedDate': util.datestr(localdate(date)), 'individualChangeset': hex(ctx.node()), 'author': clean(person(ctx.user())), 'desc': clean(ctx.description()), 'mergeData': mergeData, 'id': id } return pushes |
I’ll probably be moving this functionality into a function and then hopefully use some recursion to access the merges within the merges. I don’t think I will need to change any of my server side code though, which is a relief.
I think I have it in mind how I want to implement this. I don’t forsee any problems at the moment. Watch out for another post detailing my fix for this issue.