##// END OF EJS Templates
Merge: use single objects for tracking manifests
Matt Mackall -
r2838:b11c014d default
parent child Browse files
Show More
@@ -84,11 +84,8 b' def update(repo, node, branchmerge=False'
84 m2n = repo.changelog.read(p2)[0]
84 m2n = repo.changelog.read(p2)[0]
85 man = repo.manifest.ancestor(m1n, m2n)
85 man = repo.manifest.ancestor(m1n, m2n)
86 m1 = repo.manifest.read(m1n)
86 m1 = repo.manifest.read(m1n)
87 mf1 = repo.manifest.readflags(m1n)
88 m2 = repo.manifest.read(m2n).copy()
87 m2 = repo.manifest.read(m2n).copy()
89 mf2 = repo.manifest.readflags(m2n)
90 ma = repo.manifest.read(man)
88 ma = repo.manifest.read(man)
91 mfa = repo.manifest.readflags(man)
92
89
93 if not forcemerge and not overwrite:
90 if not forcemerge and not overwrite:
94 for f in unknown:
91 for f in unknown:
@@ -113,12 +110,11 b' def update(repo, node, branchmerge=False'
113
110
114 # construct a working dir manifest
111 # construct a working dir manifest
115 mw = m1.copy()
112 mw = m1.copy()
116 mfw = mf1.copy()
117 umap = dict.fromkeys(unknown)
113 umap = dict.fromkeys(unknown)
118
114
119 for f in added + modified + unknown:
115 for f in added + modified + unknown:
120 mw[f] = ""
116 mw[f] = ""
121 mfw.set(f, util.is_exec(repo.wjoin(f), mfw.execf(f)))
117 mw.set(f, util.is_exec(repo.wjoin(f), mw.execf(f)))
122
118
123 for f in deleted + removed:
119 for f in deleted + removed:
124 if f in mw:
120 if f in mw:
@@ -155,7 +151,7 b' def update(repo, node, branchmerge=False'
155 repo.ui.debug(_(" %s versions differ, resolve\n") % f)
151 repo.ui.debug(_(" %s versions differ, resolve\n") % f)
156 # merge executable bits
152 # merge executable bits
157 # "if we changed or they changed, change in merge"
153 # "if we changed or they changed, change in merge"
158 a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f)
154 a, b, c = ma.execf(f), mw.execf(f), m2.execf(f)
159 mode = ((a^b) | (a^c)) ^ a
155 mode = ((a^b) | (a^c)) ^ a
160 merge[f] = (mode, m1.get(f, nullid), m2[f])
156 merge[f] = (mode, m1.get(f, nullid), m2[f])
161 s = 1
157 s = 1
@@ -171,12 +167,12 b' def update(repo, node, branchmerge=False'
171 # we need to reset the dirstate if the file was added
167 # we need to reset the dirstate if the file was added
172 get[f] = (m2.execf(f), m2[f])
168 get[f] = (m2.execf(f), m2[f])
173
169
174 if not s and mfw.execf(f) != mf2.execf(f):
170 if not s and mw.execf(f) != m2.execf(f):
175 if overwrite:
171 if overwrite:
176 repo.ui.debug(_(" updating permissions for %s\n") % f)
172 repo.ui.debug(_(" updating permissions for %s\n") % f)
177 util.set_exec(repo.wjoin(f), mf2.execf(f))
173 util.set_exec(repo.wjoin(f), m2.execf(f))
178 else:
174 else:
179 a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f)
175 a, b, c = ma.execf(f), mw.execf(f), m2.execf(f)
180 mode = ((a^b) | (a^c)) ^ a
176 mode = ((a^b) | (a^c)) ^ a
181 if mode != b:
177 if mode != b:
182 repo.ui.debug(_(" updating permissions for %s\n")
178 repo.ui.debug(_(" updating permissions for %s\n")
General Comments 0
You need to be logged in to leave comments. Login now