1396 # changed/deleted never resolves to something from the remote side. |
1399 # changed/deleted never resolves to something from the remote side. |
1397 oplist = [actions[a] for a in 'g dc dg m'.split()] |
1400 oplist = [actions[a] for a in 'g dc dg m'.split()] |
1398 prefetch = scmutil.fileprefetchhooks |
1401 prefetch = scmutil.fileprefetchhooks |
1399 prefetch(repo, ctx, [f for sublist in oplist for f, args, msg in sublist]) |
1402 prefetch(repo, ctx, [f for sublist in oplist for f, args, msg in sublist]) |
1400 |
1403 |
|
1404 @attr.s(frozen=True) |
|
1405 class updateresult(object): |
|
1406 updatedcount = attr.ib() |
|
1407 mergedcount = attr.ib() |
|
1408 removedcount = attr.ib() |
|
1409 unresolvedcount = attr.ib() |
|
1410 |
|
1411 # TODO remove container emulation once consumers switch to new API. |
|
1412 |
|
1413 def __getitem__(self, x): |
|
1414 if x == 0: |
|
1415 return self.updatedcount |
|
1416 elif x == 1: |
|
1417 return self.mergedcount |
|
1418 elif x == 2: |
|
1419 return self.removedcount |
|
1420 elif x == 3: |
|
1421 return self.unresolvedcount |
|
1422 else: |
|
1423 raise IndexError('can only access items 0-3') |
|
1424 |
|
1425 def __len__(self): |
|
1426 return 4 |
|
1427 |
1401 def applyupdates(repo, actions, wctx, mctx, overwrite, labels=None): |
1428 def applyupdates(repo, actions, wctx, mctx, overwrite, labels=None): |
1402 """apply the merge action list to the working directory |
1429 """apply the merge action list to the working directory |
1403 |
1430 |
1404 wctx is the working copy context |
1431 wctx is the working copy context |
1405 mctx is the context to be merged into the working copy |
1432 mctx is the context to be merged into the working copy |
1579 # the driver might leave some files unresolved |
1606 # the driver might leave some files unresolved |
1580 unresolvedf = set(ms.unresolved()) |
1607 unresolvedf = set(ms.unresolved()) |
1581 if not proceed: |
1608 if not proceed: |
1582 # XXX setting unresolved to at least 1 is a hack to make sure we |
1609 # XXX setting unresolved to at least 1 is a hack to make sure we |
1583 # error out |
1610 # error out |
1584 return updated, merged, removed, max(len(unresolvedf), 1) |
1611 return updateresult(updated, merged, removed, |
|
1612 max(len(unresolvedf), 1)) |
1585 newactions = [] |
1613 newactions = [] |
1586 for f, args, msg in mergeactions: |
1614 for f, args, msg in mergeactions: |
1587 if f in unresolvedf: |
1615 if f in unresolvedf: |
1588 newactions.append((f, args, msg)) |
1616 newactions.append((f, args, msg)) |
1589 mergeactions = newactions |
1617 mergeactions = newactions |
1654 mfiles.difference_update(a[0] for a in acts) |
1682 mfiles.difference_update(a[0] for a in acts) |
1655 |
1683 |
1656 actions['m'] = [a for a in actions['m'] if a[0] in mfiles] |
1684 actions['m'] = [a for a in actions['m'] if a[0] in mfiles] |
1657 |
1685 |
1658 progress(_updating, None, total=numupdates, unit=_files) |
1686 progress(_updating, None, total=numupdates, unit=_files) |
1659 |
1687 return updateresult(updated, merged, removed, unresolved) |
1660 return updated, merged, removed, unresolved |
|
1661 |
1688 |
1662 def recordupdates(repo, actions, branchmerge): |
1689 def recordupdates(repo, actions, branchmerge): |
1663 "record merge actions to the dirstate" |
1690 "record merge actions to the dirstate" |
1664 # remove (must come first) |
1691 # remove (must come first) |
1665 for f, args, msg in actions.get('r', []): |
1692 for f, args, msg in actions.get('r', []): |
1876 elif not overwrite: |
1903 elif not overwrite: |
1877 if p1 == p2: # no-op update |
1904 if p1 == p2: # no-op update |
1878 # call the hooks and exit early |
1905 # call the hooks and exit early |
1879 repo.hook('preupdate', throw=True, parent1=xp2, parent2='') |
1906 repo.hook('preupdate', throw=True, parent1=xp2, parent2='') |
1880 repo.hook('update', parent1=xp2, parent2='', error=0) |
1907 repo.hook('update', parent1=xp2, parent2='', error=0) |
1881 return 0, 0, 0, 0 |
1908 return updateresult(0, 0, 0, 0) |
1882 |
1909 |
1883 if (updatecheck == 'linear' and |
1910 if (updatecheck == 'linear' and |
1884 pas not in ([p1], [p2])): # nonlinear |
1911 pas not in ([p1], [p2])): # nonlinear |
1885 dirty = wc.dirty(missing=True) |
1912 dirty = wc.dirty(missing=True) |
1886 if dirty: |
1913 if dirty: |