118 # construct a working dir manifest |
118 # construct a working dir manifest |
119 mw = m1.copy() |
119 mw = m1.copy() |
120 umap = dict.fromkeys(unknown) |
120 umap = dict.fromkeys(unknown) |
121 |
121 |
122 for f in added + modified + unknown: |
122 for f in added + modified + unknown: |
123 mw[f] = "" |
123 mw[f] = nullid + "+" |
124 mw.set(f, util.is_exec(repo.wjoin(f), mw.execf(f))) |
124 mw.set(f, util.is_exec(repo.wjoin(f), mw.execf(f))) |
|
125 if f in m1: |
|
126 mw[f] = m1[f] + "+" |
125 |
127 |
126 for f in deleted + removed: |
128 for f in deleted + removed: |
127 if f in mw: |
129 if f in mw: |
128 del mw[f] |
130 del mw[f] |
129 |
131 |
150 if n != m2[f]: |
152 if n != m2[f]: |
151 a = ma.get(f, nullid) |
153 a = ma.get(f, nullid) |
152 # are both different from the ancestor? |
154 # are both different from the ancestor? |
153 if not overwrite and n != a and m2[f] != a: |
155 if not overwrite and n != a and m2[f] != a: |
154 repo.ui.debug(_(" %s versions differ, resolve\n") % f) |
156 repo.ui.debug(_(" %s versions differ, resolve\n") % f) |
155 merge[f] = (fmerge(f, mw, m2, ma), m1.get(f, nullid), m2[f]) |
157 merge[f] = (fmerge(f, mw, m2, ma), n[:20], m2[f]) |
156 queued = 1 |
158 queued = 1 |
157 # are we clobbering? |
159 # are we clobbering? |
158 # is remote's version newer? |
160 # is remote's version newer? |
159 # or are we going back in time and clean? |
161 # or are we going back in time and clean? |
160 elif overwrite or m2[f] != a or (backwards and mw[f] == m1[f]): |
162 elif overwrite or m2[f] != a or (backwards and not n[20:]): |
161 repo.ui.debug(_(" remote %s is newer, get\n") % f) |
163 repo.ui.debug(_(" remote %s is newer, get\n") % f) |
162 get[f] = (m2.execf(f), m2[f]) |
164 get[f] = (m2.execf(f), m2[f]) |
163 queued = 1 |
165 queued = 1 |
164 elif f in umap or f in added: |
166 elif f in umap or f in added: |
165 # this unknown file is the same as the checkout |
167 # this unknown file is the same as the checkout |
192 else: |
194 else: |
193 # file is created on branch or in working directory |
195 # file is created on branch or in working directory |
194 if overwrite and f not in umap: |
196 if overwrite and f not in umap: |
195 repo.ui.debug(_("remote deleted %s, clobbering\n") % f) |
197 repo.ui.debug(_("remote deleted %s, clobbering\n") % f) |
196 remove.append(f) |
198 remove.append(f) |
197 elif n == m1.get(f, nullid): # same as parent |
199 elif not n[20:]: # same as parent |
198 if backwards: |
200 if backwards: |
199 repo.ui.debug(_("remote deleted %s\n") % f) |
201 repo.ui.debug(_("remote deleted %s\n") % f) |
200 remove.append(f) |
202 remove.append(f) |
201 else: |
203 else: |
202 repo.ui.debug(_("local modified %s, keeping\n") % f) |
204 repo.ui.debug(_("local modified %s, keeping\n") % f) |