annotate mercurial/repository.py @ 39662:50f46b771921

py3: partially fix pager spawning on Windows Previously, spinning up the pager crashed because the command and environment was in bytes. (See also 543a788eea2d.) Now it aborts with an invalid handle: $ HGMODULEPOLICY=py py -3 ../hg --traceback --config extensions.evolve=! Traceback (most recent call last): File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 967, in _write self.fout.write(''.join(msgs)) File "c:\Users\Matt\projects\hg\mercurial\windows.py", line 173, in write self.fp.write(s[start:end]) OSError: [WinError 6] The handle is invalid During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:\Users\Matt\projects\hg\mercurial\scmutil.py", line 164, in callcatch return func() File "c:\Users\Matt\projects\hg\mercurial\dispatch.py", line 350, in _runcatchfunc return _dispatch(req) File "c:\Users\Matt\projects\hg\mercurial\dispatch.py", line 930, in _dispatch return commands.help_(ui, 'shortlist') File "c:\Users\Matt\projects\hg\mercurial\commands.py", line 2930, in help_ ui.write(formatted) File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 948, in write self._writenobuf(*args, **opts) File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 960, in _writenobuf self._write(*msgs, **opts) File "c:\Users\Matt\projects\hg\mercurial\ui.py", line 969, in _write raise error.StdioError(err) mercurial.error.StdioError: [Errno 9] The handle is invalid abort: The handle is invalid The interesting bit here is that the abort message is marked with ANSI color, but the OSError is not.
author Matt Harbison <matt_harbison@yahoo.com>
date Sat, 15 Sep 2018 13:31:41 -0400
parents 57c3864f3aad
children 24870f1be088
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
1 # repository.py - Interfaces and base classes for repositories and peers.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
2 #
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
3 # Copyright 2017 Gregory Szorc <gregory.szorc@gmail.com>
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
4 #
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
5 # This software may be used and distributed according to the terms of the
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
6 # GNU General Public License version 2 or any later version.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
7
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
8 from __future__ import absolute_import
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
9
33802
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
10 from .i18n import _
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
11 from . import (
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
12 error,
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
13 )
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
14 from .utils import (
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
15 interfaceutil,
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
16 )
33802
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
17
38835
a232e6744ba3 narrow: move requirement constant from changegroup to repository
Martin von Zweigbergk <martinvonz@google.com>
parents: 38556
diff changeset
18 # When narrowing is finalized and no longer subject to format changes,
a232e6744ba3 narrow: move requirement constant from changegroup to repository
Martin von Zweigbergk <martinvonz@google.com>
parents: 38556
diff changeset
19 # we should move this to just "narrow" or similar.
a232e6744ba3 narrow: move requirement constant from changegroup to repository
Martin von Zweigbergk <martinvonz@google.com>
parents: 38556
diff changeset
20 NARROW_REQUIREMENT = 'narrowhg-experimental'
a232e6744ba3 narrow: move requirement constant from changegroup to repository
Martin von Zweigbergk <martinvonz@google.com>
parents: 38556
diff changeset
21
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
22 class ipeerconnection(interfaceutil.Interface):
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
23 """Represents a "connection" to a repository.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
24
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
25 This is the base interface for representing a connection to a repository.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
26 It holds basic properties and methods applicable to all peer types.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
27
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
28 This is not a complete interface definition and should not be used
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
29 outside of this module.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
30 """
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
31 ui = interfaceutil.Attribute("""ui.ui instance""")
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
32
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
33 def url():
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
34 """Returns a URL string representing this peer.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
35
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
36 Currently, implementations expose the raw URL used to construct the
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
37 instance. It may contain credentials as part of the URL. The
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
38 expectations of the value aren't well-defined and this could lead to
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
39 data leakage.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
40
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
41 TODO audit/clean consumers and more clearly define the contents of this
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
42 value.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
43 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
44
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
45 def local():
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
46 """Returns a local repository instance.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
47
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
48 If the peer represents a local repository, returns an object that
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
49 can be used to interface with it. Otherwise returns ``None``.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
50 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
51
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
52 def peer():
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
53 """Returns an object conforming to this interface.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
54
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
55 Most implementations will ``return self``.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
56 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
57
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
58 def canpush():
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
59 """Returns a boolean indicating if this peer can be pushed to."""
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
60
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
61 def close():
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
62 """Close the connection to this peer.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
63
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
64 This is called when the peer will no longer be used. Resources
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
65 associated with the peer should be cleaned up.
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
66 """
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
67
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
68 class ipeercapabilities(interfaceutil.Interface):
37610
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
69 """Peer sub-interface related to capabilities."""
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
70
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
71 def capable(name):
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
72 """Determine support for a named capability.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
73
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
74 Returns ``False`` if capability not supported.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
75
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
76 Returns ``True`` if boolean capability is supported. Returns a string
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
77 if capability support is non-boolean.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
78
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
79 Capability strings may or may not map to wire protocol capabilities.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
80 """
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
81
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
82 def requirecap(name, purpose):
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
83 """Require a capability to be present.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
84
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
85 Raises a ``CapabilityError`` if the capability isn't present.
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
86 """
98861a2298b5 repository: split capabilities methods into separate interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37440
diff changeset
87
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
88 class ipeercommands(interfaceutil.Interface):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
89 """Client-side interface for communicating over the wire protocol.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
90
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
91 This interface is used as a gateway to the Mercurial wire protocol.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
92 methods commonly call wire protocol commands of the same name.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
93 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
94
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
95 def branchmap():
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
96 """Obtain heads in named branches.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
97
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
98 Returns a dict mapping branch name to an iterable of nodes that are
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
99 heads on that branch.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
100 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
101
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
102 def capabilities():
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
103 """Obtain capabilities of the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
104
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
105 Returns a set of string capabilities.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
106 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
107
37649
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
108 def clonebundles():
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
109 """Obtains the clone bundles manifest for the repo.
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
110
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
111 Returns the manifest as unparsed bytes.
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
112 """
a168799687e5 wireproto: properly call clonebundles command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37635
diff changeset
113
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
114 def debugwireargs(one, two, three=None, four=None, five=None):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
115 """Used to facilitate debugging of arguments passed over the wire."""
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
116
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
117 def getbundle(source, **kwargs):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
118 """Obtain remote repository data as a bundle.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
119
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
120 This command is how the bulk of repository data is transferred from
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
121 the peer to the local repository
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
122
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
123 Returns a generator of bundle data.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
124 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
125
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
126 def heads():
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
127 """Determine all known head revisions in the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
128
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
129 Returns an iterable of binary nodes.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
130 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
131
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
132 def known(nodes):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
133 """Determine whether multiple nodes are known.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
134
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
135 Accepts an iterable of nodes whose presence to check for.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
136
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
137 Returns an iterable of booleans indicating of the corresponding node
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
138 at that index is known to the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
139 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
140
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
141 def listkeys(namespace):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
142 """Obtain all keys in a pushkey namespace.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
143
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
144 Returns an iterable of key names.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
145 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
146
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
147 def lookup(key):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
148 """Resolve a value to a known revision.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
149
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
150 Returns a binary node of the resolved revision on success.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
151 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
152
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
153 def pushkey(namespace, key, old, new):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
154 """Set a value using the ``pushkey`` protocol.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
155
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
156 Arguments correspond to the pushkey namespace and key to operate on and
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
157 the old and new values for that key.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
158
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
159 Returns a string with the peer result. The value inside varies by the
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
160 namespace.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
161 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
162
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
163 def stream_out():
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
164 """Obtain streaming clone data.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
165
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
166 Successful result should be a generator of data chunks.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
167 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
168
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
169 def unbundle(bundle, heads, url):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
170 """Transfer repository data to the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
171
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
172 This is how the bulk of data during a push is transferred.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
173
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
174 Returns the integer number of heads added to the peer.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
175 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
176
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
177 class ipeerlegacycommands(interfaceutil.Interface):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
178 """Interface for implementing support for legacy wire protocol commands.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
179
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
180 Wire protocol commands transition to legacy status when they are no longer
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
181 used by modern clients. To facilitate identifying which commands are
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
182 legacy, the interfaces are split.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
183 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
184
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
185 def between(pairs):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
186 """Obtain nodes between pairs of nodes.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
187
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
188 ``pairs`` is an iterable of node pairs.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
189
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
190 Returns an iterable of iterables of nodes corresponding to each
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
191 requested pair.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
192 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
193
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
194 def branches(nodes):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
195 """Obtain ancestor changesets of specific nodes back to a branch point.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
196
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
197 For each requested node, the peer finds the first ancestor node that is
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
198 a DAG root or is a merge.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
199
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
200 Returns an iterable of iterables with the resolved values for each node.
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
201 """
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
202
37635
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37633
diff changeset
203 def changegroup(nodes, source):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
204 """Obtain a changegroup with data for descendants of specified nodes."""
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
205
37635
cc8c06835097 wireproto: convert legacy commands to command executor
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37633
diff changeset
206 def changegroupsubset(bases, heads, source):
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
207 pass
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
208
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
209 class ipeercommandexecutor(interfaceutil.Interface):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
210 """Represents a mechanism to execute remote commands.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
211
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
212 This is the primary interface for requesting that wire protocol commands
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
213 be executed. Instances of this interface are active in a context manager
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
214 and have a well-defined lifetime. When the context manager exits, all
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
215 outstanding requests are waited on.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
216 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
217
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
218 def callcommand(name, args):
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
219 """Request that a named command be executed.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
220
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
221 Receives the command name and a dictionary of command arguments.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
222
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
223 Returns a ``concurrent.futures.Future`` that will resolve to the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
224 result of that command request. That exact value is left up to
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
225 the implementation and possibly varies by command.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
226
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
227 Not all commands can coexist with other commands in an executor
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
228 instance: it depends on the underlying wire protocol transport being
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
229 used and the command itself.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
230
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
231 Implementations MAY call ``sendcommands()`` automatically if the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
232 requested command can not coexist with other commands in this executor.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
233
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
234 Implementations MAY call ``sendcommands()`` automatically when the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
235 future's ``result()`` is called. So, consumers using multiple
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
236 commands with an executor MUST ensure that ``result()`` is not called
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
237 until all command requests have been issued.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
238 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
239
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
240 def sendcommands():
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
241 """Trigger submission of queued command requests.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
242
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
243 Not all transports submit commands as soon as they are requested to
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
244 run. When called, this method forces queued command requests to be
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
245 issued. It will no-op if all commands have already been sent.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
246
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
247 When called, no more new commands may be issued with this executor.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
248 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
249
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
250 def close():
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
251 """Signal that this command request is finished.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
252
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
253 When called, no more new commands may be issued. All outstanding
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
254 commands that have previously been issued are waited on before
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
255 returning. This not only includes waiting for the futures to resolve,
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
256 but also waiting for all response data to arrive. In other words,
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
257 calling this waits for all on-wire state for issued command requests
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
258 to finish.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
259
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
260 When used as a context manager, this method is called when exiting the
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
261 context manager.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
262
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
263 This method may call ``sendcommands()`` if there are buffered commands.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
264 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
265
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
266 class ipeerrequests(interfaceutil.Interface):
37629
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
267 """Interface for executing commands on a peer."""
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
268
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
269 def commandexecutor():
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
270 """A context manager that resolves to an ipeercommandexecutor.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
271
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
272 The object this resolves to can be used to issue command requests
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
273 to the peer.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
274
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
275 Callers should call its ``callcommand`` method to issue command
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
276 requests.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
277
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
278 A new executor should be obtained for each distinct set of commands
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
279 (possibly just a single command) that the consumer wants to execute
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
280 as part of a single operation or round trip. This is because some
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
281 peers are half-duplex and/or don't support persistent connections.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
282 e.g. in the case of HTTP peers, commands sent to an executor represent
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
283 a single HTTP request. While some peers may support multiple command
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
284 sends over the wire per executor, consumers need to code to the least
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
285 capable peer. So it should be assumed that command executors buffer
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
286 called commands until they are told to send them and that each
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
287 command executor could result in a new connection or wire-level request
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
288 being issued.
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
289 """
fa0382088993 repository: define new interface for running commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37610
diff changeset
290
37650
62ebfda864de repository: remove ipeercommands from ipeerbase
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37649
diff changeset
291 class ipeerbase(ipeerconnection, ipeercapabilities, ipeerrequests):
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
292 """Unified interface for peer repositories.
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
293
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
294 All peer instances must conform to this interface.
33800
f257943e47ab repository: formalize peer interface with abstract base class
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
295 """
33801
558f5b2ee10e repository: formalize wire protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33800
diff changeset
296
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
297 @interfaceutil.implementer(ipeerbase)
37320
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
298 class peer(object):
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
299 """Base class for peer repositories."""
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
300
39f7d4ee8bcd repository: port peer interfaces to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37316
diff changeset
301 def capable(self, name):
33802
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
302 caps = self.capabilities()
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
303 if name in caps:
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
304 return True
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
305
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
306 name = '%s=' % name
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
307 for cap in caps:
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
308 if cap.startswith(name):
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
309 return cap[len(name):]
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
310
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
311 return False
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
312
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
313 def requirecap(self, name, purpose):
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
314 if self.capable(name):
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
315 return
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
316
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
317 raise error.CapabilityError(
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
318 _('cannot %s; remote repository does not support the %r '
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
319 'capability') % (purpose, name))
a0aad86b3b6a repository: implement generic capability methods on peer class
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33801
diff changeset
320
39230
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
321 class irevisiondelta(interfaceutil.Interface):
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
322 """Represents a delta between one revision and another.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
323
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
324 Instances convey enough information to allow a revision to be exchanged
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
325 with another repository.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
326
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
327 Instances represent the fulltext revision data or a delta against
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
328 another revision. Therefore the ``revision`` and ``delta`` attributes
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
329 are mutually exclusive.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
330
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
331 Typically used for changegroup generation.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
332 """
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
333
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
334 node = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
335 """20 byte node of this revision.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
336
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
337 p1node = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
338 """20 byte node of 1st parent of this revision.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
339
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
340 p2node = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
341 """20 byte node of 2nd parent of this revision.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
342
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
343 linknode = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
344 """20 byte node of the changelog revision this node is linked to.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
345
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
346 flags = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
347 """2 bytes of integer flags that apply to this revision.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
348
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
349 basenode = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
350 """20 byte node of the revision this data is a delta against.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
351
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
352 ``nullid`` indicates that the revision is a full revision and not
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
353 a delta.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
354 """)
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
355
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
356 baserevisionsize = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
357 """Size of base revision this delta is against.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
358
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
359 May be ``None`` if ``basenode`` is ``nullid``.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
360 """)
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
361
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
362 revision = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
363 """Raw fulltext of revision data for this node.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
364
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
365 delta = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
366 """Delta between ``basenode`` and ``node``.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
367
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
368 Stored in the bdiff delta format.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
369 """)
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
370
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
371 class irevisiondeltarequest(interfaceutil.Interface):
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
372 """Represents a request to generate an ``irevisiondelta``."""
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
373
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
374 node = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
375 """20 byte node of revision being requested.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
376
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
377 p1node = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
378 """20 byte node of 1st parent of revision.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
379
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
380 p2node = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
381 """20 byte node of 2nd parent of revision.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
382
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
383 linknode = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
384 """20 byte node to store in ``linknode`` attribute.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
385
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
386 basenode = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
387 """Base revision that delta should be generated against.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
388
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
389 If ``nullid``, the derived ``irevisiondelta`` should have its
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
390 ``revision`` field populated and no delta should be generated.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
391
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
392 If ``None``, the delta may be generated against any revision that
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
393 is an ancestor of this revision. Or a full revision may be used.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
394
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
395 If any other value, the delta should be produced against that
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
396 revision.
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
397 """)
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
398
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
399 ellipsis = interfaceutil.Attribute(
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
400 """Boolean on whether the ellipsis flag should be set.""")
b518d495a560 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38835
diff changeset
401
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
402 class ifilerevisionssequence(interfaceutil.Interface):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
403 """Contains index data for all revisions of a file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
404
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
405 Types implementing this behave like lists of tuples. The index
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
406 in the list corresponds to the revision number. The values contain
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
407 index metadata.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
408
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
409 The *null* revision (revision number -1) is always the last item
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
410 in the index.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
411 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
412
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
413 def __len__():
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
414 """The total number of revisions."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
415
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
416 def __getitem__(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
417 """Returns the object having a specific revision number.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
418
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
419 Returns an 8-tuple with the following fields:
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
420
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
421 offset+flags
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
422 Contains the offset and flags for the revision. 64-bit unsigned
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
423 integer where first 6 bytes are the offset and the next 2 bytes
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
424 are flags. The offset can be 0 if it is not used by the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
425 compressed size
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
426 Size of the revision data in the store. It can be 0 if it isn't
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
427 needed by the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
428 uncompressed size
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
429 Fulltext size. It can be 0 if it isn't needed by the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
430 base revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
431 Revision number of revision the delta for storage is encoded
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
432 against. -1 indicates not encoded against a base revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
433 link revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
434 Revision number of changelog revision this entry is related to.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
435 p1 revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
436 Revision number of 1st parent. -1 if no 1st parent.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
437 p2 revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
438 Revision number of 2nd parent. -1 if no 1st parent.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
439 node
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
440 Binary node value for this revision number.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
441
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
442 Negative values should index off the end of the sequence. ``-1``
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
443 should return the null revision. ``-2`` should return the most
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
444 recent revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
445 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
446
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
447 def __contains__(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
448 """Whether a revision number exists."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
449
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
450 def insert(self, i, entry):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
451 """Add an item to the index at specific revision."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
452
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
453 class ifileindex(interfaceutil.Interface):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
454 """Storage interface for index data of a single file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
455
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
456 File storage data is divided into index metadata and data storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
457 This interface defines the index portion of the interface.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
458
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
459 The index logically consists of:
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
460
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
461 * A mapping between revision numbers and nodes.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
462 * DAG data (storing and querying the relationship between nodes).
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
463 * Metadata to facilitate storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
464 """
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
465 index = interfaceutil.Attribute(
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
466 """An ``ifilerevisionssequence`` instance.""")
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
467
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
468 def __len__():
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
469 """Obtain the number of revisions stored for this file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
470
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
471 def __iter__():
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
472 """Iterate over revision numbers for this file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
473
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
474 def revs(start=0, stop=None):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
475 """Iterate over revision numbers for this file, with control."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
476
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
477 def parents(node):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
478 """Returns a 2-tuple of parent nodes for a revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
479
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
480 Values will be ``nullid`` if the parent is empty.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
481 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
482
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
483 def parentrevs(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
484 """Like parents() but operates on revision numbers."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
485
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
486 def rev(node):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
487 """Obtain the revision number given a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
488
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
489 Raises ``error.LookupError`` if the node is not known.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
490 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
491
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
492 def node(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
493 """Obtain the node value given a revision number.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
494
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
495 Raises ``IndexError`` if the node is not known.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
496 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
497
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
498 def lookup(node):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
499 """Attempt to resolve a value to a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
500
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
501 Value can be a binary node, hex node, revision number, or a string
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
502 that can be converted to an integer.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
503
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
504 Raises ``error.LookupError`` if a node could not be resolved.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
505 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
506
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
507 def linkrev(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
508 """Obtain the changeset revision number a revision is linked to."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
509
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
510 def flags(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
511 """Obtain flags used to affect storage of a revision."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
512
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
513 def iscensored(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
514 """Return whether a revision's content has been censored."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
515
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
516 def commonancestorsheads(node1, node2):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
517 """Obtain an iterable of nodes containing heads of common ancestors.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
518
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
519 See ``ancestor.commonancestorsheads()``.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
520 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
521
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
522 def descendants(revs):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
523 """Obtain descendant revision numbers for a set of revision numbers.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
524
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
525 If ``nullrev`` is in the set, this is equivalent to ``revs()``.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
526 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
527
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
528 def headrevs():
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
529 """Obtain a list of revision numbers that are DAG heads.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
530
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
531 The list is sorted oldest to newest.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
532
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
533 TODO determine if sorting is required.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
534 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
535
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
536 def heads(start=None, stop=None):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
537 """Obtain a list of nodes that are DAG heads, with control.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
538
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
539 The set of revisions examined can be limited by specifying
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
540 ``start`` and ``stop``. ``start`` is a node. ``stop`` is an
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
541 iterable of nodes. DAG traversal starts at earlier revision
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
542 ``start`` and iterates forward until any node in ``stop`` is
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
543 encountered.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
544 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
545
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
546 def children(node):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
547 """Obtain nodes that are children of a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
548
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
549 Returns a list of nodes.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
550 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
551
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
552 def deltaparent(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
553 """"Return the revision that is a suitable parent to delta against."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
554
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
555 class ifiledata(interfaceutil.Interface):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
556 """Storage interface for data storage of a specific file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
557
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
558 This complements ``ifileindex`` and provides an interface for accessing
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
559 data for a tracked file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
560 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
561 def rawsize(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
562 """The size of the fulltext data for a revision as stored."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
563
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
564 def size(rev):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
565 """Obtain the fulltext size of file data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
566
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
567 Any metadata is excluded from size measurements. Use ``rawsize()`` if
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
568 metadata size is important.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
569 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
570
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
571 def checkhash(fulltext, node, p1=None, p2=None, rev=None):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
572 """Validate the stored hash of a given fulltext and node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
573
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
574 Raises ``error.RevlogError`` is hash validation fails.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
575 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
576
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
577 def revision(node, raw=False):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
578 """"Obtain fulltext data for a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
579
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
580 By default, any storage transformations are applied before the data
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
581 is returned. If ``raw`` is True, non-raw storage transformations
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
582 are not applied.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
583
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
584 The fulltext data may contain a header containing metadata. Most
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
585 consumers should use ``read()`` to obtain the actual file data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
586 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
587
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
588 def read(node):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
589 """Resolve file fulltext data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
590
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
591 This is similar to ``revision()`` except any metadata in the data
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
592 headers is stripped.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
593 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
594
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
595 def renamed(node):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
596 """Obtain copy metadata for a node.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
597
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
598 Returns ``False`` if no copy metadata is stored or a 2-tuple of
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
599 (path, node) from which this revision was copied.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
600 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
601
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
602 def cmp(node, fulltext):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
603 """Compare fulltext to another revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
604
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
605 Returns True if the fulltext is different from what is stored.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
606
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
607 This takes copy metadata into account.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
608
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
609 TODO better document the copy metadata and censoring logic.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
610 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
611
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
612 def revdiff(rev1, rev2):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
613 """Obtain a delta between two revision numbers.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
614
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
615 Operates on raw data in the store (``revision(node, raw=True)``).
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
616
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
617 The returned data is the result of ``bdiff.bdiff`` on the raw
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
618 revision data.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
619 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
620
39231
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
621 def emitrevisiondeltas(requests):
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
622 """Produce ``irevisiondelta`` from ``irevisiondeltarequest``s.
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
623
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
624 Given an iterable of objects conforming to the ``irevisiondeltarequest``
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
625 interface, emits objects conforming to the ``irevisiondelta``
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
626 interface.
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
627
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
628 This method is a generator.
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
629
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
630 ``irevisiondelta`` should be emitted in the same order of
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
631 ``irevisiondeltarequest`` that was passed in.
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
632
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
633 The emitted objects MUST conform by the results of
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
634 ``irevisiondeltarequest``. Namely, they must respect any requests
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
635 for building a delta from a specific ``basenode`` if defined.
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
636
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
637 When sending deltas, implementations must take into account whether
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
638 the client has the base delta before encoding a delta against that
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
639 revision. A revision encountered previously in ``requests`` is
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
640 always a suitable base revision. An example of a bad delta is a delta
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
641 against a non-ancestor revision. Another example of a bad delta is a
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
642 delta against a censored revision.
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
643 """
b41d023a412a repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39230
diff changeset
644
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
645 class ifilemutation(interfaceutil.Interface):
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
646 """Storage interface for mutation events of a tracked file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
647
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
648 def add(filedata, meta, transaction, linkrev, p1, p2):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
649 """Add a new revision to the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
650
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
651 Takes file data, dictionary of metadata, a transaction, linkrev,
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
652 and parent nodes.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
653
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
654 Returns the node that was added.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
655
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
656 May no-op if a revision matching the supplied data is already stored.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
657 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
658
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
659 def addrevision(revisiondata, transaction, linkrev, p1, p2, node=None,
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
660 flags=0, cachedelta=None):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
661 """Add a new revision to the store.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
662
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
663 This is similar to ``add()`` except it operates at a lower level.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
664
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
665 The data passed in already contains a metadata header, if any.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
666
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
667 ``node`` and ``flags`` can be used to define the expected node and
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
668 the flags to use with storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
669
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
670 ``add()`` is usually called when adding files from e.g. the working
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
671 directory. ``addrevision()`` is often called by ``add()`` and for
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
672 scenarios where revision data has already been computed, such as when
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
673 applying raw data from a peer repo.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
674 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
675
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
676 def addgroup(deltas, linkmapper, transaction, addrevisioncb=None):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
677 """Process a series of deltas for storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
678
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
679 ``deltas`` is an iterable of 7-tuples of
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
680 (node, p1, p2, linknode, deltabase, delta, flags) defining revisions
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
681 to add.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
682
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
683 The ``delta`` field contains ``mpatch`` data to apply to a base
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
684 revision, identified by ``deltabase``. The base node can be
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
685 ``nullid``, in which case the header from the delta can be ignored
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
686 and the delta used as the fulltext.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
687
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
688 ``addrevisioncb`` should be called for each node as it is committed.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
689
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
690 Returns a list of nodes that were processed. A node will be in the list
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
691 even if it existed in the store previously.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
692 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
693
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
694 def getstrippoint(minlink):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
695 """Find the minimum revision that must be stripped to strip a linkrev.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
696
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
697 Returns a 2-tuple containing the minimum revision number and a set
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
698 of all revisions numbers that would be broken by this strip.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
699
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
700 TODO this is highly revlog centric and should be abstracted into
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
701 a higher-level deletion API. ``repair.strip()`` relies on this.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
702 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
703
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
704 def strip(minlink, transaction):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
705 """Remove storage of items starting at a linkrev.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
706
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
707 This uses ``getstrippoint()`` to determine the first node to remove.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
708 Then it effectively truncates storage for all revisions after that.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
709
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
710 TODO this is highly revlog centric and should be abstracted into a
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
711 higher-level deletion API.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
712 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
713
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
714 class ifilestorage(ifileindex, ifiledata, ifilemutation):
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
715 """Complete storage interface for a single tracked file."""
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
716
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
717 version = interfaceutil.Attribute(
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
718 """Version number of storage.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
719
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
720 TODO this feels revlog centric and could likely be removed.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
721 """)
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
722
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
723 _generaldelta = interfaceutil.Attribute(
37440
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
724 """Whether deltas can be against any parent revision.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
725
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
726 TODO this is used by changegroup code and it could probably be
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
727 folded into another API.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
728 """)
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
729
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
730 def files():
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
731 """Obtain paths that are backing storage for this file.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
732
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
733 TODO this is used heavily by verify code and there should probably
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
734 be a better API for that.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
735 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
736
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
737 def checksize():
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
738 """Obtain the expected sizes of backing files.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
739
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
740 TODO this is used by verify and it should not be part of the interface.
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
741 """
4335a75f0bd0 repository: define existing interface for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37351
diff changeset
742
38530
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
743 class idirs(interfaceutil.Interface):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
744 """Interface representing a collection of directories from paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
745
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
746 This interface is essentially a derived data structure representing
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
747 directories from a collection of paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
748 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
749
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
750 def addpath(path):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
751 """Add a path to the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
752
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
753 All directories in the path will be added to the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
754 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
755
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
756 def delpath(path):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
757 """Remove a path from the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
758
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
759 If the removal was the last path in a particular directory, the
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
760 directory is removed from the collection.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
761 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
762
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
763 def __iter__():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
764 """Iterate over the directories in this collection of paths."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
765
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
766 def __contains__(path):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
767 """Whether a specific directory is in this collection."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
768
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
769 class imanifestdict(interfaceutil.Interface):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
770 """Interface representing a manifest data structure.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
771
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
772 A manifest is effectively a dict mapping paths to entries. Each entry
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
773 consists of a binary node and extra flags affecting that entry.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
774 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
775
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
776 def __getitem__(path):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
777 """Returns the binary node value for a path in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
778
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
779 Raises ``KeyError`` if the path does not exist in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
780
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
781 Equivalent to ``self.find(path)[0]``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
782 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
783
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
784 def find(path):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
785 """Returns the entry for a path in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
786
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
787 Returns a 2-tuple of (node, flags).
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
788
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
789 Raises ``KeyError`` if the path does not exist in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
790 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
791
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
792 def __len__():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
793 """Return the number of entries in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
794
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
795 def __nonzero__():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
796 """Returns True if the manifest has entries, False otherwise."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
797
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
798 __bool__ = __nonzero__
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
799
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
800 def __setitem__(path, node):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
801 """Define the node value for a path in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
802
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
803 If the path is already in the manifest, its flags will be copied to
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
804 the new entry.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
805 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
806
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
807 def __contains__(path):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
808 """Whether a path exists in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
809
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
810 def __delitem__(path):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
811 """Remove a path from the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
812
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
813 Raises ``KeyError`` if the path is not in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
814 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
815
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
816 def __iter__():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
817 """Iterate over paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
818
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
819 def iterkeys():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
820 """Iterate over paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
821
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
822 def keys():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
823 """Obtain a list of paths in the manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
824
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
825 def filesnotin(other, match=None):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
826 """Obtain the set of paths in this manifest but not in another.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
827
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
828 ``match`` is an optional matcher function to be applied to both
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
829 manifests.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
830
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
831 Returns a set of paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
832 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
833
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
834 def dirs():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
835 """Returns an object implementing the ``idirs`` interface."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
836
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
837 def hasdir(dir):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
838 """Returns a bool indicating if a directory is in this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
839
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
840 def matches(match):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
841 """Generate a new manifest filtered through a matcher.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
842
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
843 Returns an object conforming to the ``imanifestdict`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
844 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
845
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
846 def walk(match):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
847 """Generator of paths in manifest satisfying a matcher.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
848
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
849 This is equivalent to ``self.matches(match).iterkeys()`` except a new
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
850 manifest object is not created.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
851
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
852 If the matcher has explicit files listed and they don't exist in
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
853 the manifest, ``match.bad()`` is called for each missing file.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
854 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
855
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
856 def diff(other, match=None, clean=False):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
857 """Find differences between this manifest and another.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
858
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
859 This manifest is compared to ``other``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
860
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
861 If ``match`` is provided, the two manifests are filtered against this
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
862 matcher and only entries satisfying the matcher are compared.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
863
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
864 If ``clean`` is True, unchanged files are included in the returned
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
865 object.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
866
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
867 Returns a dict with paths as keys and values of 2-tuples of 2-tuples of
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
868 the form ``((node1, flag1), (node2, flag2))`` where ``(node1, flag1)``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
869 represents the node and flags for this manifest and ``(node2, flag2)``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
870 are the same for the other manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
871 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
872
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
873 def setflag(path, flag):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
874 """Set the flag value for a given path.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
875
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
876 Raises ``KeyError`` if the path is not already in the manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
877 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
878
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
879 def get(path, default=None):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
880 """Obtain the node value for a path or a default value if missing."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
881
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
882 def flags(path, default=''):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
883 """Return the flags value for a path or a default value if missing."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
884
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
885 def copy():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
886 """Return a copy of this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
887
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
888 def items():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
889 """Returns an iterable of (path, node) for items in this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
890
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
891 def iteritems():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
892 """Identical to items()."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
893
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
894 def iterentries():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
895 """Returns an iterable of (path, node, flags) for this manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
896
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
897 Similar to ``iteritems()`` except items are a 3-tuple and include
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
898 flags.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
899 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
900
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
901 def text():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
902 """Obtain the raw data representation for this manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
903
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
904 Result is used to create a manifest revision.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
905 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
906
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
907 def fastdelta(base, changes):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
908 """Obtain a delta between this manifest and another given changes.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
909
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
910 ``base`` in the raw data representation for another manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
911
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
912 ``changes`` is an iterable of ``(path, to_delete)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
913
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
914 Returns a 2-tuple containing ``bytearray(self.text())`` and the
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
915 delta between ``base`` and this manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
916 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
917
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
918 class imanifestrevisionbase(interfaceutil.Interface):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
919 """Base interface representing a single revision of a manifest.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
920
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
921 Should not be used as a primary interface: should always be inherited
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
922 as part of a larger interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
923 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
924
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
925 def new():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
926 """Obtain a new manifest instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
927
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
928 Returns an object conforming to the ``imanifestrevisionwritable``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
929 interface. The instance will be associated with the same
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
930 ``imanifestlog`` collection as this instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
931 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
932
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
933 def copy():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
934 """Obtain a copy of this manifest instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
935
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
936 Returns an object conforming to the ``imanifestrevisionwritable``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
937 interface. The instance will be associated with the same
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
938 ``imanifestlog`` collection as this instance.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
939 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
940
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
941 def read():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
942 """Obtain the parsed manifest data structure.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
943
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
944 The returned object conforms to the ``imanifestdict`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
945 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
946
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
947 class imanifestrevisionstored(imanifestrevisionbase):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
948 """Interface representing a manifest revision committed to storage."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
949
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
950 def node():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
951 """The binary node for this manifest."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
952
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
953 parents = interfaceutil.Attribute(
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
954 """List of binary nodes that are parents for this manifest revision."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
955 )
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
956
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
957 def readdelta(shallow=False):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
958 """Obtain the manifest data structure representing changes from parent.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
959
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
960 This manifest is compared to its 1st parent. A new manifest representing
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
961 those differences is constructed.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
962
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
963 The returned object conforms to the ``imanifestdict`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
964 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
965
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
966 def readfast(shallow=False):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
967 """Calls either ``read()`` or ``readdelta()``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
968
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
969 The faster of the two options is called.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
970 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
971
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
972 def find(key):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
973 """Calls self.read().find(key)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
974
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
975 Returns a 2-tuple of ``(node, flags)`` or raises ``KeyError``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
976 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
977
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
978 class imanifestrevisionwritable(imanifestrevisionbase):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
979 """Interface representing a manifest revision that can be committed."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
980
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
981 def write(transaction, linkrev, p1node, p2node, added, removed):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
982 """Add this revision to storage.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
983
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
984 Takes a transaction object, the changeset revision number it will
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
985 be associated with, its parent nodes, and lists of added and
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
986 removed paths.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
987
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
988 Returns the binary node of the created revision.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
989 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
990
39314
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
991 class imanifeststorage(interfaceutil.Interface):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
992 """Storage interface for manifest data."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
993
39315
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39314
diff changeset
994 tree = interfaceutil.Attribute(
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39314
diff changeset
995 """The path to the directory this manifest tracks.
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39314
diff changeset
996
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39314
diff changeset
997 The empty bytestring represents the root manifest.
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39314
diff changeset
998 """)
57c3864f3aad manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39314
diff changeset
999
39314
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1000 index = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1001 """An ``ifilerevisionssequence`` instance.""")
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1002
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1003 indexfile = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1004 """Path of revlog index file.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1005
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1006 TODO this is revlog specific and should not be exposed.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1007 """)
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1008
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1009 opener = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1010 """VFS opener to use to access underlying files used for storage.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1011
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1012 TODO this is revlog specific and should not be exposed.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1013 """)
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1014
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1015 version = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1016 """Revlog version number.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1017
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1018 TODO this is revlog specific and should not be exposed.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1019 """)
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1020
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1021 _generaldelta = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1022 """Whether generaldelta storage is being used.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1023
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1024 TODO this is revlog specific and should not be exposed.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1025 """)
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1026
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1027 fulltextcache = interfaceutil.Attribute(
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1028 """Dict with cache of fulltexts.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1029
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1030 TODO this doesn't feel appropriate for the storage interface.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1031 """)
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1032
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1033 def __len__():
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1034 """Obtain the number of revisions stored for this manifest."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1035
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1036 def __iter__():
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1037 """Iterate over revision numbers for this manifest."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1038
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1039 def rev(node):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1040 """Obtain the revision number given a binary node.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1041
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1042 Raises ``error.LookupError`` if the node is not known.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1043 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1044
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1045 def node(rev):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1046 """Obtain the node value given a revision number.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1047
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1048 Raises ``error.LookupError`` if the revision is not known.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1049 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1050
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1051 def lookup(value):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1052 """Attempt to resolve a value to a node.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1053
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1054 Value can be a binary node, hex node, revision number, or a bytes
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1055 that can be converted to an integer.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1056
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1057 Raises ``error.LookupError`` if a ndoe could not be resolved.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1058
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1059 TODO this is only used by debug* commands and can probably be deleted
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1060 easily.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1061 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1062
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1063 def parents(node):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1064 """Returns a 2-tuple of parent nodes for a node.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1065
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1066 Values will be ``nullid`` if the parent is empty.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1067 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1068
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1069 def parentrevs(rev):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1070 """Like parents() but operates on revision numbers."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1071
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1072 def linkrev(rev):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1073 """Obtain the changeset revision number a revision is linked to."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1074
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1075 def revision(node, _df=None, raw=False):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1076 """Obtain fulltext data for a node."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1077
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1078 def revdiff(rev1, rev2):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1079 """Obtain a delta between two revision numbers.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1080
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1081 The returned data is the result of ``bdiff.bdiff()`` on the raw
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1082 revision data.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1083 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1084
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1085 def cmp(node, fulltext):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1086 """Compare fulltext to another revision.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1087
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1088 Returns True if the fulltext is different from what is stored.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1089 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1090
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1091 def emitrevisiondeltas(requests):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1092 """Produce ``irevisiondelta`` from ``irevisiondeltarequest``s.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1093
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1094 See the documentation for ``ifiledata`` for more.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1095 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1096
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1097 def addgroup(deltas, linkmapper, transaction, addrevisioncb=None):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1098 """Process a series of deltas for storage.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1099
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1100 See the documentation in ``ifilemutation`` for more.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1101 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1102
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1103 def getstrippoint(minlink):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1104 """Find minimum revision that must be stripped to strip a linkrev.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1105
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1106 See the documentation in ``ifilemutation`` for more.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1107 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1108
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1109 def strip(minlink, transaction):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1110 """Remove storage of items starting at a linkrev.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1111
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1112 See the documentation in ``ifilemutation`` for more.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1113 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1114
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1115 def checksize():
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1116 """Obtain the expected sizes of backing files.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1117
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1118 TODO this is used by verify and it should not be part of the interface.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1119 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1120
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1121 def files():
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1122 """Obtain paths that are backing storage for this manifest.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1123
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1124 TODO this is used by verify and there should probably be a better API
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1125 for this functionality.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1126 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1127
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1128 def deltaparent(rev):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1129 """Obtain the revision that a revision is delta'd against.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1130
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1131 TODO delta encoding is an implementation detail of storage and should
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1132 not be exposed to the storage interface.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1133 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1134
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1135 def clone(tr, dest, **kwargs):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1136 """Clone this instance to another."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1137
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1138 def clearcaches(clear_persisted_data=False):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1139 """Clear any caches associated with this instance."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1140
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1141 def dirlog(d):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1142 """Obtain a manifest storage instance for a tree."""
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1143
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1144 def add(m, transaction, link, p1, p2, added, removed, readtree=None):
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1145 """Add a revision to storage.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1146
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1147 ``m`` is an object conforming to ``imanifestdict``.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1148
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1149 ``link`` is the linkrev revision number.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1150
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1151 ``p1`` and ``p2`` are the parent revision numbers.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1152
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1153 ``added`` and ``removed`` are iterables of added and removed paths,
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1154 respectively.
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1155 """
7f5e6d3e9032 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39244
diff changeset
1156
38530
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1157 class imanifestlog(interfaceutil.Interface):
39240
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39235
diff changeset
1158 """Interface representing a collection of manifest snapshots.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39235
diff changeset
1159
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39235
diff changeset
1160 Represents the root manifest in a repository.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39235
diff changeset
1161
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39235
diff changeset
1162 Also serves as a means to access nested tree manifests and to cache
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39235
diff changeset
1163 tree manifests.
2af6b2d8d1d8 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39235
diff changeset
1164 """
38530
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1165
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1166 def __getitem__(node):
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1167 """Obtain a manifest instance for a given binary node.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1168
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1169 Equivalent to calling ``self.get('', node)``.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1170
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1171 The returned object conforms to the ``imanifestrevisionstored``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1172 interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1173 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1174
39235
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39234
diff changeset
1175 def get(tree, node, verify=True):
38530
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1176 """Retrieve the manifest instance for a given directory and binary node.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1177
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1178 ``node`` always refers to the node of the root manifest (which will be
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1179 the only manifest if flat manifests are being used).
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1180
39235
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39234
diff changeset
1181 If ``tree`` is the empty string, the root manifest is returned.
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39234
diff changeset
1182 Otherwise the manifest for the specified directory will be returned
43387fd2aa1f manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39234
diff changeset
1183 (requires tree manifests).
38530
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1184
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1185 If ``verify`` is True, ``LookupError`` is raised if the node is not
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1186 known.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1187
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1188 The returned object conforms to the ``imanifestrevisionstored``
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1189 interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1190 """
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1191
39244
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1192 def getstorage(tree):
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1193 """Retrieve an interface to storage for a particular tree.
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1194
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1195 If ``tree`` is the empty bytestring, storage for the root manifest will
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1196 be returned. Otherwise storage for a tree manifest is returned.
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1197
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1198 TODO formalize interface for returned object.
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1199 """
73cf21b2e8a6 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39241
diff changeset
1200
38530
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1201 def clearcaches():
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1202 """Clear caches associated with this collection."""
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1203
38555
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38530
diff changeset
1204 def rev(node):
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38530
diff changeset
1205 """Obtain the revision number for a binary node.
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38530
diff changeset
1206
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38530
diff changeset
1207 Raises ``error.LookupError`` if the node is not known.
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38530
diff changeset
1208 """
f2f9bacf0587 manifest: define and implement rev() on manifestlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38530
diff changeset
1209
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1210 class completelocalrepository(interfaceutil.Interface):
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1211 """Monolithic interface for local repositories.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1212
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1213 This currently captures the reality of things - not how things should be.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1214 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1215
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1216 supportedformats = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1217 """Set of requirements that apply to stream clone.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1218
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1219 This is actually a class attribute and is shared among all instances.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1220 """)
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1221
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1222 openerreqs = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1223 """Set of requirements that are passed to the opener.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1224
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1225 This is actually a class attribute and is shared among all instances.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1226 """)
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1227
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1228 supported = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1229 """Set of requirements that this repo is capable of opening.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1230
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1231 requirements = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1232 """Set of requirements this repo uses.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1233
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1234 filtername = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1235 """Name of the repoview that is active on this repo.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1236
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1237 wvfs = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1238 """VFS used to access the working directory.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1239
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1240 vfs = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1241 """VFS rooted at the .hg directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1242
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1243 Used to access repository data not in the store.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1244 """)
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1245
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1246 svfs = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1247 """VFS rooted at the store.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1248
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1249 Used to access repository data in the store. Typically .hg/store.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1250 But can point elsewhere if the store is shared.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1251 """)
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1252
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1253 root = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1254 """Path to the root of the working directory.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1255
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1256 path = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1257 """Path to the .hg directory.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1258
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1259 origroot = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1260 """The filesystem path that was used to construct the repo.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1261
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1262 auditor = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1263 """A pathauditor for the working directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1264
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1265 This checks if a path refers to a nested repository.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1266
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1267 Operates on the filesystem.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1268 """)
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1269
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1270 nofsauditor = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1271 """A pathauditor for the working directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1272
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1273 This is like ``auditor`` except it doesn't do filesystem checks.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1274 """)
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1275
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1276 baseui = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1277 """Original ui instance passed into constructor.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1278
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1279 ui = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1280 """Main ui instance for this instance.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1281
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1282 sharedpath = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1283 """Path to the .hg directory of the repo this repo was shared from.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1284
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1285 store = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1286 """A store instance.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1287
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1288 spath = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1289 """Path to the store.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1290
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1291 sjoin = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1292 """Alias to self.store.join.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1293
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1294 cachevfs = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1295 """A VFS used to access the cache directory.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1296
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1297 Typically .hg/cache.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1298 """)
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1299
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1300 filteredrevcache = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1301 """Holds sets of revisions to be filtered.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1302
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1303 names = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1304 """A ``namespaces`` instance.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1305
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1306 def close():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1307 """Close the handle on this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1308
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1309 def peer():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1310 """Obtain an object conforming to the ``peer`` interface."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1311
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1312 def unfiltered():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1313 """Obtain an unfiltered/raw view of this repo."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1314
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1315 def filtered(name, visibilityexceptions=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1316 """Obtain a named view of this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1317
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1318 obsstore = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1319 """A store of obsolescence data.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1320
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1321 changelog = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1322 """A handle on the changelog revlog.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1323
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1324 manifestlog = interfaceutil.Attribute(
38530
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1325 """An instance conforming to the ``imanifestlog`` interface.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1326
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1327 Provides access to manifests for the repository.
c82ea938efbb repository: define manifest interfaces
Gregory Szorc <gregory.szorc@gmail.com>
parents: 38509
diff changeset
1328 """)
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1329
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1330 dirstate = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1331 """Working directory state.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1332
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1333 narrowpats = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1334 """Matcher patterns for this repository's narrowspec.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1335
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1336 def narrowmatch():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1337 """Obtain a matcher for the narrowspec."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1338
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1339 def setnarrowpats(newincludes, newexcludes):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1340 """Define the narrowspec for this repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1341
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1342 def __getitem__(changeid):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1343 """Try to resolve a changectx."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1344
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1345 def __contains__(changeid):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1346 """Whether a changeset exists."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1347
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1348 def __nonzero__():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1349 """Always returns True."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1350 return True
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1351
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1352 __bool__ = __nonzero__
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1353
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1354 def __len__():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1355 """Returns the number of changesets in the repo."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1356
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1357 def __iter__():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1358 """Iterate over revisions in the changelog."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1359
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1360 def revs(expr, *args):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1361 """Evaluate a revset.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1362
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1363 Emits revisions.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1364 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1365
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1366 def set(expr, *args):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1367 """Evaluate a revset.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1368
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1369 Emits changectx instances.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1370 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1371
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1372 def anyrevs(specs, user=False, localalias=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1373 """Find revisions matching one of the given revsets."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1374
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1375 def url():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1376 """Returns a string representing the location of this repo."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1377
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1378 def hook(name, throw=False, **args):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1379 """Call a hook."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1380
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1381 def tags():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1382 """Return a mapping of tag to node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1383
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1384 def tagtype(tagname):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1385 """Return the type of a given tag."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1386
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1387 def tagslist():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1388 """Return a list of tags ordered by revision."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1389
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1390 def nodetags(node):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1391 """Return the tags associated with a node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1392
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1393 def nodebookmarks(node):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1394 """Return the list of bookmarks pointing to the specified node."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1395
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1396 def branchmap():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1397 """Return a mapping of branch to heads in that branch."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1398
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1399 def revbranchcache():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1400 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1401
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1402 def branchtip(branchtip, ignoremissing=False):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1403 """Return the tip node for a given branch."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1404
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1405 def lookup(key):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1406 """Resolve the node for a revision."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1407
37351
fdd22bf6398f localrepo: drop "remote" argument from lookupbranch() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37320
diff changeset
1408 def lookupbranch(key):
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1409 """Look up the branch name of the given revision or branch name."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1410
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1411 def known(nodes):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1412 """Determine whether a series of nodes is known.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1413
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1414 Returns a list of bools.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1415 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1416
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1417 def local():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1418 """Whether the repository is local."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1419 return True
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1420
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1421 def publishing():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1422 """Whether the repository is a publishing repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1423
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1424 def cancopy():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1425 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1426
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1427 def shared():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1428 """The type of shared repository or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1429
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1430 def wjoin(f, *insidef):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1431 """Calls self.vfs.reljoin(self.root, f, *insidef)"""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1432
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1433 def file(f):
38509
5cfb01d5ff26 repository: document that file() return value conforms to interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37810
diff changeset
1434 """Obtain a filelog for a tracked path.
5cfb01d5ff26 repository: document that file() return value conforms to interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37810
diff changeset
1435
5cfb01d5ff26 repository: document that file() return value conforms to interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37810
diff changeset
1436 The returned type conforms to the ``ifilestorage`` interface.
5cfb01d5ff26 repository: document that file() return value conforms to interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37810
diff changeset
1437 """
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1438
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1439 def setparents(p1, p2):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1440 """Set the parent nodes of the working directory."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1441
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1442 def filectx(path, changeid=None, fileid=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1443 """Obtain a filectx for the given file revision."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1444
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1445 def getcwd():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1446 """Obtain the current working directory from the dirstate."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1447
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1448 def pathto(f, cwd=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1449 """Obtain the relative path to a file."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1450
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1451 def adddatafilter(name, fltr):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1452 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1453
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1454 def wread(filename):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1455 """Read a file from wvfs, using data filters."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1456
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1457 def wwrite(filename, data, flags, backgroundclose=False, **kwargs):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1458 """Write data to a file in the wvfs, using data filters."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1459
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1460 def wwritedata(filename, data):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1461 """Resolve data for writing to the wvfs, using data filters."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1462
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1463 def currenttransaction():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1464 """Obtain the current transaction instance or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1465
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1466 def transaction(desc, report=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1467 """Open a new transaction to write to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1468
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1469 def undofiles():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1470 """Returns a list of (vfs, path) for files to undo transactions."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1471
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1472 def recover():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1473 """Roll back an interrupted transaction."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1474
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1475 def rollback(dryrun=False, force=False):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1476 """Undo the last transaction.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1477
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1478 DANGEROUS.
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1479 """
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1480
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1481 def updatecaches(tr=None, full=False):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1482 """Warm repo caches."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1483
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1484 def invalidatecaches():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1485 """Invalidate cached data due to the repository mutating."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1486
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1487 def invalidatevolatilesets():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1488 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1489
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1490 def invalidatedirstate():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1491 """Invalidate the dirstate."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1492
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1493 def invalidate(clearfilecache=False):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1494 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1495
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1496 def invalidateall():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1497 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1498
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1499 def lock(wait=True):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1500 """Lock the repository store and return a lock instance."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1501
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1502 def wlock(wait=True):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1503 """Lock the non-store parts of the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1504
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1505 def currentwlock():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1506 """Return the wlock if it's held or None."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1507
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1508 def checkcommitpatterns(wctx, vdirs, match, status, fail):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1509 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1510
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1511 def commit(text='', user=None, date=None, match=None, force=False,
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1512 editor=False, extra=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1513 """Add a new revision to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1514
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1515 def commitctx(ctx, error=False):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1516 """Commit a commitctx instance to the repository."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1517
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1518 def destroying():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1519 """Inform the repository that nodes are about to be destroyed."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1520
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1521 def destroyed():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1522 """Inform the repository that nodes have been destroyed."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1523
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1524 def status(node1='.', node2=None, match=None, ignored=False,
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1525 clean=False, unknown=False, listsubrepos=False):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1526 """Convenience method to call repo[x].status()."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1527
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1528 def addpostdsstatus(ps):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1529 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1530
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1531 def postdsstatus():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1532 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1533
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1534 def clearpostdsstatus():
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1535 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1536
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1537 def heads(start=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1538 """Obtain list of nodes that are DAG heads."""
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1539
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1540 def branchheads(branch=None, start=None, closed=False):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1541 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1542
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1543 def branches(nodes):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1544 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1545
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1546 def between(pairs):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1547 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1548
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1549 def checkpush(pushop):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1550 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1551
37810
856f381ad74b interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37650
diff changeset
1552 prepushoutgoinghooks = interfaceutil.Attribute(
37181
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1553 """util.hooks instance.""")
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1554
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1555 def pushkey(namespace, key, old, new):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1556 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1557
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1558 def listkeys(namespace):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1559 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1560
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1561 def debugwireargs(one, two, three=None, four=None, five=None):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1562 pass
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1563
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1564 def savecommitmessage(text):
0dfb5672f015 repository: define interface for local repositories
Gregory Szorc <gregory.szorc@gmail.com>
parents: 33802
diff changeset
1565 pass