author | Patrick Mezard <pmezard@gmail.com> |
Sun, 30 Sep 2007 16:38:42 +0200 | |
changeset 5354 | 9189ae05467d |
parent 5259 | 65dc707606ed |
child 5455 | 08d6e8754388 |
permissions | -rw-r--r-- |
1089 | 1 |
# repo.py - repository base classes for mercurial |
2 |
# |
|
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
3930
diff
changeset
|
3 |
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com> |
2859 | 4 |
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com> |
1089 | 5 |
# |
6 |
# This software may be used and distributed according to the terms |
|
7 |
# of the GNU General Public License, incorporated herein by reference. |
|
8 |
||
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
9 |
class RepoError(Exception): |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
10 |
pass |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
11 |
|
5259
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
12 |
class NoCapability(RepoError): |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
13 |
pass |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
14 |
|
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
15 |
class repository(object): |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
16 |
def capable(self, name): |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
17 |
'''tell whether repo supports named capability. |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
18 |
return False if not supported. |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
19 |
if boolean capability, return True. |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
20 |
if string capability, return string.''' |
5259
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
21 |
if name in self.capabilities: |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
22 |
return True |
2612
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
23 |
name_eq = name + '=' |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
24 |
for cap in self.capabilities: |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
25 |
if cap.startswith(name_eq): |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
26 |
return cap[len(name_eq):] |
ffb895f16925
add support for streaming clone.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1089
diff
changeset
|
27 |
return False |
5259
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
28 |
|
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
29 |
def requirecap(self, name, purpose): |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
30 |
'''raise an exception if the given capability is not present''' |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
31 |
if not self.capable(name): |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
32 |
raise NoCapability(_('cannot %s; remote repository does not ' |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
33 |
'support the %r capability') % |
65dc707606ed
Push capability checking into protocol-level code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4635
diff
changeset
|
34 |
(purpose, name)) |