Mercurial > hgsubversion
annotate hgsubversion/svnrepo.py @ 998:8045ebda705a
Improve UX. Update the implicit Path name for working with SVN repositories.
author | Jamie Clayton <jamie.clayton@jenasysdesign.com.au> |
---|---|
date | Sun, 10 Mar 2013 19:32:35 +1000 |
parents | 1bdd075a490a |
children | 3e716bb9f6df |
rev | line source |
---|---|
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
1 """ |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
2 repository class-based interface for hgsubversion |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
3 |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
4 Copyright (C) 2009, Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
5 See parent package for licensing. |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
6 |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
7 Internally, Mercurial assumes that every single repository is a localrepository |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
8 subclass: pull() is called on the instance pull *to*, but not the one pulled |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
9 *from*. To work around this, we create two classes: |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
10 |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
11 - svnremoterepo for Subversion repositories, but it doesn't really do anything. |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
12 - svnlocalrepo for local repositories which handles both operations on itself -- |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
13 the local, hgsubversion-enabled clone -- and the remote repository. Decorators |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
14 are used to distinguish and filter these operations from others. |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
15 """ |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
16 |
831
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
17 import errno |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
18 |
342
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
19 from mercurial import error |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
20 from mercurial import util as hgutil |
914
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
21 |
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
22 try: |
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
23 from mercurial.peer import peerrepository |
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
24 from mercurial import httppeer |
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
25 except ImportError: |
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
26 from mercurial.repo import repository as peerrepository |
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
27 from mercurial import httprepo as httppeer |
124
291925677a9f
tag_repo: remove gentags command, extend repo.tags(), HgChangeEditor now takes either repo or repo_path
Luke Opperman <luke@loppear.com>
parents:
diff
changeset
|
28 |
858
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
29 try: |
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
30 from mercurial import phases |
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
31 phases.public # defeat demand import |
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
32 except ImportError: |
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
33 phases = None |
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
34 |
844
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
35 import re |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
36 import util |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
37 import wrappers |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
38 import svnwrap |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
39 import svnmeta |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
40 |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
41 propertycache = hgutil.propertycache |
124
291925677a9f
tag_repo: remove gentags command, extend repo.tags(), HgChangeEditor now takes either repo or repo_path
Luke Opperman <luke@loppear.com>
parents:
diff
changeset
|
42 |
831
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
43 class ctxctx(object): |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
44 """Proxies a ctx object and ensures files is never empty.""" |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
45 def __init__(self, ctx): |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
46 self._ctx = ctx |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
47 |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
48 def files(self): |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
49 return self._ctx.files() or ['.svn'] |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
50 |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
51 def filectx(self, path, filelog=None): |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
52 if path == '.svn': |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
53 raise IOError(errno.ENOENT, '.svn is a fake file') |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
54 return self._ctx.filectx(path, filelog=filelog) |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
55 |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
56 def __getattr__(self, name): |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
57 return getattr(self._ctx, name) |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
58 |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
59 def __getitem__(self, key): |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
60 return self._ctx[key] |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
61 |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
62 def generate_repo_class(ui, repo): |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
63 """ This function generates the local repository wrapper. """ |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
64 |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
65 superclass = repo.__class__ |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
66 |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
67 def remotesvn(fn): |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
68 """ |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
69 Filter for instance methods which require the first argument |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
70 to be a remote Subversion repository instance. |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
71 """ |
618
82bfc96a1311
svnrepo: support new discovery module introduced in 3d0591a66118
Augie Fackler <durin42@gmail.com>
parents:
617
diff
changeset
|
72 original = getattr(repo, fn.__name__, None) |
82bfc96a1311
svnrepo: support new discovery module introduced in 3d0591a66118
Augie Fackler <durin42@gmail.com>
parents:
617
diff
changeset
|
73 |
82bfc96a1311
svnrepo: support new discovery module introduced in 3d0591a66118
Augie Fackler <durin42@gmail.com>
parents:
617
diff
changeset
|
74 # remove when dropping support for hg < 1.6. |
82bfc96a1311
svnrepo: support new discovery module introduced in 3d0591a66118
Augie Fackler <durin42@gmail.com>
parents:
617
diff
changeset
|
75 if original is None and fn.__name__ == 'findoutgoing': |
82bfc96a1311
svnrepo: support new discovery module introduced in 3d0591a66118
Augie Fackler <durin42@gmail.com>
parents:
617
diff
changeset
|
76 return |
82bfc96a1311
svnrepo: support new discovery module introduced in 3d0591a66118
Augie Fackler <durin42@gmail.com>
parents:
617
diff
changeset
|
77 |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
78 def wrapper(self, *args, **opts): |
342
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
79 capable = getattr(args[0], 'capable', lambda x: False) |
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
80 if capable('subversion'): |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
81 return fn(self, *args, **opts) |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
82 else: |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
83 return original(*args, **opts) |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
84 wrapper.__name__ = fn.__name__ + '_wrapper' |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
85 wrapper.__doc__ = fn.__doc__ |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
86 return wrapper |
124
291925677a9f
tag_repo: remove gentags command, extend repo.tags(), HgChangeEditor now takes either repo or repo_path
Luke Opperman <luke@loppear.com>
parents:
diff
changeset
|
87 |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
88 class svnlocalrepo(superclass): |
831
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
89 def svn_commitctx(self, ctx): |
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
90 """Commits a ctx, but defeats manifest recycling introduced in hg 1.9.""" |
858
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
91 hash = self.commitctx(ctxctx(ctx)) |
877
2c9f4c1686fa
svnrepo: don't break on old hg versions that lack pushkey
Augie Fackler <raf@durin42.com>
parents:
858
diff
changeset
|
92 if phases is not None and getattr(self, 'pushkey', False): |
858
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
93 # set phase to be public |
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
94 self.pushkey('phases', self[hash].hex(), str(phases.draft), str(phases.public)) |
bb6a013abaed
phases: mark newly created commits from subversion as 'public' to fix #335
Sean Farley <sean@mcs.anl.gov>
parents:
844
diff
changeset
|
95 return hash |
831
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
805
diff
changeset
|
96 |
617
da21c351d937
pull: handle argspec change from e43c23d189a5
Augie Fackler <durin42@gmail.com>
parents:
611
diff
changeset
|
97 # TODO use newbranch to allow branch creation in Subversion? |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
98 @remotesvn |
617
da21c351d937
pull: handle argspec change from e43c23d189a5
Augie Fackler <durin42@gmail.com>
parents:
611
diff
changeset
|
99 def push(self, remote, force=False, revs=None, newbranch=None): |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
100 return wrappers.push(self, remote, force, revs) |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
101 |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
102 @remotesvn |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
103 def pull(self, remote, heads=[], force=False): |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
104 return wrappers.pull(self, remote, heads, force) |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
105 |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
106 @remotesvn |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
345
diff
changeset
|
107 def findoutgoing(self, remote, base=None, heads=None, force=False): |
805
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
754
diff
changeset
|
108 return wrappers.findoutgoing(repo, remote, heads, force) |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
109 |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
710
diff
changeset
|
110 def svnmeta(self, uuid=None, subdir=None): |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
111 return svnmeta.SVNMeta(self, uuid, subdir) |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
112 |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
113 repo.__class__ = svnlocalrepo |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
114 |
914
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
115 class svnremoterepo(peerrepository): |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
116 """ the dumb wrapper for actual Subversion repositories """ |
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
117 |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
118 def __init__(self, ui, path=None): |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
119 self.ui = ui |
921
8faa91951bb1
svnremoterepo: use and prefer default-push
David Schleimer <dschleimer@fb.com>
parents:
915
diff
changeset
|
120 if path is None: |
8faa91951bb1
svnremoterepo: use and prefer default-push
David Schleimer <dschleimer@fb.com>
parents:
915
diff
changeset
|
121 path = self.ui.config('paths', 'default-push') |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
122 if path is None: |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
123 path = self.ui.config('paths', 'default') |
754
caa527346a0f
svncommands: abort on missing metadata or Subversion URL (fixes #226)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
750
diff
changeset
|
124 if not path: |
998
8045ebda705a
Improve UX. Update the implicit Path name for working with SVN repositories.
Jamie Clayton <jamie.clayton@jenasysdesign.com.au>
parents:
986
diff
changeset
|
125 raise hgutil.Abort('no Subversion URL specified. Expect[path] default= or [path] default-push= SVN URL entries in hgrc.') |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
126 self.path = path |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
127 self.capabilities = set(['lookup', 'subversion']) |
844
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
128 pws = self.ui.config('hgsubversion', 'password_stores', None) |
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
129 if pws is not None: |
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
130 # Split pws at comas and strip neighbouring whitespace (whitespace |
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
131 # at the beginning and end of pws has already been removed by the |
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
132 # config parser). |
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
133 self.password_stores = re.split(r'\s*,\s*', pws) |
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
134 else: |
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
135 self.password_stores = None |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
136 |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
914
diff
changeset
|
137 def _capabilities(self): |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
914
diff
changeset
|
138 return self.capabilities |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
914
diff
changeset
|
139 |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
140 @propertycache |
468
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
141 def svnauth(self): |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
142 # DO NOT default the user to hg's getuser(). If you provide |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
143 # *any* default username to Subversion, it won't use any remembered |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
144 # username for the desired realm, breaking OS X Keychain support, |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
145 # GNOME keyring support, and all similar tools. |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
146 user = self.ui.config('hgsubversion', 'username') |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
147 passwd = self.ui.config('hgsubversion', 'password') |
468
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
148 url = util.normalize_url(self.path) |
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
149 user, passwd, url = svnwrap.parse_url(url, user, passwd) |
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
150 return url, user, passwd |
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
151 |
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
152 @property |
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
153 def svnurl(self): |
710
db56e65906f4
svnrepo: make the svnurl property obtain the URL from Subversion.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
628
diff
changeset
|
154 return self.svn.svn_url |
468
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
155 |
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
156 @propertycache |
037bba1c6736
svnrepo: expose the same svnurl than SubversionRepo
Patrick Mezard <pmezard@gmail.com>
parents:
464
diff
changeset
|
157 def svn(self): |
611
b70f7c82b9b8
svncommands: fix layering violation & tweak error messages.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
597
diff
changeset
|
158 try: |
844
95d040755254
Added ability to configure the password stores
Jerome M. BERGER <jerome.berger@sagemcom.com>
parents:
831
diff
changeset
|
159 return svnwrap.SubversionRepo(*self.svnauth, password_stores=self.password_stores) |
611
b70f7c82b9b8
svncommands: fix layering violation & tweak error messages.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
597
diff
changeset
|
160 except svnwrap.SubversionConnectionException, e: |
b70f7c82b9b8
svncommands: fix layering violation & tweak error messages.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
597
diff
changeset
|
161 self.ui.traceback() |
b70f7c82b9b8
svncommands: fix layering violation & tweak error messages.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
597
diff
changeset
|
162 raise hgutil.Abort(e) |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
443
diff
changeset
|
163 |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
164 def url(self): |
345
49a656155a92
remove pointless rstrip('/')
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
344
diff
changeset
|
165 return self.path |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
166 |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
167 def lookup(self, key): |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
168 return key |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
169 |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
170 def cancopy(self): |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
171 return False |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
172 |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
173 def heads(self, *args, **opts): |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
174 """ |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
175 Whenever this function is hit, we abort. The traceback is useful for |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
176 figuring out where to intercept the functionality. |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
177 """ |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
178 raise hgutil.Abort('command unavailable for Subversion repositories') |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
179 |
628
4375d37fea1e
svnrepo: fix issue 187: ignore pushable bookmarks in hg 1.6
James McKay <code@jamesmckay.net>
parents:
618
diff
changeset
|
180 def pushkey(self, namespace, key, old, new): |
4375d37fea1e
svnrepo: fix issue 187: ignore pushable bookmarks in hg 1.6
James McKay <code@jamesmckay.net>
parents:
618
diff
changeset
|
181 return False |
4375d37fea1e
svnrepo: fix issue 187: ignore pushable bookmarks in hg 1.6
James McKay <code@jamesmckay.net>
parents:
618
diff
changeset
|
182 |
4375d37fea1e
svnrepo: fix issue 187: ignore pushable bookmarks in hg 1.6
James McKay <code@jamesmckay.net>
parents:
618
diff
changeset
|
183 def listkeys(self, namespace): |
4375d37fea1e
svnrepo: fix issue 187: ignore pushable bookmarks in hg 1.6
James McKay <code@jamesmckay.net>
parents:
618
diff
changeset
|
184 return {} |
4375d37fea1e
svnrepo: fix issue 187: ignore pushable bookmarks in hg 1.6
James McKay <code@jamesmckay.net>
parents:
618
diff
changeset
|
185 |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
186 def instance(ui, url, create): |
342
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
187 if url.startswith('http://') or url.startswith('https://'): |
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
188 try: |
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
189 # may yield a bogus 'real URL...' message |
914
a103d5211237
svnrepo: handle module/class rename in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
877
diff
changeset
|
190 return httppeer.instance(ui, url, create) |
342
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
191 except error.RepoError: |
597
737292a31028
svnrepo: ease debugging of Subversion fallback
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
468
diff
changeset
|
192 ui.traceback() |
737292a31028
svnrepo: ease debugging of Subversion fallback
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
468
diff
changeset
|
193 ui.note('(falling back to Subversion support)\n') |
342
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
194 |
326
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
195 if create: |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
196 raise hgutil.Abort('cannot create new remote Subversion repository') |
33736e2e25f0
alternate approach for supporting svn schemes for repository paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
158
diff
changeset
|
197 |
965
b748a0eed09a
svnwrap: Refactor the svn_auth_ssl_server_trust_prompt to add other handler
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
964
diff
changeset
|
198 svnwrap.prompt_callback(SubversionPrompt(ui)) |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
328
diff
changeset
|
199 return svnremoterepo(ui, url) |
964
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
200 |
965
b748a0eed09a
svnwrap: Refactor the svn_auth_ssl_server_trust_prompt to add other handler
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
964
diff
changeset
|
201 class SubversionPrompt(object): |
b748a0eed09a
svnwrap: Refactor the svn_auth_ssl_server_trust_prompt to add other handler
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
964
diff
changeset
|
202 def __init__(self, ui): |
b748a0eed09a
svnwrap: Refactor the svn_auth_ssl_server_trust_prompt to add other handler
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
964
diff
changeset
|
203 self.ui = ui |
b748a0eed09a
svnwrap: Refactor the svn_auth_ssl_server_trust_prompt to add other handler
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
964
diff
changeset
|
204 |
966
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
205 def maybe_print_realm(self, realm): |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
206 if realm: |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
207 self.ui.write('Authentication realm: %s\n' % (realm,)) |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
208 self.ui.flush() |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
209 |
967
0b6a6a7c26f3
svnwrap: Improved handling of username_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
966
diff
changeset
|
210 def username(self, realm, may_save, pool=None): |
0b6a6a7c26f3
svnwrap: Improved handling of username_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
966
diff
changeset
|
211 self.maybe_print_realm(realm) |
0b6a6a7c26f3
svnwrap: Improved handling of username_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
966
diff
changeset
|
212 username = self.ui.prompt('Username: ', default='') |
0b6a6a7c26f3
svnwrap: Improved handling of username_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
966
diff
changeset
|
213 return (username, bool(may_save)) |
0b6a6a7c26f3
svnwrap: Improved handling of username_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
966
diff
changeset
|
214 |
966
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
215 def simple(self, realm, default_username, may_save, pool=None): |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
216 self.maybe_print_realm(realm) |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
217 if default_username: |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
218 username = default_username |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
219 else: |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
220 username = self.ui.prompt('Username: ', default='') |
986
1bdd075a490a
cleanup: avoid \' in strings where easy
Augie Fackler <raf@durin42.com>
parents:
970
diff
changeset
|
221 password = self.ui.getpass("Password for '%s': " % (username,), default='') |
966
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
222 return (username, password, bool(may_save)) |
7561aef55a4b
svnwrap: Improved handling of simple_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
965
diff
changeset
|
223 |
968
c500bc862215
svnwrap: Implement handling of ssl_client_cert_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
967
diff
changeset
|
224 def ssl_client_cert(self, realm, may_save, pool=None): |
c500bc862215
svnwrap: Implement handling of ssl_client_cert_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
967
diff
changeset
|
225 self.maybe_print_realm(realm) |
c500bc862215
svnwrap: Implement handling of ssl_client_cert_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
967
diff
changeset
|
226 cert_file = self.ui.prompt('Client certificate filename: ', default='') |
c500bc862215
svnwrap: Implement handling of ssl_client_cert_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
967
diff
changeset
|
227 return (cert_file, bool(may_save)) |
c500bc862215
svnwrap: Implement handling of ssl_client_cert_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
967
diff
changeset
|
228 |
969
145611306f8a
svnwrap: Implement handling of ssl_client_cert_pw_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
968
diff
changeset
|
229 def ssl_client_cert_pw(self, realm, may_save, pool=None): |
986
1bdd075a490a
cleanup: avoid \' in strings where easy
Augie Fackler <raf@durin42.com>
parents:
970
diff
changeset
|
230 password = self.ui.getpass("Passphrase for '%s': " % (realm,), default='') |
969
145611306f8a
svnwrap: Implement handling of ssl_client_cert_pw_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
968
diff
changeset
|
231 return (password, bool(may_save)) |
145611306f8a
svnwrap: Implement handling of ssl_client_cert_pw_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
968
diff
changeset
|
232 |
970
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
233 def insecure(fn): |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
234 def fun(self, *args, **kwargs): |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
235 failures = args[1] |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
236 cert_info = args[2] |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
237 # cert_info[0] is hostname |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
238 # cert_info[1] is fingerprint |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
239 |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
240 fingerprint = self.ui.config('hostfingerprints', cert_info[0]) |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
241 if fingerprint and fingerprint.lower() == cert_info[1].lower(): |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
242 # same as the acceptance temporarily |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
243 return (failures, False) |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
244 |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
245 cacerts = self.ui.config('web', 'cacerts') |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
246 if not cacerts: |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
247 # same as the acceptance temporarily |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
248 return (failures, False) |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
249 |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
250 return fn(self, *args, **kwargs) |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
251 return fun |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
252 |
3e59f9af15b0
svnrepo: Support --insecure option the same as the mercurial
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
969
diff
changeset
|
253 @insecure |
965
b748a0eed09a
svnwrap: Refactor the svn_auth_ssl_server_trust_prompt to add other handler
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
964
diff
changeset
|
254 def ssl_server_trust(self, realm, failures, cert_info, may_save, pool=None): |
986
1bdd075a490a
cleanup: avoid \' in strings where easy
Augie Fackler <raf@durin42.com>
parents:
970
diff
changeset
|
255 msg = "Error validating server certificate for '%s':\n" % (realm,) |
964
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
256 if failures & svnwrap.SSL_UNKNOWNCA: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
257 msg += ( |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
258 ' - The certificate is not issued by a trusted authority. Use the\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
259 ' fingerprint to validate the certificate manually!\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
260 ) |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
261 if failures & svnwrap.SSL_CNMISMATCH: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
262 msg += ' - The certificate hostname does not match.\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
263 if failures & svnwrap.SSL_NOTYETVALID: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
264 msg += ' - The certificate is not yet valid.\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
265 if failures & svnwrap.SSL_EXPIRED: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
266 msg += ' - The certificate has expired.\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
267 if failures & svnwrap.SSL_OTHER: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
268 msg += ' - The certificate has an unknown error.\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
269 msg += ( |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
270 'Certificate information:\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
271 '- Hostname: %s\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
272 '- Valid: from %s until %s\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
273 '- Issuer: %s\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
274 '- Fingerprint: %s\n' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
275 ) % ( |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
276 cert_info[0], # hostname |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
277 cert_info[2], # valid_from |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
278 cert_info[3], # valid_until |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
279 cert_info[4], # issuer_dname |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
280 cert_info[1], # fingerprint |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
281 ) |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
282 if may_save: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
283 msg += '(R)eject, accept (t)emporarily or accept (p)ermanently? ' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
284 choices = (('&Reject'), ('&Temporarily'), ('&Permanently')) |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
285 else: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
286 msg += '(R)eject or accept (t)emporarily? ' |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
287 choices = (('&Reject'), ('&Temporarily')) |
965
b748a0eed09a
svnwrap: Refactor the svn_auth_ssl_server_trust_prompt to add other handler
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
964
diff
changeset
|
288 choice = self.ui.promptchoice(msg, choices, default=0) |
964
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
289 if choice == 1: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
290 creds = (failures, False) |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
291 elif may_save and choice == 2: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
292 creds = (failures, True) |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
293 else: |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
294 creds = None |
27fec8bf9273
svnwrap: Implement handling of get_ssl_server_trust_prompt_provider
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
921
diff
changeset
|
295 return creds |