annotate hgext/share.py @ 44057:6a8c166a93a6

share: unmark --relative as EXPERIMENTAL Differential Revision: https://phab.mercurial-scm.org/D7001
author Pulkit Goyal <pulkit@yandex-team.ru>
date Sun, 06 Oct 2019 20:18:54 +0300
parents 8ff1ecfadcd1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8805
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
2 #
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
3 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10256
diff changeset
4 # GNU General Public License version 2 or any later version.
8805
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
5
26320
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
6 '''share a common history between several working directories
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
7
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
8 Automatic Pooled Storage for Clones
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
9 -----------------------------------
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
10
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
11 When this extension is active, :hg:`clone` can be configured to
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
12 automatically share/pool storage across multiple clones. This
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
13 mode effectively converts :hg:`clone` to :hg:`clone` + :hg:`share`.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
14 The benefit of using this mode is the automatic management of
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
15 store paths and intelligent pooling of related repositories.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
16
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
17 The following ``share.`` config options influence this feature:
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
18
26411
bf3d10f0c34a share: make option docs more check-config friendly
Matt Mackall <mpm@selenic.com>
parents: 26320
diff changeset
19 ``share.pool``
26320
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
20 Filesystem path where shared repository data will be stored. When
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
21 defined, :hg:`clone` will automatically use shared repository
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
22 storage instead of creating a store inside each clone.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
23
26411
bf3d10f0c34a share: make option docs more check-config friendly
Matt Mackall <mpm@selenic.com>
parents: 26320
diff changeset
24 ``share.poolnaming``
26320
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
25 How directory names in ``share.pool`` are constructed.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
26
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
27 "identity" means the name is derived from the first changeset in the
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
28 repository. In this mode, different remotes share storage if their
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
29 root/initial changeset is identical. In this mode, the local shared
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
30 repository is an aggregate of all encountered remote repositories.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
31
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
32 "remote" means the name is derived from the source repository's
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
33 path or URL. In this mode, storage is only shared if the path or URL
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
34 requested in the :hg:`clone` command matches exactly to a repository
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
35 that was cloned before.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
36
35731
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 35661
diff changeset
37 The default naming mode is "identity".
26320
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
38 '''
8873
e872ef2e6758 help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8807
diff changeset
39
30246
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
40 from __future__ import absolute_import
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
41
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
42 import errno
8805
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
43 from mercurial.i18n import _
30246
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
44 from mercurial import (
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
45 bookmarks,
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
46 commands,
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
47 error,
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
48 extensions,
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
49 hg,
33120
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32113
diff changeset
50 registrar,
31831
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
51 txnutil,
30246
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
52 util,
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
53 )
6a98f9408a50 py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 30185
diff changeset
54
21253
d2ce7a20fe86 share: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 20056
diff changeset
55 cmdtable = {}
33120
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32113
diff changeset
56 command = registrar.command(cmdtable)
30611
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 30267
diff changeset
57 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
25621
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24484
diff changeset
58 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24484
diff changeset
59 # be specifying the version(s) of Mercurial they are tested with, or
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24484
diff changeset
60 # leave the attribute unspecified.
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
61 testedwith = b'ships-with-hg-core'
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 15083
diff changeset
62
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
63
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
64 @command(
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
65 b'share',
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
66 [
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
67 (b'U', b'noupdate', None, _(b'do not create a working directory')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
68 (b'B', b'bookmarks', None, _(b'also share bookmarks')),
44057
6a8c166a93a6 share: unmark --relative as EXPERIMENTAL
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 43904
diff changeset
69 (b'', b'relative', None, _(b'point to source using a relative path'),),
31912
23080c03a604 share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 31831
diff changeset
70 ],
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
71 _(b'[-U] [-B] SOURCE [DEST]'),
41079
c303d65d2e34 help: assigning categories to existing commands
rdamazio@google.com
parents: 36945
diff changeset
72 helpcategory=command.CATEGORY_REPO_CREATION,
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
73 norepo=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
74 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
75 def share(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
76 ui, source, dest=None, noupdate=False, bookmarks=False, relative=False
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
77 ):
10798
e46c19c586fa share: drop experimental label
Martin Geisler <mg@lazybytes.net>
parents: 10263
diff changeset
78 """create a new shared repository
8805
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
79
9261
4b8b0c124b99 share: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9075
diff changeset
80 Initialize a new repository and working directory that shares its
23626
cd79fb4d75fd share: add option to share bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents: 23556
diff changeset
81 history (and optionally bookmarks) with another repository.
8805
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
82
12389
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
83 .. note::
19997
de16c673455b documentation: add an extra newline after note directive
Simon Heimberg <simohe@besonet.ch>
parents: 19399
diff changeset
84
12389
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
85 using rollback or extensions that destroy/modify history (mq,
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
86 rebase, etc.) can cause considerable confusion with shared
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
87 clones. In particular, if two shared clones are both updated to
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
88 the same changeset, and one of them destroys that changeset
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
89 with rollback, the other clone will suddenly stop working: all
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
90 operations will fail with "abort: working directory has unknown
4ac734b9b3fd Use note admonition
Erik Zielke <ez@aragost.com>
parents: 10798
diff changeset
91 parent". The only known workaround is to use debugsetparents on
19399
02465cafb0a9 share: remove reference to tip
Matt Mackall <mpm@selenic.com>
parents: 18825
diff changeset
92 the broken clone to reset it to a changeset that still exists.
8805
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
93 """
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
94
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
95 hg.share(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
96 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
97 source,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
98 dest=dest,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
99 update=not noupdate,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
100 bookmarks=bookmarks,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
101 relative=relative,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
102 )
35598
68e0bcb90357 subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents: 35281
diff changeset
103 return 0
8805
28eaf6f8abce share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
104
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
105
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
106 @command(b'unshare', [], b'', helpcategory=command.CATEGORY_MAINTENANCE)
15080
ea96bdda593c hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents: 12389
diff changeset
107 def unshare(ui, repo):
ea96bdda593c hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents: 12389
diff changeset
108 """convert a shared repository to a normal one
ea96bdda593c hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents: 12389
diff changeset
109
ea96bdda593c hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents: 12389
diff changeset
110 Copy the store data to the repo and remove the sharedpath data.
ea96bdda593c hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents: 12389
diff changeset
111 """
ea96bdda593c hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents: 12389
diff changeset
112
23678
965788d9ae09 localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23638
diff changeset
113 if not repo.shared():
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
114 raise error.Abort(_(b"this is not a shared repo"))
15080
ea96bdda593c hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents: 12389
diff changeset
115
35661
9f7ecc5bbc28 share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents: 35598
diff changeset
116 hg.unshare(ui, repo)
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
117
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
118
26320
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
119 # Wrap clone command to pass auto share options.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
120 def clone(orig, ui, source, *args, **opts):
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
121 pool = ui.config(b'share', b'pool')
26320
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
122 if pool:
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
123 pool = util.expandpath(pool)
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
124
33804
24c0a9a7fa86 share: use dict literal instead of dict(key=value)
Yuya Nishihara <yuya@tcha.org>
parents: 33803
diff changeset
125 opts[r'shareopts'] = {
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
126 b'pool': pool,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
127 b'mode': ui.config(b'share', b'poolnaming'),
33804
24c0a9a7fa86 share: use dict literal instead of dict(key=value)
Yuya Nishihara <yuya@tcha.org>
parents: 33803
diff changeset
128 }
26320
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
129
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
130 return orig(ui, source, *args, **opts)
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26225
diff changeset
131
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
132
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
133 def extsetup(ui):
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
134 extensions.wrapfunction(bookmarks, b'_getbkfile', getbkfile)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
135 extensions.wrapfunction(bookmarks.bmstore, b'_recordchange', recordchange)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
136 extensions.wrapfunction(bookmarks.bmstore, b'_writerepo', writerepo)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
137 extensions.wrapcommand(commands.table, b'clone', clone)
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
138
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
139
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
140 def _hassharedbookmarks(repo):
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
141 """Returns whether this repo has shared bookmarks"""
43112
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 41079
diff changeset
142 if bookmarks.bookmarksinstore(repo):
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 41079
diff changeset
143 # Kind of a lie, but it means that we skip our custom reads and writes
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 41079
diff changeset
144 # from/to the source repo.
526750cdd02d bookmarks: keep bookmarks in .hg/store if new config set
Martin von Zweigbergk <martinvonz@google.com>
parents: 41079
diff changeset
145 return False
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
146 try:
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
147 shared = repo.vfs.read(b'shared').splitlines()
26214
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25621
diff changeset
148 except IOError as inst:
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
149 if inst.errno != errno.ENOENT:
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
150 raise
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
151 return False
30185
f21e0d91d386 share: move magic string to a constant
Martijn Pieters <mjpieters@fb.com>
parents: 28000
diff changeset
152 return hg.sharedbookmarks in shared
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
153
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
154
27826
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27573
diff changeset
155 def getbkfile(orig, repo):
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
156 if _hassharedbookmarks(repo):
36945
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35765
diff changeset
157 srcrepo = hg.sharedreposource(repo)
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
158 if srcrepo is not None:
31831
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
159 # just orig(srcrepo) doesn't work as expected, because
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
160 # HG_PENDING refers repo.root.
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
161 try:
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
162 fp, pending = txnutil.trypending(
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
163 repo.root, repo.vfs, b'bookmarks'
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
164 )
31831
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
165 if pending:
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
166 # only in this case, bookmark information in repo
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
167 # is up-to-date.
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
168 return fp
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
169 fp.close()
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
170 except IOError as inst:
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
171 if inst.errno != errno.ENOENT:
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
172 raise
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
173
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
174 # otherwise, we should read bookmarks from srcrepo,
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
175 # because .hg/bookmarks in srcrepo might be already
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
176 # changed via another sharing repo
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
177 repo = srcrepo
31831
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
178
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
179 # TODO: Pending changes in repo are still invisible in
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
180 # srcrepo, because bookmarks.pending is written only into repo.
0332b8fafd05 bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30611
diff changeset
181 # See also https://www.mercurial-scm.org/wiki/SharedRepository
27826
34d26e22a2b0 bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents: 27573
diff changeset
182 return orig(repo)
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
183
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
184
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
185 def recordchange(orig, self, tr):
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
186 # Continue with write to local bookmarks file as usual
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
187 orig(self, tr)
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
188
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
189 if _hassharedbookmarks(self._repo):
36945
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35765
diff changeset
190 srcrepo = hg.sharedreposource(self._repo)
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
191 if srcrepo is not None:
43864
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43863
diff changeset
192 category = b'share-bookmarks'
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
193 tr.addpostclose(category, lambda tr: self._writerepo(srcrepo))
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
194
43863
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43112
diff changeset
195
27573
a7eecd021782 share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27227
diff changeset
196 def writerepo(orig, self, repo):
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
197 # First write local bookmarks file in case we ever unshare
27573
a7eecd021782 share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27227
diff changeset
198 orig(self, repo)
a7eecd021782 share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27227
diff changeset
199
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
200 if _hassharedbookmarks(self._repo):
36945
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35765
diff changeset
201 srcrepo = hg.sharedreposource(self._repo)
23556
141baca16059 share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents: 21772
diff changeset
202 if srcrepo is not None:
27573
a7eecd021782 share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27227
diff changeset
203 orig(self, srcrepo)