Mercurial > hg
annotate mercurial/localrepo.py @ 15292:7fa471248185 stable
discovery: Fix error print mentioning a 'None' branch
When talking to old server discovery use heads of the 'None' branch to refer to
topological heads. This use of None should never make it to the end user.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Mon, 17 Oct 2011 11:37:59 +0200 |
parents | 7196ed7a1505 |
children | e174353e8cda |
rev | line source |
---|---|
1089 | 1 # localrepo.py - read/write repository class for mercurial |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
2 # |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
7 |
6211
f89fd07fc51d
Expand import * to allow Pyflakes to find problems
Joel Rosdahl <joel@rosdahl.net>
parents:
6210
diff
changeset
|
8 from node import bin, hex, nullid, nullrev, short |
3891 | 9 from i18n import _ |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
10 import repo, changegroup, subrepo, discovery, pushkey |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
11 import changelog, dirstate, filelog, manifest, context, bookmarks |
8390
beae42f3d93b
drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8312
diff
changeset
|
12 import lock, transaction, store, encoding |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
13 import scmutil, util, extensions, hook, error, revset |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
14 import match as matchmod |
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
15 import merge as mergemod |
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
16 import tags as tagsmod |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
17 from lock import release |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11301
diff
changeset
|
18 import weakref, errno, os, time, inspect |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
19 propertycache = util.propertycache |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
20 filecache = scmutil.filecache |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
21 |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2601
diff
changeset
|
22 class localrepository(repo.repository): |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
23 capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey', |
13741
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
24 'known', 'getbundle')) |
14270
d6907a5674a2
revlog: support writing generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14232
diff
changeset
|
25 supportedformats = set(('revlogv1', 'generaldelta')) |
12687
34d8247a4595
store: encode first period or space in filenames (issue1713)
Adrian Buehlmann <adrian@cadifra.com>
parents:
12622
diff
changeset
|
26 supported = supportedformats | set(('store', 'fncache', 'shared', |
34d8247a4595
store: encode first period or space in filenames (issue1713)
Adrian Buehlmann <adrian@cadifra.com>
parents:
12622
diff
changeset
|
27 'dotencode')) |
2439
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
28 |
14363
82f3b0f3f0a5
localrepo, sshrepo: use Boolean create argument in __init__
Martin Geisler <mg@lazybytes.net>
parents:
14333
diff
changeset
|
29 def __init__(self, baseui, path=None, create=False): |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2601
diff
changeset
|
30 repo.repository.__init__(self) |
11154
17031fea4e95
expand paths to local repository or bundle in appropriate classes
Alexander Solovyov <piranha@piranha.org.ua>
parents:
10925
diff
changeset
|
31 self.root = os.path.realpath(util.expandpath(path)) |
4170
7b5723c95a82
Save an absolute path in repo.path
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4168
diff
changeset
|
32 self.path = os.path.join(self.root, ".hg") |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
33 self.origroot = path |
14220
21b8ce4d3331
rename path_auditor to pathauditor
Adrian Buehlmann <adrian@cadifra.com>
parents:
14195
diff
changeset
|
34 self.auditor = scmutil.pathauditor(self.root, self._checknested) |
13970
d13913355390
move opener from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13959
diff
changeset
|
35 self.opener = scmutil.opener(self.path) |
d13913355390
move opener from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13959
diff
changeset
|
36 self.wopener = scmutil.opener(self.root) |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
37 self.baseui = baseui |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
38 self.ui = baseui.copy() |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
39 |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
40 try: |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
41 self.ui.readconfig(self.join("hgrc"), self.root) |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
42 extensions.loadall(self.ui) |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
43 except IOError: |
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
44 pass |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
45 |
3035
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
46 if not os.path.isdir(self.path): |
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
47 if create: |
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
48 if not os.path.exists(path): |
11640
c3e8ab80ee90
init: create target directory recursively
Mads Kiilerich <mads@kiilerich.com>
parents:
11486
diff
changeset
|
49 util.makedirs(path) |
13795
43b5fe18ea6c
set NOT_CONTENT_INDEXED on .hg dir (issue2694)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13788
diff
changeset
|
50 util.makedir(self.path, notindexed=True) |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
51 requirements = ["revlogv1"] |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
52 if self.ui.configbool('format', 'usestore', True): |
4163
fe41d9a186ab
Allow disabling store format to work with absurdly long filenames
Matt Mackall <mpm@selenic.com>
parents:
4161
diff
changeset
|
53 os.mkdir(os.path.join(self.path, "store")) |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
54 requirements.append("store") |
8797
9ed150d2fbd5
repo: set up ui and extensions earlier
Matt Mackall <mpm@selenic.com>
parents:
8796
diff
changeset
|
55 if self.ui.configbool('format', 'usefncache', True): |
7234
ae70fe6143fc
add format.usefncache config option (default is true)
Adrian Buehlmann <adrian@cadifra.com>
parents:
7233
diff
changeset
|
56 requirements.append("fncache") |
12687
34d8247a4595
store: encode first period or space in filenames (issue1713)
Adrian Buehlmann <adrian@cadifra.com>
parents:
12622
diff
changeset
|
57 if self.ui.configbool('format', 'dotencode', True): |
34d8247a4595
store: encode first period or space in filenames (issue1713)
Adrian Buehlmann <adrian@cadifra.com>
parents:
12622
diff
changeset
|
58 requirements.append('dotencode') |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
59 # create an invalid changelog |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
60 self.opener.append( |
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
61 "00changelog.i", |
4166
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
62 '\0\0\0\2' # represents revlogv2 |
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
63 ' dummy changelog to prevent using the old repo layout' |
c0271aba6abe
small fixes for the parent patch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4163
diff
changeset
|
64 ) |
14270
d6907a5674a2
revlog: support writing generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14232
diff
changeset
|
65 if self.ui.configbool('format', 'generaldelta', False): |
d6907a5674a2
revlog: support writing generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14232
diff
changeset
|
66 requirements.append("generaldelta") |
14905
207935cda6dc
localrepo: make requirements attribute of newly-created repos contain a set
Andrew Pritchard <andrewp@fogcreek.com>
parents:
14904
diff
changeset
|
67 requirements = set(requirements) |
3035
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
68 else: |
7637 | 69 raise error.RepoError(_("repository %s not found") % path) |
3035
4d0e0f149581
localrepo: move the repo creation code, fail if the repo exists
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3019
diff
changeset
|
70 elif create: |
7637 | 71 raise error.RepoError(_("repository %s already exists") % path) |
3851
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
72 else: |
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
73 try: |
14482
58b36e9ea783
introduce new function scmutil.readrequires
Adrian Buehlmann <adrian@cadifra.com>
parents:
14434
diff
changeset
|
74 requirements = scmutil.readrequires(self.opener, self.supported) |
3851
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
75 except IOError, inst: |
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
76 if inst.errno != errno.ENOENT: |
8f18e31c4441
add "requires" file to the repo, specifying the requirements
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3850
diff
changeset
|
77 raise |
14482
58b36e9ea783
introduce new function scmutil.readrequires
Adrian Buehlmann <adrian@cadifra.com>
parents:
14434
diff
changeset
|
78 requirements = set() |
405 | 79 |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
80 self.sharedpath = self.path |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
81 try: |
15101
a21ccf4412d5
share: allow trailing newline on .hg/sharedpath.
Greg Ward <greg@gerg.ca>
parents:
15097
diff
changeset
|
82 s = os.path.realpath(self.opener.read("sharedpath").rstrip('\n')) |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
83 if not os.path.exists(s): |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
84 raise error.RepoError( |
8908
105343f9f744
Fix warning: Seen unexpected token "%"
Dongsheng Song <dongsheng.song@gmail.com>
parents:
8813
diff
changeset
|
85 _('.hg/sharedpath points to nonexistent directory %s') % s) |
8799
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
86 self.sharedpath = s |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
87 except IOError, inst: |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
88 if inst.errno != errno.ENOENT: |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
89 raise |
87d1fd40f57e
repo: add internal support for sharing store directories
Matt Mackall <mpm@selenic.com>
parents:
8797
diff
changeset
|
90 |
13970
d13913355390
move opener from util to scmutil
Adrian Buehlmann <adrian@cadifra.com>
parents:
13959
diff
changeset
|
91 self.store = store.store(requirements, self.sharedpath, scmutil.opener) |
6840
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
92 self.spath = self.store.path |
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
93 self.sopener = self.store.opener |
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
94 self.sjoin = self.store.join |
80e51429cb9a
introduce store classes
Adrian Buehlmann <adrian@cadifra.com>
parents:
6839
diff
changeset
|
95 self.opener.createmode = self.store.createmode |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
96 self._applyrequirements(requirements) |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
97 if create: |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
98 self._writerequirements() |
3850
a4457828ca1a
move code around
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3803
diff
changeset
|
99 |
9146
5614a628d173
localrepo: rename in-memory tag cache instance attributes (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9145
diff
changeset
|
100 |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13037
diff
changeset
|
101 self._branchcache = None |
6121
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
102 self._branchcachetip = None |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
103 self.filterpats = {} |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
104 self._datafilters = {} |
4916
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
105 self._transref = self._lockref = self._wlockref = None |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
106 |
14929
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
107 # A cache for various files under .hg/ that tracks file changes, |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
108 # (used by the filecache decorator) |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
109 # |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
110 # Maps a property name to its util.filecacheentry |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
111 self._filecache = {} |
4bf9493e7b07
localrepo: add a cache with stat info for files under .hg/
Idan Kamara <idankk86@gmail.com>
parents:
14905
diff
changeset
|
112 |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
113 def _applyrequirements(self, requirements): |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
114 self.requirements = requirements |
14333
31a5973fcf96
revlog: get rid of defversion
Sune Foldager <cryo@cyanite.org>
parents:
14274
diff
changeset
|
115 openerreqs = set(('revlogv1', 'generaldelta')) |
31a5973fcf96
revlog: get rid of defversion
Sune Foldager <cryo@cyanite.org>
parents:
14274
diff
changeset
|
116 self.sopener.options = dict((r, 1) for r in requirements |
31a5973fcf96
revlog: get rid of defversion
Sune Foldager <cryo@cyanite.org>
parents:
14274
diff
changeset
|
117 if r in openerreqs) |
12295
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
118 |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
119 def _writerequirements(self): |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
120 reqfile = self.opener("requires", "w") |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
121 for r in self.requirements: |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
122 reqfile.write("%s\n" % r) |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
123 reqfile.close() |
3388ab21d768
localrepo: factor out requirement application and write
Sune Foldager <cryo@cyanite.org>
parents:
12176
diff
changeset
|
124 |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
125 def _checknested(self, path): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
126 """Determine if path is a legal nested repository.""" |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
127 if not path.startswith(self.root): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
128 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
129 subpath = path[len(self.root) + 1:] |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
130 |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
131 # XXX: Checking against the current working copy is wrong in |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
132 # the sense that it can reject things like |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
133 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
134 # $ hg cat -r 10 sub/x.txt |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
135 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
136 # if sub/ is no longer a subrepository in the working copy |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
137 # parent revision. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
138 # |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
139 # However, it can of course also allow things that would have |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
140 # been rejected before, such as the above cat command if sub/ |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
141 # is a subrepository now, but was a normal directory before. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
142 # The old path auditor would have rejected by mistake since it |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
143 # panics when it sees sub/.hg/. |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
144 # |
12174
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
145 # All in all, checking against the working copy seems sensible |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
146 # since we want to prevent access to nested repositories on |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
147 # the filesystem *now*. |
7bccd04292a2
localrepo: check nested repos against working directory
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
148 ctx = self[None] |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
149 parts = util.splitpath(subpath) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
150 while parts: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
151 prefix = os.sep.join(parts) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
152 if prefix in ctx.substate: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
153 if prefix == subpath: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
154 return True |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
155 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
156 sub = ctx.sub(prefix) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
157 return sub.checknested(subpath[len(prefix) + 1:]) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
158 else: |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
159 parts.pop() |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
160 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
161 |
14933
f61a85b2affa
localrepo: decorate _bookmarks/current with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14932
diff
changeset
|
162 @filecache('bookmarks') |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
163 def _bookmarks(self): |
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
164 return bookmarks.read(self) |
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
165 |
14933
f61a85b2affa
localrepo: decorate _bookmarks/current with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14932
diff
changeset
|
166 @filecache('bookmarks.current') |
13355
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
167 def _bookmarkcurrent(self): |
cce2e7b77e36
bookmarks: move property methods into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13341
diff
changeset
|
168 return bookmarks.readcurrent(self) |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12127
diff
changeset
|
169 |
15237
7196ed7a1505
bookmarks: delegate writing to the repo just like reading
Augie Fackler <durin42@gmail.com>
parents:
15187
diff
changeset
|
170 def _writebookmarks(self, marks): |
7196ed7a1505
bookmarks: delegate writing to the repo just like reading
Augie Fackler <durin42@gmail.com>
parents:
15187
diff
changeset
|
171 bookmarks.write(self) |
7196ed7a1505
bookmarks: delegate writing to the repo just like reading
Augie Fackler <durin42@gmail.com>
parents:
15187
diff
changeset
|
172 |
14932
d3ac759a6d66
localrepo: decorate changelog() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14931
diff
changeset
|
173 @filecache('00changelog.i', True) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
174 def changelog(self): |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
175 c = changelog.changelog(self.sopener) |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
176 if 'HG_PENDING' in os.environ: |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
177 p = os.environ['HG_PENDING'] |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
178 if p.startswith(self.root): |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
179 c.readpending('00changelog.i.a') |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
180 return c |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
181 |
14934
019fe0b0a7af
localrepo: decorate manifest() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14933
diff
changeset
|
182 @filecache('00manifest.i', True) |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
183 def manifest(self): |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
184 return manifest.manifest(self.sopener) |
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
185 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
186 @filecache('dirstate') |
8260
54a4b520bd7d
localrepo: use propertycache
Matt Mackall <mpm@selenic.com>
parents:
8244
diff
changeset
|
187 def dirstate(self): |
13032
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
188 warned = [0] |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
189 def validate(node): |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
190 try: |
14064
e4bfb9c337f3
remove unused imports and variables
Alexander Solovyov <alexander@solovyov.net>
parents:
14056
diff
changeset
|
191 self.changelog.rev(node) |
13032
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
192 return node |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
193 except error.LookupError: |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
194 if not warned[0]: |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
195 warned[0] = True |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
196 self.ui.warn(_("warning: ignoring unknown" |
13037
9beac11b8c56
localrepo: move string formatting out of gettext call
Martin Geisler <mg@aragost.com>
parents:
13032
diff
changeset
|
197 " working parent %s!\n") % short(node)) |
13032
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
198 return nullid |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
199 |
e41e2b79883d
dirstate: warn on invalid parents rather than aborting
Matt Mackall <mpm@selenic.com>
parents:
13001
diff
changeset
|
200 return dirstate.dirstate(self.opener, self.ui, self.root, validate) |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
201 |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
202 def __getitem__(self, changeid): |
8527
f9a80054dd3c
use 'x is None' instead of 'x == None'
Martin Geisler <mg@lazybytes.net>
parents:
8515
diff
changeset
|
203 if changeid is None: |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
204 return context.workingctx(self) |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
205 return context.changectx(self, changeid) |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
206 |
9924
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
207 def __contains__(self, changeid): |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
208 try: |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
209 return bool(self.lookup(changeid)) |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
210 except error.RepoLookupError: |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
211 return False |
ea3acaae25bb
localrepo: support 'rev in repo' syntax
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9820
diff
changeset
|
212 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
213 def __nonzero__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
214 return True |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
215 |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
216 def __len__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
217 return len(self.changelog) |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
218 |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
219 def __iter__(self): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
220 for i in xrange(len(self)): |
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
221 yield i |
2155
ff255b41b4aa
support hooks written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2150
diff
changeset
|
222 |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
223 def set(self, expr, *args): |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
224 ''' |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
225 Yield a context for each matching revision, after doing arg |
14904
ff2d907a5af8
localrepo: fix comment on set
Matt Mackall <mpm@selenic.com>
parents:
14902
diff
changeset
|
226 replacement via revset.formatspec |
14902
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
227 ''' |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
228 |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
229 expr = revset.formatspec(expr, *args) |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
230 m = revset.match(None, expr) |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
231 for r in m(self, range(len(self))): |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
232 yield self[r] |
96a72cbc6c29
localrepo: add set method to iterate over a given revset
Matt Mackall <mpm@selenic.com>
parents:
14870
diff
changeset
|
233 |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
234 def url(self): |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
235 return 'file:' + self.root |
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
236 |
1718
c1996b84d4f5
make hook code nicer.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1717
diff
changeset
|
237 def hook(self, name, throw=False, **args): |
4622
fff50306e6dd
hooks: separate hook code into a separate module
Matt Mackall <mpm@selenic.com>
parents:
4619
diff
changeset
|
238 return hook.hook(self.ui, self, name, throw, **args) |
487 | 239 |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
240 tag_disallowed = ':\r\n' |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
241 |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
242 def _tag(self, names, node, message, local, user, date, extra={}): |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
243 if isinstance(names, str): |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
244 allchars = names |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
245 names = (names,) |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
246 else: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
247 allchars = ''.join(names) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
248 for c in self.tag_disallowed: |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
249 if c in allchars: |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
250 raise util.Abort(_('%r cannot be used in a tag name') % c) |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
251 |
11063
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
252 branches = self.branchmap() |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
253 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
254 self.hook('pretag', throw=True, node=hex(node), tag=name, |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
255 local=local) |
11063
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
256 if name in branches: |
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
257 self.ui.warn(_("warning: tag %s conflicts with existing" |
eb23c876c111
tag: warn users about tag/branch possible name conflicts
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11047
diff
changeset
|
258 " branch name\n") % name) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
259 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
260 def writetags(fp, names, munge, prevtags): |
5985
850494d62674
localrepo._tag: add a seek before writing the new tag
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5882
diff
changeset
|
261 fp.seek(0, 2) |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
262 if prevtags and prevtags[-1] != '\n': |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
263 fp.write('\n') |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
264 for name in names: |
6671
938eddd76237
tag: record tag we're superseding, if any (issue 1102)
Matt Mackall <mpm@selenic.com>
parents:
6647
diff
changeset
|
265 m = munge and munge(name) or name |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
266 if self._tagscache.tagtypes and name in self._tagscache.tagtypes: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
267 old = self.tags().get(name, nullid) |
6671
938eddd76237
tag: record tag we're superseding, if any (issue 1102)
Matt Mackall <mpm@selenic.com>
parents:
6647
diff
changeset
|
268 fp.write('%s %s\n' % (hex(old), m)) |
938eddd76237
tag: record tag we're superseding, if any (issue 1102)
Matt Mackall <mpm@selenic.com>
parents:
6647
diff
changeset
|
269 fp.write('%s %s\n' % (hex(node), m)) |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
270 fp.close() |
5081
ea7b982b6c08
Remove trailing spaces
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4932
diff
changeset
|
271 |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
272 prevtags = '' |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
273 if local: |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
274 try: |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
275 fp = self.opener('localtags', 'r+') |
7875
553aa0cbeab6
cleanup: drop unused assignments
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7848
diff
changeset
|
276 except IOError: |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
277 fp = self.opener('localtags', 'a') |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
278 else: |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
279 prevtags = fp.read() |
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
280 |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
281 # local tags are stored in the current charset |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
282 writetags(fp, names, None, prevtags) |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
283 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
284 self.hook('tag', node=hex(node), tag=name, local=local) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
285 return |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
286 |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
287 try: |
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
288 fp = self.wfile('.hgtags', 'rb+') |
14646
001788ef4bbb
localrepo: don't attempt to open .hgtags twice if the error isn't ENOENT
Idan Kamara <idankk86@gmail.com>
parents:
14603
diff
changeset
|
289 except IOError, e: |
001788ef4bbb
localrepo: don't attempt to open .hgtags twice if the error isn't ENOENT
Idan Kamara <idankk86@gmail.com>
parents:
14603
diff
changeset
|
290 if e.errno != errno.ENOENT: |
001788ef4bbb
localrepo: don't attempt to open .hgtags twice if the error isn't ENOENT
Idan Kamara <idankk86@gmail.com>
parents:
14603
diff
changeset
|
291 raise |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
292 fp = self.wfile('.hgtags', 'ab') |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
293 else: |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
294 prevtags = fp.read() |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
295 |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
296 # committed tags are stored in UTF-8 |
7948
de377b1a9a84
move encoding bits from util to encoding
Matt Mackall <mpm@selenic.com>
parents:
7930
diff
changeset
|
297 writetags(fp, names, encoding.fromlocal, prevtags) |
4932
f0c25ed40ec6
tag: handle .hgtags and .hg/localtags with missing final newline (issue 601)
Bryan O'Sullivan <bos@serpentine.com>
parents:
4929
diff
changeset
|
298 |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13391
diff
changeset
|
299 fp.close() |
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13391
diff
changeset
|
300 |
8402
0ad521500424
tag: drop unused use_dirstate and parent from _tag()
Matt Mackall <mpm@selenic.com>
parents:
8401
diff
changeset
|
301 if '.hgtags' not in self.dirstate: |
11303
a1aad8333864
move working dir/dirstate methods from localrepo to workingctx
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11301
diff
changeset
|
302 self[None].add(['.hgtags']) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
303 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
304 m = matchmod.exact(self.root, '', ['.hgtags']) |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
305 tagnode = self.commit(message, user, date, extra=extra, match=m) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
306 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
307 for name in names: |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
308 self.hook('tag', node=hex(node), tag=name, local=local) |
4118
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
309 |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
310 return tagnode |
35b39097c3e6
Break core of repo.tag into dirstate/hook-free repo._tag for convert-repo
Brendan Cully <brendan@kublai.com>
parents:
4070
diff
changeset
|
311 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
312 def tag(self, names, node, message, local, user, date): |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
313 '''tag a revision with one or more symbolic names. |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
314 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
315 names is a list of strings or, when adding a single tag, names may be a |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
316 string. |
6334
7016f7fb8fe3
tab/space cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6321
diff
changeset
|
317 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
318 if local is True, the tags are stored in a per-repository file. |
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
319 otherwise, they are stored in the .hgtags file, and a new |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
320 changeset is committed with the change. |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
321 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
322 keyword arguments: |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
323 |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
324 local: whether to store tags in non-version-controlled file |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
325 (default False) |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
326 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
327 message: commit message to use if committing |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
328 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
329 user: name of user to use if committing |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
330 |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
331 date: date tuple to use if committing''' |
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
332 |
13133
c1492615cdee
tag: don't check .hgtags status if --local passed
Kevin Bullock <kbullock@ringworld.org>
parents:
13000
diff
changeset
|
333 if not local: |
c1492615cdee
tag: don't check .hgtags status if --local passed
Kevin Bullock <kbullock@ringworld.org>
parents:
13000
diff
changeset
|
334 for x in self.status()[:5]: |
c1492615cdee
tag: don't check .hgtags status if --local passed
Kevin Bullock <kbullock@ringworld.org>
parents:
13000
diff
changeset
|
335 if '.hgtags' in x: |
c1492615cdee
tag: don't check .hgtags status if --local passed
Kevin Bullock <kbullock@ringworld.org>
parents:
13000
diff
changeset
|
336 raise util.Abort(_('working copy of .hgtags is changed ' |
c1492615cdee
tag: don't check .hgtags status if --local passed
Kevin Bullock <kbullock@ringworld.org>
parents:
13000
diff
changeset
|
337 '(please commit .hgtags manually)')) |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
338 |
7814
4421abf8c85d
tag: force load of tag cache
Matt Mackall <mpm@selenic.com>
parents:
7803
diff
changeset
|
339 self.tags() # instantiate the cache |
6321
55ba3bc5b8fd
tag: allow multiple tags to be added or removed
John Coomes <john.coomes@sun.com>
parents:
6312
diff
changeset
|
340 self._tag(names, node, message, local, user, date) |
2601
00fc88b0b256
move most of tag code to localrepository class.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2581
diff
changeset
|
341 |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
342 @propertycache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
343 def _tagscache(self): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
344 '''Returns a tagscache object that contains various tags related caches.''' |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
345 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
346 # This simplifies its cache management by having one decorated |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
347 # function (this one) and the rest simply fetch things from it. |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
348 class tagscache(object): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
349 def __init__(self): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
350 # These two define the set of tags for this repository. tags |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
351 # maps tag name to node; tagtypes maps tag name to 'global' or |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
352 # 'local'. (Global tags are defined by .hgtags across all |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
353 # heads, and local tags are defined in .hg/localtags.) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
354 # They constitute the in-memory cache of tags. |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
355 self.tags = self.tagtypes = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
356 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
357 self.nodetagscache = self.tagslist = None |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
358 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
359 cache = tagscache() |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
360 cache.tags, cache.tagtypes = self._findtags() |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
361 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
362 return cache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
363 |
343 | 364 def tags(self): |
365 '''return a mapping of tag to node''' | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
366 return self._tagscache.tags |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
367 |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
368 def _findtags(self): |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
369 '''Do the hard work of finding tags. Return a pair of dicts |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
370 (tags, tagtypes) where tags maps tag name to node, and tagtypes |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
371 maps tag name to a string like \'global\' or \'local\'. |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
372 Subclasses or extensions are free to add their own tags, but |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
373 should be aware that the returned dicts will be retained for the |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
374 duration of the localrepo object.''' |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
375 |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
376 # XXX what tagtype should subclasses/extensions use? Currently |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
377 # mq and bookmarks add tags, but do not set the tagtype at all. |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
378 # Should each extension invent its own tag type? Should there |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
379 # be one tagtype for all such "virtual" tags? Or is the status |
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
380 # quo fine? |
4210
caff92047e87
Refactor tags code to prepare for improving the algorithm
Matt Mackall <mpm@selenic.com>
parents:
4178
diff
changeset
|
381 |
9148
b7837f0ed9fe
localrepo: factor updatetags() out of readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9147
diff
changeset
|
382 alltags = {} # map tag name to (node, hist) |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
383 tagtypes = {} |
659 | 384 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
385 tagsmod.findglobaltags(self.ui, self, alltags, tagtypes) |
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
386 tagsmod.readlocaltags(self.ui, self, alltags, tagtypes) |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
387 |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
388 # Build the return dicts. Have to re-encode tag names because |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
389 # the tags module always uses UTF-8 (in order not to lose info |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
390 # writing to the cache), but the rest of Mercurial wants them in |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
391 # local encoding. |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
392 tags = {} |
9147
234a230cc33b
localrepo: improve readability of _findtags(), readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9146
diff
changeset
|
393 for (name, (node, hist)) in alltags.iteritems(): |
234a230cc33b
localrepo: improve readability of _findtags(), readtags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9146
diff
changeset
|
394 if node != nullid: |
14499
a281981e2033
localrepo: ignore tags to unknown nodes (issue2750)
Idan Kamara <idankk86@gmail.com>
parents:
14498
diff
changeset
|
395 try: |
a281981e2033
localrepo: ignore tags to unknown nodes (issue2750)
Idan Kamara <idankk86@gmail.com>
parents:
14498
diff
changeset
|
396 # ignore tags to unknown nodes |
a281981e2033
localrepo: ignore tags to unknown nodes (issue2750)
Idan Kamara <idankk86@gmail.com>
parents:
14498
diff
changeset
|
397 self.changelog.lookup(node) |
a281981e2033
localrepo: ignore tags to unknown nodes (issue2750)
Idan Kamara <idankk86@gmail.com>
parents:
14498
diff
changeset
|
398 tags[encoding.tolocal(name)] = node |
a281981e2033
localrepo: ignore tags to unknown nodes (issue2750)
Idan Kamara <idankk86@gmail.com>
parents:
14498
diff
changeset
|
399 except error.LookupError: |
a281981e2033
localrepo: ignore tags to unknown nodes (issue2750)
Idan Kamara <idankk86@gmail.com>
parents:
14498
diff
changeset
|
400 pass |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
401 tags['tip'] = self.changelog.tip() |
9152
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
402 tagtypes = dict([(encoding.tolocal(name), value) |
4017291c4c48
tags: support 'instant' tag retrieval (issue548)
Greg Ward <greg-hg@gerg.ca>
parents:
9151
diff
changeset
|
403 for (name, value) in tagtypes.iteritems()]) |
9145
6b03f93b8ff3
localrepo: factor _findtags() out of tags() (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9134
diff
changeset
|
404 return (tags, tagtypes) |
343 | 405 |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
406 def tagtype(self, tagname): |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
407 ''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
408 return the type of the given tag. result can be: |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
409 |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
410 'local' : a local tag |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
411 'global' : a global tag |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
412 None : tag does not exist |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
413 ''' |
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
414 |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
415 return self._tagscache.tagtypes.get(tagname) |
5657
47915bf68c44
Properly check tag's existence as a local/global tag when removing it.
Osku Salerma <osku@iki.fi>
parents:
5637
diff
changeset
|
416 |
343 | 417 def tagslist(self): |
418 '''return a list of tags ordered by revision''' | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
419 if not self._tagscache.tagslist: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
420 l = [] |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
421 for t, n in self.tags().iteritems(): |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
422 r = self.changelog.rev(n) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
423 l.append((r, t, n)) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
424 self._tagscache.tagslist = [(t, n) for r, t, n in sorted(l)] |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
425 |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
426 return self._tagscache.tagslist |
343 | 427 |
428 def nodetags(self, node): | |
429 '''return the tags associated with a node''' | |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
430 if not self._tagscache.nodetagscache: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
431 nodetagscache = {} |
7622
4dd7b28003d2
use dict.iteritems() rather than dict.items()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7599
diff
changeset
|
432 for t, n in self.tags().iteritems(): |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
433 nodetagscache.setdefault(n, []).append(t) |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
434 for tags in nodetagscache.itervalues(): |
11047
c7dbd6c4877a
tags: return tags in sorted order
Eric Eisner <ede@mit.edu>
parents:
10970
diff
changeset
|
435 tags.sort() |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
436 self._tagscache.nodetagscache = nodetagscache |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
437 return self._tagscache.nodetagscache.get(node, []) |
343 | 438 |
13384
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
439 def nodebookmarks(self, node): |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
440 marks = [] |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
441 for bookmark, n in self._bookmarks.iteritems(): |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
442 if n == node: |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
443 marks.append(bookmark) |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
444 return sorted(marks) |
caa561759538
context: add method to return all bookmarks pointing to a node
David Soria Parra <dsp@php.net>
parents:
13365
diff
changeset
|
445 |
6120
f89878df40fe
move the reading of branch.cache from _branchtags to branchtags
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6119
diff
changeset
|
446 def _branchtags(self, partial, lrev): |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
447 # TODO: rename this function? |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
448 tiprev = len(self) - 1 |
3491
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
449 if lrev != tiprev: |
10770
fe39f0160c74
localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents:
10725
diff
changeset
|
450 ctxgen = (self[r] for r in xrange(lrev + 1, tiprev + 1)) |
fe39f0160c74
localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents:
10725
diff
changeset
|
451 self._updatebranchcache(partial, ctxgen) |
3491
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
452 self._writebranchcache(partial, self.changelog.tip(), tiprev) |
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
453 |
3826
b3b868113d24
fix encoding conversion of branch names when mq is loaded
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3803
diff
changeset
|
454 return partial |
b3b868113d24
fix encoding conversion of branch names when mq is loaded
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3803
diff
changeset
|
455 |
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
456 def updatebranchcache(self): |
9671
9471d9a900b4
transfer branchmap branch names over the wire in utf-8
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
9569
diff
changeset
|
457 tip = self.changelog.tip() |
9674
603b23c6967b
localrepo/branchcache: kill unused localrepo.branchcache
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9673
diff
changeset
|
458 if self._branchcache is not None and self._branchcachetip == tip: |
603b23c6967b
localrepo/branchcache: kill unused localrepo.branchcache
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9673
diff
changeset
|
459 return self._branchcache |
9671
9471d9a900b4
transfer branchmap branch names over the wire in utf-8
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
9569
diff
changeset
|
460 |
6121
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
461 oldtip = self._branchcachetip |
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
462 self._branchcachetip = tip |
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
463 if oldtip is None or oldtip not in self.changelog.nodemap: |
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
464 partial, last, lrev = self._readbranchcache() |
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
465 else: |
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
466 lrev = self.changelog.rev(oldtip) |
9674
603b23c6967b
localrepo/branchcache: kill unused localrepo.branchcache
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9673
diff
changeset
|
467 partial = self._branchcache |
6121
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
468 |
6120
f89878df40fe
move the reading of branch.cache from _branchtags to branchtags
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6119
diff
changeset
|
469 self._branchtags(partial, lrev) |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
470 # this private cache holds all heads (not just tips) |
9674
603b23c6967b
localrepo/branchcache: kill unused localrepo.branchcache
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9673
diff
changeset
|
471 self._branchcache = partial |
3826
b3b868113d24
fix encoding conversion of branch names when mq is loaded
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3803
diff
changeset
|
472 |
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
473 def branchmap(self): |
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
474 '''returns a dictionary {branch: [branchheads]}''' |
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
475 self.updatebranchcache() |
9674
603b23c6967b
localrepo/branchcache: kill unused localrepo.branchcache
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9673
diff
changeset
|
476 return self._branchcache |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
477 |
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
478 def branchtags(self): |
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
479 '''return a dict where branch names map to the tipmost head of |
7656
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
480 the branch, open heads come before closed''' |
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
481 bt = {} |
9675
ee913987e4b0
localrepo/branchcache: remove lbranchmap(), convert users to use utf-8 names
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9674
diff
changeset
|
482 for bn, heads in self.branchmap().iteritems(): |
10392
9be6c5900c07
localrepo: cleanup branch tip computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10371
diff
changeset
|
483 tip = heads[-1] |
9be6c5900c07
localrepo: cleanup branch tip computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10371
diff
changeset
|
484 for h in reversed(heads): |
7656
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
485 if 'close' not in self.changelog.read(h)[5]: |
10392
9be6c5900c07
localrepo: cleanup branch tip computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10371
diff
changeset
|
486 tip = h |
7656
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
487 break |
10392
9be6c5900c07
localrepo: cleanup branch tip computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10371
diff
changeset
|
488 bt[bn] = tip |
7656
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
489 return bt |
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
490 |
3491
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
491 def _readbranchcache(self): |
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
492 partial = {} |
3417
028fff46a4ac
Add branchtags function with cache
Matt Mackall <mpm@selenic.com>
parents:
3377
diff
changeset
|
493 try: |
13341
4e33ef68b1f8
remove pointless os.path.join calls when opening files in .hg/cache
Adrian Buehlmann <adrian@cadifra.com>
parents:
13327
diff
changeset
|
494 f = self.opener("cache/branchheads") |
3668
6f6696962986
don't use readline() to read branches.cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3664
diff
changeset
|
495 lines = f.read().split('\n') |
6f6696962986
don't use readline() to read branches.cache
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3664
diff
changeset
|
496 f.close() |
4415
1a63b44f90c9
branch.cache: silently ignore I/O and OS errors
Matt Mackall <mpm@selenic.com>
parents:
4329
diff
changeset
|
497 except (IOError, OSError): |
1a63b44f90c9
branch.cache: silently ignore I/O and OS errors
Matt Mackall <mpm@selenic.com>
parents:
4329
diff
changeset
|
498 return {}, nullid, nullrev |
1a63b44f90c9
branch.cache: silently ignore I/O and OS errors
Matt Mackall <mpm@selenic.com>
parents:
4329
diff
changeset
|
499 |
1a63b44f90c9
branch.cache: silently ignore I/O and OS errors
Matt Mackall <mpm@selenic.com>
parents:
4329
diff
changeset
|
500 try: |
4167
4574a8cb080f
Store empty (default) branch in branch cache, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4128
diff
changeset
|
501 last, lrev = lines.pop(0).split(" ", 1) |
3417
028fff46a4ac
Add branchtags function with cache
Matt Mackall <mpm@selenic.com>
parents:
3377
diff
changeset
|
502 last, lrev = bin(last), int(lrev) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
503 if lrev >= len(self) or self[lrev].node() != last: |
3761
9433bdcaa9ae
Ignore all errors while parsing the branch cache.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3733
diff
changeset
|
504 # invalidate the cache |
6056
0ad2ffbf6b38
Print less scary warning when invalidating the branch cache.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6001
diff
changeset
|
505 raise ValueError('invalidating branch cache (tip differs)') |
3761
9433bdcaa9ae
Ignore all errors while parsing the branch cache.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3733
diff
changeset
|
506 for l in lines: |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
507 if not l: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
508 continue |
4167
4574a8cb080f
Store empty (default) branch in branch cache, too.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4128
diff
changeset
|
509 node, label = l.split(" ", 1) |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13037
diff
changeset
|
510 label = encoding.tolocal(label.strip()) |
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13037
diff
changeset
|
511 partial.setdefault(label, []).append(bin(node)) |
7644
182b7114d35a
error: move SignalInterrupt
Matt Mackall <mpm@selenic.com>
parents:
7641
diff
changeset
|
512 except KeyboardInterrupt: |
3761
9433bdcaa9ae
Ignore all errors while parsing the branch cache.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3733
diff
changeset
|
513 raise |
9433bdcaa9ae
Ignore all errors while parsing the branch cache.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3733
diff
changeset
|
514 except Exception, inst: |
9433bdcaa9ae
Ignore all errors while parsing the branch cache.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3733
diff
changeset
|
515 if self.ui.debugflag: |
9433bdcaa9ae
Ignore all errors while parsing the branch cache.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3733
diff
changeset
|
516 self.ui.warn(str(inst), '\n') |
9433bdcaa9ae
Ignore all errors while parsing the branch cache.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3733
diff
changeset
|
517 partial, last, lrev = {}, nullid, nullrev |
3491
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
518 return partial, last, lrev |
3417
028fff46a4ac
Add branchtags function with cache
Matt Mackall <mpm@selenic.com>
parents:
3377
diff
changeset
|
519 |
3491
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
520 def _writebranchcache(self, branches, tip, tiprev): |
3452
fcf14d87e0a4
If we can't write the branch cache, fail quietly.
Matt Mackall <mpm@selenic.com>
parents:
3450
diff
changeset
|
521 try: |
13341
4e33ef68b1f8
remove pointless os.path.join calls when opening files in .hg/cache
Adrian Buehlmann <adrian@cadifra.com>
parents:
13327
diff
changeset
|
522 f = self.opener("cache/branchheads", "w", atomictemp=True) |
3491
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
523 f.write("%s %s\n" % (hex(tip), tiprev)) |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
524 for label, nodes in branches.iteritems(): |
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
525 for node in nodes: |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
13037
diff
changeset
|
526 f.write("%s %s\n" % (hex(node), encoding.fromlocal(label))) |
15057
774da7121fc9
atomictempfile: make close() consistent with other file-like objects.
Greg Ward <greg@gerg.ca>
parents:
14936
diff
changeset
|
527 f.close() |
4415
1a63b44f90c9
branch.cache: silently ignore I/O and OS errors
Matt Mackall <mpm@selenic.com>
parents:
4329
diff
changeset
|
528 except (IOError, OSError): |
3452
fcf14d87e0a4
If we can't write the branch cache, fail quietly.
Matt Mackall <mpm@selenic.com>
parents:
3450
diff
changeset
|
529 pass |
3417
028fff46a4ac
Add branchtags function with cache
Matt Mackall <mpm@selenic.com>
parents:
3377
diff
changeset
|
530 |
10770
fe39f0160c74
localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents:
10725
diff
changeset
|
531 def _updatebranchcache(self, partial, ctxgen): |
8954
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
532 # collect new branch entries |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
533 newbranches = {} |
10770
fe39f0160c74
localrepo: change _updatebranchcache to use a context generator
Sune Foldager <cryo@cyanite.org>
parents:
10725
diff
changeset
|
534 for c in ctxgen: |
8954
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
535 newbranches.setdefault(c.branch(), []).append(c.node()) |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
536 # if older branchheads are reachable from new ones, they aren't |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
537 # really branchheads. Note checking parents is insufficient: |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
538 # 1 (branch a) -> 2 (branch b) -> 3 (branch a) |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
539 for branch, newnodes in newbranches.iteritems(): |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
540 bheads = partial.setdefault(branch, []) |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
541 bheads.extend(newnodes) |
10920
39c69b5dc258
localrepo: simplify _updatebranchcache slightly
Sune Foldager <cryo@cyanite.org>
parents:
10912
diff
changeset
|
542 if len(bheads) <= 1: |
8954
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
543 continue |
14056
bcfe78c3d15c
branchcache: improve speed relative to the amount of heads
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14048
diff
changeset
|
544 bheads = sorted(bheads, key=lambda x: self[x].rev()) |
8954
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
545 # starting from tip means fewer passes over reachable |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
546 while newnodes: |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
547 latest = newnodes.pop() |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
548 if latest not in bheads: |
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
549 continue |
14056
bcfe78c3d15c
branchcache: improve speed relative to the amount of heads
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14048
diff
changeset
|
550 minbhrev = self[bheads[0]].node() |
9120
d3b995dd4eab
branch heads: optimise computation of branch head cache (issue1734)
Henrik Stuart <hg@hstuart.dk>
parents:
9093
diff
changeset
|
551 reachable = self.changelog.reachable(latest, minbhrev) |
10920
39c69b5dc258
localrepo: simplify _updatebranchcache slightly
Sune Foldager <cryo@cyanite.org>
parents:
10912
diff
changeset
|
552 reachable.remove(latest) |
14056
bcfe78c3d15c
branchcache: improve speed relative to the amount of heads
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14048
diff
changeset
|
553 if reachable: |
bcfe78c3d15c
branchcache: improve speed relative to the amount of heads
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14048
diff
changeset
|
554 bheads = [b for b in bheads if b not in reachable] |
8954
e67e5b60e55f
Branch heads should not include "heads" that are ancestors of other heads.
Brendan Cully <brendan@kublai.com>
parents:
8916
diff
changeset
|
555 partial[branch] = bheads |
3491
23cffef5d424
Split branchtags into two additional functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3473
diff
changeset
|
556 |
343 | 557 def lookup(self, key): |
7377
374a6b3ac623
lookup: fast-paths for int and 'tip'
Matt Mackall <mpm@selenic.com>
parents:
7361
diff
changeset
|
558 if isinstance(key, int): |
374a6b3ac623
lookup: fast-paths for int and 'tip'
Matt Mackall <mpm@selenic.com>
parents:
7361
diff
changeset
|
559 return self.changelog.node(key) |
374a6b3ac623
lookup: fast-paths for int and 'tip'
Matt Mackall <mpm@selenic.com>
parents:
7361
diff
changeset
|
560 elif key == '.': |
13878
a8d13ee0ce68
misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents:
13872
diff
changeset
|
561 return self.dirstate.p1() |
3801
bd7011246fab
Add "null" pseudo-tag pointing to nullid
Brendan Cully <brendan@kublai.com>
parents:
3791
diff
changeset
|
562 elif key == 'null': |
bd7011246fab
Add "null" pseudo-tag pointing to nullid
Brendan Cully <brendan@kublai.com>
parents:
3791
diff
changeset
|
563 return nullid |
7377
374a6b3ac623
lookup: fast-paths for int and 'tip'
Matt Mackall <mpm@selenic.com>
parents:
7361
diff
changeset
|
564 elif key == 'tip': |
374a6b3ac623
lookup: fast-paths for int and 'tip'
Matt Mackall <mpm@selenic.com>
parents:
7361
diff
changeset
|
565 return self.changelog.tip() |
3453
dba3cadef789
Only look up tags and branches as a last resort
Matt Mackall <mpm@selenic.com>
parents:
3452
diff
changeset
|
566 n = self.changelog._match(key) |
dba3cadef789
Only look up tags and branches as a last resort
Matt Mackall <mpm@selenic.com>
parents:
3452
diff
changeset
|
567 if n: |
dba3cadef789
Only look up tags and branches as a last resort
Matt Mackall <mpm@selenic.com>
parents:
3452
diff
changeset
|
568 return n |
13363
999f616b09dc
bookmarks: merge lookup into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13360
diff
changeset
|
569 if key in self._bookmarks: |
999f616b09dc
bookmarks: merge lookup into localrepo
Matt Mackall <mpm@selenic.com>
parents:
13360
diff
changeset
|
570 return self._bookmarks[key] |
3418
5436c8fe0ff5
Make lookup aware of branch labels
Matt Mackall <mpm@selenic.com>
parents:
3417
diff
changeset
|
571 if key in self.tags(): |
343 | 572 return self.tags()[key] |
3418
5436c8fe0ff5
Make lookup aware of branch labels
Matt Mackall <mpm@selenic.com>
parents:
3417
diff
changeset
|
573 if key in self.branchtags(): |
5436c8fe0ff5
Make lookup aware of branch labels
Matt Mackall <mpm@selenic.com>
parents:
3417
diff
changeset
|
574 return self.branchtags()[key] |
3453
dba3cadef789
Only look up tags and branches as a last resort
Matt Mackall <mpm@selenic.com>
parents:
3452
diff
changeset
|
575 n = self.changelog._partialmatch(key) |
dba3cadef789
Only look up tags and branches as a last resort
Matt Mackall <mpm@selenic.com>
parents:
3452
diff
changeset
|
576 if n: |
dba3cadef789
Only look up tags and branches as a last resort
Matt Mackall <mpm@selenic.com>
parents:
3452
diff
changeset
|
577 return n |
8639
1323dddf8078
lookup: check for dirstate damage on failure
Matt Mackall <mpm@selenic.com>
parents:
8567
diff
changeset
|
578 |
1323dddf8078
lookup: check for dirstate damage on failure
Matt Mackall <mpm@selenic.com>
parents:
8567
diff
changeset
|
579 # can't find key, check if it might have come from damaged dirstate |
1323dddf8078
lookup: check for dirstate damage on failure
Matt Mackall <mpm@selenic.com>
parents:
8567
diff
changeset
|
580 if key in self.dirstate.parents(): |
1323dddf8078
lookup: check for dirstate damage on failure
Matt Mackall <mpm@selenic.com>
parents:
8567
diff
changeset
|
581 raise error.Abort(_("working directory has unknown parent '%s'!") |
1323dddf8078
lookup: check for dirstate damage on failure
Matt Mackall <mpm@selenic.com>
parents:
8567
diff
changeset
|
582 % short(key)) |
4916
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
583 try: |
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
584 if len(key) == 20: |
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
585 key = hex(key) |
14004
97ed99d1f419
eliminate various naked except clauses
Idan Kamara <idankk86@gmail.com>
parents:
13972
diff
changeset
|
586 except TypeError: |
4916
5c5d23d93447
Use a weakref for recursive transactions
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
587 pass |
9423
1444a42f6052
Make distinct lookup error for localrepo.lookup
Matt Mackall <mpm@selenic.com>
parents:
9120
diff
changeset
|
588 raise error.RepoLookupError(_("unknown revision '%s'") % key) |
67 | 589 |
10960
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
590 def lookupbranch(self, key, remote=None): |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
591 repo = remote or self |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
592 if key in repo.branchmap(): |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
593 return key |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
594 |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
595 repo = (remote and remote.local()) and remote or self |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
596 return repo[key].branch() |
ca739acf1a98
commands: add more robust support for 'hg log -b' (issue2078)
Steve Losh <steve@stevelosh.com>
parents:
10926
diff
changeset
|
597 |
13723
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
598 def known(self, nodes): |
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
599 nm = self.changelog.nodemap |
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
600 return [(n in nm) for n in nodes] |
e615765fdcc7
wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13720
diff
changeset
|
601 |
926 | 602 def local(self): |
14603
68a43fdd7d80
localrepo: local() returns self
Matt Mackall <mpm@selenic.com>
parents:
14549
diff
changeset
|
603 return self |
926 | 604 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
605 def join(self, f): |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
606 return os.path.join(self.path, f) |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
607 |
244 | 608 def wjoin(self, f): |
609 return os.path.join(self.root, f) | |
610 | |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
611 def file(self, f): |
1615
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
612 if f[0] == '/': |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
613 f = f[1:] |
4258
b11a2fb59cf5
revlog: simplify revlog version handling
Matt Mackall <mpm@selenic.com>
parents:
4232
diff
changeset
|
614 return filelog.filelog(self.sopener, f) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
615 |
6739
c9fbd6ec3489
context: avoid using None for working parent
Matt Mackall <mpm@selenic.com>
parents:
6736
diff
changeset
|
616 def changectx(self, changeid): |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
617 return self[changeid] |
3218
8d4855fd9d7b
merge: use new working context object in update
Matt Mackall <mpm@selenic.com>
parents:
3164
diff
changeset
|
618 |
3163
1605e336d229
Add localrepo.parents to get parent changectxs.
Matt Mackall <mpm@selenic.com>
parents:
3132
diff
changeset
|
619 def parents(self, changeid=None): |
6742
2d54e7c1e69d
context: clean up parents()
Matt Mackall <mpm@selenic.com>
parents:
6740
diff
changeset
|
620 '''get list of changectxs for parents of changeid''' |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
621 return self[changeid].parents() |
3163
1605e336d229
Add localrepo.parents to get parent changectxs.
Matt Mackall <mpm@selenic.com>
parents:
3132
diff
changeset
|
622 |
2564
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
623 def filectx(self, path, changeid=None, fileid=None): |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
624 """changeid can be a changeset revision, node, or tag. |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
625 fileid can be a file revision or node.""" |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
626 return context.filectx(self, path, changeid, fileid) |
55e592041076
Add context helper functions to localrepo
Matt Mackall <mpm@selenic.com>
parents:
2491
diff
changeset
|
627 |
627 | 628 def getcwd(self): |
870
a82eae840447
Teach walk code about absolute paths.
Bryan O'Sullivan <bos@serpentine.com>
parents:
839
diff
changeset
|
629 return self.dirstate.getcwd() |
627 | 630 |
4525
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
631 def pathto(self, f, cwd=None): |
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
632 return self.dirstate.pathto(f, cwd) |
78b6add1f966
Add dirstate.pathto and localrepo.pathto.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4516
diff
changeset
|
633 |
291
2c4f2be05587
Add wopener for opening files in the working directory
mpm@selenic.com
parents:
288
diff
changeset
|
634 def wfile(self, f, mode='r'): |
2c4f2be05587
Add wopener for opening files in the working directory
mpm@selenic.com
parents:
288
diff
changeset
|
635 return self.wopener(f, mode) |
2c4f2be05587
Add wopener for opening files in the working directory
mpm@selenic.com
parents:
288
diff
changeset
|
636 |
4275
81402b2b294d
use os.path.islink instead of util.is_link; remove util.is_link
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4273
diff
changeset
|
637 def _link(self, f): |
81402b2b294d
use os.path.islink instead of util.is_link; remove util.is_link
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4273
diff
changeset
|
638 return os.path.islink(self.wjoin(f)) |
81402b2b294d
use os.path.islink instead of util.is_link; remove util.is_link
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4273
diff
changeset
|
639 |
11698
9df481f8036d
localrepo: refactor filter computation
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11669
diff
changeset
|
640 def _loadfilter(self, filter): |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
641 if filter not in self.filterpats: |
1258 | 642 l = [] |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
643 for pat, cmd in self.ui.configitems(filter): |
7226
b71a52f101dc
Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents:
7208
diff
changeset
|
644 if cmd == '!': |
b71a52f101dc
Make it possible to disable filtering for a pattern.
Mads Kiilerich <mads@kiilerich.com>
parents:
7208
diff
changeset
|
645 continue |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
646 mf = matchmod.match(self.root, '', [pat]) |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
647 fn = None |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
648 params = cmd |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
649 for name, filterfn in self._datafilters.iteritems(): |
6210
942287cb1f57
Removed trailing spaces from everything except test output
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6201
diff
changeset
|
650 if cmd.startswith(name): |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
651 fn = filterfn |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
652 params = cmd[len(name):].lstrip() |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
653 break |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
654 if not fn: |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
655 fn = lambda s, c, **kwargs: util.filter(s, c) |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
656 # Wrap old filters not supporting keyword arguments |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
657 if not inspect.getargspec(fn)[2]: |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
658 oldfn = fn |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
659 fn = lambda s, c, **kwargs: oldfn(s, c) |
6066
f3a8b5360100
Strip filter name from command before passing to filter function.
Jesse Glick <jesse.glick@sun.com>
parents:
6065
diff
changeset
|
660 l.append((mf, fn, params)) |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
661 self.filterpats[filter] = l |
12706
9ca08fbb750a
localrepo: have _loadfilter return the loaded filter patterns
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12687
diff
changeset
|
662 return self.filterpats[filter] |
1258 | 663 |
12707
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
664 def _filter(self, filterpats, filename, data): |
2216ab103ea8
localrepo: load filter patterns outside of _filter
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12706
diff
changeset
|
665 for mf, fn, cmd in filterpats: |
1258 | 666 if mf(filename): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
667 self.ui.debug("filtering %s through %s\n" % (filename, cmd)) |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
668 data = fn(data, cmd, ui=self.ui, repo=self, filename=filename) |
1258 | 669 break |
670 | |
671 return data | |
1019
a9cca981c423
Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents:
1013
diff
changeset
|
672 |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
673 @propertycache |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
674 def _encodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
675 return self._loadfilter('encode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
676 |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
677 @propertycache |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
678 def _decodefilterpats(self): |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
679 return self._loadfilter('decode') |
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
680 |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
681 def adddatafilter(self, name, filter): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
682 self._datafilters[name] = filter |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5915
diff
changeset
|
683 |
4004
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
684 def wread(self, filename): |
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
685 if self._link(filename): |
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
686 data = os.readlink(self.wjoin(filename)) |
c83c35f2f4e2
unify encode/decode filter routines
Matt Mackall <mpm@selenic.com>
parents:
4003
diff
changeset
|
687 else: |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
688 data = self.wopener.read(filename) |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
689 return self._filter(self._encodefilterpats, filename, data) |
1258 | 690 |
4006
67982d3ee76c
symlinks: add flags param to wwrite
Matt Mackall <mpm@selenic.com>
parents:
4005
diff
changeset
|
691 def wwrite(self, filename, data, flags): |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
692 data = self._filter(self._decodefilterpats, filename, data) |
6877
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
693 if 'l' in flags: |
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
694 self.wopener.symlink(data, filename) |
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
695 else: |
14184
4ab6e2d597cc
fix errors reported by pyflakes test
Sune Foldager <cryo@cyanite.org>
parents:
14168
diff
changeset
|
696 self.wopener.write(filename, data) |
6877
1d38f3605b20
util: set_flags shouldn't know about repo flag formats
Matt Mackall <mpm@selenic.com>
parents:
6875
diff
changeset
|
697 if 'x' in flags: |
14232
df2399663392
rename util.set_flags to setflags
Adrian Buehlmann <adrian@cadifra.com>
parents:
14220
diff
changeset
|
698 util.setflags(self.wjoin(filename), False, True) |
1258 | 699 |
4005
656e06eebda7
replace filehandle version of wwrite with wwritedata
Matt Mackall <mpm@selenic.com>
parents:
4004
diff
changeset
|
700 def wwritedata(self, filename, data): |
12708
8a08b12ae88e
localrepo: use propertycaches to access encode/decode filters
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12707
diff
changeset
|
701 return self._filter(self._decodefilterpats, filename, data) |
1019
a9cca981c423
Create helper functions for I/O to files in the working directory
mpm@selenic.com
parents:
1013
diff
changeset
|
702 |
10881
a685011ed38e
localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents:
10877
diff
changeset
|
703 def transaction(self, desc): |
8072
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
704 tr = self._transref and self._transref() or None |
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
705 if tr and tr.running(): |
ecf7795479d5
transaction: support multiple, separate transactions
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7948
diff
changeset
|
706 return tr.nest() |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
707 |
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
708 # abort here if the journal already exists |
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
709 if os.path.exists(self.sjoin("journal")): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
710 raise error.RepoError( |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
711 _("abandoned transaction found - run hg recover")) |
5865
e7127f669edb
transactions: don't show a backtrace when journal exists
Matt Mackall <mpm@selenic.com>
parents:
5814
diff
changeset
|
712 |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
713 journalfiles = self._writejournal(desc) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
714 renames = [(x, undoname(x)) for x in journalfiles] |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
715 |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
716 tr = transaction.transaction(self.ui.warn, self.sopener, |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
717 self.sjoin("journal"), |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
718 aftertrans(renames), |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
719 self.store.createmode) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
720 self._transref = weakref.ref(tr) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
721 return tr |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
722 |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
723 def _writejournal(self, desc): |
2362
482d3fb47d80
Renamed localrepo.undo() to rollback() and talk about "rollback information".
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2354
diff
changeset
|
724 # save dirstate for rollback |
263 | 725 try: |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
726 ds = self.opener.read("dirstate") |
263 | 727 except IOError: |
728 ds = "" | |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
729 self.opener.write("journal.dirstate", ds) |
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
730 self.opener.write("journal.branch", |
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
731 encoding.fromlocal(self.dirstate.branch())) |
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
732 self.opener.write("journal.desc", |
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
14162
diff
changeset
|
733 "%d\n%s\n" % (len(self), desc)) |
515 | 734 |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
735 bkname = self.join('bookmarks') |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
736 if os.path.exists(bkname): |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
737 util.copyfile(bkname, self.join('journal.bookmarks')) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
738 else: |
14274 | 739 self.opener.write('journal.bookmarks', '') |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
740 |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
741 return (self.sjoin('journal'), self.join('journal.dirstate'), |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
742 self.join('journal.branch'), self.join('journal.desc'), |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
743 self.join('journal.bookmarks')) |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
744 |
210 | 745 def recover(self): |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
746 lock = self.lock() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
747 try: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
748 if os.path.exists(self.sjoin("journal")): |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
749 self.ui.status(_("rolling back interrupted transaction\n")) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
750 transaction.rollback(self.sopener, self.sjoin("journal"), |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
751 self.ui.warn) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
752 self.invalidate() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
753 return True |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
754 else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
755 self.ui.warn(_("no interrupted transaction available\n")) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
756 return False |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
757 finally: |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
758 lock.release() |
210 | 759 |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
760 def rollback(self, dryrun=False, force=False): |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
761 wlock = lock = None |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
762 try: |
1712
21dcf38e5d7d
Allow callers to pass in the dirstate lock in most localrepo.py funcs.
mason@suse.com
parents:
1709
diff
changeset
|
763 wlock = self.wlock() |
4438
3900f684a150
Fix hg import --exact bug that hangs hg on failure.
Eric Hopper <hopper@omnifarious.org>
parents:
4417
diff
changeset
|
764 lock = self.lock() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
765 if os.path.exists(self.sjoin("undo")): |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
766 return self._rollback(dryrun, force) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
767 else: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
768 self.ui.warn(_("no rollback information available\n")) |
11177
6a64813276ed
commands: initial audit of exit codes
Matt Mackall <mpm@selenic.com>
parents:
11174
diff
changeset
|
769 return 1 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
770 finally: |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
771 release(lock, wlock) |
162 | 772 |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
773 def _rollback(self, dryrun, force): |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
774 ui = self.ui |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
775 try: |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
776 args = self.opener.read('undo.desc').splitlines() |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
777 (oldlen, desc, detail) = (int(args[0]), args[1], None) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
778 if len(args) >= 3: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
779 detail = args[2] |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
780 oldtip = oldlen - 1 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
781 |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
782 if detail and ui.verbose: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
783 msg = (_('repository tip rolled back to revision %s' |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
784 ' (undo %s: %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
785 % (oldtip, desc, detail)) |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
786 else: |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
787 msg = (_('repository tip rolled back to revision %s' |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
788 ' (undo %s)\n') |
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
789 % (oldtip, desc)) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
790 except IOError: |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
791 msg = _('rolling back unknown transaction\n') |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
792 desc = None |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
793 |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
794 if not force and self['.'] != self['tip'] and desc == 'commit': |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
795 raise util.Abort( |
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
796 _('rollback of last commit while not checked out ' |
15187
0292f88d3b86
rollback: use a hint for force
Matt Mackall <mpm@selenic.com>
parents:
15183
diff
changeset
|
797 'may lose data'), hint=_('use -f to force')) |
15183
59e8bc22506e
rollback: avoid unsafe rollback when not at tip (issue2998)
Greg Ward <greg@gerg.ca>
parents:
15131
diff
changeset
|
798 |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
799 ui.status(msg) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
800 if dryrun: |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
801 return 0 |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
802 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
803 parents = self.dirstate.parents() |
15130
3d44e68360a6
rollback: refactor for readability; cosmetics.
Greg Ward <greg@gerg.ca>
parents:
15101
diff
changeset
|
804 transaction.rollback(self.sopener, self.sjoin('undo'), ui.warn) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
805 if os.path.exists(self.join('undo.bookmarks')): |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
806 util.rename(self.join('undo.bookmarks'), |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
807 self.join('bookmarks')) |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
808 self.invalidate() |
15131
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
809 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
810 parentgone = (parents[0] not in self.changelog.nodemap or |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
811 parents[1] not in self.changelog.nodemap) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
812 if parentgone: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
813 util.rename(self.join('undo.dirstate'), self.join('dirstate')) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
814 try: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
815 branch = self.opener.read('undo.branch') |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
816 self.dirstate.setbranch(branch) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
817 except IOError: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
818 ui.warn(_('named branch could not be reset: ' |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
819 'current branch is still \'%s\'\n') |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
820 % self.dirstate.branch()) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
821 |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
822 self.dirstate.invalidate() |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
823 self.destroyed() |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
824 parents = tuple([p.rev() for p in self.parents()]) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
825 if len(parents) > 1: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
826 ui.status(_('working directory now based on ' |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
827 'revisions %d and %d\n') % parents) |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
828 else: |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
829 ui.status(_('working directory now based on ' |
7c26ce9edbd2
rollback: only restore dirstate and branch when appropriate.
Greg Ward <greg@gerg.ca>
parents:
15130
diff
changeset
|
830 'revision %d\n') % parents) |
15097
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
831 return 0 |
cda7a87c1871
rollback: improve readability; clarify that the return value is an int.
Greg Ward <greg-hg@gerg.ca>
parents:
15057
diff
changeset
|
832 |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
833 def invalidatecaches(self): |
14936
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
834 try: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
835 delattr(self, '_tagscache') |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
836 except AttributeError: |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
837 pass |
9dca7653b525
localrepo: unify tag related info into a tagscache class
Idan Kamara <idankk86@gmail.com>
parents:
14935
diff
changeset
|
838 |
9674
603b23c6967b
localrepo/branchcache: kill unused localrepo.branchcache
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9673
diff
changeset
|
839 self._branchcache = None # in UTF-8 |
6121
7336aeff1a1d
automatically update the branch cache when tip changes
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6120
diff
changeset
|
840 self._branchcachetip = None |
1784
2e0a288ca93e
revalidate revlog data after locking the repo (issue132)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1782
diff
changeset
|
841 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
842 def invalidatedirstate(self): |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
843 '''Invalidates the dirstate, causing the next call to dirstate |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
844 to check if it was modified since the last time it was read, |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
845 rereading it if it has. |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
846 |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
847 This is different to dirstate.invalidate() that it doesn't always |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
848 rereads the dirstate. Use dirstate.invalidate() if you want to |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
849 explicitly read the dirstate again (i.e. restoring it to a previous |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
850 known good state).''' |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
851 try: |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
852 delattr(self, 'dirstate') |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
853 except AttributeError: |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
854 pass |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
855 |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
856 def invalidate(self): |
14935
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
857 for k in self._filecache: |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
858 # dirstate is invalidated separately in invalidatedirstate() |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
859 if k == 'dirstate': |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
860 continue |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
861 |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
862 try: |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
863 delattr(self, k) |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
864 except AttributeError: |
4ae7473f5b73
localrepo: make invalidate() walk _filecache
Idan Kamara <idankk86@gmail.com>
parents:
14934
diff
changeset
|
865 pass |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
866 self.invalidatecaches() |
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
867 |
4913
46e39935ce33
rename and simplify do_lock
Matt Mackall <mpm@selenic.com>
parents:
4912
diff
changeset
|
868 def _lock(self, lockname, wait, releasefn, acquirefn, desc): |
161 | 869 try: |
3457
ff06fe0703ef
localrepo: add separate methods for manipulating repository data
Matt Mackall <mpm@selenic.com>
parents:
3456
diff
changeset
|
870 l = lock.lock(lockname, 0, releasefn, desc=desc) |
7640 | 871 except error.LockHeld, inst: |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
872 if not wait: |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
873 raise |
3688
d92dad355000
Corrected "waiting for lock on repository FOO held by BAR" message.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3687
diff
changeset
|
874 self.ui.warn(_("waiting for lock on %s held by %r\n") % |
d92dad355000
Corrected "waiting for lock on repository FOO held by BAR" message.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3687
diff
changeset
|
875 (desc, inst.locker)) |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
876 # default to 600 seconds timeout |
3457
ff06fe0703ef
localrepo: add separate methods for manipulating repository data
Matt Mackall <mpm@selenic.com>
parents:
3456
diff
changeset
|
877 l = lock.lock(lockname, int(self.ui.config("ui", "timeout", "600")), |
2016
ff5c9a92f556
fix backtrace printed when cannot get lock.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
878 releasefn, desc=desc) |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
879 if acquirefn: |
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
880 acquirefn() |
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
881 return l |
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
882 |
4914 | 883 def lock(self, wait=True): |
9309
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
884 '''Lock the repository store (.hg/store) and return a weak reference |
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
885 to the lock. Use this before modifying the store (e.g. committing or |
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
886 stripping). If you are opening a transaction, get a lock as well.)''' |
8108
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
887 l = self._lockref and self._lockref() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
888 if l is not None and l.held: |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
889 l.lock() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
890 return l |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
891 |
14931
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
892 def unlock(): |
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
893 self.store.write() |
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
894 for k, ce in self._filecache.items(): |
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
895 if k == 'dirstate': |
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
896 continue |
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
897 ce.refresh() |
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
898 |
a710936c3037
localrepo: refresh filecache entries after releasing a repo.lock()
Idan Kamara <idankk86@gmail.com>
parents:
14930
diff
changeset
|
899 l = self._lock(self.sjoin("lock"), wait, unlock, |
13391
d00bbff8600e
fncachestore: defer updating the fncache file to a single file open
Adrian Buehlmann <adrian@cadifra.com>
parents:
13390
diff
changeset
|
900 self.invalidate, _('repository %s') % self.origroot) |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
901 self._lockref = weakref.ref(l) |
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
902 return l |
1751
e9bf415a8ecb
localrepo: refactor the locking functions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1747
diff
changeset
|
903 |
4914 | 904 def wlock(self, wait=True): |
9309
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
905 '''Lock the non-store parts of the repository (everything under |
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
906 .hg except .hg/store) and return a weak reference to the lock. |
cfdcb7a465af
localrepo: document the locking scheme a little better
Greg Ward <greg-hg@gerg.ca>
parents:
9152
diff
changeset
|
907 Use this before modifying files in .hg.''' |
8108
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
908 l = self._wlockref and self._wlockref() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
909 if l is not None and l.held: |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
910 l.lock() |
a26d33749bd8
made repo locks recursive and deprecate refcounting based lock releasing
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8072
diff
changeset
|
911 return l |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
912 |
14930
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
913 def unlock(): |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
914 self.dirstate.write() |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
915 ce = self._filecache.get('dirstate') |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
916 if ce: |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
917 ce.refresh() |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
918 |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
919 l = self._lock(self.join("wlock"), wait, unlock, |
372d9d8b1da4
localrepo: decorate dirstate() with filecache
Idan Kamara <idankk86@gmail.com>
parents:
14929
diff
changeset
|
920 self.invalidatedirstate, _('working directory of %s') % |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
921 self.origroot) |
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
922 self._wlockref = weakref.ref(l) |
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
923 return l |
1531
2ba8bf7defda
add localrepo.wlock for protecting the dirstate
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1516
diff
changeset
|
924 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
925 def _filecommit(self, fctx, manifest1, manifest2, linkrev, tr, changelist): |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
926 """ |
3294
a2d93b186a0e
commit: unify file-level commit code
Matt Mackall <mpm@selenic.com>
parents:
3293
diff
changeset
|
927 commit an individual file as part of a larger transaction |
a2d93b186a0e
commit: unify file-level commit code
Matt Mackall <mpm@selenic.com>
parents:
3293
diff
changeset
|
928 """ |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
929 |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
930 fname = fctx.path() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
931 text = fctx.data() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
932 flog = self.file(fname) |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
933 fparent1 = manifest1.get(fname, nullid) |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
934 fparent2 = fparent2o = manifest2.get(fname, nullid) |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
935 |
3292
764688cf51e5
merge: remember rename copies and parents properly on commit
Matt Mackall <mpm@selenic.com>
parents:
3241
diff
changeset
|
936 meta = {} |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
937 copy = fctx.renamed() |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
938 if copy and copy[0] != fname: |
4058
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
939 # Mark the new revision of this file as a copy of another |
4516
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4510
diff
changeset
|
940 # file. This copy data will effectively act as a parent |
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4510
diff
changeset
|
941 # of this new revision. If this is a merge, the first |
4058
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
942 # parent will be the nullid (meaning "look up the copy data") |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
943 # and the second one will be the other parent. For example: |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
944 # |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
945 # 0 --- 1 --- 3 rev1 changes file foo |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
946 # \ / rev2 renames foo to bar and changes it |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
947 # \- 2 -/ rev3 should have bar with all changes and |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
948 # should record that bar descends from |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
949 # bar in rev2 and foo in rev1 |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
950 # |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
951 # this allows this merge to succeed: |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
952 # |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
953 # 0 --- 1 --- 3 rev4 reverts the content change from rev2 |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
954 # \ / merging rev3 and rev4 should use bar@rev2 |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
955 # \- 2 --- 4 as the merge base |
e7282dede8cd
filecommit: don't forget the local parent on a merge with a local rename
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3923
diff
changeset
|
956 # |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
957 |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
958 cfname = copy[0] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
959 crev = manifest1.get(cfname) |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
960 newfparent = fparent2 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
961 |
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
962 if manifest2: # branch merge |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
963 if fparent2 == nullid or crev is None: # copied on remote side |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
964 if cfname in manifest2: |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
965 crev = manifest2[cfname] |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
966 newfparent = fparent1 |
6874
8dc21876261e
commit: simplify file copy logic
Matt Mackall <mpm@selenic.com>
parents:
6680
diff
changeset
|
967 |
6875 | 968 # find source in nearest ancestor if we've lost track |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
969 if not crev: |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
970 self.ui.debug(" %s: searching for copy revision for %s\n" % |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
971 (fname, cfname)) |
13000
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
972 for ancestor in self[None].ancestors(): |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
973 if cfname in ancestor: |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
974 crev = ancestor[cfname].filenode() |
6876 | 975 break |
6875 | 976 |
13000
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
977 if crev: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
978 self.ui.debug(" %s: copy %s:%s\n" % (fname, cfname, hex(crev))) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
979 meta["copy"] = cfname |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
980 meta["copyrev"] = hex(crev) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
981 fparent1, fparent2 = nullid, newfparent |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
982 else: |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
983 self.ui.warn(_("warning: can't find ancestor for '%s' " |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
984 "copied from '%s'!\n") % (fname, cfname)) |
417f3c27983b
commit: search both parents for missing copy revision (issue2484)
Matt Mackall <mpm@selenic.com>
parents:
12899
diff
changeset
|
985 |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
986 elif fparent2 != nullid: |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
987 # is one parent an ancestor of the other? |
8244
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
988 fparentancestor = flog.ancestor(fparent1, fparent2) |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
989 if fparentancestor == fparent1: |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
990 fparent1, fparent2 = fparent2, nullid |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
991 elif fparentancestor == fparent2: |
99d7e2db8da8
localrepo: Refactor var names in filecommit to improve readability.
Martijn Pieters <mj@zopatista.com>
parents:
8239
diff
changeset
|
992 fparent2 = nullid |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
993 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
994 # is the file changed? |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
995 if fparent2 != nullid or flog.cmp(fparent1, text) or meta: |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
996 changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
997 return flog.add(text, meta, tr, linkrev, fparent1, fparent2) |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
998 |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
999 # are just the flags changed during merge? |
10320
808c187fc556
localrepo: minor formatting - remove double space
Henri Wiechers <hwiechers@gmail.com>
parents:
10282
diff
changeset
|
1000 if fparent1 != fparent2o and manifest1.flags(fname) != fctx.flags(): |
8401
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1001 changelist.append(fname) |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1002 |
ca7dc47eecc6
filecommit: swallow some bits from _commitctx, add _
Matt Mackall <mpm@selenic.com>
parents:
8400
diff
changeset
|
1003 return fparent1 |
1716
ef8cd889a78b
Refactor excessive merge detection, add test
Matt Mackall <mpm@selenic.com>
parents:
1713
diff
changeset
|
1004 |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1005 def commit(self, text="", user=None, date=None, match=None, force=False, |
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1006 editor=False, extra={}): |
8515
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1007 """Add a new revision to current repository. |
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1008 |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1009 Revision information is gathered from the working directory, |
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1010 match can be used to filter the committed files. If editor is |
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1011 supplied, it is called to get a commit message. |
8515
865e08a7d6b0
localrepo: update commit*() docstrings
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8503
diff
changeset
|
1012 """ |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1013 |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1014 def fail(f, msg): |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1015 raise util.Abort('%s: %s' % (f, msg)) |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1016 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1017 if not match: |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
1018 match = matchmod.always(self.root, '') |
8715
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1019 |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1020 if not force: |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1021 vdirs = [] |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1022 match.dir = vdirs.append |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1023 match.bad = fail |
8c667f4c482e
commit: move some setup outside the lock
Matt Mackall <mpm@selenic.com>
parents:
8712
diff
changeset
|
1024 |
8405
7cbf8fcd2453
commit: push repo lock down into _commitctx
Matt Mackall <mpm@selenic.com>
parents:
8404
diff
changeset
|
1025 wlock = self.wlock() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1026 try: |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1027 wctx = self[None] |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1028 merge = len(wctx.parents()) > 1 |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1029 |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1030 if (not force and merge and match and |
8501 | 1031 (match.files() or match.anypats())): |
8397
613ac2856535
remove deprecated rawcommit
Matt Mackall <mpm@selenic.com>
parents:
8395
diff
changeset
|
1032 raise util.Abort(_('cannot partially commit a merge ' |
613ac2856535
remove deprecated rawcommit
Matt Mackall <mpm@selenic.com>
parents:
8395
diff
changeset
|
1033 '(do not specify files or patterns)')) |
6706
716a1296e182
localrepo: replace dirstate by workingfilectx in filecommit()
Patrick Mezard <pmezard@gmail.com>
parents:
6705
diff
changeset
|
1034 |
8706
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1035 changes = self.status(match=match, clean=force) |
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1036 if force: |
25e9c71b89de
commit: drop the now-unused files parameter
Matt Mackall <mpm@selenic.com>
parents:
8705
diff
changeset
|
1037 changes[0].extend(changes[6]) # mq may commit unchanged files |
3621
7d3d603e7df9
localrepo: factor commit and rawcommit
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3620
diff
changeset
|
1038 |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1039 # check subrepos |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1040 subs = [] |
10522
b07d487009b2
subrepo: Update .hgsubstate in case of deleted subrepo
Saint Germain <saintger@gmail.com>
parents:
10519
diff
changeset
|
1041 removedsubs = set() |
14536
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1042 if '.hgsub' in wctx: |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1043 # only manage subrepos and .hgsubstate if .hgsub is present |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1044 for p in wctx.parents(): |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1045 removedsubs.update(s for s in p.substate if match(s)) |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1046 for s in wctx.substate: |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1047 removedsubs.discard(s) |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1048 if match(s) and wctx.sub(s).dirty(): |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1049 subs.append(s) |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1050 if (subs or removedsubs): |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1051 if (not match('.hgsub') and |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1052 '.hgsub' in (wctx.modified() + wctx.added())): |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1053 raise util.Abort( |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1054 _("can't commit subrepos without .hgsub")) |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1055 if '.hgsubstate' not in changes[0]: |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1056 changes[0].insert(0, '.hgsubstate') |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1057 if '.hgsubstate' in changes[2]: |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1058 changes[2].remove('.hgsubstate') |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1059 elif '.hgsub' in changes[2]: |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1060 # clean up .hgsubstate when .hgsub is removed |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1061 if ('.hgsubstate' in wctx and |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1062 '.hgsubstate' not in changes[0] + changes[1] + changes[2]): |
52cbeb5a651b
subrepo: be more careful with deletions of .hgsub and .hgsubstate (issue2844)
Matt Mackall <mpm@selenic.com>
parents:
14529
diff
changeset
|
1063 changes[2].insert(0, '.hgsubstate') |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1064 |
13411
d4de90a612f7
commit: abort if a subrepo is modified and ui.commitsubrepos=no
Patrick Mezard <pmezard@gmail.com>
parents:
13400
diff
changeset
|
1065 if subs and not self.ui.configbool('ui', 'commitsubrepos', True): |
d4de90a612f7
commit: abort if a subrepo is modified and ui.commitsubrepos=no
Patrick Mezard <pmezard@gmail.com>
parents:
13400
diff
changeset
|
1066 changedsubs = [s for s in subs if wctx.sub(s).dirty(True)] |
d4de90a612f7
commit: abort if a subrepo is modified and ui.commitsubrepos=no
Patrick Mezard <pmezard@gmail.com>
parents:
13400
diff
changeset
|
1067 if changedsubs: |
d4de90a612f7
commit: abort if a subrepo is modified and ui.commitsubrepos=no
Patrick Mezard <pmezard@gmail.com>
parents:
13400
diff
changeset
|
1068 raise util.Abort(_("uncommitted changes in subrepo %s") |
d4de90a612f7
commit: abort if a subrepo is modified and ui.commitsubrepos=no
Patrick Mezard <pmezard@gmail.com>
parents:
13400
diff
changeset
|
1069 % changedsubs[0]) |
d4de90a612f7
commit: abort if a subrepo is modified and ui.commitsubrepos=no
Patrick Mezard <pmezard@gmail.com>
parents:
13400
diff
changeset
|
1070 |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1071 # make sure all explicit patterns are matched |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1072 if not force and match.files(): |
8710
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1073 matched = set(changes[0] + changes[1] + changes[2]) |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1074 |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1075 for f in match.files(): |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1076 if f == '.' or f in matched or f in wctx.substate: |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1077 continue |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1078 if f in changes[3]: # missing |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1079 fail(f, _('file not found!')) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1080 if f in vdirs: # visited directory |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1081 d = f + '/' |
8710
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1082 for mf in matched: |
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1083 if mf.startswith(d): |
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1084 break |
bcb6e5bebd93
commit: trade O(n^2) file checks for O(n^2) dir checks
Matt Mackall <mpm@selenic.com>
parents:
8709
diff
changeset
|
1085 else: |
8709
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1086 fail(f, _("no match under directory!")) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1087 elif f not in self.dirstate: |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1088 fail(f, _("file not tracked!")) |
b9e0ddb04c5c
commit: move explicit file checking into repo.commit
Matt Mackall <mpm@selenic.com>
parents:
8707
diff
changeset
|
1089 |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1090 if (not force and not extra.get("close") and not merge |
8501 | 1091 and not (changes[0] or changes[1] or changes[2]) |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1092 and wctx.branch() == wctx.p1().branch()): |
8404
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1093 return None |
a2bc39ade36b
commit: move 'nothing changed' test into commit()
Matt Mackall <mpm@selenic.com>
parents:
8403
diff
changeset
|
1094 |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
1095 ms = mergemod.mergestate(self) |
6888
7c36a4fb05a3
make commit fail when committing unresolved files
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
6884
diff
changeset
|
1096 for f in changes[0]: |
7c36a4fb05a3
make commit fail when committing unresolved files
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
6884
diff
changeset
|
1097 if f in ms and ms[f] == 'u': |
7c36a4fb05a3
make commit fail when committing unresolved files
Stefano Tortarolo <stefano.tortarolo@gmail.com>
parents:
6884
diff
changeset
|
1098 raise util.Abort(_("unresolved merge conflicts " |
13541
919174c0aaff
Improve unresolved merge conflicts warning (issue2681)
Patrick Mezard <pmezard@gmail.com>
parents:
13526
diff
changeset
|
1099 "(see hg help resolve)")) |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1100 |
10969
ca052b484e56
context: remove parents parameter to workingctx
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10960
diff
changeset
|
1101 cctx = context.workingctx(self, text, user, date, extra, changes) |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1102 if editor: |
8994
4a1187d3cb00
commit: report modified subrepos in commit editor
Matt Mackall <mpm@selenic.com>
parents:
8954
diff
changeset
|
1103 cctx._text = editor(self, cctx, subs) |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1104 edited = (text != cctx._text) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1105 |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1106 # commit subs |
10522
b07d487009b2
subrepo: Update .hgsubstate in case of deleted subrepo
Saint Germain <saintger@gmail.com>
parents:
10519
diff
changeset
|
1107 if subs or removedsubs: |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1108 state = wctx.substate.copy() |
12127
36a65283c3af
commit: sort subrepos before committing for stable test output
Martin Geisler <mg@lazybytes.net>
parents:
12070
diff
changeset
|
1109 for s in sorted(subs): |
11112
4a9bee613737
subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents:
11063
diff
changeset
|
1110 sub = wctx.sub(s) |
4a9bee613737
subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents:
11063
diff
changeset
|
1111 self.ui.status(_('committing subrepository %s\n') % |
12752
18b5b6392fcf
subrepo: rename relpath to subrelpath and introduce reporelpath
Mads Kiilerich <mads@kiilerich.com>
parents:
12708
diff
changeset
|
1112 subrepo.subrelpath(sub)) |
11112
4a9bee613737
subrepo: print paths relative to upper repo root for push/pull/commit
Edouard Gomez <ed.gomez@free.fr>
parents:
11063
diff
changeset
|
1113 sr = sub.commit(cctx._text, user, date) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1114 state[s] = (state[s][0], sr) |
13172
84cec5895d01
subrepo: backout f02d7a562a21
Erik Zielke <ez@aragost.com>
parents:
13155
diff
changeset
|
1115 subrepo.writestate(self, state) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8799
diff
changeset
|
1116 |
9934
720f70b720d3
commit: save commit message so it's not destroyed by rollback.
Greg Ward <greg-hg@gerg.ca>
parents:
9924
diff
changeset
|
1117 # Save commit message in case this transaction gets rolled back |
9949
bc3f762af82e
commit: write last-message.txt with no content modifications.
Greg Ward <greg-hg@gerg.ca>
parents:
9935
diff
changeset
|
1118 # (e.g. by a pretxncommit hook). Leave the content alone on |
bc3f762af82e
commit: write last-message.txt with no content modifications.
Greg Ward <greg-hg@gerg.ca>
parents:
9935
diff
changeset
|
1119 # the assumption that the user will use the same editor again. |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
1120 msgfn = self.savecommitmessage(cctx._text) |
9934
720f70b720d3
commit: save commit message so it's not destroyed by rollback.
Greg Ward <greg-hg@gerg.ca>
parents:
9924
diff
changeset
|
1121 |
10970
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1122 p1, p2 = self.dirstate.parents() |
3213e8947975
localrepo.commit: use explicit variables, avoid creating new contexts
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10969
diff
changeset
|
1123 hookp1, hookp2 = hex(p1), (p2 != nullid and hex(p2) or '') |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1124 try: |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1125 self.hook("precommit", throw=True, parent1=hookp1, parent2=hookp2) |
9935
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1126 ret = self.commitctx(cctx, True) |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1127 except: |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1128 if edited: |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1129 self.ui.write( |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1130 _('note: commit message saved in %s\n') % msgfn) |
48b81d9bca8d
commit: if relevant, tell user their commit message was saved.
Greg Ward <greg-hg@gerg.ca>
parents:
9934
diff
changeset
|
1131 raise |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1132 |
13357
b67867940bd1
bookmarks: move commit action into core
Matt Mackall <mpm@selenic.com>
parents:
13356
diff
changeset
|
1133 # update bookmarks, dirstate and mergestate |
14498
4d958d1bb072
bookmarks: do not forward merged bookmark (issue1877)
David Soria Parra <dsp@php.net>
parents:
14266
diff
changeset
|
1134 bookmarks.update(self, p1, ret) |
8416
9dfee83c93c8
commit: hoist the rest of the dirstate manipulation out of commitctx
Matt Mackall <mpm@selenic.com>
parents:
8415
diff
changeset
|
1135 for f in changes[0] + changes[1]: |
9dfee83c93c8
commit: hoist the rest of the dirstate manipulation out of commitctx
Matt Mackall <mpm@selenic.com>
parents:
8415
diff
changeset
|
1136 self.dirstate.normal(f) |
9dfee83c93c8
commit: hoist the rest of the dirstate manipulation out of commitctx
Matt Mackall <mpm@selenic.com>
parents:
8415
diff
changeset
|
1137 for f in changes[2]: |
14434
cc8c09855d19
dirstate: rename forget to drop
Matt Mackall <mpm@selenic.com>
parents:
14365
diff
changeset
|
1138 self.dirstate.drop(f) |
8416
9dfee83c93c8
commit: hoist the rest of the dirstate manipulation out of commitctx
Matt Mackall <mpm@selenic.com>
parents:
8415
diff
changeset
|
1139 self.dirstate.setparents(ret) |
8503
90f86a5330bb
commit: tidy up mergestate slightly
Matt Mackall <mpm@selenic.com>
parents:
8502
diff
changeset
|
1140 ms.reset() |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1141 finally: |
8405
7cbf8fcd2453
commit: push repo lock down into _commitctx
Matt Mackall <mpm@selenic.com>
parents:
8404
diff
changeset
|
1142 wlock.release() |
6710
0aa91f69a4c4
localrepo: extract _commitctx() from commit()
Patrick Mezard <pmezard@gmail.com>
parents:
6709
diff
changeset
|
1143 |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1144 self.hook("commit", node=hex(ret), parent1=hookp1, parent2=hookp2) |
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1145 return ret |
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1146 |
8496
a21605de1509
commit: move editor outside transaction
Matt Mackall <mpm@selenic.com>
parents:
8481
diff
changeset
|
1147 def commitctx(self, ctx, error=False): |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1148 """Add a new revision to current repository. |
8410
1d11d985c179
commit: combine _commitctx and commitctx, drop unused force argument
Matt Mackall <mpm@selenic.com>
parents:
8407
diff
changeset
|
1149 Revision information is passed via the context argument. |
7077
ccbd39cad3c3
context: improve memctx documentation
Patrick Mezard <pmezard@gmail.com>
parents:
7072
diff
changeset
|
1150 """ |
6715
a3c41abfa828
context: add memctx for memory commits
Patrick Mezard <pmezard@gmail.com>
parents:
6712
diff
changeset
|
1151 |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1152 tr = lock = None |
12899
fabe61418a53
localrepo: do not modify ctx.remove() list in-place
Patrick Mezard <pmezard@gmail.com>
parents:
12847
diff
changeset
|
1153 removed = list(ctx.removed()) |
8414
2348ce25849b
commitctx: use contexts more fully
Matt Mackall <mpm@selenic.com>
parents:
8412
diff
changeset
|
1154 p1, p2 = ctx.p1(), ctx.p2() |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1155 user = ctx.user() |
990 | 1156 |
8411
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1157 lock = self.lock() |
4d5916358abd
commit: move lots of commitctx outside of the repo lock
Matt Mackall <mpm@selenic.com>
parents:
8410
diff
changeset
|
1158 try: |
10881
a685011ed38e
localrepo: add desc parameter to transaction
Steve Borho <steve@borho.org>
parents:
10877
diff
changeset
|
1159 tr = self.transaction("commit") |
4970
30d4d8985dd8
transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
1160 trp = weakref.proxy(tr) |
151 | 1161 |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1162 if ctx.files(): |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1163 m1 = p1.manifest().copy() |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1164 m2 = p2.manifest() |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1165 |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1166 # check in files |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1167 new = {} |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1168 changed = [] |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1169 linkrev = len(self) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1170 for f in sorted(ctx.modified() + ctx.added()): |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1171 self.ui.note(f + "\n") |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1172 try: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1173 fctx = ctx[f] |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1174 new[f] = self._filecommit(fctx, m1, m2, linkrev, trp, |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1175 changed) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1176 m1.set(f, fctx.flags()) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1177 except OSError, inst: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1178 self.ui.warn(_("trouble committing %s!\n") % f) |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1179 raise |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1180 except IOError, inst: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1181 errcode = getattr(inst, 'errno', errno.ENOENT) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1182 if error or errcode and errcode != errno.ENOENT: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1183 self.ui.warn(_("trouble committing %s!\n") % f) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1184 raise |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1185 else: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1186 removed.append(f) |
220 | 1187 |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1188 # update manifest |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1189 m1.update(new) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1190 removed = [f for f in sorted(removed) if f in m1 or f in m2] |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1191 drop = [f for f in removed if f in m1] |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1192 for f in drop: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1193 del m1[f] |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1194 mn = self.manifest.add(m1, trp, linkrev, p1.manifestnode(), |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1195 p2.manifestnode(), (new, drop)) |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1196 files = changed + removed |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1197 else: |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1198 mn = p1.manifestnode() |
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1199 files = [] |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1200 |
8499
fb9b83df45f3
commit: move description trimming into changelog
Matt Mackall <mpm@selenic.com>
parents:
8498
diff
changeset
|
1201 # update changelog |
7787
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1202 self.changelog.delayupdate() |
14162
301725c3df9a
localrepo: reuse parent manifest in commitctx if no files have changed
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14155
diff
changeset
|
1203 n = self.changelog.add(mn, files, ctx.description(), |
8499
fb9b83df45f3
commit: move description trimming into changelog
Matt Mackall <mpm@selenic.com>
parents:
8498
diff
changeset
|
1204 trp, p1.node(), p2.node(), |
8412
2bf4f380f6ab
commitctx: eliminate some variables
Matt Mackall <mpm@selenic.com>
parents:
8411
diff
changeset
|
1205 user, ctx.date(), ctx.extra().copy()) |
7787
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1206 p = lambda: self.changelog.writepending() and self.root or "" |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10435
diff
changeset
|
1207 xp1, xp2 = p1.hex(), p2 and p2.hex() or '' |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1208 self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1, |
7787
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1209 parent2=xp2, pending=p) |
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1210 self.changelog.finalize(trp) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1211 tr.close() |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1212 |
9674
603b23c6967b
localrepo/branchcache: kill unused localrepo.branchcache
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9673
diff
changeset
|
1213 if self._branchcache: |
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
1214 self.updatebranchcache() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1215 return n |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1216 finally: |
11230
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1217 if tr: |
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1218 tr.release() |
8405
7cbf8fcd2453
commit: push repo lock down into _commitctx
Matt Mackall <mpm@selenic.com>
parents:
8404
diff
changeset
|
1219 lock.release() |
660
2c83350784c3
Move commit hook after commit completes
Matt Mackall <mpm@selenic.com>
parents:
659
diff
changeset
|
1220 |
9150
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1221 def destroyed(self): |
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1222 '''Inform the repository that nodes have been destroyed. |
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1223 Intended for use by strip and rollback, so there's a common |
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1224 place for anything that has to be done after destroying history.''' |
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1225 # XXX it might be nice if we could take the list of destroyed |
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1226 # nodes, but I don't see an easy way for rollback() to do that |
9151
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1227 |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1228 # Ensure the persistent tag cache is updated. Doing it now |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1229 # means that the tag cache only has to worry about destroyed |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1230 # heads immediately after a strip/rollback. That in turn |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1231 # guarantees that "cachetip == currenttip" (comparing both rev |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1232 # and node) always means no nodes have been added or destroyed. |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1233 |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1234 # XXX this is suboptimal when qrefresh'ing: we strip the current |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1235 # head, refresh the tag cache, then immediately add a new head. |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1236 # But I think doing it this way is necessary for the "instant |
f528d1a93491
tags: implement persistent tag caching (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9150
diff
changeset
|
1237 # tag cache retrieval" case to work. |
10547
bae9bb09166b
strip: invalidate all caches after stripping (fixes issue1951)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10522
diff
changeset
|
1238 self.invalidatecaches() |
9150
09a1ee498756
localrepo: add destroyed() method for strip/rollback to use (issue548).
Greg Ward <greg-hg@gerg.ca>
parents:
9149
diff
changeset
|
1239 |
6585 | 1240 def walk(self, match, node=None): |
3532 | 1241 ''' |
1242 walk recursively through the directory tree or a given | |
1243 changeset, finding all files matched by the match | |
1244 function | |
1245 ''' | |
6764 | 1246 return self[node].walk(match) |
3532 | 1247 |
6769 | 1248 def status(self, node1='.', node2=None, match=None, |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1249 ignored=False, clean=False, unknown=False, |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1250 listsubrepos=False): |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
1251 """return status of files between two nodes or node and working directory |
1616
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1252 |
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1253 If node1 is None, use the first dirstate parent instead. |
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1254 If node2 is None, compare node1 with working directory. |
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1255 """ |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1256 |
6769 | 1257 def mfmatches(ctx): |
1258 mf = ctx.manifest().copy() | |
723 | 1259 for fn in mf.keys(): |
1260 if not match(fn): | |
1261 del mf[fn] | |
1262 return mf | |
741 | 1263 |
7090
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1264 if isinstance(node1, context.changectx): |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1265 ctx1 = node1 |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1266 else: |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1267 ctx1 = self[node1] |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1268 if isinstance(node2, context.changectx): |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1269 ctx2 = node2 |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1270 else: |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1271 ctx2 = self[node2] |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1272 |
7435
5e13df32fb74
bundlerepo doesn't really have a dirstate, throw AttributeError if requested
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7415
diff
changeset
|
1273 working = ctx2.rev() is None |
6769 | 1274 parentworking = working and ctx1 == self['.'] |
10651
5f091fc1bab7
style: use consistent variable names (*mod) with imports which would shadow
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10547
diff
changeset
|
1275 match = match or matchmod.always(self.root, self.getcwd()) |
6753
ed5ffb2c12f3
repo.status: eliminate list_
Matt Mackall <mpm@selenic.com>
parents:
6750
diff
changeset
|
1276 listignored, listclean, listunknown = ignored, clean, unknown |
2474
1e32e2fe8a67
Fix cold cache diff performance
Chris Mason <mason@suse.com>
parents:
2463
diff
changeset
|
1277 |
7090
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1278 # load earliest manifest first for caching reasons |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1279 if not working and ctx2.rev() < ctx1.rev(): |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1280 ctx2.manifest() |
7b5c063b0b94
diff: pass contexts to status
Matt Mackall <mpm@selenic.com>
parents:
7077
diff
changeset
|
1281 |
7067
40d105a12cac
status: don't warn about missing files present in base revision (issue1323)
Matt Mackall <mpm@selenic.com>
parents:
7064
diff
changeset
|
1282 if not parentworking: |
40d105a12cac
status: don't warn about missing files present in base revision (issue1323)
Matt Mackall <mpm@selenic.com>
parents:
7064
diff
changeset
|
1283 def bad(f, msg): |
40d105a12cac
status: don't warn about missing files present in base revision (issue1323)
Matt Mackall <mpm@selenic.com>
parents:
7064
diff
changeset
|
1284 if f not in ctx1: |
40d105a12cac
status: don't warn about missing files present in base revision (issue1323)
Matt Mackall <mpm@selenic.com>
parents:
7064
diff
changeset
|
1285 self.ui.warn('%s: %s\n' % (self.dirstate.pathto(f), msg)) |
40d105a12cac
status: don't warn about missing files present in base revision (issue1323)
Matt Mackall <mpm@selenic.com>
parents:
7064
diff
changeset
|
1286 match.bad = bad |
40d105a12cac
status: don't warn about missing files present in base revision (issue1323)
Matt Mackall <mpm@selenic.com>
parents:
7064
diff
changeset
|
1287 |
6770 | 1288 if working: # we need to scan the working dir |
11227
054549ccb680
status: avoid performance regression when no .hgsub is present
Matt Mackall <mpm@selenic.com>
parents:
11154
diff
changeset
|
1289 subrepos = [] |
054549ccb680
status: avoid performance regression when no .hgsub is present
Matt Mackall <mpm@selenic.com>
parents:
11154
diff
changeset
|
1290 if '.hgsub' in self.dirstate: |
14870
f73c7b70df68
subrepo: use working copy of .hgsub to filter status (issue2901)
Matt Mackall <mpm@selenic.com>
parents:
14825
diff
changeset
|
1291 subrepos = ctx2.substate.keys() |
10176
24ce8f0c0a39
dirstate: don't check state of subrepo directories
Augie Fackler <durin42@gmail.com>
parents:
10011
diff
changeset
|
1292 s = self.dirstate.status(match, subrepos, listignored, |
24ce8f0c0a39
dirstate: don't check state of subrepo directories
Augie Fackler <durin42@gmail.com>
parents:
10011
diff
changeset
|
1293 listclean, listunknown) |
6770 | 1294 cmp, modified, added, removed, deleted, unknown, ignored, clean = s |
536 | 1295 |
6770 | 1296 # check for any possibly clean files |
1297 if parentworking and cmp: | |
1298 fixup = [] | |
1299 # do a full compare of any files that might have changed | |
8395
475552c03496
status: check cmp list in order
Matt Mackall <mpm@selenic.com>
parents:
8393
diff
changeset
|
1300 for f in sorted(cmp): |
6770 | 1301 if (f not in ctx1 or ctx2.flags(f) != ctx1.flags(f) |
11702
eb07fbc21e9c
filectx: use cmp(self, fctx) instead of cmp(self, text)
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11698
diff
changeset
|
1302 or ctx1[f].cmp(ctx2[f])): |
6770 | 1303 modified.append(f) |
1304 else: | |
1305 fixup.append(f) | |
1306 | |
1307 # update dirstate for files that are actually clean | |
1308 if fixup: | |
11669
c47cb3193c53
localrepo.status: move fixup concatenation inside if block for clarity
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11665
diff
changeset
|
1309 if listclean: |
c47cb3193c53
localrepo.status: move fixup concatenation inside if block for clarity
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11665
diff
changeset
|
1310 clean += fixup |
c47cb3193c53
localrepo.status: move fixup concatenation inside if block for clarity
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11665
diff
changeset
|
1311 |
6770 | 1312 try: |
8647
cb74433f9b41
localrepo: move comment
Adrian Buehlmann <adrian@cadifra.com>
parents:
8646
diff
changeset
|
1313 # updating the dirstate is optional |
cb74433f9b41
localrepo: move comment
Adrian Buehlmann <adrian@cadifra.com>
parents:
8646
diff
changeset
|
1314 # so we don't wait on the lock |
8646
60f9e574b6eb
localrepo: use lock.release for single lock
Simon Heimberg <simohe@besonet.ch>
parents:
8639
diff
changeset
|
1315 wlock = self.wlock(False) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1316 try: |
6770 | 1317 for f in fixup: |
1318 self.dirstate.normal(f) | |
8646
60f9e574b6eb
localrepo: use lock.release for single lock
Simon Heimberg <simohe@besonet.ch>
parents:
8639
diff
changeset
|
1319 finally: |
60f9e574b6eb
localrepo: use lock.release for single lock
Simon Heimberg <simohe@besonet.ch>
parents:
8639
diff
changeset
|
1320 wlock.release() |
60f9e574b6eb
localrepo: use lock.release for single lock
Simon Heimberg <simohe@besonet.ch>
parents:
8639
diff
changeset
|
1321 except error.LockError: |
60f9e574b6eb
localrepo: use lock.release for single lock
Simon Heimberg <simohe@besonet.ch>
parents:
8639
diff
changeset
|
1322 pass |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
1323 |
6769 | 1324 if not parentworking: |
1325 mf1 = mfmatches(ctx1) | |
6770 | 1326 if working: |
1616
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1327 # we are comparing working dir against non-parent |
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1328 # generate a pseudo-manifest for the working dir |
6769 | 1329 mf2 = mfmatches(self['.']) |
6770 | 1330 for f in cmp + modified + added: |
6769 | 1331 mf2[f] = None |
6817 | 1332 mf2.set(f, ctx2.flags(f)) |
1617
ece5d785e87a
Make localrepo.changes() internally distinguish between removed and deleted.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1616
diff
changeset
|
1333 for f in removed: |
1616
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1334 if f in mf2: |
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1335 del mf2[f] |
6770 | 1336 else: |
1337 # we are comparing two revisions | |
1338 deleted, unknown, ignored = [], [], [] | |
1339 mf2 = mfmatches(ctx2) | |
4372
4ddc6d374265
localrepository.status: only acquire wlock if actually needed.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4335
diff
changeset
|
1340 |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
1341 modified, added, clean = [], [], [] |
6827
c978d6752dbb
dirstate.walk: push sorting up
Matt Mackall <mpm@selenic.com>
parents:
6817
diff
changeset
|
1342 for fn in mf2: |
5915
d0576d065993
Prefer i in d over d.has_key(i)
Christian Ebert <blacktrash@gmx.net>
parents:
5913
diff
changeset
|
1343 if fn in mf1: |
14500
e880433a2e00
localrepo: don't add deleted files to list of modified/added files (issue2761)
Idan Kamara <idankk86@gmail.com>
parents:
14499
diff
changeset
|
1344 if (fn not in deleted and |
e880433a2e00
localrepo: don't add deleted files to list of modified/added files (issue2761)
Idan Kamara <idankk86@gmail.com>
parents:
14499
diff
changeset
|
1345 (mf1.flags(fn) != mf2.flags(fn) or |
e880433a2e00
localrepo: don't add deleted files to list of modified/added files (issue2761)
Idan Kamara <idankk86@gmail.com>
parents:
14499
diff
changeset
|
1346 (mf1[fn] != mf2[fn] and |
e880433a2e00
localrepo: don't add deleted files to list of modified/added files (issue2761)
Idan Kamara <idankk86@gmail.com>
parents:
14499
diff
changeset
|
1347 (mf2[fn] or ctx1[fn].cmp(ctx2[fn]))))): |
1616
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1348 modified.append(fn) |
6753
ed5ffb2c12f3
repo.status: eliminate list_
Matt Mackall <mpm@selenic.com>
parents:
6750
diff
changeset
|
1349 elif listclean: |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
1350 clean.append(fn) |
1616
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1351 del mf1[fn] |
14500
e880433a2e00
localrepo: don't add deleted files to list of modified/added files (issue2761)
Idan Kamara <idankk86@gmail.com>
parents:
14499
diff
changeset
|
1352 elif fn not in deleted: |
1616
f0f9e84849e7
Cleaned up localrepo.changes()
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1615
diff
changeset
|
1353 added.append(fn) |
1617
ece5d785e87a
Make localrepo.changes() internally distinguish between removed and deleted.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1616
diff
changeset
|
1354 removed = mf1.keys() |
ece5d785e87a
Make localrepo.changes() internally distinguish between removed and deleted.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1616
diff
changeset
|
1355 |
6827
c978d6752dbb
dirstate.walk: push sorting up
Matt Mackall <mpm@selenic.com>
parents:
6817
diff
changeset
|
1356 r = modified, added, removed, deleted, unknown, ignored, clean |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1357 |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1358 if listsubrepos: |
12176
ecab10820983
subrepos: add function for iterating over ctx subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12175
diff
changeset
|
1359 for subpath, sub in subrepo.itersubrepos(ctx1, ctx2): |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1360 if working: |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1361 rev2 = None |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1362 else: |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1363 rev2 = ctx2.substate[subpath][1] |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1364 try: |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1365 submatch = matchmod.narrowmatcher(subpath, match) |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1366 s = sub.status(rev2, match=submatch, ignored=listignored, |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1367 clean=listclean, unknown=listunknown, |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1368 listsubrepos=True) |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1369 for rfiles, sfiles in zip(r, s): |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1370 rfiles.extend("%s/%s" % (subpath, f) for f in sfiles) |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1371 except error.LookupError: |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1372 self.ui.status(_("skipping missing subrepository: %s\n") |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1373 % subpath) |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
1374 |
13412
58c497d0e44d
remove unnecessary list comprehensions
Martin Geisler <mg@aragost.com>
parents:
13411
diff
changeset
|
1375 for l in r: |
58c497d0e44d
remove unnecessary list comprehensions
Martin Geisler <mg@aragost.com>
parents:
13411
diff
changeset
|
1376 l.sort() |
6827
c978d6752dbb
dirstate.walk: push sorting up
Matt Mackall <mpm@selenic.com>
parents:
6817
diff
changeset
|
1377 return r |
2661
5c10b7ed3411
status: add -c (clean) and -A (all files) options
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2621
diff
changeset
|
1378 |
8796
2bcef677a6c3
localrepo: remove 'closed' argument to heads(...) function
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8731
diff
changeset
|
1379 def heads(self, start=None): |
1550
ccb9b62de892
add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1532
diff
changeset
|
1380 heads = self.changelog.heads(start) |
ccb9b62de892
add a -r/--rev option to heads to show only heads descendant from rev
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1532
diff
changeset
|
1381 # sort the output in rev descending order |
13075
d73c3034deee
coding style: fix gratuitous whitespace after Python keywords
Thomas Arendsen Hein <thomas@jtah.de>
parents:
13047
diff
changeset
|
1382 return sorted(heads, key=self.changelog.rev, reverse=True) |
222 | 1383 |
8694
ca8d05e1f1d1
localrepo: set heads and branchheads to be closed=False by default
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
8680
diff
changeset
|
1384 def branchheads(self, branch=None, start=None, closed=False): |
9475
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1385 '''return a (possibly filtered) list of heads for the given branch |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1386 |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1387 Heads are returned in topological order, from newest to oldest. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1388 If branch is None, use the dirstate branch. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1389 If start is not None, return only heads reachable from start. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1390 If closed is True, return heads that are marked as closed as well. |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1391 ''' |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1392 if branch is None: |
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6743
diff
changeset
|
1393 branch = self[None].branch() |
9675
ee913987e4b0
localrepo/branchcache: remove lbranchmap(), convert users to use utf-8 names
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9674
diff
changeset
|
1394 branches = self.branchmap() |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1395 if branch not in branches: |
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1396 return [] |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
1397 # the cache returns heads ordered lowest to highest |
9475
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1398 bheads = list(reversed(branches[branch])) |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1399 if start is not None: |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
1400 # filter out the heads that cannot be reached from startrev |
9475
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1401 fbheads = set(self.changelog.nodesbetween([start], bheads)[2]) |
c295a82a020b
localrepo: fix bugs in branchheads and add docstring
Sune Foldager <cryo@cyanite.org>
parents:
9423
diff
changeset
|
1402 bheads = [h for h in bheads if h in fbheads] |
7656
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
1403 if not closed: |
7670
e5f445c94226
kill some trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7656
diff
changeset
|
1404 bheads = [h for h in bheads if |
7656
6a24fb994701
branch closing: referencing open and closed branches/heads
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7655
diff
changeset
|
1405 ('close' not in self.changelog.read(h)[5])] |
7654
816b708f23af
store all heads of a branch in the branch cache
John Mulligan <phlogistonjohn@asynchrono.us>
parents:
7644
diff
changeset
|
1406 return bheads |
4648
8e503fa54d2d
Add option to heads to show only heads for current branch.
Eric Hopper <hopper@omnifarious.org>
parents:
4635
diff
changeset
|
1407 |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1408 def branches(self, nodes): |
1615
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
1409 if not nodes: |
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
1410 nodes = [self.changelog.tip()] |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1411 b = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1412 for n in nodes: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1413 t = n |
14494
1ffeeb91c55d
check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents:
14482
diff
changeset
|
1414 while True: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1415 p = self.changelog.parents(n) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1416 if p[1] != nullid or p[0] == nullid: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1417 b.append((t, n, p[0], p[1])) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1418 break |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1419 n = p[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1420 return b |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1421 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1422 def between(self, pairs): |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1423 r = [] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1424 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1425 for top, bottom in pairs: |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1426 n, l, i = top, [], 0 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1427 f = 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1428 |
7708
a32847fa0df0
wire protocol: avoid infinite loop (issue1483)
Matt Mackall <mpm@selenic.com>
parents:
7564
diff
changeset
|
1429 while n != bottom and n != nullid: |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1430 p = self.changelog.parents(n)[0] |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1431 if i == f: |
575 | 1432 l.append(n) |
56
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1433 f = f * 2 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1434 n = p |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1435 i += 1 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1436 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1437 r.append(l) |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1438 |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1439 return r |
ad2ea1185f04
Add getchangegroup code to efficiently calculate and request a changegroup
mpm@selenic.com
parents:
55
diff
changeset
|
1440 |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1441 def pull(self, remote, heads=None, force=False): |
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4916
diff
changeset
|
1442 lock = self.lock() |
2827
2a0c599f7bb0
fetch: hold lock and wlock across all operations
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2803
diff
changeset
|
1443 try: |
11301
3d0591a66118
move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11230
diff
changeset
|
1444 tmp = discovery.findcommonincoming(self, remote, heads=heads, |
3d0591a66118
move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11230
diff
changeset
|
1445 force=force) |
3d0591a66118
move discovery methods from localrepo into new discovery module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
11230
diff
changeset
|
1446 common, fetch, rheads = tmp |
2827
2a0c599f7bb0
fetch: hold lock and wlock across all operations
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2803
diff
changeset
|
1447 if not fetch: |
2a0c599f7bb0
fetch: hold lock and wlock across all operations
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2803
diff
changeset
|
1448 self.ui.status(_("no changes found\n")) |
13364
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1449 result = 0 |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1450 else: |
13742
7abab875e647
discovery: avoid discovery when local graph is a subset of remote
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13741
diff
changeset
|
1451 if heads is None and list(common) == [nullid]: |
13364
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1452 self.ui.status(_("requesting all changes\n")) |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1453 elif heads is None and remote.capable('changegroupsubset'): |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1454 # issue1320, avoid a race if remote changed after discovery |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1455 heads = rheads |
7415
6163ef936a00
protocol: use changegroupsubset() if possible (issue1389)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7377
diff
changeset
|
1456 |
14073
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14064
diff
changeset
|
1457 if remote.capable('getbundle'): |
13742
7abab875e647
discovery: avoid discovery when local graph is a subset of remote
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13741
diff
changeset
|
1458 cg = remote.getbundle('pull', common=common, |
7abab875e647
discovery: avoid discovery when local graph is a subset of remote
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13741
diff
changeset
|
1459 heads=heads or rheads) |
7abab875e647
discovery: avoid discovery when local graph is a subset of remote
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13741
diff
changeset
|
1460 elif heads is None: |
13364
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1461 cg = remote.changegroup(fetch, 'pull') |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1462 elif not remote.capable('changegroupsubset'): |
12067
a4fbbe0fbc38
Lowercase error messages
Martin Geisler <mg@lazybytes.net>
parents:
11640
diff
changeset
|
1463 raise util.Abort(_("partial pull cannot be done because " |
13364
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1464 "other repository doesn't support " |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1465 "changegroupsubset.")) |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1466 else: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1467 cg = remote.changegroupsubset(fetch, heads, 'pull') |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1468 result = self.addchangegroup(cg, 'pull', remote.url(), |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1469 lock=lock) |
2827
2a0c599f7bb0
fetch: hold lock and wlock across all operations
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2803
diff
changeset
|
1470 finally: |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
8108
diff
changeset
|
1471 lock.release() |
622
e9fe5d5e67f7
Add generic repo commands for pull and push
Matt Mackall <mpm@selenic.com>
parents:
621
diff
changeset
|
1472 |
13364
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1473 return result |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1474 |
13327
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1475 def checkpush(self, force, revs): |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1476 """Extensions can override this function if additional checks have |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1477 to be performed before pushing, or call it if they override push |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1478 command. |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1479 """ |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1480 pass |
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1481 |
11211
e43c23d189a5
push: add --new-branch option to allow intial push of new branches
Sune Foldager <cryo@cyanite.org>
parents:
11177
diff
changeset
|
1482 def push(self, remote, force=False, revs=None, newbranch=False): |
11153
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1483 '''Push outgoing changesets (limited by revs) from the current |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1484 repository to remote. Return an integer: |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1485 - 0 means HTTP error *or* nothing to push |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1486 - 1 means we pushed and remote head count is unchanged *or* |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1487 we have outgoing changesets but refused to push |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1488 - other values as described by addchangegroup() |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1489 ''' |
2439
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
1490 # there are two ways to push to remote repo: |
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
1491 # |
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
1492 # addchangegroup assumes local user can lock remote |
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
1493 # repo (local filesystem, old ssh servers). |
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
1494 # |
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
1495 # unbundle assumes local user cannot lock remote repo (new ssh |
e8c4f3d3df8c
extend network protocol to stop clients from locking servers
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2424
diff
changeset
|
1496 # servers, http servers). |
816
8674b7803714
Warn on pushing unsynced repo or adding new heads
mpm@selenic.com
parents:
814
diff
changeset
|
1497 |
13327
dc11e30b48a3
mq: factor out push conditions checks
Patrick Mezard <pmezard@gmail.com>
parents:
13272
diff
changeset
|
1498 self.checkpush(force, revs) |
11598
5be142109ed4
localrepo: remove push_{unbundle,addchangegroup}(), factor it inside push()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
11486
diff
changeset
|
1499 lock = None |
5be142109ed4
localrepo: remove push_{unbundle,addchangegroup}(), factor it inside push()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
11486
diff
changeset
|
1500 unbundle = remote.capable('unbundle') |
5be142109ed4
localrepo: remove push_{unbundle,addchangegroup}(), factor it inside push()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
11486
diff
changeset
|
1501 if not unbundle: |
5be142109ed4
localrepo: remove push_{unbundle,addchangegroup}(), factor it inside push()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
11486
diff
changeset
|
1502 lock = remote.lock() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1503 try: |
13364
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1504 cg, remote_heads = discovery.prepush(self, remote, force, revs, |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1505 newbranch) |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1506 ret = remote_heads |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1507 if cg is not None: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1508 if unbundle: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1509 # local repo finds heads on server, finds out what |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1510 # revs it must push. once revs transferred, if server |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1511 # finds it has different heads (someone else won |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1512 # commit/push race), server aborts. |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1513 if force: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1514 remote_heads = ['force'] |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1515 # ssh: return remote's addchangegroup() |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1516 # http: return remote's addchangegroup() or 0 for error |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1517 ret = remote.unbundle(cg, remote_heads, 'push') |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1518 else: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1519 # we return an integer indicating remote head count change |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1520 ret = remote.addchangegroup(cg, 'push', self.url(), |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1521 lock=lock) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1522 finally: |
11598
5be142109ed4
localrepo: remove push_{unbundle,addchangegroup}(), factor it inside push()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
11486
diff
changeset
|
1523 if lock is not None: |
5be142109ed4
localrepo: remove push_{unbundle,addchangegroup}(), factor it inside push()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
11486
diff
changeset
|
1524 lock.release() |
622
e9fe5d5e67f7
Add generic repo commands for pull and push
Matt Mackall <mpm@selenic.com>
parents:
621
diff
changeset
|
1525 |
13364
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1526 self.ui.debug("checking for updated bookmarks\n") |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1527 rb = remote.listkeys('bookmarks') |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1528 for k in rb.keys(): |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1529 if k in self._bookmarks: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1530 nr, nl = rb[k], hex(self._bookmarks[k]) |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1531 if nr in self: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1532 cr = self[nr] |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1533 cl = self[nl] |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1534 if cl in cr.descendants(): |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1535 r = remote.pushkey('bookmarks', k, nr, nl) |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1536 if r: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1537 self.ui.status(_("updating bookmark %s\n") % k) |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1538 else: |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1539 self.ui.warn(_('updating bookmark %s' |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1540 ' failed!\n') % k) |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1541 |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1542 return ret |
ddddb76f2da3
bookmarks: merge low-level push/pull support into core
Matt Mackall <mpm@selenic.com>
parents:
13363
diff
changeset
|
1543 |
5763
e20de0caf8e7
Show number of changesets written to bundle files by default (issue569)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5760
diff
changeset
|
1544 def changegroupinfo(self, nodes, source): |
e20de0caf8e7
Show number of changesets written to bundle files by default (issue569)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5760
diff
changeset
|
1545 if self.ui.verbose or source == 'bundle': |
e20de0caf8e7
Show number of changesets written to bundle files by default (issue569)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5760
diff
changeset
|
1546 self.ui.status(_("%d changesets found\n") % len(nodes)) |
3513
9383af6f236d
Show number (-v) and list (--debug) of changesets with bundle/pull/push etc.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3500
diff
changeset
|
1547 if self.ui.debugflag: |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
1548 self.ui.debug("list of changesets:\n") |
3513
9383af6f236d
Show number (-v) and list (--debug) of changesets with bundle/pull/push etc.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3500
diff
changeset
|
1549 for node in nodes: |
9383af6f236d
Show number (-v) and list (--debug) of changesets with bundle/pull/push etc.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3500
diff
changeset
|
1550 self.ui.debug("%s\n" % hex(node)) |
9383af6f236d
Show number (-v) and list (--debug) of changesets with bundle/pull/push etc.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3500
diff
changeset
|
1551 |
13703
48d606d7192b
changegroupsubset: extranodes are no longer needed
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13662
diff
changeset
|
1552 def changegroupsubset(self, bases, heads, source): |
9437
1c4e4004f3a6
Improve some docstrings relating to changegroups and prepush().
Greg Ward <greg-hg@gerg.ca>
parents:
9425
diff
changeset
|
1553 """Compute a changegroup consisting of all the nodes that are |
14549
48ec0763afbb
check-code: catch misspellings of descendant
Matt Mackall <mpm@selenic.com>
parents:
14536
diff
changeset
|
1554 descendants of any of the bases and ancestors of any of the heads. |
9437
1c4e4004f3a6
Improve some docstrings relating to changegroups and prepush().
Greg Ward <greg-hg@gerg.ca>
parents:
9425
diff
changeset
|
1555 Return a chunkbuffer object whose read() method will return |
1c4e4004f3a6
Improve some docstrings relating to changegroups and prepush().
Greg Ward <greg-hg@gerg.ca>
parents:
9425
diff
changeset
|
1556 successive changegroup chunks. |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1557 |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1558 It is fairly complex as determining which filenodes and which |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1559 manifest nodes need to be included for the changeset to be complete |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1560 is non-trivial. |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1561 |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1562 Another wrinkle is doing the reverse, figuring out which changeset in |
5908
afa1e6122be7
changegroupsubset: accept list of per-revlog nodes to include
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5907
diff
changeset
|
1563 the changegroup a particular filenode or manifestnode belongs to. |
afa1e6122be7
changegroupsubset: accept list of per-revlog nodes to include
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5907
diff
changeset
|
1564 """ |
9820
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1565 cl = self.changelog |
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1566 if not bases: |
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1567 bases = [nullid] |
13741
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1568 csets, bases, heads = cl.nodesbetween(bases, heads) |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1569 # We assume that all ancestors of bases are known |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1570 common = set(cl.ancestors(*[cl.rev(n) for n in bases])) |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1571 return self._changegroupsubset(common, csets, heads, source) |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1572 |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1573 def getbundle(self, source, heads=None, common=None): |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1574 """Like changegroupsubset, but returns the set difference between the |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1575 ancestors of heads and the ancestors common. |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1576 |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1577 If heads is None, use the local heads. If common is None, use [nullid]. |
9820
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1578 |
13741
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1579 The nodes in common might not all be known locally due to the way the |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1580 current discovery protocol works. |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1581 """ |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1582 cl = self.changelog |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1583 if common: |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1584 nm = cl.nodemap |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1585 common = [n for n in common if n in nm] |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1586 else: |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1587 common = [nullid] |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1588 if not heads: |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1589 heads = cl.heads() |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1590 common, missing = cl.findcommonmissing(common, heads) |
14073
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14064
diff
changeset
|
1591 if not missing: |
72c84f24b420
discovery: drop findoutgoing and simplify findcommonincoming's api
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14064
diff
changeset
|
1592 return None |
13741
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1593 return self._changegroupsubset(common, missing, heads, source) |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1594 |
b51bf961b3cb
wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13723
diff
changeset
|
1595 def _changegroupsubset(self, commonrevs, csets, heads, source): |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1596 |
9820
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1597 cl = self.changelog |
13706
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1598 mf = self.manifest |
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1599 mfs = {} # needed manifests |
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1600 fnodes = {} # needed file nodes |
13812
2b70683888b9
changegroup: minor ordering and renaming changes for similarity
Matt Mackall <mpm@selenic.com>
parents:
13811
diff
changeset
|
1601 changedfiles = set() |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1602 fstate = ['', {}] |
13813
76593ef397ef
changegroup: unnest some lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13812
diff
changeset
|
1603 count = [0] |
13706
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1604 |
13703
48d606d7192b
changegroupsubset: extranodes are no longer needed
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13662
diff
changeset
|
1605 # can we go through the fast path ? |
48d606d7192b
changegroupsubset: extranodes are no longer needed
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13662
diff
changeset
|
1606 heads.sort() |
13707
296e78744d32
changegroupsubset: more minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13706
diff
changeset
|
1607 if heads == sorted(self.heads()): |
13706
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1608 return self._changegroup(csets, source) |
7233
9f0e52e1df77
fix pull racing with push/commit (issue1320)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7229
diff
changeset
|
1609 |
9820
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1610 # slow path |
1736
50de0887bbcd
add preoutgoing and outgoing hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1732
diff
changeset
|
1611 self.hook('preoutgoing', throw=True, source=source) |
13706
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1612 self.changegroupinfo(csets, source) |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1613 |
13810
0252abaafb8a
changegroup: refactor prune as a filter
Matt Mackall <mpm@selenic.com>
parents:
13809
diff
changeset
|
1614 # filter any nodes that claim to be part of the known set |
0252abaafb8a
changegroup: refactor prune as a filter
Matt Mackall <mpm@selenic.com>
parents:
13809
diff
changeset
|
1615 def prune(revlog, missing): |
14521
d27f669bad7c
localrepo: use list comprehension instead of generators
Sune Foldager <cryo@cyanite.org>
parents:
14520
diff
changeset
|
1616 return [n for n in missing |
d27f669bad7c
localrepo: use list comprehension instead of generators
Sune Foldager <cryo@cyanite.org>
parents:
14520
diff
changeset
|
1617 if revlog.linkrev(revlog.rev(n)) not in commonrevs] |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1618 |
13830
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1619 def lookup(revlog, x): |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1620 if revlog == cl: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1621 c = cl.read(x) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1622 changedfiles.update(c[3]) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1623 mfs.setdefault(c[0], x) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1624 count[0] += 1 |
14520
9d8d2fecb72e
localrepo: add total to changeset progress in bundle/push
Sune Foldager <cryo@cyanite.org>
parents:
14509
diff
changeset
|
1625 self.ui.progress(_('bundling'), count[0], |
9d8d2fecb72e
localrepo: add total to changeset progress in bundle/push
Sune Foldager <cryo@cyanite.org>
parents:
14509
diff
changeset
|
1626 unit=_('changesets'), total=len(csets)) |
13830
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1627 return x |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1628 elif revlog == mf: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1629 clnode = mfs[x] |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1630 mdata = mf.readfast(x) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1631 for f in changedfiles: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1632 if f in mdata: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1633 fnodes.setdefault(f, {}).setdefault(mdata[f], clnode) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1634 count[0] += 1 |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1635 self.ui.progress(_('bundling'), count[0], |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1636 unit=_('manifests'), total=len(mfs)) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1637 return mfs[x] |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1638 else: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1639 self.ui.progress( |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1640 _('bundling'), count[0], item=fstate[0], |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1641 unit=_('files'), total=len(changedfiles)) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1642 return fstate[1][x] |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1643 |
13831
d69c9510d648
changegroup: introduce bundler objects
Matt Mackall <mpm@selenic.com>
parents:
13830
diff
changeset
|
1644 bundler = changegroup.bundle10(lookup) |
14365
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1645 reorder = self.ui.config('bundle', 'reorder', 'auto') |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1646 if reorder == 'auto': |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1647 reorder = None |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1648 else: |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1649 reorder = util.parsebool(reorder) |
515 | 1650 |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1651 def gengroup(): |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1652 # Create a changenode group generator that will call our functions |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1653 # back to lookup the owning changenode and collect information. |
14365
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1654 for chunk in cl.group(csets, bundler, reorder=reorder): |
13709
53826e7a1d22
changegroupsubset: more renaming
Matt Mackall <mpm@selenic.com>
parents:
13708
diff
changeset
|
1655 yield chunk |
13116
c36dad4f6e54
bundle progress: offer best-guess deterministic progress information
Augie Fackler <durin42@gmail.com>
parents:
13113
diff
changeset
|
1656 self.ui.progress(_('bundling'), None) |
10432
8a8030fc57d6
localrepo: provide indeterminate progress information while bundling
Augie Fackler <durin42@gmail.com>
parents:
10430
diff
changeset
|
1657 |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1658 # Create a generator for the manifestnodes that calls our lookup |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1659 # and data collection functions back. |
13813
76593ef397ef
changegroup: unnest some lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13812
diff
changeset
|
1660 count[0] = 0 |
14365
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1661 for chunk in mf.group(prune(mf, mfs), bundler, reorder=reorder): |
13709
53826e7a1d22
changegroupsubset: more renaming
Matt Mackall <mpm@selenic.com>
parents:
13708
diff
changeset
|
1662 yield chunk |
13116
c36dad4f6e54
bundle progress: offer best-guess deterministic progress information
Augie Fackler <durin42@gmail.com>
parents:
13113
diff
changeset
|
1663 self.ui.progress(_('bundling'), None) |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1664 |
13706
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1665 mfs.clear() |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1666 |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1667 # Go through all our files in order sorted by name. |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1668 count[0] = 0 |
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1669 for fname in sorted(changedfiles): |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1670 filerevlog = self.file(fname) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1671 if not len(filerevlog): |
5666 | 1672 raise util.Abort(_("empty or missing revlog for %s") % fname) |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1673 fstate[0] = fname |
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1674 fstate[1] = fnodes.pop(fname, {}) |
13783
c196352d935b
changegroup: fold progress meter into callbacks
Matt Mackall <mpm@selenic.com>
parents:
13782
diff
changeset
|
1675 |
14522
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1676 nodelist = prune(filerevlog, fstate[1]) |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1677 if nodelist: |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1678 count[0] += 1 |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1679 yield bundler.fileheader(fname) |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1680 for chunk in filerevlog.group(nodelist, bundler, reorder): |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1681 yield chunk |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1682 |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1683 # Signal that no more groups are left. |
13831
d69c9510d648
changegroup: introduce bundler objects
Matt Mackall <mpm@selenic.com>
parents:
13830
diff
changeset
|
1684 yield bundler.close() |
13116
c36dad4f6e54
bundle progress: offer best-guess deterministic progress information
Augie Fackler <durin42@gmail.com>
parents:
13113
diff
changeset
|
1685 self.ui.progress(_('bundling'), None) |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1686 |
13706
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1687 if csets: |
7beb9834d185
changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13703
diff
changeset
|
1688 self.hook('outgoing', node=hex(csets[0]), source=source) |
1736
50de0887bbcd
add preoutgoing and outgoing hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1732
diff
changeset
|
1689 |
12337
6a6149487817
bundle: encapsulate all bundle streams in unbundle class
Matt Mackall <mpm@selenic.com>
parents:
12335
diff
changeset
|
1690 return changegroup.unbundle10(util.chunkbuffer(gengroup()), 'UN') |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1691 |
1736
50de0887bbcd
add preoutgoing and outgoing hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1732
diff
changeset
|
1692 def changegroup(self, basenodes, source): |
7233
9f0e52e1df77
fix pull racing with push/commit (issue1320)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7229
diff
changeset
|
1693 # to avoid a race we use changegroupsubset() (issue1320) |
9f0e52e1df77
fix pull racing with push/commit (issue1320)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7229
diff
changeset
|
1694 return self.changegroupsubset(basenodes, self.heads(), source) |
9f0e52e1df77
fix pull racing with push/commit (issue1320)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7229
diff
changeset
|
1695 |
9820
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1696 def _changegroup(self, nodes, source): |
9437
1c4e4004f3a6
Improve some docstrings relating to changegroups and prepush().
Greg Ward <greg-hg@gerg.ca>
parents:
9425
diff
changeset
|
1697 """Compute the changegroup of all nodes that we have that a recipient |
1c4e4004f3a6
Improve some docstrings relating to changegroups and prepush().
Greg Ward <greg-hg@gerg.ca>
parents:
9425
diff
changeset
|
1698 doesn't. Return a chunkbuffer object whose read() method will return |
1c4e4004f3a6
Improve some docstrings relating to changegroups and prepush().
Greg Ward <greg-hg@gerg.ca>
parents:
9425
diff
changeset
|
1699 successive changegroup chunks. |
1466
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1700 |
b6d9ea0bc107
Added a lot of comments to changegroupsubset.
Eric Hopper <hopper@omnifarious.org>
parents:
1464
diff
changeset
|
1701 This is much easier than the previous function as we can assume that |
7233
9f0e52e1df77
fix pull racing with push/commit (issue1320)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7229
diff
changeset
|
1702 the recipient has any changenode we aren't sending them. |
9f0e52e1df77
fix pull racing with push/commit (issue1320)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7229
diff
changeset
|
1703 |
9820
0b999aec64e8
bundle: don't send too many changesets (Issue1704)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9691
diff
changeset
|
1704 nodes is the set of nodes to send""" |
1736
50de0887bbcd
add preoutgoing and outgoing hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1732
diff
changeset
|
1705 |
13812
2b70683888b9
changegroup: minor ordering and renaming changes for similarity
Matt Mackall <mpm@selenic.com>
parents:
13811
diff
changeset
|
1706 cl = self.changelog |
2b70683888b9
changegroup: minor ordering and renaming changes for similarity
Matt Mackall <mpm@selenic.com>
parents:
13811
diff
changeset
|
1707 mf = self.manifest |
2b70683888b9
changegroup: minor ordering and renaming changes for similarity
Matt Mackall <mpm@selenic.com>
parents:
13811
diff
changeset
|
1708 mfs = {} |
2b70683888b9
changegroup: minor ordering and renaming changes for similarity
Matt Mackall <mpm@selenic.com>
parents:
13811
diff
changeset
|
1709 changedfiles = set() |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1710 fstate = [''] |
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1711 count = [0] |
1736
50de0887bbcd
add preoutgoing and outgoing hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1732
diff
changeset
|
1712 |
13812
2b70683888b9
changegroup: minor ordering and renaming changes for similarity
Matt Mackall <mpm@selenic.com>
parents:
13811
diff
changeset
|
1713 self.hook('preoutgoing', throw=True, source=source) |
5763
e20de0caf8e7
Show number of changesets written to bundle files by default (issue569)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5760
diff
changeset
|
1714 self.changegroupinfo(nodes, source) |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1715 |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8151
diff
changeset
|
1716 revset = set([cl.rev(n) for n in nodes]) |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1717 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1718 def gennodelst(log): |
14521
d27f669bad7c
localrepo: use list comprehension instead of generators
Sune Foldager <cryo@cyanite.org>
parents:
14520
diff
changeset
|
1719 return [log.node(r) for r in log if log.linkrev(r) in revset] |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1720 |
13830
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1721 def lookup(revlog, x): |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1722 if revlog == cl: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1723 c = cl.read(x) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1724 changedfiles.update(c[3]) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1725 mfs.setdefault(c[0], x) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1726 count[0] += 1 |
14520
9d8d2fecb72e
localrepo: add total to changeset progress in bundle/push
Sune Foldager <cryo@cyanite.org>
parents:
14509
diff
changeset
|
1727 self.ui.progress(_('bundling'), count[0], |
9d8d2fecb72e
localrepo: add total to changeset progress in bundle/push
Sune Foldager <cryo@cyanite.org>
parents:
14509
diff
changeset
|
1728 unit=_('changesets'), total=len(nodes)) |
13830
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1729 return x |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1730 elif revlog == mf: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1731 count[0] += 1 |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1732 self.ui.progress(_('bundling'), count[0], |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1733 unit=_('manifests'), total=len(mfs)) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1734 return cl.node(revlog.linkrev(revlog.rev(x))) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1735 else: |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1736 self.ui.progress( |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1737 _('bundling'), count[0], item=fstate[0], |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1738 total=len(changedfiles), unit=_('files')) |
2dc6e09f2a7d
changegroup: combine lookup functions
Matt Mackall <mpm@selenic.com>
parents:
13829
diff
changeset
|
1739 return cl.node(revlog.linkrev(revlog.rev(x))) |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1740 |
13831
d69c9510d648
changegroup: introduce bundler objects
Matt Mackall <mpm@selenic.com>
parents:
13830
diff
changeset
|
1741 bundler = changegroup.bundle10(lookup) |
14365
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1742 reorder = self.ui.config('bundle', 'reorder', 'auto') |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1743 if reorder == 'auto': |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1744 reorder = None |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1745 else: |
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1746 reorder = util.parsebool(reorder) |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1747 |
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1748 def gengroup(): |
9437
1c4e4004f3a6
Improve some docstrings relating to changegroups and prepush().
Greg Ward <greg-hg@gerg.ca>
parents:
9425
diff
changeset
|
1749 '''yield a sequence of changegroup chunks (strings)''' |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1750 # construct a list of all changed files |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1751 |
14365
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1752 for chunk in cl.group(nodes, bundler, reorder=reorder): |
13716
6d7338f5320a
changegroup: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13714
diff
changeset
|
1753 yield chunk |
13116
c36dad4f6e54
bundle progress: offer best-guess deterministic progress information
Augie Fackler <durin42@gmail.com>
parents:
13113
diff
changeset
|
1754 self.ui.progress(_('bundling'), None) |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1755 |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1756 count[0] = 0 |
14365
a8e3931e3fb5
revlog: linearize created changegroups in generaldelta revlogs
Sune Foldager <cryo@cyanite.org>
parents:
14363
diff
changeset
|
1757 for chunk in mf.group(gennodelst(mf), bundler, reorder=reorder): |
13716
6d7338f5320a
changegroup: minor cleanups
Matt Mackall <mpm@selenic.com>
parents:
13714
diff
changeset
|
1758 yield chunk |
13116
c36dad4f6e54
bundle progress: offer best-guess deterministic progress information
Augie Fackler <durin42@gmail.com>
parents:
13113
diff
changeset
|
1759 self.ui.progress(_('bundling'), None) |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1760 |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1761 count[0] = 0 |
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1762 for fname in sorted(changedfiles): |
1458
1033892bbb87
This changes the revlog.group and re-implements the localrepo.changeroup
Eric Hopper <hopper@omnifarious.org>
parents:
1457
diff
changeset
|
1763 filerevlog = self.file(fname) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1764 if not len(filerevlog): |
5666 | 1765 raise util.Abort(_("empty or missing revlog for %s") % fname) |
13829
7b7c1d9d08ab
changegroup: unnest flookup
Matt Mackall <mpm@selenic.com>
parents:
13826
diff
changeset
|
1766 fstate[0] = fname |
14522
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1767 nodelist = gennodelst(filerevlog) |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1768 if nodelist: |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1769 count[0] += 1 |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1770 yield bundler.fileheader(fname) |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1771 for chunk in filerevlog.group(nodelist, bundler, reorder): |
5ca61ef6ff00
localrepo: simplify file bundling code and fix progress bug
Sune Foldager <cryo@cyanite.org>
parents:
14521
diff
changeset
|
1772 yield chunk |
13831
d69c9510d648
changegroup: introduce bundler objects
Matt Mackall <mpm@selenic.com>
parents:
13830
diff
changeset
|
1773 yield bundler.close() |
13116
c36dad4f6e54
bundle progress: offer best-guess deterministic progress information
Augie Fackler <durin42@gmail.com>
parents:
13113
diff
changeset
|
1774 self.ui.progress(_('bundling'), None) |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1775 |
2107
7ff92c04f8e5
Don't die calling outgoing hook if we have no changesets
Matt Mackall <mpm@selenic.com>
parents:
2098
diff
changeset
|
1776 if nodes: |
7ff92c04f8e5
Don't die calling outgoing hook if we have no changesets
Matt Mackall <mpm@selenic.com>
parents:
2098
diff
changeset
|
1777 self.hook('outgoing', node=hex(nodes[0]), source=source) |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1778 |
12337
6a6149487817
bundle: encapsulate all bundle streams in unbundle class
Matt Mackall <mpm@selenic.com>
parents:
12335
diff
changeset
|
1779 return changegroup.unbundle10(util.chunkbuffer(gengroup()), 'UN') |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1780 |
11442
ee1ed6afac21
addchangegroup: pass in lock to release it before changegroup hook is called
Matt Mackall <mpm@selenic.com>
parents:
11368
diff
changeset
|
1781 def addchangegroup(self, source, srctype, url, emptyok=False, lock=None): |
11153
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1782 """Add the changegroup returned by source.read() to this repo. |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1783 srctype is a string like 'push', 'pull', or 'unbundle'. url is |
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1784 the URL of the repo where this changegroup is coming from. |
13271
952baa2f3325
addchangegroup: document the current locking semantics
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13253
diff
changeset
|
1785 If lock is not None, the function takes ownership of the lock |
952baa2f3325
addchangegroup: document the current locking semantics
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13253
diff
changeset
|
1786 and releases it after the changegroup is added. |
635
85e2209d401c
Protocol switch from using generators to stream-like objects.
Matt Mackall <mpm@selenic.com>
parents:
634
diff
changeset
|
1787 |
11153
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1788 Return an integer summarizing the change to this repo: |
3803
2aef481ac73c
Don't report an error when closing heads during local push (issue387)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3801
diff
changeset
|
1789 - nothing changed or no source: 0 |
2aef481ac73c
Don't report an error when closing heads during local push (issue387)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3801
diff
changeset
|
1790 - more heads than before: 1+added heads (2..n) |
11153
9936ed1d04f4
push: document return values between various repo methods.
Greg Ward <greg-hg@gerg.ca>
parents:
11112
diff
changeset
|
1791 - fewer heads than before: -1-removed heads (-2..-n) |
3803
2aef481ac73c
Don't report an error when closing heads during local push (issue387)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3801
diff
changeset
|
1792 - number of heads stays the same: 1 |
2aef481ac73c
Don't report an error when closing heads during local push (issue387)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3801
diff
changeset
|
1793 """ |
222 | 1794 def csmap(x): |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
1795 self.ui.debug("add changeset %s\n" % short(x)) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1796 return len(cl) |
222 | 1797 |
1798 def revmap(x): | |
1998
65cc17ae9649
fix race in localrepo.addchangegroup.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1995
diff
changeset
|
1799 return cl.rev(x) |
222 | 1800 |
1615
83238c1db6de
Cleanup of indentation, spacing, newlines, strings and line length
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1597
diff
changeset
|
1801 if not source: |
2019
ced2d3620f95
add merge command. means same thing as "update -m".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1998
diff
changeset
|
1802 return 0 |
1730
0f1d2c75db5e
add prechangegroup and pretxnchangegroup hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1721
diff
changeset
|
1803 |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
1804 self.hook('prechangegroup', throw=True, source=srctype, url=url) |
1730
0f1d2c75db5e
add prechangegroup and pretxnchangegroup hooks.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1721
diff
changeset
|
1805 |
222 | 1806 changesets = files = revisions = 0 |
10888
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1807 efiles = set() |
225 | 1808 |
2395
8ed45fb1053a
remove appendfile for the manifest when adding a changegroup
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2362
diff
changeset
|
1809 # write changelog data to temp files so concurrent readers will not see |
8ed45fb1053a
remove appendfile for the manifest when adding a changegroup
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
2362
diff
changeset
|
1810 # inconsistent view |
4261
cd7b36b7869c
restructure changelog file appending
Matt Mackall <mpm@selenic.com>
parents:
4258
diff
changeset
|
1811 cl = self.changelog |
cd7b36b7869c
restructure changelog file appending
Matt Mackall <mpm@selenic.com>
parents:
4258
diff
changeset
|
1812 cl.delayupdate() |
14036
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1813 oldheads = cl.heads() |
1998
65cc17ae9649
fix race in localrepo.addchangegroup.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1995
diff
changeset
|
1814 |
14076
924c82157d46
url: move URL parsing functions into util to improve startup time
Brodie Rao <brodie@bitheap.org>
parents:
14073
diff
changeset
|
1815 tr = self.transaction("\n".join([srctype, util.hidepassword(url)])) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1816 try: |
4970
30d4d8985dd8
transactions: avoid late tear-down (issue641)
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
1817 trp = weakref.proxy(tr) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1818 # pull off the changeset group |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1819 self.ui.status(_("adding changesets\n")) |
8393
59160ca338f7
localrepo: use more direct vars in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8392
diff
changeset
|
1820 clstart = len(cl) |
10430
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1821 class prog(object): |
10496
45734b51c99b
progress: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10492
diff
changeset
|
1822 step = _('changesets') |
10430
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1823 count = 1 |
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1824 ui = self.ui |
10888
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1825 total = None |
10430
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1826 def __call__(self): |
10888
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1827 self.ui.progress(self.step, self.count, unit=_('chunks'), |
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1828 total=self.total) |
10430
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1829 self.count += 1 |
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1830 pr = prog() |
12334
50946802593d
bundle: refactor progress callback
Matt Mackall <mpm@selenic.com>
parents:
12333
diff
changeset
|
1831 source.callback = pr |
50946802593d
bundle: refactor progress callback
Matt Mackall <mpm@selenic.com>
parents:
12333
diff
changeset
|
1832 |
14144
3c3c53d8343a
unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14102
diff
changeset
|
1833 source.changelogheader() |
12335
e21fe9c5fb25
bundle: get rid of chunkiter
Matt Mackall <mpm@selenic.com>
parents:
12334
diff
changeset
|
1834 if (cl.addgroup(source, csmap, trp) is None |
12333
44c7dfc2f6a3
bundle: make getchunk() a method
Matt Mackall <mpm@selenic.com>
parents:
12296
diff
changeset
|
1835 and not emptyok): |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1836 raise util.Abort(_("received changelog group is empty")) |
8393
59160ca338f7
localrepo: use more direct vars in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8392
diff
changeset
|
1837 clend = len(cl) |
59160ca338f7
localrepo: use more direct vars in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8392
diff
changeset
|
1838 changesets = clend - clstart |
10888
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1839 for c in xrange(clstart, clend): |
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1840 efiles.update(self[c].files()) |
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1841 efiles = len(efiles) |
10496
45734b51c99b
progress: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10492
diff
changeset
|
1842 self.ui.progress(_('changesets'), None) |
1040
35e883d1ff9b
Show number of new heads when doing a pull
mpm@selenic.com
parents:
1019
diff
changeset
|
1843 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1844 # pull off the manifest group |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1845 self.ui.status(_("adding manifests\n")) |
10496
45734b51c99b
progress: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10492
diff
changeset
|
1846 pr.step = _('manifests') |
10430
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1847 pr.count = 1 |
10888
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1848 pr.total = changesets # manifests <= changesets |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1849 # no need to check for empty manifest group here: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1850 # if the result of the merge of 1 and 2 is the same in 3 and 4, |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1851 # no new manifest will be created and the manifest group will |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1852 # be empty during the pull |
14144
3c3c53d8343a
unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14102
diff
changeset
|
1853 source.manifestheader() |
12335
e21fe9c5fb25
bundle: get rid of chunkiter
Matt Mackall <mpm@selenic.com>
parents:
12334
diff
changeset
|
1854 self.manifest.addgroup(source, revmap, trp) |
10496
45734b51c99b
progress: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10492
diff
changeset
|
1855 self.ui.progress(_('manifests'), None) |
222 | 1856 |
10418
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1857 needfiles = {} |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1858 if self.ui.configbool('server', 'validate', default=False): |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1859 # validate incoming csets have their manifests |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1860 for cset in xrange(clstart, clend): |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1861 mfest = self.changelog.read(self.changelog.node(cset))[0] |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1862 mfest = self.manifest.readdelta(mfest) |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1863 # store file nodes we must see |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1864 for f, n in mfest.iteritems(): |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1865 needfiles.setdefault(f, set()).add(n) |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1866 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1867 # process the files |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1868 self.ui.status(_("adding file changes\n")) |
14756
fdcf6f09b68d
localrepo: mark progress step for translation
Wagner Bruna <wbruna@yahoo.com>
parents:
14646
diff
changeset
|
1869 pr.step = _('files') |
10430
5cef810e588f
localrepo: show indeterminate progress for incoming data
Augie Fackler <durin42@gmail.com>
parents:
10429
diff
changeset
|
1870 pr.count = 1 |
10888
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1871 pr.total = efiles |
12334
50946802593d
bundle: refactor progress callback
Matt Mackall <mpm@selenic.com>
parents:
12333
diff
changeset
|
1872 source.callback = None |
50946802593d
bundle: refactor progress callback
Matt Mackall <mpm@selenic.com>
parents:
12333
diff
changeset
|
1873 |
14494
1ffeeb91c55d
check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents:
14482
diff
changeset
|
1874 while True: |
14144
3c3c53d8343a
unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14102
diff
changeset
|
1875 chunkdata = source.filelogheader() |
3c3c53d8343a
unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14102
diff
changeset
|
1876 if not chunkdata: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1877 break |
14144
3c3c53d8343a
unbundler: separate delta and header parsing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
14102
diff
changeset
|
1878 f = chunkdata["filename"] |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
1879 self.ui.debug("adding %s revisions\n" % f) |
10888
5e18023820a9
progress: show approximate progress info for pull
Matt Mackall <mpm@selenic.com>
parents:
10886
diff
changeset
|
1880 pr() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1881 fl = self.file(f) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1882 o = len(fl) |
12335
e21fe9c5fb25
bundle: get rid of chunkiter
Matt Mackall <mpm@selenic.com>
parents:
12334
diff
changeset
|
1883 if fl.addgroup(source, revmap, trp) is None: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1884 raise util.Abort(_("received file revlog group is empty")) |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
1885 revisions += len(fl) - o |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1886 files += 1 |
10418
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1887 if f in needfiles: |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1888 needs = needfiles[f] |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1889 for new in xrange(o, len(fl)): |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1890 n = fl.node(new) |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1891 if n in needs: |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1892 needs.remove(n) |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1893 if not needs: |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1894 del needfiles[f] |
10496
45734b51c99b
progress: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10492
diff
changeset
|
1895 self.ui.progress(_('files'), None) |
10418
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1896 |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1897 for f, needs in needfiles.iteritems(): |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1898 fl = self.file(f) |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1899 for n in needs: |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1900 try: |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1901 fl.rev(n) |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1902 except error.LookupError: |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1903 raise util.Abort( |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1904 _('missing file data for %s:%s - run hg verify') % |
5fc090ba08a6
localrepo: add optional validation (defaults to off) for incoming changes
Augie Fackler <durin42@gmail.com>
parents:
10405
diff
changeset
|
1905 (f, hex(n))) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1906 |
14036
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1907 dh = 0 |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1908 if oldheads: |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1909 heads = cl.heads() |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1910 dh = len(heads) - len(oldheads) |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1911 for h in heads: |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1912 if h not in oldheads and 'close' in self[h].extra(): |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1913 dh -= 1 |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1914 htext = "" |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1915 if dh: |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1916 htext = _(" (%+d heads)") % dh |
1998
65cc17ae9649
fix race in localrepo.addchangegroup.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1995
diff
changeset
|
1917 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1918 self.ui.status(_("added %d changesets" |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1919 " with %d changes to %d files%s\n") |
14036
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1920 % (changesets, revisions, files, htext)) |
1040
35e883d1ff9b
Show number of new heads when doing a pull
mpm@selenic.com
parents:
1019
diff
changeset
|
1921 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1922 if changesets > 0: |
8392
7e5cbb09515b
localrepo: use cl throughout in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8390
diff
changeset
|
1923 p = lambda: cl.writepending() and self.root or "" |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1924 self.hook('pretxnchangegroup', throw=True, |
8393
59160ca338f7
localrepo: use more direct vars in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8392
diff
changeset
|
1925 node=hex(cl.node(clstart)), source=srctype, |
7787
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1926 url=url, pending=p) |
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1927 |
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1928 # make changelog see real files again |
b8d750daadde
Introduce HG_PREPEND to solve pretxn races
Matt Mackall <mpm@selenic.com>
parents:
7728
diff
changeset
|
1929 cl.finalize(trp) |
222 | 1930 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1931 tr.close() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4914
diff
changeset
|
1932 finally: |
11230
5116a077c3da
make transactions work on non-refcounted python implementations
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
11228
diff
changeset
|
1933 tr.release() |
11442
ee1ed6afac21
addchangegroup: pass in lock to release it before changegroup hook is called
Matt Mackall <mpm@selenic.com>
parents:
11368
diff
changeset
|
1934 if lock: |
ee1ed6afac21
addchangegroup: pass in lock to release it before changegroup hook is called
Matt Mackall <mpm@selenic.com>
parents:
11368
diff
changeset
|
1935 lock.release() |
780 | 1936 |
1375
f2b00be33e2c
Fix traceback when nothing was added during unbundle
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
1353
diff
changeset
|
1937 if changesets > 0: |
5988
ee317dbfb9d0
update the branch cache at the end of addchangegroup
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5985
diff
changeset
|
1938 # forcefully update the on-disk branch cache |
9467
4c041f1ee1b4
do not attempt to translate ui.debug output
Martin Geisler <mg@lazybytes.net>
parents:
9437
diff
changeset
|
1939 self.ui.debug("updating the branch cache\n") |
12066
d01e28657429
localrepo: introduce method for explicit branch cache update
Georg Brandl <georg@python.org>
parents:
12035
diff
changeset
|
1940 self.updatebranchcache() |
8393
59160ca338f7
localrepo: use more direct vars in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8392
diff
changeset
|
1941 self.hook("changegroup", node=hex(cl.node(clstart)), |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
1942 source=srctype, url=url) |
780 | 1943 |
8393
59160ca338f7
localrepo: use more direct vars in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8392
diff
changeset
|
1944 for i in xrange(clstart, clend): |
8392
7e5cbb09515b
localrepo: use cl throughout in addchangegroup
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8390
diff
changeset
|
1945 self.hook("incoming", node=hex(cl.node(i)), |
2673
109a22f5434a
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2661
diff
changeset
|
1946 source=srctype, url=url) |
1316 | 1947 |
3803
2aef481ac73c
Don't report an error when closing heads during local push (issue387)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3801
diff
changeset
|
1948 # never return 0 here: |
14036
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1949 if dh < 0: |
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1950 return dh - 1 |
3803
2aef481ac73c
Don't report an error when closing heads during local push (issue387)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3801
diff
changeset
|
1951 else: |
14036
90d997a812dc
changegroup: do not count closed new heads (issue2697)
Adrian Buehlmann <adrian@cadifra.com>
parents:
14004
diff
changeset
|
1952 return dh + 1 |
232
fc4a6e5b5812
hg resolve: merge a given node into the working directory
mpm@selenic.com
parents:
231
diff
changeset
|
1953 |
12296
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
1954 def stream_in(self, remote, requirements): |
13390
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1955 lock = self.lock() |
3564
eda9e7c9300d
New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3513
diff
changeset
|
1956 try: |
13390
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1957 fp = remote.stream_out() |
3564
eda9e7c9300d
New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3513
diff
changeset
|
1958 l = fp.readline() |
eda9e7c9300d
New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3513
diff
changeset
|
1959 try: |
13390
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1960 resp = int(l) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1961 except ValueError: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1962 raise error.ResponseError( |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1963 _('Unexpected response from remote server:'), l) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1964 if resp == 1: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1965 raise util.Abort(_('operation forbidden by server')) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1966 elif resp == 2: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1967 raise util.Abort(_('locking the remote repository failed')) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1968 elif resp != 0: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1969 raise util.Abort(_('the server sent an unknown error code')) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1970 self.ui.status(_('streaming all changes\n')) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1971 l = fp.readline() |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1972 try: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1973 total_files, total_bytes = map(int, l.split(' ', 1)) |
7063
be2daa324ddf
Add missing catch of a TypeError
Bernhard Leiner <bleiner@gmail.com>
parents:
6877
diff
changeset
|
1974 except (ValueError, TypeError): |
7641
d2f753830f80
error: move UnexpectedOutput (now ResponseError)
Matt Mackall <mpm@selenic.com>
parents:
7640
diff
changeset
|
1975 raise error.ResponseError( |
3564
eda9e7c9300d
New UnexpectedOutput exception to catch server errors in localrepo.stream_in
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3513
diff
changeset
|
1976 _('Unexpected response from remote server:'), l) |
13390
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1977 self.ui.status(_('%d files to transfer, %s of data\n') % |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1978 (total_files, util.bytecount(total_bytes))) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1979 start = time.time() |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1980 for i in xrange(total_files): |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1981 # XXX doesn't support '\n' or '\r' in filenames |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1982 l = fp.readline() |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1983 try: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1984 name, size = l.split('\0', 1) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1985 size = int(size) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1986 except (ValueError, TypeError): |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1987 raise error.ResponseError( |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1988 _('Unexpected response from remote server:'), l) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1989 self.ui.debug('adding %s (%s)\n' % (name, util.bytecount(size))) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1990 # for backwards compat, name was partially encoded |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1991 ofp = self.sopener(store.decodedir(name), 'w') |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1992 for chunk in util.filechunkiter(fp, limit=size): |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1993 ofp.write(chunk) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1994 ofp.close() |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1995 elapsed = time.time() - start |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1996 if elapsed <= 0: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1997 elapsed = 0.001 |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1998 self.ui.status(_('transferred %s in %.1f seconds (%s/sec)\n') % |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
1999 (util.bytecount(total_bytes), elapsed, |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2000 util.bytecount(total_bytes / elapsed))) |
12296
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2001 |
13390
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2002 # new requirements = old non-format requirements + new format-related |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2003 # requirements from the streamed-in repository |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2004 requirements.update(set(self.requirements) - self.supportedformats) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2005 self._applyrequirements(requirements) |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2006 self._writerequirements() |
12296
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2007 |
13390
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2008 self.invalidate() |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2009 return len(self.heads()) + 1 |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2010 finally: |
327719a44b6a
localrepo: acquire lock on stream_in
Adrian Buehlmann <adrian@cadifra.com>
parents:
13385
diff
changeset
|
2011 lock.release() |
515 | 2012 |
2613
479e26afa10f
clone: do not make streaming default. add --stream option instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2612
diff
changeset
|
2013 def clone(self, remote, heads=[], stream=False): |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2601
diff
changeset
|
2014 '''clone remote repository. |
1382
b113e7db06e9
hg verify: more consistency checking between changesets and manifests
Matt Mackall <mpm@selenic.com>
parents:
1375
diff
changeset
|
2015 |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2601
diff
changeset
|
2016 keyword arguments: |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2601
diff
changeset
|
2017 heads: list of revs to clone (forces use of pull) |
2621
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
2018 stream: use streaming clone if possible''' |
247 | 2019 |
2621
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
2020 # now, all clients that can request uncompressed clones can |
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
2021 # read repo formats supported by all servers that can serve |
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
2022 # them. |
247 | 2023 |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2601
diff
changeset
|
2024 # if revlog format changes, client will have to check version |
2621
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
2025 # and format flags on "stream" capability, and use |
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
2026 # uncompressed only if compatible. |
247 | 2027 |
12296
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2028 if stream and not heads: |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2029 # 'stream' means remote revlog format is revlogv1 only |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2030 if remote.capable('stream'): |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2031 return self.stream_in(remote, set(('revlogv1',))) |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2032 # otherwise, 'streamreqs' contains the remote revlog format |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2033 streamreqs = remote.capable('streamreqs') |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2034 if streamreqs: |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2035 streamreqs = set(streamreqs.split(',')) |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2036 # if we support it, stream in and adjust our requirements |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2037 if not streamreqs - self.supportedformats: |
d7fff529d85d
clone: only use stream when we understand the revlog format
Sune Foldager <cryo@cyanite.org>
parents:
12295
diff
changeset
|
2038 return self.stream_in(remote, streamreqs) |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2601
diff
changeset
|
2039 return self.pull(remote, heads) |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2040 |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2041 def pushkey(self, namespace, key, old, new): |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2042 self.hook('prepushkey', throw=True, namespace=namespace, key=key, |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2043 old=old, new=new) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2044 ret = pushkey.push(self, namespace, key, old, new) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2045 self.hook('pushkey', namespace=namespace, key=key, old=old, new=new, |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2046 ret=ret) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2047 return ret |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2048 |
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2049 def listkeys(self, namespace): |
14102
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2050 self.hook('prelistkeys', throw=True, namespace=namespace) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2051 values = pushkey.list(self, namespace) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2052 self.hook('listkeys', namespace=namespace, values=values) |
7f45b1911893
pushkey: add hooks for pushkey/listkeys
Brodie Rao <brodie@bitheap.org>
parents:
14076
diff
changeset
|
2053 return values |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2054 |
14048
58e58406ed19
wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14036
diff
changeset
|
2055 def debugwireargs(self, one, two, three=None, four=None, five=None): |
13720
9c4e04fe267e
debug: add debugwireargs to test argument passing over the wire
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
13716
diff
changeset
|
2056 '''used to test argument passing over the wire''' |
14048
58e58406ed19
wireproto: add test for new optional arg missing on server
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14036
diff
changeset
|
2057 return "%s %s %s %s %s" % (one, two, three, four, five) |
11368
b9eb005c54ad
pushkey: add localrepo support
Matt Mackall <mpm@selenic.com>
parents:
11303
diff
changeset
|
2058 |
14529
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2059 def savecommitmessage(self, text): |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2060 fp = self.opener('last-message.txt', 'wb') |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2061 try: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2062 fp.write(text) |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2063 finally: |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2064 fp.close() |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2065 return self.pathto(fp.name[len(self.root)+1:]) |
e7a1814854b9
localrepo: add savecommitmessage() to write last-message.txt
Patrick Mezard <pmezard@gmail.com>
parents:
14522
diff
changeset
|
2066 |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2067 # used to avoid circular references so destructors work |
3790
f183c18568df
localrepo: change aftertrans to be independant of the store path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3773
diff
changeset
|
2068 def aftertrans(files): |
f183c18568df
localrepo: change aftertrans to be independant of the store path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3773
diff
changeset
|
2069 renamefiles = [tuple(t) for t in files] |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2070 def a(): |
3790
f183c18568df
localrepo: change aftertrans to be independant of the store path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3773
diff
changeset
|
2071 for src, dest in renamefiles: |
f183c18568df
localrepo: change aftertrans to be independant of the store path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3773
diff
changeset
|
2072 util.rename(src, dest) |
1806
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2073 return a |
a2c69737e65e
Automatic nesting into running transactions in the same repository.
mason@suse.com
parents:
1802
diff
changeset
|
2074 |
14266
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2075 def undoname(fn): |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2076 base, name = os.path.split(fn) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2077 assert name.startswith('journal') |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2078 return os.path.join(base, name.replace('journal', 'undo', 1)) |
89e7d35e0ef0
fix bookmarks rollback behavior
Alexander Solovyov <alexander@solovyov.net>
parents:
13957
diff
changeset
|
2079 |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
2080 def instance(ui, path, create): |
14825
de9eb6b1da4f
util: rename the util.localpath that uses url to urllocalpath (issue2875)
Mads Kiilerich <mads@kiilerich.com>
parents:
14756
diff
changeset
|
2081 return localrepository(ui, util.urllocalpath(path), create) |
3223
53e843840349
Whitespace/Tab cleanup
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3164
diff
changeset
|
2082 |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
2083 def islocal(path): |
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2673
diff
changeset
|
2084 return True |