mercurial/merge.py
changeset 29831 1316c7cccc76
parent 29775 978b907d9b36
child 29889 6f447b9ec263
equal deleted inserted replaced
29830:92ac2baaea86 29831:1316c7cccc76
  1284     updated += msupdated
  1284     updated += msupdated
  1285     merged += msmerged
  1285     merged += msmerged
  1286     removed += msremoved
  1286     removed += msremoved
  1287 
  1287 
  1288     extraactions = ms.actions()
  1288     extraactions = ms.actions()
  1289     for k, acts in extraactions.iteritems():
  1289     if extraactions:
  1290         actions[k].extend(acts)
  1290         mfiles = set(a[0] for a in actions['m'])
       
  1291         for k, acts in extraactions.iteritems():
       
  1292             actions[k].extend(acts)
       
  1293             # Remove these files from actions['m'] as well. This is important
       
  1294             # because in recordupdates, files in actions['m'] are processed
       
  1295             # after files in other actions, and the merge driver might add
       
  1296             # files to those actions via extraactions above. This can lead to a
       
  1297             # file being recorded twice, with poor results. This is especially
       
  1298             # problematic for actions['r'] (currently only possible with the
       
  1299             # merge driver in the initial merge process; interrupted merges
       
  1300             # don't go through this flow).
       
  1301             #
       
  1302             # The real fix here is to have indexes by both file and action so
       
  1303             # that when the action for a file is changed it is automatically
       
  1304             # reflected in the other action lists. But that involves a more
       
  1305             # complex data structure, so this will do for now.
       
  1306             #
       
  1307             # We don't need to do the same operation for 'dc' and 'cd' because
       
  1308             # those lists aren't consulted again.
       
  1309             mfiles.difference_update(a[0] for a in acts)
       
  1310 
       
  1311         actions['m'] = [a for a in actions['m'] if a[0] in mfiles]
  1291 
  1312 
  1292     progress(_updating, None, total=numupdates, unit=_files)
  1313     progress(_updating, None, total=numupdates, unit=_files)
  1293 
  1314 
  1294     return updated, merged, removed, unresolved
  1315     return updated, merged, removed, unresolved
  1295 
  1316