equal
deleted
inserted
replaced
174 m2 = p2.manifest() |
174 m2 = p2.manifest() |
175 ma = pa.manifest() |
175 ma = pa.manifest() |
176 backwards = (pa == p2) |
176 backwards = (pa == p2) |
177 action = [] |
177 action = [] |
178 copy = {} |
178 copy = {} |
|
179 copied = {} |
179 |
180 |
180 def fmerge(f, f2=None, fa=None): |
181 def fmerge(f, f2=None, fa=None): |
181 """merge executable flags""" |
182 """merge executable flags""" |
182 if not f2: |
183 if not f2: |
183 f2 = f |
184 f2 = f |
215 elif m1.execf(f) != m2.execf(f): |
216 elif m1.execf(f) != m2.execf(f): |
216 if overwrite or fmerge(f) != m1.execf(f): |
217 if overwrite or fmerge(f) != m1.execf(f): |
217 act("update permissions", "e", f, m2.execf(f)) |
218 act("update permissions", "e", f, m2.execf(f)) |
218 elif f in copy: |
219 elif f in copy: |
219 f2 = copy[f] |
220 f2 = copy[f] |
|
221 copied[f2] = True |
220 if f in ma: # case 3,20 A/B/A |
222 if f in ma: # case 3,20 A/B/A |
221 act("remote moved to " + f2, "m", |
223 act("remote moved to " + f2, "m", |
222 f, f2, f2, fmerge(f, f2, f), True) |
224 f, f2, f2, fmerge(f, f2, f), True) |
223 else: |
225 else: |
224 if f2 in m1: # case 2 A,B/B/B |
226 if f2 in m1: # case 2 A,B/B/B |
243 for f, n in m2.iteritems(): |
245 for f, n in m2.iteritems(): |
244 if partial and not partial(f): |
246 if partial and not partial(f): |
245 continue |
247 continue |
246 if f in m1: |
248 if f in m1: |
247 continue |
249 continue |
|
250 if f in copied: |
|
251 continue |
248 if f in copy: |
252 if f in copy: |
249 f2 = copy[f] |
253 f2 = copy[f] |
250 if f2 not in m2: # already seen |
|
251 continue |
|
252 # rename case 1, A/A,B/A |
254 # rename case 1, A/A,B/A |
253 act("remote copied to " + f, "m", |
255 act("remote copied to " + f, "m", |
254 f2, f, f, fmerge(f2, f, f2), False) |
256 f2, f, f, fmerge(f2, f, f2), False) |
255 elif f in ma: |
257 elif f in ma: |
256 if overwrite or backwards: |
258 if overwrite or backwards: |