796
794
content_changed = True
797
795
if kind_winner == 'this':
798
796
# No kind change in OTHER, see if there are *any* changes
799
if other_ie.kind == 'directory':
797
if other_ie.kind == None:
798
# No content and 'this' wins the kind, so skip this?
801
elif other_ie.kind == 'directory':
800
802
if parent_id_winner == 'this' and name_winner == 'this':
801
803
# No change for this directory in OTHER, skip
803
805
content_changed = False
804
elif other_ie.kind is None or other_ie.kind == 'file':
806
elif other_ie.kind == 'file':
805
807
def get_sha1(ie, tree):
806
808
if ie.kind != 'file':
1119
1121
base_pair = contents_pair(self.base_tree)
1120
1122
other_pair = contents_pair(self.other_tree)
1122
this_pair = contents_pair(self.this_tree)
1123
lca_pairs = [contents_pair(tree) for tree in self._lca_trees]
1124
winner = self._lca_multi_way((base_pair, lca_pairs), other_pair,
1125
this_pair, allow_overriding_lca=False)
1127
if base_pair == other_pair:
1130
# We delayed evaluating this_pair as long as we can to avoid
1131
# unnecessary sha1 calculation
1132
this_pair = contents_pair(self.this_tree)
1133
winner = self._three_way(base_pair, other_pair, this_pair)
1134
if winner == 'this':
1135
# No interesting changes introduced by OTHER
1137
trans_id = self.tt.trans_id_file_id(file_id)
1138
if winner == 'other':
1139
# OTHER is a straight winner, so replace this contents with other
1140
file_in_this = file_id in self.this_tree
1142
# Remove any existing contents
1143
self.tt.delete_contents(trans_id)
1144
if file_id in self.other_tree:
1145
# OTHER changed the file
1146
create_from_tree(self.tt, trans_id,
1147
self.other_tree, file_id)
1148
if not file_in_this:
1149
self.tt.version_file(file_id, trans_id)
1152
# OTHER deleted the file
1153
self.tt.unversion_file(trans_id)
1156
# We have a hypothetical conflict, but if we have files, then we
1157
# can try to merge the content
1158
if this_pair[0] == 'file' and other_pair[0] == 'file':
1123
if base_pair == other_pair:
1124
# OTHER introduced no changes
1126
this_pair = contents_pair(self.this_tree)
1127
if this_pair == other_pair:
1128
# THIS and OTHER introduced the same changes
1131
trans_id = self.tt.trans_id_file_id(file_id)
1132
if this_pair == base_pair:
1133
# only OTHER introduced changes
1134
if file_id in self.this_tree:
1135
# Remove any existing contents
1136
self.tt.delete_contents(trans_id)
1137
if file_id in self.other_tree:
1138
# OTHER changed the file
1139
create_from_tree(self.tt, trans_id,
1140
self.other_tree, file_id)
1141
if file_id not in self.this_tree:
1142
self.tt.version_file(file_id, trans_id)
1144
elif file_id in self.this_tree.inventory:
1145
# OTHER deleted the file
1146
self.tt.unversion_file(trans_id)
1148
#BOTH THIS and OTHER introduced changes; scalar conflict
1149
elif this_pair[0] == "file" and other_pair[0] == "file":
1159
1150
# THIS and OTHER are both files, so text merge. Either
1160
1151
# BASE is a file, or both converted to files, so at least we
1161
1152
# have agreement that output should be a file.