Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/merge.py @ 3101:36b08cd92fb7
merge: add codes to action list, eliminate None elements
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 17 Sep 2006 15:24:00 -0500 |
parents | 87ea5a71f7b9 |
children | 22336ad45cf2 |
comparison
equal
deleted
inserted
replaced
3100:87ea5a71f7b9 | 3101:36b08cd92fb7 |
---|---|
144 if n != m2[f]: | 144 if n != m2[f]: |
145 a = ma.get(f, nullid) | 145 a = ma.get(f, nullid) |
146 # are both different from the ancestor? | 146 # are both different from the ancestor? |
147 if not overwrite and n != a and m2[f] != a: | 147 if not overwrite and n != a and m2[f] != a: |
148 repo.ui.debug(_(" %s versions differ, resolve\n") % f) | 148 repo.ui.debug(_(" %s versions differ, resolve\n") % f) |
149 action.append((f, fmerge(f, m1, m2, ma), n[:20], m2[f])) | 149 action.append((f, "m", fmerge(f, m1, m2, ma), n[:20], m2[f])) |
150 queued = 1 | 150 queued = 1 |
151 # are we clobbering? | 151 # are we clobbering? |
152 # is remote's version newer? | 152 # is remote's version newer? |
153 # or are we going back in time and clean? | 153 # or are we going back in time and clean? |
154 elif overwrite or m2[f] != a or (backwards and not n[20:]): | 154 elif overwrite or m2[f] != a or (backwards and not n[20:]): |
155 repo.ui.debug(_(" remote %s is newer, get\n") % f) | 155 repo.ui.debug(_(" remote %s is newer, get\n") % f) |
156 action.append((f, m2.execf(f), m2[f], None)) | 156 action.append((f, "g", m2.execf(f), m2[f])) |
157 queued = 1 | 157 queued = 1 |
158 elif n[20:] in ("u","a"): | 158 elif n[20:] in ("u","a"): |
159 # this unknown file is the same as the checkout | 159 # this unknown file is the same as the checkout |
160 # we need to reset the dirstate if the file was added | 160 # we need to reset the dirstate if the file was added |
161 action.append((f, m2.execf(f), m2[f], None)) | 161 action.append((f, "g", m2.execf(f), m2[f])) |
162 | 162 |
163 # do we still need to look at mode bits? | 163 # do we still need to look at mode bits? |
164 if not queued and m1.execf(f) != m2.execf(f): | 164 if not queued and m1.execf(f) != m2.execf(f): |
165 if overwrite: | 165 if overwrite: |
166 repo.ui.debug(_(" updating permissions for %s\n") % f) | 166 repo.ui.debug(_(" updating permissions for %s\n") % f) |
177 if not overwrite: | 177 if not overwrite: |
178 r = repo.ui.prompt( | 178 r = repo.ui.prompt( |
179 (_(" local changed %s which remote deleted\n") % f) + | 179 (_(" local changed %s which remote deleted\n") % f) + |
180 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) | 180 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) |
181 if r == _("d"): | 181 if r == _("d"): |
182 action.append((f, None, None, None)) | 182 action.append((f, "r")) |
183 else: | 183 else: |
184 repo.ui.debug(_("other deleted %s\n") % f) | 184 repo.ui.debug(_("other deleted %s\n") % f) |
185 action.append((f, None, None, None)) | 185 action.append((f, "r")) |
186 else: | 186 else: |
187 # file is created on branch or in working directory | 187 # file is created on branch or in working directory |
188 if overwrite and n[20:] != "u": | 188 if overwrite and n[20:] != "u": |
189 repo.ui.debug(_("remote deleted %s, clobbering\n") % f) | 189 repo.ui.debug(_("remote deleted %s, clobbering\n") % f) |
190 action.append((f, None, None, None)) | 190 action.append((f, "r")) |
191 elif not n[20:]: # same as parent | 191 elif not n[20:]: # same as parent |
192 if backwards: | 192 if backwards: |
193 repo.ui.debug(_("remote deleted %s\n") % f) | 193 repo.ui.debug(_("remote deleted %s\n") % f) |
194 action.append((f, None, None, None)) | 194 action.append((f, "r")) |
195 else: | 195 else: |
196 repo.ui.debug(_("local modified %s, keeping\n") % f) | 196 repo.ui.debug(_("local modified %s, keeping\n") % f) |
197 else: | 197 else: |
198 repo.ui.debug(_("working dir created %s, keeping\n") % f) | 198 repo.ui.debug(_("working dir created %s, keeping\n") % f) |
199 | 199 |
205 if not overwrite: | 205 if not overwrite: |
206 r = repo.ui.prompt( | 206 r = repo.ui.prompt( |
207 (_("remote changed %s which local deleted\n") % f) + | 207 (_("remote changed %s which local deleted\n") % f) + |
208 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) | 208 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) |
209 if r == _("k"): | 209 if r == _("k"): |
210 action.append((f, m2.execf(f), n, None)) | 210 action.append((f, "g", m2.execf(f), n)) |
211 elif f not in ma: | 211 elif f not in ma: |
212 repo.ui.debug(_("remote created %s\n") % f) | 212 repo.ui.debug(_("remote created %s\n") % f) |
213 action.append((f, m2.execf(f), n, None)) | 213 action.append((f, "g", m2.execf(f), n)) |
214 else: | 214 else: |
215 if overwrite or backwards: | 215 if overwrite or backwards: |
216 repo.ui.debug(_("local deleted %s, recreating\n") % f) | 216 repo.ui.debug(_("local deleted %s, recreating\n") % f) |
217 action.append((f, m2.execf(f), n, None)) | 217 action.append((f, "g", m2.execf(f), n)) |
218 else: | 218 else: |
219 repo.ui.debug(_("local deleted %s\n") % f) | 219 repo.ui.debug(_("local deleted %s\n") % f) |
220 | 220 |
221 del m1, m2, ma | 221 del m1, m2, ma |
222 | 222 |
235 | 235 |
236 # update files | 236 # update files |
237 updated, merged, removed, unresolved = 0, 0, 0, 0 | 237 updated, merged, removed, unresolved = 0, 0, 0, 0 |
238 action.sort() | 238 action.sort() |
239 for a in action: | 239 for a in action: |
240 f, flag, my, other = a | 240 f, m = a[:2] |
241 if f[0] == "/": | 241 if f[0] == "/": |
242 continue | 242 continue |
243 if not my: | 243 if m == "r": # remove |
244 repo.ui.note(_("removing %s\n") % f) | 244 repo.ui.note(_("removing %s\n") % f) |
245 util.audit_path(f) | 245 util.audit_path(f) |
246 try: | 246 try: |
247 util.unlink(repo.wjoin(f)) | 247 util.unlink(repo.wjoin(f)) |
248 except OSError, inst: | 248 except OSError, inst: |
249 if inst.errno != errno.ENOENT: | 249 if inst.errno != errno.ENOENT: |
250 repo.ui.warn(_("update failed to remove %s: %s!\n") % | 250 repo.ui.warn(_("update failed to remove %s: %s!\n") % |
251 (f, inst.strerror)) | 251 (f, inst.strerror)) |
252 removed +=1 | 252 removed +=1 |
253 elif other: | 253 elif m == "m": # merge |
254 flag, my, other = a[2:] | |
254 repo.ui.status(_("merging %s\n") % f) | 255 repo.ui.status(_("merging %s\n") % f) |
255 if merge3(repo, f, my, other, xp1, xp2): | 256 if merge3(repo, f, my, other, xp1, xp2): |
256 unresolved += 1 | 257 unresolved += 1 |
257 util.set_exec(repo.wjoin(f), flag) | 258 util.set_exec(repo.wjoin(f), flag) |
258 merged += 1 | 259 merged += 1 |
259 else: | 260 elif m == "g": # get |
261 flag, node = a[2:] | |
260 repo.ui.note(_("getting %s\n") % f) | 262 repo.ui.note(_("getting %s\n") % f) |
261 t = repo.file(f).read(my) | 263 t = repo.file(f).read(node) |
262 repo.wwrite(f, t) | 264 repo.wwrite(f, t) |
263 util.set_exec(repo.wjoin(f), flag) | 265 util.set_exec(repo.wjoin(f), flag) |
264 updated += 1 | 266 updated += 1 |
265 | 267 |
266 # update dirstate | 268 # update dirstate |
267 if not partial: | 269 if not partial: |
268 repo.dirstate.setparents(p1, p2) | 270 repo.dirstate.setparents(p1, p2) |
269 repo.dirstate.forget(forget) | 271 repo.dirstate.forget(forget) |
270 for a in action: | 272 for a in action: |
271 f, flag, my, other = a | 273 f, m = a[:2] |
272 if not my: | 274 if m == "r": # remove |
273 if branchmerge: | 275 if branchmerge: |
274 repo.dirstate.update([f], 'r') | 276 repo.dirstate.update([f], 'r') |
275 else: | 277 else: |
276 repo.dirstate.forget([f]) | 278 repo.dirstate.forget([f]) |
277 elif not other: | 279 elif m == "g": # get |
278 if branchmerge: | 280 if branchmerge: |
279 repo.dirstate.update([f], 'n', st_mtime=-1) | 281 repo.dirstate.update([f], 'n', st_mtime=-1) |
280 else: | 282 else: |
281 repo.dirstate.update([f], 'n') | 283 repo.dirstate.update([f], 'n') |
282 else: | 284 elif m == "m": # merge |
285 flag, my, other = a[2:] | |
283 if branchmerge: | 286 if branchmerge: |
284 # We've done a branch merge, mark this file as merged | 287 # We've done a branch merge, mark this file as merged |
285 # so that we properly record the merger later | 288 # so that we properly record the merger later |
286 repo.dirstate.update([f], 'm') | 289 repo.dirstate.update([f], 'm') |
287 else: | 290 else: |