Mercurial > hg
comparison mercurial/bookmarks.py @ 48033:62f325f9b347
bookmarks: add an option to make pull mirror remote bookmarks
For backups for instance. Merging bookmarks is not a useful behavior
in that case.
Differential Revision: https://phab.mercurial-scm.org/D11490
author | Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> |
---|---|
date | Wed, 22 Sep 2021 17:14:54 -0400 |
parents | 353718f741a8 |
children | 4d2ab365699e |
comparison
equal
deleted
inserted
replaced
48032:12966768595a | 48033:62f325f9b347 |
---|---|
678 node = None | 678 node = None |
679 books.append((bookmark, node)) | 679 books.append((bookmark, node)) |
680 return books | 680 return books |
681 | 681 |
682 | 682 |
683 def updatefromremote(ui, repo, remotemarks, path, trfunc, explicit=()): | 683 def mirroring_remote(ui, repo, remotemarks): |
684 ui.debug(b"checking for updated bookmarks\n") | 684 """computes the bookmark changes that set the local bookmarks to |
685 remotemarks""" | |
686 changed = [] | |
687 localmarks = repo._bookmarks | |
688 for (b, id) in pycompat.iteritems(remotemarks): | |
689 if id != localmarks.get(b, None) and id in repo: | |
690 changed.append((b, id, ui.debug, _(b"updating bookmark %s\n") % b)) | |
691 for b in localmarks: | |
692 if b not in remotemarks: | |
693 changed.append( | |
694 (b, None, ui.debug, _(b"removing bookmark %s\n") % b) | |
695 ) | |
696 return changed | |
697 | |
698 | |
699 def merging_from_remote(ui, repo, remotemarks, path, explicit=()): | |
700 """computes the bookmark changes that merge remote bookmarks into the | |
701 local bookmarks, based on comparebookmarks""" | |
685 localmarks = repo._bookmarks | 702 localmarks = repo._bookmarks |
686 ( | 703 ( |
687 addsrc, | 704 addsrc, |
688 adddst, | 705 adddst, |
689 advsrc, | 706 advsrc, |
750 explicit.remove(b) | 767 explicit.remove(b) |
751 ui.warn( | 768 ui.warn( |
752 _(b"remote bookmark %s points to locally missing %s\n") | 769 _(b"remote bookmark %s points to locally missing %s\n") |
753 % (b, hex(scid)[:12]) | 770 % (b, hex(scid)[:12]) |
754 ) | 771 ) |
772 return changed | |
773 | |
774 | |
775 def updatefromremote(ui, repo, remotemarks, path, trfunc, explicit=()): | |
776 ui.debug(b"checking for updated bookmarks\n") | |
777 if ui.configbool(b'bookmarks', b'mirror'): | |
778 changed = mirroring_remote(ui, repo, remotemarks) | |
779 else: | |
780 changed = merging_from_remote(ui, repo, remotemarks, path, explicit) | |
755 | 781 |
756 if changed: | 782 if changed: |
757 tr = trfunc() | 783 tr = trfunc() |
758 changes = [] | 784 changes = [] |
759 key = lambda t: (t[0], t[1] or b'') | 785 key = lambda t: (t[0], t[1] or b'') |
760 for b, node, writer, msg in sorted(changed, key=key): | 786 for b, node, writer, msg in sorted(changed, key=key): |
761 changes.append((b, node)) | 787 changes.append((b, node)) |
762 writer(msg) | 788 writer(msg) |
763 localmarks.applychanges(repo, tr, changes) | 789 repo._bookmarks.applychanges(repo, tr, changes) |
764 | 790 |
765 | 791 |
766 def incoming(ui, repo, peer): | 792 def incoming(ui, repo, peer): |
767 """Show bookmarks incoming from other to repo""" | 793 """Show bookmarks incoming from other to repo""" |
768 ui.status(_(b"searching for changed bookmarks\n")) | 794 ui.status(_(b"searching for changed bookmarks\n")) |