Mercurial > hg
annotate hgext/share.py @ 38761:d558e53cd6b6 stable
context: safegaurd against 'lx' being passed as file flag in manifest
Subversion can have a file as executable link. When using hgsubversion, we will
have both islink and isexec True. This will lead to _flags being set to `lx`.
However, manifest expects flag to be one-byte so it will crash if 'lx' is
passed. Also it's impossible to have an executable link.
This patch will safegaurd us from having 'lx' being a possible value.
This was authored by Ivan Lezhankin from Yandex.
Differential Revision: https://phab.mercurial-scm.org/D3985
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Wed, 25 Jul 2018 21:19:06 +0300 |
parents | 0fe7e39dc683 |
children | c303d65d2e34 |
rev | line source |
---|---|
8801
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 | 4 # GNU General Public License version 2 or any later version. |
8801
28eaf6f8abce
share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
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:
25666
diff
changeset
|
7 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
8 Automatic Pooled Storage for Clones |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
9 ----------------------------------- |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
10 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
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:
25666
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:
25666
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:
25666
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:
25666
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:
25666
diff
changeset
|
16 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
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:
25666
diff
changeset
|
18 |
25851
bf3d10f0c34a
share: make option docs more check-config friendly
Matt Mackall <mpm@selenic.com>
parents:
25761
diff
changeset
|
19 ``share.pool`` |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
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:
25666
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:
25666
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:
25666
diff
changeset
|
23 |
25851
bf3d10f0c34a
share: make option docs more check-config friendly
Matt Mackall <mpm@selenic.com>
parents:
25761
diff
changeset
|
24 ``share.poolnaming`` |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
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:
25666
diff
changeset
|
26 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
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:
25666
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:
25666
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:
25666
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:
25666
diff
changeset
|
31 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
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:
25666
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:
25666
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:
25666
diff
changeset
|
35 that was cloned before. |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
36 |
34948
ff178743e59b
help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents:
34878
diff
changeset
|
37 The default naming mode is "identity". |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
38 ''' |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8807
diff
changeset
|
39 |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
40 from __future__ import absolute_import |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
41 |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
42 import errno |
8801
28eaf6f8abce
share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 from mercurial.i18n import _ |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
44 from mercurial import ( |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
45 bookmarks, |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
46 commands, |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
47 error, |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
48 extensions, |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
49 hg, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31334
diff
changeset
|
50 registrar, |
31052
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
51 txnutil, |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
52 util, |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
53 ) |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29424
diff
changeset
|
54 |
21253
d2ce7a20fe86
share: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20056
diff
changeset
|
55 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31334
diff
changeset
|
56 command = registrar.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29506
diff
changeset
|
57 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24364
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:
24364
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:
24364
diff
changeset
|
60 # leave the attribute unspecified. |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29506
diff
changeset
|
61 testedwith = 'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
15082
diff
changeset
|
62 |
21253
d2ce7a20fe86
share: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20056
diff
changeset
|
63 @command('share', |
24364
135b23868f45
commands: replace "working copy" with "working directory" in help/messages
Yuya Nishihara <yuya@tcha.org>
parents:
23883
diff
changeset
|
64 [('U', 'noupdate', None, _('do not create a working directory')), |
31133
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31052
diff
changeset
|
65 ('B', 'bookmarks', None, _('also share bookmarks')), |
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31052
diff
changeset
|
66 ('', 'relative', None, _('point to source using a relative path ' |
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31052
diff
changeset
|
67 '(EXPERIMENTAL)')), |
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31052
diff
changeset
|
68 ], |
23614
cd79fb4d75fd
share: add option to share bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
23548
diff
changeset
|
69 _('[-U] [-B] SOURCE [DEST]'), |
21772
5a4d1a6c605f
share: define norepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21253
diff
changeset
|
70 norepo=True) |
31133
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31052
diff
changeset
|
71 def share(ui, source, dest=None, noupdate=False, bookmarks=False, |
23080c03a604
share: add --relative flag to store a relative path to the source
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
31052
diff
changeset
|
72 relative=False): |
10798
e46c19c586fa
share: drop experimental label
Martin Geisler <mg@lazybytes.net>
parents:
10263
diff
changeset
|
73 """create a new shared repository |
8801
28eaf6f8abce
share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
74 |
9273
4b8b0c124b99
share: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9075
diff
changeset
|
75 Initialize a new repository and working directory that shares its |
23614
cd79fb4d75fd
share: add option to share bookmarks
Ryan McElroy <rmcelroy@fb.com>
parents:
23548
diff
changeset
|
76 history (and optionally bookmarks) with another repository. |
8801
28eaf6f8abce
share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
77 |
12389 | 78 .. note:: |
19997
de16c673455b
documentation: add an extra newline after note directive
Simon Heimberg <simohe@besonet.ch>
parents:
19399
diff
changeset
|
79 |
12389 | 80 using rollback or extensions that destroy/modify history (mq, |
81 rebase, etc.) can cause considerable confusion with shared | |
82 clones. In particular, if two shared clones are both updated to | |
83 the same changeset, and one of them destroys that changeset | |
84 with rollback, the other clone will suddenly stop working: all | |
85 operations will fail with "abort: working directory has unknown | |
86 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
|
87 the broken clone to reset it to a changeset that still exists. |
8801
28eaf6f8abce
share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
88 """ |
28eaf6f8abce
share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
89 |
34815
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34498
diff
changeset
|
90 hg.share(ui, source, dest=dest, update=not noupdate, |
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34498
diff
changeset
|
91 bookmarks=bookmarks, relative=relative) |
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34498
diff
changeset
|
92 return 0 |
8801
28eaf6f8abce
share: add experimental share extension
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
93 |
21253
d2ce7a20fe86
share: declare commands using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
20056
diff
changeset
|
94 @command('unshare', [], '') |
15079
ea96bdda593c
hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents:
12389
diff
changeset
|
95 def unshare(ui, repo): |
ea96bdda593c
hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents:
12389
diff
changeset
|
96 """convert a shared repository to a normal one |
ea96bdda593c
hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents:
12389
diff
changeset
|
97 |
ea96bdda593c
hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents:
12389
diff
changeset
|
98 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
|
99 """ |
ea96bdda593c
hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents:
12389
diff
changeset
|
100 |
23666
965788d9ae09
localrepo: introduce shared method to check if a repository is shared
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23626
diff
changeset
|
101 if not repo.shared(): |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25851
diff
changeset
|
102 raise error.Abort(_("this is not a shared repo")) |
15079
ea96bdda593c
hgext: introduce unshare command
Simon Heimberg <simohe@besonet.ch>
parents:
12389
diff
changeset
|
103 |
34878
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
104 hg.unshare(ui, repo) |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
105 |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
106 # Wrap clone command to pass auto share options. |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
107 def clone(orig, ui, source, *args, **opts): |
34497
f9734580f2b6
configitems: register the 'share.pool' config
Boris Feld <boris.feld@octobus.net>
parents:
33515
diff
changeset
|
108 pool = ui.config('share', 'pool') |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
109 if pool: |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
110 pool = util.expandpath(pool) |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
111 |
33021
24c0a9a7fa86
share: use dict literal instead of dict(key=value)
Yuya Nishihara <yuya@tcha.org>
parents:
33020
diff
changeset
|
112 opts[r'shareopts'] = { |
24c0a9a7fa86
share: use dict literal instead of dict(key=value)
Yuya Nishihara <yuya@tcha.org>
parents:
33020
diff
changeset
|
113 'pool': pool, |
34498
308aa280ed82
configitems: register the 'share.poolnaming' config
Boris Feld <boris.feld@octobus.net>
parents:
34497
diff
changeset
|
114 'mode': ui.config('share', 'poolnaming'), |
33021
24c0a9a7fa86
share: use dict literal instead of dict(key=value)
Yuya Nishihara <yuya@tcha.org>
parents:
33020
diff
changeset
|
115 } |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
116 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
117 return orig(ui, source, *args, **opts) |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
118 |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
119 def extsetup(ui): |
27186
34d26e22a2b0
bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents:
26933
diff
changeset
|
120 extensions.wrapfunction(bookmarks, '_getbkfile', getbkfile) |
33515
3325c7dcabaa
bookmark: deprecate 'recordchange' in favor of 'applychanges'
Boris Feld <boris.feld@octobus.net>
parents:
33021
diff
changeset
|
121 extensions.wrapfunction(bookmarks.bmstore, '_recordchange', recordchange) |
26933
a7eecd021782
share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
122 extensions.wrapfunction(bookmarks.bmstore, '_writerepo', writerepo) |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25666
diff
changeset
|
123 extensions.wrapcommand(commands.table, 'clone', clone) |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
124 |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
125 def _hassharedbookmarks(repo): |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
126 """Returns whether this repo has shared bookmarks""" |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
127 try: |
23883
7e71898a7cdc
share: replace the bookmarks.shared file with an entry on a new "shared" file
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23666
diff
changeset
|
128 shared = repo.vfs.read('shared').splitlines() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25186
diff
changeset
|
129 except IOError as inst: |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
130 if inst.errno != errno.ENOENT: |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
131 raise |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
132 return False |
29424
f21e0d91d386
share: move magic string to a constant
Martijn Pieters <mjpieters@fb.com>
parents:
27353
diff
changeset
|
133 return hg.sharedbookmarks in shared |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
134 |
27186
34d26e22a2b0
bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents:
26933
diff
changeset
|
135 def getbkfile(orig, repo): |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
136 if _hassharedbookmarks(repo): |
36159
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34982
diff
changeset
|
137 srcrepo = hg.sharedreposource(repo) |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
138 if srcrepo is not None: |
31052
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
139 # just orig(srcrepo) doesn't work as expected, because |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
140 # HG_PENDING refers repo.root. |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
141 try: |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
142 fp, pending = txnutil.trypending(repo.root, repo.vfs, |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
143 'bookmarks') |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
144 if pending: |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
145 # only in this case, bookmark information in repo |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
146 # is up-to-date. |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
147 return fp |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
148 fp.close() |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
149 except IOError as inst: |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
150 if inst.errno != errno.ENOENT: |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
151 raise |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
152 |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
153 # otherwise, we should read bookmarks from srcrepo, |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
154 # because .hg/bookmarks in srcrepo might be already |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
155 # changed via another sharing repo |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
156 repo = srcrepo |
31052
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
157 |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
158 # TODO: Pending changes in repo are still invisible in |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
159 # srcrepo, because bookmarks.pending is written only into repo. |
0332b8fafd05
bookmarks: check HG_PENDING strictly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29841
diff
changeset
|
160 # See also https://www.mercurial-scm.org/wiki/SharedRepository |
27186
34d26e22a2b0
bookmarks: hoist getbkfile out of bmstore class
Augie Fackler <augie@google.com>
parents:
26933
diff
changeset
|
161 return orig(repo) |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
162 |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
163 def recordchange(orig, self, tr): |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
164 # Continue with write to local bookmarks file as usual |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
165 orig(self, tr) |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
166 |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
167 if _hassharedbookmarks(self._repo): |
36159
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34982
diff
changeset
|
168 srcrepo = hg.sharedreposource(self._repo) |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
169 if srcrepo is not None: |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
170 category = 'share-bookmarks' |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
171 tr.addpostclose(category, lambda tr: self._writerepo(srcrepo)) |
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
172 |
26933
a7eecd021782
share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
173 def writerepo(orig, self, repo): |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
174 # First write local bookmarks file in case we ever unshare |
26933
a7eecd021782
share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
175 orig(self, repo) |
a7eecd021782
share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
176 |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
177 if _hassharedbookmarks(self._repo): |
36159
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34982
diff
changeset
|
178 srcrepo = hg.sharedreposource(self._repo) |
23548
141baca16059
share: implement shared bookmark functionality
Ryan McElroy <rmcelroy@fb.com>
parents:
21772
diff
changeset
|
179 if srcrepo is not None: |
26933
a7eecd021782
share: wrap bmstore._writerepo for transaction sensitivity (issue4940)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26587
diff
changeset
|
180 orig(self, srcrepo) |