Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 2974:cbb90f4bafb0
merge: eliminate usage of m1 after working manifest creation
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Tue, 22 Aug 2006 17:20:09 -0500 |
parents | a31557193f3c |
children | 31011730f9bd |
comparison
equal
deleted
inserted
replaced
2973:a31557193f3c | 2974:cbb90f4bafb0 |
---|---|
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) |