~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transform.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-04-09 16:49:22 UTC
  • mfrom: (1534.10.27 bzr.ttransform)
  • Revision ID: pqm@pqm.ubuntu.com-20060409164922-071803e906c8b96d
New conflict-handling system

Show diffs side-by-side

added added

removed removed

Lines of Context:
1099
1099
        finally:
1100
1100
            child_pb.finished()
1101
1101
        conflicts = cook_conflicts(raw_conflicts, tt)
1102
 
        for line in conflicts_strings(conflicts):
1103
 
            warning(line)
 
1102
        for conflict in conflicts:
 
1103
            warning(conflict)
1104
1104
        pp.next_phase()
1105
1105
        tt.apply()
1106
1106
        working_tree.set_merge_modified({})
1170
1170
def cook_conflicts(raw_conflicts, tt):
1171
1171
    """Generate a list of cooked conflicts, sorted by file path"""
1172
1172
    def key(conflict):
1173
 
        if conflict[2] is not None:
1174
 
            return conflict[2], conflict[0]
1175
 
        elif len(conflict) == 6:
1176
 
            return conflict[4], conflict[0]
 
1173
        if conflict.path is not None:
 
1174
            return conflict.path, conflict.typestring
 
1175
        elif getattr(conflict, "conflict_path", None) is not None:
 
1176
            return conflict.conflict_path, conflict.typestring
1177
1177
        else:
1178
 
            return None, conflict[0]
 
1178
            return None, conflict.typestring
1179
1179
 
1180
1180
    return sorted(list(iter_cook_conflicts(raw_conflicts, tt)), key=key)
1181
1181
 
1182
1182
def iter_cook_conflicts(raw_conflicts, tt):
1183
 
    cooked_conflicts = []
 
1183
    from bzrlib.conflicts import Conflict
1184
1184
    fp = FinalPaths(tt)
1185
1185
    for conflict in raw_conflicts:
1186
1186
        c_type = conflict[0]
1188
1188
        modified_path = fp.get_path(conflict[2])
1189
1189
        modified_id = tt.final_file_id(conflict[2])
1190
1190
        if len(conflict) == 3:
1191
 
            yield c_type, action, modified_path, modified_id
 
1191
            yield Conflict.factory(c_type, action=action, path=modified_path,
 
1192
                                     file_id=modified_id)
 
1193
             
1192
1194
        else:
1193
1195
            conflicting_path = fp.get_path(conflict[3])
1194
1196
            conflicting_id = tt.final_file_id(conflict[3])
1195
 
            yield (c_type, action, modified_path, modified_id, 
1196
 
                   conflicting_path, conflicting_id)
1197
 
 
1198
 
 
1199
 
def conflicts_strings(conflicts):
1200
 
    """Generate strings for the provided conflicts"""
1201
 
    for conflict in conflicts:
1202
 
        conflict_type = conflict[0]
1203
 
        if conflict_type == 'text conflict':
1204
 
            yield 'Text conflict in %s' % conflict[2]
1205
 
        elif conflict_type == 'contents conflict':
1206
 
            yield 'Contents conflict in %s' % conflict[2]
1207
 
        elif conflict_type == 'path conflict':
1208
 
            yield 'Path conflict: %s / %s' % conflict[2:]
1209
 
        elif conflict_type == 'duplicate id':
1210
 
            vals = (conflict[4], conflict[1], conflict[2])
1211
 
            yield 'Conflict adding id to %s.  %s %s.' % vals
1212
 
        elif conflict_type == 'duplicate':
1213
 
            vals = (conflict[4], conflict[1], conflict[2])
1214
 
            yield 'Conflict adding file %s.  %s %s.' % vals
1215
 
        elif conflict_type == 'parent loop':
1216
 
            vals = (conflict[4], conflict[2], conflict[1])
1217
 
            yield 'Conflict moving %s into %s.  %s.' % vals
1218
 
        elif conflict_type == 'unversioned parent':
1219
 
            vals = (conflict[2], conflict[1])
1220
 
            yield 'Conflict adding versioned files to %s.  %s.' % vals
1221
 
        elif conflict_type == 'missing parent':
1222
 
            vals = (conflict[2], conflict[1])
1223
 
            yield 'Conflict adding files to %s.  %s.' % vals
 
1197
            yield Conflict.factory(c_type, action=action, path=modified_path,
 
1198
                                   file_id=modified_id, 
 
1199
                                   conflict_path=conflicting_path,
 
1200
                                   conflict_file_id=conflicting_id)