Mercurial > kallithea
annotate rhodecode/lib/middleware/simplegit.py @ 2209:19a6c23af14b beta
Implemented pull command for remote repos for git
- added mimic ui objects into GitRepos to better handle hooks logic
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Thu, 26 Apr 2012 23:55:33 +0200 |
parents | 17ff5693566b |
children | 37c143aa8616 |
rev | line source |
---|---|
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
1 # -*- coding: utf-8 -*- |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
2 """ |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
3 rhodecode.lib.middleware.simplegit |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
5 |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
6 SimpleGit middleware for handling git protocol request (push/clone etc.) |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
7 It's implemented with basic auth function |
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
8 |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
9 :created_on: Apr 28, 2010 |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
10 :author: marcink |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
11 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
12 :license: GPLv3, see COPYING for more details. |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
13 """ |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
14 # This program is free software: you can redistribute it and/or modify |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
15 # it under the terms of the GNU General Public License as published by |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
16 # the Free Software Foundation, either version 3 of the License, or |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
17 # (at your option) any later version. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
18 # |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
19 # This program is distributed in the hope that it will be useful, |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
22 # GNU General Public License for more details. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
23 # |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
24 # You should have received a copy of the GNU General Public License |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
25 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
635
fd63782c4426
Fixed age, for new vcs implementation. Removed all obsolete date formatters
Marcin Kuzminski <marcin@python-works.com>
parents:
625
diff
changeset
|
26 |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
27 import os |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
28 import re |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
29 import logging |
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
30 import traceback |
635
fd63782c4426
Fixed age, for new vcs implementation. Removed all obsolete date formatters
Marcin Kuzminski <marcin@python-works.com>
parents:
625
diff
changeset
|
31 |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
32 from dulwich import server as dulserver |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
33 |
2007
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
34 |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
35 class SimpleGitUploadPackHandler(dulserver.UploadPackHandler): |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
36 |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
37 def handle(self): |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
38 write = lambda x: self.proto.write_sideband(1, x) |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
39 |
1275
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
40 graph_walker = dulserver.ProtocolGraphWalker(self, |
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
41 self.repo.object_store, |
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
42 self.repo.get_peeled) |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
43 objects_iter = self.repo.fetch_objects( |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
44 graph_walker.determine_wants, graph_walker, self.progress, |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
45 get_tagged=self.get_tagged) |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
46 |
2197
b14d8bd96144
Synced SimpleGitUploadPackHandler with latest dulwich code
Marcin Kuzminski <marcin@python-works.com>
parents:
2184
diff
changeset
|
47 # Did the process short-circuit (e.g. in a stateless RPC call)? Note |
b14d8bd96144
Synced SimpleGitUploadPackHandler with latest dulwich code
Marcin Kuzminski <marcin@python-works.com>
parents:
2184
diff
changeset
|
48 # that the client still expects a 0-object pack in most cases. |
b14d8bd96144
Synced SimpleGitUploadPackHandler with latest dulwich code
Marcin Kuzminski <marcin@python-works.com>
parents:
2184
diff
changeset
|
49 if objects_iter is None: |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
50 return |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
51 |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
52 self.progress("counting objects: %d, done.\n" % len(objects_iter)) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
53 dulserver.write_pack_objects(dulserver.ProtocolFile(None, write), |
2197
b14d8bd96144
Synced SimpleGitUploadPackHandler with latest dulwich code
Marcin Kuzminski <marcin@python-works.com>
parents:
2184
diff
changeset
|
54 objects_iter) |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
55 messages = [] |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
56 messages.append('thank you for using rhodecode') |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
57 |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
58 for msg in messages: |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
59 self.progress(msg + "\n") |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
60 # we are done |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
61 self.proto.write("0000") |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
62 |
2197
b14d8bd96144
Synced SimpleGitUploadPackHandler with latest dulwich code
Marcin Kuzminski <marcin@python-works.com>
parents:
2184
diff
changeset
|
63 |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
64 dulserver.DEFAULT_HANDLERS = { |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
65 'git-upload-pack': SimpleGitUploadPackHandler, |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
66 'git-receive-pack': dulserver.ReceivePackHandler, |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
67 } |
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
68 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
69 from dulwich.repo import Repo |
2137
462a845c925c
Making RhodeCode ready for dulwich 0.8.4
Tony Bussieres <t.bussieres@gmail.com>
parents:
2109
diff
changeset
|
70 from dulwich.web import make_wsgi_chain |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
71 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
72 from paste.httpheaders import REMOTE_USER, AUTH_TYPE |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
73 |
2109 | 74 from rhodecode.lib.utils2 import safe_str |
1761
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
75 from rhodecode.lib.base import BaseVCSController |
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
76 from rhodecode.lib.auth import get_container_username |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
77 from rhodecode.lib.utils import is_valid_repo, make_ui |
1497
71738535ed78
Removed deprecated usage of UserModel() in simplehg and simplegit
Marcin Kuzminski <marcin@python-works.com>
parents:
1496
diff
changeset
|
78 from rhodecode.model.db import User |
903
04c9bb9ca6d6
code docs, updates
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
79 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
80 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
81 |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
82 log = logging.getLogger(__name__) |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
83 |
1275
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
84 |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
85 GIT_PROTO_PAT = re.compile(r'^/(.+)/(info/refs|git-upload-pack|git-receive-pack)') |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
86 |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
87 |
2060
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
88 def is_git(environ): |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
89 path_info = environ['PATH_INFO'] |
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
90 isgit_path = GIT_PROTO_PAT.match(path_info) |
2100
f0649c7cf94a
fixed some unicode problems with waitress
Marcin Kuzminski <marcin@python-works.com>
parents:
2090
diff
changeset
|
91 log.debug('pathinfo: %s detected as GIT %s' % ( |
f0649c7cf94a
fixed some unicode problems with waitress
Marcin Kuzminski <marcin@python-works.com>
parents:
2090
diff
changeset
|
92 path_info, isgit_path != None) |
f0649c7cf94a
fixed some unicode problems with waitress
Marcin Kuzminski <marcin@python-works.com>
parents:
2090
diff
changeset
|
93 ) |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
94 return isgit_path |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
95 |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
96 |
1761
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
97 class SimpleGit(BaseVCSController): |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
98 |
1761
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
99 def _handle_request(self, environ, start_response): |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
100 |
2060
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
101 if not is_git(environ): |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
102 return self.application(environ, start_response) |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
655
diff
changeset
|
103 |
2184
79e4d6b9c1f0
Added HTTP_X_FORWARDED_FOR as another method of extracting IP for pull/push logs.
Marcin Kuzminski <marcin@python-works.com>
parents:
2139
diff
changeset
|
104 ipaddr = self._get_ip_addr(environ) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
105 username = None |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
106 self._git_first_op = False |
898
9c4851dce8e6
fixed error propagation when using git/mercurial requests
Marcin Kuzminski <marcin@python-works.com>
parents:
756
diff
changeset
|
107 # skip passing error to error controller |
9c4851dce8e6
fixed error propagation when using git/mercurial requests
Marcin Kuzminski <marcin@python-works.com>
parents:
756
diff
changeset
|
108 environ['pylons.status_code_redirect'] = True |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
655
diff
changeset
|
109 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
110 #====================================================================== |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
111 # EXTRACT REPOSITORY NAME FROM ENV |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
112 #====================================================================== |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
113 try: |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
114 repo_name = self.__get_repository(environ) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
115 log.debug('Extracted repo name is %s' % repo_name) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
116 except: |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
117 return HTTPInternalServerError()(environ, start_response) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
118 |
2122
c137b8a81f8e
git+hg middleware do repo verification at earliest possible state, giving 404 as fast as possible. If repo is not found.
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
119 # quick check if that dir exists... |
c137b8a81f8e
git+hg middleware do repo verification at earliest possible state, giving 404 as fast as possible. If repo is not found.
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
120 if is_valid_repo(repo_name, self.basepath) is False: |
c137b8a81f8e
git+hg middleware do repo verification at earliest possible state, giving 404 as fast as possible. If repo is not found.
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
121 return HTTPNotFound()(environ, start_response) |
c137b8a81f8e
git+hg middleware do repo verification at earliest possible state, giving 404 as fast as possible. If repo is not found.
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
122 |
2060
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
123 #====================================================================== |
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
124 # GET ACTION PULL or PUSH |
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
125 #====================================================================== |
572855f7a392
reverted git fix as it broke pushing
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
126 action = self.__get_action(environ) |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
127 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
128 #====================================================================== |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
129 # CHECK ANONYMOUS PERMISSION |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
130 #====================================================================== |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
131 if action in ['pull', 'push']: |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
132 anonymous_user = self.__get_user('default') |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
133 username = anonymous_user.username |
2026
c6e288dcb4a2
improved logging in git/hg middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
2021
diff
changeset
|
134 anonymous_perm = self._check_permission(action, anonymous_user, |
1761
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
135 repo_name) |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
136 |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
137 if anonymous_perm is not True or anonymous_user.active is False: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
138 if anonymous_perm is not True: |
1275
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
139 log.debug('Not enough credentials to access this ' |
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
140 'repository as anonymous user') |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
141 if anonymous_user.active is False: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
142 log.debug('Anonymous access is disabled, running ' |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
143 'authentication') |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
144 #============================================================== |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
145 # DEFAULT PERM FAILED OR ANONYMOUS ACCESS IS DISABLED SO WE |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
146 # NEED TO AUTHENTICATE AND ASK FOR AUTH USER PERMISSIONS |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
147 #============================================================== |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
148 |
1630
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
149 # Attempting to retrieve username from the container |
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
150 username = get_container_username(environ, self.config) |
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
151 |
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
152 # If not authenticated by the container, running basic auth |
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
153 if not username: |
1401
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1293
diff
changeset
|
154 self.authenticate.realm = \ |
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1293
diff
changeset
|
155 safe_str(self.config['rhodecode_realm']) |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
156 result = self.authenticate(environ) |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
157 if isinstance(result, str): |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
158 AUTH_TYPE.update(environ, 'basic') |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
159 REMOTE_USER.update(environ, result) |
1630
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
160 username = result |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
161 else: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
162 return result.wsgi_application(environ, start_response) |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
163 |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
164 #============================================================== |
1630
25d8e4836bc2
Improved container-based auth support for middleware
Liad Shani <liadff@gmail.com>
parents:
1620
diff
changeset
|
165 # CHECK PERMISSIONS FOR THIS REQUEST USING GIVEN USERNAME |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
166 #============================================================== |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
167 if action in ['pull', 'push']: |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
168 try: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
169 user = self.__get_user(username) |
1620
41696fc73c4d
Fixed middleware to prevent deactivated users from authenticating
Liad Shani <liadff@gmail.com>
parents:
1619
diff
changeset
|
170 if user is None or not user.active: |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1813
diff
changeset
|
171 return HTTPForbidden()(environ, start_response) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
172 username = user.username |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
173 except: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
174 log.error(traceback.format_exc()) |
1275
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
175 return HTTPInternalServerError()(environ, |
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
176 start_response) |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
177 |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
178 #check permissions for this repository |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
179 perm = self._check_permission(action, user, repo_name) |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
180 if perm is not True: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
181 return HTTPForbidden()(environ, start_response) |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
182 extras = { |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
183 'ip': ipaddr, |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
184 'username': username, |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
185 'action': action, |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
186 'repository': repo_name, |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
187 'scm': 'git', |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
188 } |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
189 |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
190 #=================================================================== |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
191 # GIT REQUEST HANDLING |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
192 #=================================================================== |
2100
f0649c7cf94a
fixed some unicode problems with waitress
Marcin Kuzminski <marcin@python-works.com>
parents:
2090
diff
changeset
|
193 repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name)) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
194 log.debug('Repository path is %s' % repo_path) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
195 |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
196 baseui = make_ui('db') |
2209
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
197 self.__inject_extras(repo_path, baseui, extras) |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
198 |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
199 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
200 try: |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
201 # invalidate cache on push |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
202 if action == 'push': |
1761
b265be1c6093
Wrapped calls for git and hg middleware in extra block that clears db Session.
Marcin Kuzminski <marcin@python-works.com>
parents:
1630
diff
changeset
|
203 self._invalidate_cache(repo_name) |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
204 self._handle_githooks(action, baseui, environ) |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
205 |
2026
c6e288dcb4a2
improved logging in git/hg middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
2021
diff
changeset
|
206 log.info('%s action on GIT repo "%s"' % (action, repo_name)) |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
207 app = self.__make_app(repo_name, repo_path) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
208 return app(environ, start_response) |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
209 except Exception: |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
210 log.error(traceback.format_exc()) |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
211 return HTTPInternalServerError()(environ, start_response) |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
212 |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
213 def __make_app(self, repo_name, repo_path): |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
214 """ |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
215 Make an wsgi application using dulserver |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1813
diff
changeset
|
216 |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
217 :param repo_name: name of the repository |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
218 :param repo_path: full path to the repository |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
219 """ |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
220 _d = {'/' + repo_name: Repo(repo_path)} |
1275
2723276285ae
pep8ify middlewares
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
221 backend = dulserver.DictBackend(_d) |
2137
462a845c925c
Making RhodeCode ready for dulwich 0.8.4
Tony Bussieres <t.bussieres@gmail.com>
parents:
2109
diff
changeset
|
222 gitserve = make_wsgi_chain(backend) |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
223 |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
224 return gitserve |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
225 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
226 def __get_repository(self, environ): |
1496
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
227 """ |
f4fed0b32103
Rewrote git middleware with the same pattern as recent fix for #176
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
228 Get's repository name out of PATH_INFO header |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
229 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
230 :param environ: environ where PATH_INFO is stored |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
231 """ |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
232 try: |
1813
a8c66e870bd0
implements #285: Implemented non changeable urls for clone url, and web views
Marcin Kuzminski <marcin@python-works.com>
parents:
1761
diff
changeset
|
233 environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO']) |
2061
9f0fe6777833
merge pull request #32 from codingtony
Marcin Kuzminski <marcin@python-works.com>
parents:
2060
diff
changeset
|
234 repo_name = GIT_PROTO_PAT.match(environ['PATH_INFO']).group(1) |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
235 except: |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
236 log.error(traceback.format_exc()) |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
237 raise |
2052
320806ff6be2
fixes git-protocol with
Marcin Kuzminski <marcin@python-works.com>
parents:
2026
diff
changeset
|
238 |
918
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
239 return repo_name |
b2d5868cc4b8
fixes #97 in simplehg and simplegit, force casting to headers
Marcin Kuzminski <marcin@python-works.com>
parents:
903
diff
changeset
|
240 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
241 def __get_user(self, username): |
1530
04027bdb876c
Refactoring of model get functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1507
diff
changeset
|
242 return User.get_by_username(username) |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
243 |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
244 def __get_action(self, environ): |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
245 """ |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
246 Maps git request commands into a pull or push command. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
989
diff
changeset
|
247 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
248 :param environ: |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
249 """ |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
250 service = environ['QUERY_STRING'].split('=') |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
251 |
620
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
252 if len(service) > 1: |
19a62a5490fe
added base simple git middleware, for future usage
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
253 service_cmd = service[1] |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
254 mapping = { |
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
255 'git-receive-pack': 'push', |
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
256 'git-upload-pack': 'pull', |
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2057
diff
changeset
|
257 } |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
258 op = mapping[service_cmd] |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
259 self._git_stored_op = op |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
260 return op |
625
d5372213db98
some hacking on simplegit middleware
Marcin Kuzminski <marcin@python-works.com>
parents:
620
diff
changeset
|
261 else: |
2090
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
262 # try to fallback to stored variable as we don't know if the last |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
263 # operation is pull/push |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
264 op = getattr(self, '_git_stored_op', 'pull') |
2632a49cb402
fixes issue #372
Marcin Kuzminski <marcin@python-works.com>
parents:
2061
diff
changeset
|
265 return op |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
266 |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
267 def _handle_githooks(self, action, baseui, environ): |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
268 from rhodecode.lib.hooks import log_pull_action, log_push_action |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
269 service = environ['QUERY_STRING'].split('=') |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
270 if len(service) < 2: |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
271 return |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
272 |
2209
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
273 from rhodecode.model.db import Repository |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
274 _repo = Repository.get_by_repo_name(repo_name) |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
275 _repo = _repo.scm_instance |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
276 _repo._repo.ui = baseui |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
277 |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
278 push_hook = 'pretxnchangegroup.push_logger' |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
279 pull_hook = 'preoutgoing.pull_logger' |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
280 _hooks = dict(baseui.configitems('hooks')) or {} |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
281 if action == 'push' and _hooks.get(push_hook): |
2209
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
282 log_push_action(ui=baseui, repo=repo._repo) |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2197
diff
changeset
|
283 elif action == 'pull' and _hooks.get(pull_hook): |
2209
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
284 log_pull_action(ui=baseui, repo=repo._repo) |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
285 |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
286 def __inject_extras(self, repo_path, baseui, extras={}): |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
287 """ |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
288 Injects some extra params into baseui instance |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
289 |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
290 :param baseui: baseui instance |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
291 :param extras: dict with extra params to put into baseui |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
292 """ |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
293 |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
294 # make our hgweb quiet so it doesn't print output |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
295 baseui.setconfig('ui', 'quiet', 'true') |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
296 |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
297 #inject some additional parameters that will be available in ui |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
298 #for hooks |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
299 for k, v in extras.items(): |
19a6c23af14b
Implemented pull command for remote repos for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2207
diff
changeset
|
300 baseui.setconfig('rhodecode_extras', k, v) |