Mercurial > kallithea
annotate rhodecode/lib/hooks.py @ 3574:000653f7cdf9 beta
avoid displaying repr of internal classes in user facing messages
The context of the message will tell where the problem was and there is no reason to show
... does not exist for this repository <MercurialRepository at /home/marcink/repos/rhodecode>
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Thu, 21 Mar 2013 11:17:01 +0100 |
parents | e4a4006faceb |
children | 238486bb71ab |
rev | line source |
---|---|
913
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
1 # -*- coding: utf-8 -*- |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
2 """ |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
3 rhodecode.lib.hooks |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
4 ~~~~~~~~~~~~~~~~~~~ |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
5 |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
6 Hooks runned by rhodecode |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1114
diff
changeset
|
7 |
913
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
8 :created_on: Aug 6, 2010 |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
9 :author: marcink |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1814
diff
changeset
|
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
913
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
11 :license: GPLv3, see COPYING for more details. |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
12 """ |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
13 # 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
|
14 # 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
|
15 # 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
|
16 # (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:
1114
diff
changeset
|
17 # |
392
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
18 # This program is distributed in the hope that it will be useful, |
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
21 # 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:
1114
diff
changeset
|
22 # |
392
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
23 # 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
|
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
913
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
25 import os |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
26 import sys |
2904
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
27 import time |
2324
1dbf07735af4
save full raw id in push log data for much faster revision lookup
Marcin Kuzminski <marcin@python-works.com>
parents:
2236
diff
changeset
|
28 import binascii |
1dbf07735af4
save full raw id in push log data for much faster revision lookup
Marcin Kuzminski <marcin@python-works.com>
parents:
2236
diff
changeset
|
29 from inspect import isfunction |
392
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
30 |
1415
677408ee9355
fixed hooks for mercurial 1.9
Marcin Kuzminski <marcin@python-works.com>
parents:
1307
diff
changeset
|
31 from mercurial.scmutil import revrange |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
32 from mercurial.node import nullrev |
2324
1dbf07735af4
save full raw id in push log data for much faster revision lookup
Marcin Kuzminski <marcin@python-works.com>
parents:
2236
diff
changeset
|
33 |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
34 from rhodecode.lib import helpers as h |
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
35 from rhodecode.lib.utils import action_logger |
2404
a3efdd61a21f
Git Hooks are automatically installed in new repos
Marcin Kuzminski <marcin@python-works.com>
parents:
2402
diff
changeset
|
36 from rhodecode.lib.vcs.backends.base import EmptyChangeset |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
37 from rhodecode.lib.compat import json |
2818
3d0bd5f71dab
raise na OSERROR if repository data sent from git hook to hook handler is somehow invalid
Marcin Kuzminski <marcin@python-works.com>
parents:
2750
diff
changeset
|
38 from rhodecode.lib.exceptions import HTTPLockedRC |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
39 from rhodecode.lib.utils2 import safe_str |
2818
3d0bd5f71dab
raise na OSERROR if repository data sent from git hook to hook handler is somehow invalid
Marcin Kuzminski <marcin@python-works.com>
parents:
2750
diff
changeset
|
40 from rhodecode.model.db import Repository, User |
1307 | 41 |
2904
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
42 |
2196
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
43 def _get_scm_size(alias, root_path): |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
44 |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
45 if not alias.startswith('.'): |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
46 alias += '.' |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
47 |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
48 size_scm, size_root = 0, 0 |
2963
742d1b8ca263
use str() on os.walk passing unicode can lead to UnicodeDecode errors when iterating
Marcin Kuzminski <marcin@python-works.com>
parents:
2958
diff
changeset
|
49 for path, dirs, files in os.walk(safe_str(root_path)): |
2196
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
50 if path.find(alias) != -1: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
51 for f in files: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
52 try: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
53 size_scm += os.path.getsize(os.path.join(path, f)) |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
54 except OSError: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
55 pass |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
56 else: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
57 for f in files: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
58 try: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
59 size_root += os.path.getsize(os.path.join(path, f)) |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
60 except OSError: |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
61 pass |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
62 |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
63 size_scm_f = h.format_byte_size(size_scm) |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
64 size_root_f = h.format_byte_size(size_root) |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
65 size_total_f = h.format_byte_size(size_root + size_scm) |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
66 |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
67 return size_scm_f, size_root_f, size_total_f |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
68 |
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
69 |
392
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
70 def repo_size(ui, repo, hooktype=None, **kwargs): |
1722
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1416
diff
changeset
|
71 """ |
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1416
diff
changeset
|
72 Presents size of repository after push |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1114
diff
changeset
|
73 |
913
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
74 :param ui: |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
75 :param repo: |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
76 :param hooktype: |
d173938d711b
filled in some docs for hooks
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
77 """ |
392
b27d32cb3157
Implemented hooks system,
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
78 |
2196
7ccf403b9c3f
made repo-size hook more generic
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
79 size_hg_f, size_root_f, size_total_f = _get_scm_size('.hg', repo.root) |
1814
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
80 |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
81 last_cs = repo[len(repo) - 1] |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
82 |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
83 msg = ('Repository size .hg:%s repo:%s total:%s\n' |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
84 'Last revision is now r%s:%s\n') % ( |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
85 size_hg_f, size_root_f, size_total_f, last_cs.rev(), last_cs.hex()[:12] |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
86 ) |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
87 |
9de452afbe01
small change for post update hook that displays repository size
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
88 sys.stdout.write(msg) |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
89 |
1307 | 90 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
91 def pre_push(ui, repo, **kwargs): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
92 # pre push function, currently used to ban pushing when |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
93 # repository is locked |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
94 try: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
95 rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
96 except: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
97 rc_extras = {} |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
98 extras = dict(repo.ui.configitems('rhodecode_extras')) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
99 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
100 if 'username' in extras: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
101 username = extras['username'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
102 repository = extras['repository'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
103 scm = extras['scm'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
104 locked_by = extras['locked_by'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
105 elif 'username' in rc_extras: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
106 username = rc_extras['username'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
107 repository = rc_extras['repository'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
108 scm = rc_extras['scm'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
109 locked_by = rc_extras['locked_by'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
110 else: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
111 raise Exception('Missing data in repo.ui and os.environ') |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
112 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
113 usr = User.get_by_username(username) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
114 if locked_by[0] and usr.user_id != int(locked_by[0]): |
2750
30cafecb2630
Fixed issue with mixed locking notification and bad username
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
115 locked_by = User.get(locked_by[0]).username |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
116 # this exception is interpreted in git/hg middlewares and based |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
117 # on that proper return code is server to client |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
118 _http_ret = HTTPLockedRC(repository, locked_by) |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
119 if str(_http_ret.code).startswith('2'): |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
120 #2xx Codes don't raise exceptions |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
121 sys.stdout.write(_http_ret.title) |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
122 else: |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
123 raise _http_ret |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
124 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
125 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
126 def pre_pull(ui, repo, **kwargs): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
127 # pre push function, currently used to ban pushing when |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
128 # repository is locked |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
129 try: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
130 rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
131 except: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
132 rc_extras = {} |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
133 extras = dict(repo.ui.configitems('rhodecode_extras')) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
134 if 'username' in extras: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
135 username = extras['username'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
136 repository = extras['repository'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
137 scm = extras['scm'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
138 locked_by = extras['locked_by'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
139 elif 'username' in rc_extras: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
140 username = rc_extras['username'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
141 repository = rc_extras['repository'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
142 scm = rc_extras['scm'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
143 locked_by = rc_extras['locked_by'] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
144 else: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
145 raise Exception('Missing data in repo.ui and os.environ') |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
146 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
147 if locked_by[0]: |
2750
30cafecb2630
Fixed issue with mixed locking notification and bad username
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
148 locked_by = User.get(locked_by[0]).username |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
149 # this exception is interpreted in git/hg middlewares and based |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
150 # on that proper return code is server to client |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
151 _http_ret = HTTPLockedRC(repository, locked_by) |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
152 if str(_http_ret.code).startswith('2'): |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
153 #2xx Codes don't raise exceptions |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
154 sys.stdout.write(_http_ret.title) |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
155 else: |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
156 raise _http_ret |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
157 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
158 |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
159 def log_pull_action(ui, repo, **kwargs): |
1722
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1416
diff
changeset
|
160 """ |
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1416
diff
changeset
|
161 Logs user last pull action |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1114
diff
changeset
|
162 |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
163 :param ui: |
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
164 :param repo: |
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
165 """ |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
166 try: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
167 rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
168 except: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
169 rc_extras = {} |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
170 extras = dict(repo.ui.configitems('rhodecode_extras')) |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
171 if 'username' in extras: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
172 username = extras['username'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
173 repository = extras['repository'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
174 scm = extras['scm'] |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
175 make_lock = extras['make_lock'] |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
176 locked_by = extras['locked_by'] |
3097
db1b7125cdaf
fixed issue with passing IP address to log action logger for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2998
diff
changeset
|
177 ip = extras['ip'] |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
178 elif 'username' in rc_extras: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
179 username = rc_extras['username'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
180 repository = rc_extras['repository'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
181 scm = rc_extras['scm'] |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
182 make_lock = rc_extras['make_lock'] |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
183 locked_by = rc_extras['locked_by'] |
3097
db1b7125cdaf
fixed issue with passing IP address to log action logger for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2998
diff
changeset
|
184 ip = rc_extras['ip'] |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
185 else: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
186 raise Exception('Missing data in repo.ui and os.environ') |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
187 user = User.get_by_username(username) |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
188 action = 'pull' |
3097
db1b7125cdaf
fixed issue with passing IP address to log action logger for git
Marcin Kuzminski <marcin@python-works.com>
parents:
2998
diff
changeset
|
189 action_logger(user, action, repository, ip, commit=True) |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
190 # extension hook call |
2406
7be31af5bc78
changed scope of calling EXTENSIONS from rhodecode for githooks to be able to execute them
Marcin Kuzminski <marcin@python-works.com>
parents:
2404
diff
changeset
|
191 from rhodecode import EXTENSIONS |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
192 callback = getattr(EXTENSIONS, 'PULL_HOOK', None) |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
193 |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
194 if isfunction(callback): |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
195 kw = {} |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
196 kw.update(extras) |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
197 callback(**kw) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
198 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
199 if make_lock is True: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
200 Repository.lock(Repository.get_by_repo_name(repository), user.user_id) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
201 #msg = 'Made lock on repo `%s`' % repository |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
202 #sys.stdout.write(msg) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
203 |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
204 if locked_by[0]: |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
205 locked_by = User.get(locked_by[0]).username |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
206 _http_ret = HTTPLockedRC(repository, locked_by) |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
207 if str(_http_ret.code).startswith('2'): |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
208 #2xx Codes don't raise exceptions |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
209 sys.stdout.write(_http_ret.title) |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
210 return 0 |
503
3d6d548ad3cc
Added user action mapper to map push to changeset.
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
211 |
1307 | 212 |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
213 def log_push_action(ui, repo, **kwargs): |
1722
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1416
diff
changeset
|
214 """ |
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1416
diff
changeset
|
215 Maps user last push action to new changeset id, from mercurial |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1114
diff
changeset
|
216 |
604
5cc96df705b9
fixed @repo into :repo for docs
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
217 :param ui: |
2236
37c143aa8616
fixes issue #436 git push error
Marcin Kuzminski <marcin@python-works.com>
parents:
2203
diff
changeset
|
218 :param repo: repo object containing the `ui` object |
503
3d6d548ad3cc
Added user action mapper to map push to changeset.
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
219 """ |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
220 |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
221 try: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
222 rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
223 except: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
224 rc_extras = {} |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
225 |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
226 extras = dict(repo.ui.configitems('rhodecode_extras')) |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
227 if 'username' in extras: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
228 username = extras['username'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
229 repository = extras['repository'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
230 scm = extras['scm'] |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
231 make_lock = extras['make_lock'] |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
232 locked_by = extras['locked_by'] |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3278
diff
changeset
|
233 action = extras['action'] |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
234 elif 'username' in rc_extras: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
235 username = rc_extras['username'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
236 repository = rc_extras['repository'] |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
237 scm = rc_extras['scm'] |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
238 make_lock = rc_extras['make_lock'] |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
239 locked_by = rc_extras['locked_by'] |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3278
diff
changeset
|
240 action = extras['action'] |
2716
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
241 else: |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
242 raise Exception('Missing data in repo.ui and os.environ') |
4c71667160e5
use os.environ as a fallback for getting special info from hooks, this will allow
Marcin Kuzminski <marcin@python-works.com>
parents:
2617
diff
changeset
|
243 |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3278
diff
changeset
|
244 action = action + ':%s' |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
245 |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
246 if scm == 'hg': |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
247 node = kwargs['node'] |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
248 |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
249 def get_revs(repo, rev_opt): |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
250 if rev_opt: |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
251 revs = revrange(repo, rev_opt) |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
252 |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
253 if len(revs) == 0: |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
254 return (nullrev, nullrev) |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
255 return (max(revs), min(revs)) |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
256 else: |
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
257 return (len(repo) - 1, 0) |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
258 |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
259 stop, start = get_revs(repo, [node + ':']) |
2324
1dbf07735af4
save full raw id in push log data for much faster revision lookup
Marcin Kuzminski <marcin@python-works.com>
parents:
2236
diff
changeset
|
260 h = binascii.hexlify |
2407
8a68e0292232
Change git & hg hooks to post. They shouldn't block as they are used just for logging actions. Futhermore post hooks have access to changesets, so it's much better flexible
Marcin Kuzminski <marcin@python-works.com>
parents:
2406
diff
changeset
|
261 revs = [h(repo[r].node()) for r in xrange(start, stop + 1)] |
2203
d9972f76322e
added emulation of pull hook for git-backend, and dummy git-push hook
Marcin Kuzminski <marcin@python-works.com>
parents:
2196
diff
changeset
|
262 elif scm == 'git': |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
263 revs = kwargs.get('_git_revs', []) |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
264 if '_git_revs' in kwargs: |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
265 kwargs.pop('_git_revs') |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
266 |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
267 action = action % ','.join(revs) |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
268 |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
269 action_logger(username, action, repository, extras['ip'], commit=True) |
675
59670f091c76
bugfix, repo_size crashed when broken symlinks where inside a repository.
Marcin Kuzminski <marcin@python-works.com>
parents:
654
diff
changeset
|
270 |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
271 # extension hook call |
2406
7be31af5bc78
changed scope of calling EXTENSIONS from rhodecode for githooks to be able to execute them
Marcin Kuzminski <marcin@python-works.com>
parents:
2404
diff
changeset
|
272 from rhodecode import EXTENSIONS |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
273 callback = getattr(EXTENSIONS, 'PUSH_HOOK', None) |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
274 if isfunction(callback): |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
275 kw = {'pushed_revs': revs} |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
276 kw.update(extras) |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
277 callback(**kw) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
278 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
279 if make_lock is False: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
280 Repository.unlock(Repository.get_by_repo_name(repository)) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
281 msg = 'Released lock on repo `%s`\n' % repository |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
282 sys.stdout.write(msg) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
283 |
3522
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
284 if locked_by[0]: |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
285 locked_by = User.get(locked_by[0]).username |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
286 _http_ret = HTTPLockedRC(repository, locked_by) |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
287 if str(_http_ret.code).startswith('2'): |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
288 #2xx Codes don't raise exceptions |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
289 sys.stdout.write(_http_ret.title) |
7174ee850baa
configurable locking codes.
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
290 |
654
7f5976da192c
#48 rewrite action loggers into hooks with all changesets that are inside a push
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
291 return 0 |
1972
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
292 |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
293 |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
294 def log_create_repository(repository_dict, created_by, **kwargs): |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
295 """ |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
296 Post create repository Hook. This is a dummy function for admins to re-use |
2109 | 297 if needed. It's taken from rhodecode-extensions module and executed |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
298 if present |
1972
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
299 |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1972
diff
changeset
|
300 :param repository: dict dump of repository object |
1972
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
301 :param created_by: username who created repository |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
302 |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
303 available keys of repository_dict: |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
304 |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
305 'repo_type', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
306 'description', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
307 'private', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
308 'created_on', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
309 'enable_downloads', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
310 'repo_id', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
311 'user_id', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
312 'enable_statistics', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
313 'clone_uri', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
314 'fork_id', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
315 'group_id', |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
316 'repo_name' |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
317 |
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
318 """ |
2406
7be31af5bc78
changed scope of calling EXTENSIONS from rhodecode for githooks to be able to execute them
Marcin Kuzminski <marcin@python-works.com>
parents:
2404
diff
changeset
|
319 from rhodecode import EXTENSIONS |
2105
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
320 callback = getattr(EXTENSIONS, 'CREATE_REPO_HOOK', None) |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
321 if isfunction(callback): |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
322 kw = {} |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
323 kw.update(repository_dict) |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
324 kw.update({'created_by': created_by}) |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
325 kw.update(kwargs) |
926f55b038bc
added initial rc-extension module
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
326 return callback(**kw) |
1972
27abf546aa8a
#348 added post-create repository hook
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
327 |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1972
diff
changeset
|
328 return 0 |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
329 |
2904
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
330 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
331 def log_delete_repository(repository_dict, deleted_by, **kwargs): |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
332 """ |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
333 Post delete repository Hook. This is a dummy function for admins to re-use |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
334 if needed. It's taken from rhodecode-extensions module and executed |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
335 if present |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
336 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
337 :param repository: dict dump of repository object |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
338 :param deleted_by: username who deleted the repository |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
339 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
340 available keys of repository_dict: |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
341 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
342 'repo_type', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
343 'description', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
344 'private', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
345 'created_on', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
346 'enable_downloads', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
347 'repo_id', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
348 'user_id', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
349 'enable_statistics', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
350 'clone_uri', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
351 'fork_id', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
352 'group_id', |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
353 'repo_name' |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
354 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
355 """ |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
356 from rhodecode import EXTENSIONS |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
357 callback = getattr(EXTENSIONS, 'DELETE_REPO_HOOK', None) |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
358 if isfunction(callback): |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
359 kw = {} |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
360 kw.update(repository_dict) |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
361 kw.update({'deleted_by': deleted_by, |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
362 'deleted_on': time.time()}) |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
363 kw.update(kwargs) |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
364 return callback(**kw) |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
365 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
366 return 0 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
367 |
1b275d04ac07
#595 add rcextension hook for repository delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2872
diff
changeset
|
368 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
369 handle_git_pre_receive = (lambda repo_path, revs, env: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
370 handle_git_receive(repo_path, revs, env, hook_type='pre')) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
371 handle_git_post_receive = (lambda repo_path, revs, env: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
372 handle_git_receive(repo_path, revs, env, hook_type='post')) |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
373 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
374 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
375 def handle_git_receive(repo_path, revs, env, hook_type='post'): |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
376 """ |
2407
8a68e0292232
Change git & hg hooks to post. They shouldn't block as they are used just for logging actions. Futhermore post hooks have access to changesets, so it's much better flexible
Marcin Kuzminski <marcin@python-works.com>
parents:
2406
diff
changeset
|
377 A really hacky method that is runned by git post-receive hook and logs |
2409
761e00380370
whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2408
diff
changeset
|
378 an push action together with pushed revisions. It's executed by subprocess |
761e00380370
whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2408
diff
changeset
|
379 thus needs all info to be able to create a on the fly pylons enviroment, |
761e00380370
whitespace cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2408
diff
changeset
|
380 connect to database and run the logging code. Hacky as sh*t but works. |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
381 |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
382 :param repo_path: |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
383 :type repo_path: |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
384 :param revs: |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
385 :type revs: |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
386 :param env: |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
387 :type env: |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
388 """ |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
389 from paste.deploy import appconfig |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
390 from sqlalchemy import engine_from_config |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
391 from rhodecode.config.environment import load_environment |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
392 from rhodecode.model import init_model |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
393 from rhodecode.model.db import RhodeCodeUi |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
394 from rhodecode.lib.utils import make_ui |
2870
cbf0775ff6b4
There's no need to use special env variable for config file, it's already passed in in extras now
Marcin Kuzminski <marcin@python-works.com>
parents:
2818
diff
changeset
|
395 extras = json.loads(env['RHODECODE_EXTRAS']) |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
396 |
2870
cbf0775ff6b4
There's no need to use special env variable for config file, it's already passed in in extras now
Marcin Kuzminski <marcin@python-works.com>
parents:
2818
diff
changeset
|
397 path, ini_name = os.path.split(extras['config']) |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
398 conf = appconfig('config:%s' % ini_name, relative_to=path) |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
399 load_environment(conf.global_conf, conf.local_conf) |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
400 |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
401 engine = engine_from_config(conf, 'sqlalchemy.db1.') |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
402 init_model(engine) |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
403 |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
404 baseui = make_ui('db') |
2617
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
405 # fix if it's not a bare repo |
2872
17556a81ec6f
Make detecting bare Git repositories more robust
Stefan Engel <mail@engel-stefan.de>
parents:
2870
diff
changeset
|
406 if repo_path.endswith(os.sep + '.git'): |
17556a81ec6f
Make detecting bare Git repositories more robust
Stefan Engel <mail@engel-stefan.de>
parents:
2870
diff
changeset
|
407 repo_path = repo_path[:-5] |
2818
3d0bd5f71dab
raise na OSERROR if repository data sent from git hook to hook handler is somehow invalid
Marcin Kuzminski <marcin@python-works.com>
parents:
2750
diff
changeset
|
408 |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
409 repo = Repository.get_by_full_path(repo_path) |
2818
3d0bd5f71dab
raise na OSERROR if repository data sent from git hook to hook handler is somehow invalid
Marcin Kuzminski <marcin@python-works.com>
parents:
2750
diff
changeset
|
410 if not repo: |
3d0bd5f71dab
raise na OSERROR if repository data sent from git hook to hook handler is somehow invalid
Marcin Kuzminski <marcin@python-works.com>
parents:
2750
diff
changeset
|
411 raise OSError('Repository %s not found in database' |
3d0bd5f71dab
raise na OSERROR if repository data sent from git hook to hook handler is somehow invalid
Marcin Kuzminski <marcin@python-works.com>
parents:
2750
diff
changeset
|
412 % (safe_str(repo_path))) |
3d0bd5f71dab
raise na OSERROR if repository data sent from git hook to hook handler is somehow invalid
Marcin Kuzminski <marcin@python-works.com>
parents:
2750
diff
changeset
|
413 |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
414 _hooks = dict(baseui.configitems('hooks')) or {} |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
415 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
416 for k, v in extras.items(): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
417 baseui.setconfig('rhodecode_extras', k, v) |
3278
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3097
diff
changeset
|
418 if hook_type == 'pre': |
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3097
diff
changeset
|
419 repo = repo.scm_instance |
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3097
diff
changeset
|
420 else: |
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3097
diff
changeset
|
421 #post push shouldn't use the cached instance never |
3549
e4a4006faceb
no_cache version of scm is now a function
Marcin Kuzminski <marcin@python-works.com>
parents:
3522
diff
changeset
|
422 repo = repo.scm_instance_no_cache() |
3278
c2bf0fa7b3cb
git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents:
3097
diff
changeset
|
423 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
424 repo.ui = baseui |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
425 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
426 if hook_type == 'pre': |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
427 pre_push(baseui, repo) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
428 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
429 # if push hook is enabled via web interface |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2716
diff
changeset
|
430 elif hook_type == 'post' and _hooks.get(RhodeCodeUi.HOOK_PUSH): |
2617
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
431 |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
432 rev_data = [] |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
433 for l in revs: |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
434 old_rev, new_rev, ref = l.split(' ') |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
435 _ref_data = ref.split('/') |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
436 if _ref_data[1] in ['tags', 'heads']: |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
437 rev_data.append({'old_rev': old_rev, |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
438 'new_rev': new_rev, |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
439 'ref': ref, |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
440 'type': _ref_data[1], |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
441 'name': _ref_data[2].strip()}) |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
442 |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
443 git_revs = [] |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
444 for push_ref in rev_data: |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
445 _type = push_ref['type'] |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
446 if _type == 'heads': |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
447 if push_ref['old_rev'] == EmptyChangeset().raw_id: |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
448 cmd = "for-each-ref --format='%(refname)' 'refs/heads/*'" |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
449 heads = repo.run_git_command(cmd)[0] |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
450 heads = heads.replace(push_ref['ref'], '') |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
451 heads = ' '.join(map(lambda c: c.strip('\n').strip(), |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
452 heads.splitlines())) |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
453 cmd = (('log %(new_rev)s' % push_ref) + |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
454 ' --reverse --pretty=format:"%H" --not ' + heads) |
2998
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
455 git_revs += repo.run_git_command(cmd)[0].splitlines() |
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
456 |
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
457 elif push_ref['new_rev'] == EmptyChangeset().raw_id: |
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
458 #delete branch case |
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
459 git_revs += ['delete_branch=>%s' % push_ref['name']] |
2617
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
460 else: |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
461 cmd = (('log %(old_rev)s..%(new_rev)s' % push_ref) + |
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
462 ' --reverse --pretty=format:"%H"') |
2998
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
463 git_revs += repo.run_git_command(cmd)[0].splitlines() |
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
464 |
2617
c0ec29b20eb6
Fixed githooks for fetching multiple tags and branches.
Marcin Kuzminski <marcin@python-works.com>
parents:
2525
diff
changeset
|
465 elif _type == 'tags': |
2998
433428ffd13b
fixes #645 Fix git handler when doing delete remote branch
Marcin Kuzminski <marcin@python-works.com>
parents:
2963
diff
changeset
|
466 git_revs += ['tag=>%s' % push_ref['name']] |
2402
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
467 |
2eeb2ed72e55
Added handling of git hooks, extract pushed revisions and store them inside
Marcin Kuzminski <marcin@python-works.com>
parents:
2324
diff
changeset
|
468 log_push_action(baseui, repo, _git_revs=git_revs) |