Mercurial > hg
comparison mercurial/merge.py @ 3100:87ea5a71f7b9
merge: convert actions to list
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 17 Sep 2006 15:10:56 -0500 |
parents | 1b738357bba9 |
children | 36b08cd92fb7 |
comparison
equal
deleted
inserted
replaced
2981:1b738357bba9 | 3100:87ea5a71f7b9 |
---|---|
105 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s linear %s\n") % | 105 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s linear %s\n") % |
106 (overwrite, branchmerge, bool(partial), linear_path)) | 106 (overwrite, branchmerge, bool(partial), linear_path)) |
107 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % | 107 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % |
108 (short(p1), short(p2), short(pa))) | 108 (short(p1), short(p2), short(pa))) |
109 | 109 |
110 action = {} | 110 action = [] |
111 forget = [] | 111 forget = [] |
112 | 112 |
113 # update m1 from working dir | 113 # update m1 from working dir |
114 umap = dict.fromkeys(unknown) | 114 umap = dict.fromkeys(unknown) |
115 | 115 |
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[f] = (fmerge(f, m1, m2, ma), n[:20], m2[f]) | 149 action.append((f, 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[f] = (m2.execf(f), m2[f], None) | 156 action.append((f, m2.execf(f), m2[f], None)) |
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[f] = (m2.execf(f), m2[f], None) | 161 action.append((f, m2.execf(f), m2[f], None)) |
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[f] = (None, None, None) | 182 action.append((f, None, None, None)) |
183 else: | 183 else: |
184 repo.ui.debug(_("other deleted %s\n") % f) | 184 repo.ui.debug(_("other deleted %s\n") % f) |
185 action[f] = (None, None, None) | 185 action.append((f, None, None, None)) |
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[f] = (None, None, None) | 190 action.append((f, None, None, None)) |
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[f] = (None, None, None) | 194 action.append((f, None, None, None)) |
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[f] = (m2.execf(f), n, None) | 210 action.append((f, m2.execf(f), n, None)) |
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[f] = (m2.execf(f), n, None) | 213 action.append((f, m2.execf(f), n, None)) |
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[f] = (m2.execf(f), n, None) | 217 action.append((f, m2.execf(f), n, None)) |
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 |
233 | 233 |
234 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xxp2) | 234 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xxp2) |
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 files = action.keys() | 238 action.sort() |
239 files.sort() | 239 for a in action: |
240 for f in files: | 240 f, flag, my, other = a |
241 flag, my, other = action[f] | |
242 if f[0] == "/": | 241 if f[0] == "/": |
243 continue | 242 continue |
244 if not my: | 243 if not my: |
245 repo.ui.note(_("removing %s\n") % f) | 244 repo.ui.note(_("removing %s\n") % f) |
246 util.audit_path(f) | 245 util.audit_path(f) |
266 | 265 |
267 # update dirstate | 266 # update dirstate |
268 if not partial: | 267 if not partial: |
269 repo.dirstate.setparents(p1, p2) | 268 repo.dirstate.setparents(p1, p2) |
270 repo.dirstate.forget(forget) | 269 repo.dirstate.forget(forget) |
271 files = action.keys() | 270 for a in action: |
272 files.sort() | 271 f, flag, my, other = a |
273 for f in files: | |
274 flag, my, other = action[f] | |
275 if not my: | 272 if not my: |
276 if branchmerge: | 273 if branchmerge: |
277 repo.dirstate.update([f], 'r') | 274 repo.dirstate.update([f], 'r') |
278 else: | 275 else: |
279 repo.dirstate.forget([f]) | 276 repo.dirstate.forget([f]) |