Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 2837:19b3bc840182
Merge: save away mode bit so that we don't need manifest later
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 09 Aug 2006 17:11:01 -0500 |
parents | e78cad1f6b1f |
children | b11c014dcbd9 |
comparison
equal
deleted
inserted
replaced
2836:e78cad1f6b1f | 2837:19b3bc840182 |
---|---|
155 repo.ui.debug(_(" %s versions differ, resolve\n") % f) | 155 repo.ui.debug(_(" %s versions differ, resolve\n") % f) |
156 # merge executable bits | 156 # merge executable bits |
157 # "if we changed or they changed, change in merge" | 157 # "if we changed or they changed, change in merge" |
158 a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f) | 158 a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f) |
159 mode = ((a^b) | (a^c)) ^ a | 159 mode = ((a^b) | (a^c)) ^ a |
160 merge[f] = (m1.get(f, nullid), m2[f], mode) | 160 merge[f] = (mode, m1.get(f, nullid), m2[f]) |
161 s = 1 | 161 s = 1 |
162 # are we clobbering? | 162 # are we clobbering? |
163 # is remote's version newer? | 163 # is remote's version newer? |
164 # or are we going back in time? | 164 # or are we going back in time? |
165 elif overwrite or m2[f] != a or (p2 == pa and mw[f] == m1[f]): | 165 elif overwrite or m2[f] != a or (p2 == pa and mw[f] == m1[f]): |
166 repo.ui.debug(_(" remote %s is newer, get\n") % f) | 166 repo.ui.debug(_(" remote %s is newer, get\n") % f) |
167 get[f] = m2[f] | 167 get[f] = (m2.execf(f), m2[f]) |
168 s = 1 | 168 s = 1 |
169 elif f in umap or f in added: | 169 elif f in umap or f in added: |
170 # this unknown file is the same as the checkout | 170 # this unknown file is the same as the checkout |
171 # we need to reset the dirstate if the file was added | 171 # we need to reset the dirstate if the file was added |
172 get[f] = m2[f] | 172 get[f] = (m2.execf(f), m2[f]) |
173 | 173 |
174 if not s and mfw.execf(f) != mf2.execf(f): | 174 if not s and mfw.execf(f) != mf2.execf(f): |
175 if overwrite: | 175 if overwrite: |
176 repo.ui.debug(_(" updating permissions for %s\n") % f) | 176 repo.ui.debug(_(" updating permissions for %s\n") % f) |
177 util.set_exec(repo.wjoin(f), mf2.execf(f)) | 177 util.set_exec(repo.wjoin(f), mf2.execf(f)) |
219 if not overwrite and (linear_path or branchmerge): | 219 if not overwrite and (linear_path or branchmerge): |
220 r = repo.ui.prompt( | 220 r = repo.ui.prompt( |
221 (_("remote changed %s which local deleted\n") % f) + | 221 (_("remote changed %s which local deleted\n") % f) + |
222 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) | 222 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) |
223 if r == _("k"): | 223 if r == _("k"): |
224 get[f] = n | 224 get[f] = (m2.execf(f), n) |
225 elif f not in ma: | 225 elif f not in ma: |
226 repo.ui.debug(_("remote created %s\n") % f) | 226 repo.ui.debug(_("remote created %s\n") % f) |
227 get[f] = n | 227 get[f] = (m2.execf(f), n) |
228 else: | 228 else: |
229 if overwrite or p2 == pa: # going backwards? | 229 if overwrite or p2 == pa: # going backwards? |
230 repo.ui.debug(_("local deleted %s, recreating\n") % f) | 230 repo.ui.debug(_("local deleted %s, recreating\n") % f) |
231 get[f] = n | 231 get[f] = (m2.execf(f), n) |
232 else: | 232 else: |
233 repo.ui.debug(_("local deleted %s\n") % f) | 233 repo.ui.debug(_("local deleted %s\n") % f) |
234 | 234 |
235 del mw, m1, m2, ma | 235 del mw, m1, m2, ma |
236 | 236 |
237 if overwrite: | 237 if overwrite: |
238 for f in merge: | 238 for f in merge: |
239 get[f] = merge[f][1] | 239 get[f] = merge[f][:2] |
240 merge = {} | 240 merge = {} |
241 | 241 |
242 if linear_path or overwrite: | 242 if linear_path or overwrite: |
243 # we don't need to do any magic, just jump to the new rev | 243 # we don't need to do any magic, just jump to the new rev |
244 p1, p2 = p2, nullid | 244 p1, p2 = p2, nullid |
252 | 252 |
253 # get the files we don't need to change | 253 # get the files we don't need to change |
254 files = get.keys() | 254 files = get.keys() |
255 files.sort() | 255 files.sort() |
256 for f in files: | 256 for f in files: |
257 flag, node = get[f] | |
257 if f[0] == "/": | 258 if f[0] == "/": |
258 continue | 259 continue |
259 repo.ui.note(_("getting %s\n") % f) | 260 repo.ui.note(_("getting %s\n") % f) |
260 t = repo.file(f).read(get[f]) | 261 t = repo.file(f).read(node) |
261 repo.wwrite(f, t) | 262 repo.wwrite(f, t) |
262 util.set_exec(repo.wjoin(f), mf2.execf(f)) | 263 util.set_exec(repo.wjoin(f), flag) |
263 if not partial: | 264 if not partial: |
264 if branchmerge: | 265 if branchmerge: |
265 repo.dirstate.update([f], 'n', st_mtime=-1) | 266 repo.dirstate.update([f], 'n', st_mtime=-1) |
266 else: | 267 else: |
267 repo.dirstate.update([f], 'n') | 268 repo.dirstate.update([f], 'n') |
270 unresolved = [] | 271 unresolved = [] |
271 files = merge.keys() | 272 files = merge.keys() |
272 files.sort() | 273 files.sort() |
273 for f in files: | 274 for f in files: |
274 repo.ui.status(_("merging %s\n") % f) | 275 repo.ui.status(_("merging %s\n") % f) |
275 my, other, flag = merge[f] | 276 flag, my, other = merge[f] |
276 ret = merge3(repo, f, my, other, xp1, xp2) | 277 ret = merge3(repo, f, my, other, xp1, xp2) |
277 if ret: | 278 if ret: |
278 unresolved.append(f) | 279 unresolved.append(f) |
279 util.set_exec(repo.wjoin(f), flag) | 280 util.set_exec(repo.wjoin(f), flag) |
280 if not partial: | 281 if not partial: |