Mercurial > kallithea
annotate rhodecode/model/scm.py @ 4086:4ec370789b3e
added larger buffers for example uwsgi setup
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 09 Jul 2013 19:48:42 +0200 |
parents | 008e460c5b9d |
children | a5888ca796b5 |
rev | line source |
---|---|
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
1 # -*- coding: utf-8 -*- |
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
2 """ |
811 | 3 rhodecode.model.scm |
4 ~~~~~~~~~~~~~~~~~~~ | |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
5 |
811 | 6 Scm model for RhodeCode |
7 | |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
8 :created_on: Apr 9, 2010 |
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
9 :author: marcink |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1810
diff
changeset
|
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
11 :license: GPLv3, see COPYING for more details. |
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
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:
1193
diff
changeset
|
17 # |
252
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
248
diff
changeset
|
18 # This program is distributed in the hope that it will be useful, |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
248
diff
changeset
|
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
248
diff
changeset
|
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
248
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:
1193
diff
changeset
|
22 # |
252
3782a6d698af
licensing updates, code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
248
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/>. |
2620
cd207411cf22
fixed python2.5 compat and repo mapper issue
Marcin Kuzminski <marcin@python-works.com>
parents:
2618
diff
changeset
|
25 from __future__ import with_statement |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
26 import os |
2618
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
27 import re |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
28 import time |
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
29 import traceback |
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
30 import logging |
1801
b6d23aa3754c
fixed problem with uploading files into rhodecode that wasn't detected as streams
Marcin Kuzminski <marcin@python-works.com>
parents:
1755
diff
changeset
|
31 import cStringIO |
2618
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
32 import pkg_resources |
3952 | 33 from os.path import join as jn |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
34 |
2354
f3417f0d54b5
fixed default sorting on main page with sorting using wrapped lower() call on database level
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
35 from sqlalchemy import func |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
36 from pylons.i18n.translation import _ |
2354
f3417f0d54b5
fixed default sorting on main page with sorting using wrapped lower() call on database level
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
37 |
2618
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
38 import rhodecode |
2007
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
39 from rhodecode.lib.vcs import get_backend |
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
40 from rhodecode.lib.vcs.exceptions import RepositoryError |
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
41 from rhodecode.lib.vcs.utils.lazy import LazyProperty |
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
42 from rhodecode.lib.vcs.nodes import FileNode |
2684
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
43 from rhodecode.lib.vcs.backends.base import EmptyChangeset |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
44 |
710
e2f3c8e6939d
Disable git support due to large problems with dulwich.
Marcin Kuzminski <marcin@python-works.com>
parents:
693
diff
changeset
|
45 from rhodecode import BACKENDS |
547
1e757ac98988
renamed project to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
535
diff
changeset
|
46 from rhodecode.lib import helpers as h |
3577
238486bb71ab
Switched handling of RhodeCode extra params in consistent way
Marcin Kuzminski <marcin@python-works.com>
parents:
3481
diff
changeset
|
47 from rhodecode.lib.utils2 import safe_str, safe_unicode, get_server_url,\ |
238486bb71ab
Switched handling of RhodeCode extra params in consistent way
Marcin Kuzminski <marcin@python-works.com>
parents:
3481
diff
changeset
|
48 _set_extras |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
49 from rhodecode.lib.auth import HasRepoPermissionAny, HasReposGroupPermissionAny,\ |
3952 | 50 HasUserGroupPermissionAny |
3228
ba2e2514a01a
reposcann should skip directories with starting with '.'
Marcin Kuzminski <marcin@python-works.com>
parents:
3222
diff
changeset
|
51 from rhodecode.lib.utils import get_filesystem_repos, make_ui, \ |
3952 | 52 action_logger |
752
89b9037d68b7
fixed Example celery config to ampq,
Marcin Kuzminski <marcin@python-works.com>
parents:
747
diff
changeset
|
53 from rhodecode.model import BaseModel |
758 | 54 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \ |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
55 UserFollowing, UserLog, User, RepoGroup, PullRequest |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
56 from rhodecode.lib.hooks import log_push_action |
4070
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
57 from rhodecode.lib.exceptions import NonRelativePathError, IMCCommitError |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
58 |
245
a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
222
diff
changeset
|
59 log = logging.getLogger(__name__) |
a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
222
diff
changeset
|
60 |
757
c52e88b57bf4
rolled back to make transient since got some exceptions on expunge
Marcin Kuzminski <marcin@python-works.com>
parents:
753
diff
changeset
|
61 |
735
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
62 class UserTemp(object): |
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
63 def __init__(self, user_id): |
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
64 self.user_id = user_id |
901
765c2125e4d9
Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
65 |
765c2125e4d9
Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
66 def __repr__(self): |
765c2125e4d9
Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
67 return "<%s('id:%s')>" % (self.__class__.__name__, self.user_id) |
765c2125e4d9
Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
68 |
1213
68e34f5cf122
#150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
69 |
735
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
70 class RepoTemp(object): |
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
71 def __init__(self, repo_id): |
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
72 self.repo_id = repo_id |
747
2f89beda06a1
Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents:
735
diff
changeset
|
73 |
901
765c2125e4d9
Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
74 def __repr__(self): |
765c2125e4d9
Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
75 return "<%s('id:%s')>" % (self.__class__.__name__, self.repo_id) |
765c2125e4d9
Fixed repo of Temp user and repo for better logging
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
76 |
1801
b6d23aa3754c
fixed problem with uploading files into rhodecode that wasn't detected as streams
Marcin Kuzminski <marcin@python-works.com>
parents:
1755
diff
changeset
|
77 |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
78 class CachedRepoList(object): |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
79 """ |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
80 Cached repo list, uses in-memory cache after initialization, that is |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
81 super fast |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
82 """ |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
83 |
3222
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
84 def __init__(self, db_repo_list, repos_path, order_by=None, perm_set=None): |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
85 self.db_repo_list = db_repo_list |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
86 self.repos_path = repos_path |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
87 self.order_by = order_by |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
88 self.reversed = (order_by or '').startswith('-') |
3222
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
89 if not perm_set: |
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
90 perm_set = ['repository.read', 'repository.write', |
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
91 'repository.admin'] |
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
92 self.perm_set = perm_set |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
93 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
94 def __len__(self): |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
95 return len(self.db_repo_list) |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
96 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
97 def __repr__(self): |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
98 return '<%s (%s)>' % (self.__class__.__name__, self.__len__()) |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
99 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
100 def __iter__(self): |
3772
910ad1ffee99
invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents:
3759
diff
changeset
|
101 # pre-propagated valid_cache_keys to save executing select statements |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2209
diff
changeset
|
102 # for each repo |
3772
910ad1ffee99
invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents:
3759
diff
changeset
|
103 valid_cache_keys = CacheInvalidation.get_valid_cache_keys() |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2209
diff
changeset
|
104 |
1428
e5467730682b
fixed some issues with cache invalidation, and simplified invalidation codes
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
105 for dbr in self.db_repo_list: |
3772
910ad1ffee99
invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents:
3759
diff
changeset
|
106 scmr = dbr.scm_instance_cached(valid_cache_keys) |
1437
7a46d67c263c
added welcome message if no repositories are present in current view
Marcin Kuzminski <marcin@python-works.com>
parents:
1428
diff
changeset
|
107 # check permission at this level |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
108 if not HasRepoPermissionAny( |
3717 | 109 *self.perm_set)(dbr.repo_name, 'get repo check'): |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
110 continue |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
111 |
3360
85f69bf84d95
non-lightweight dashboard mode is now more error proof when it stumbles across bad or damaged repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3234
diff
changeset
|
112 try: |
85f69bf84d95
non-lightweight dashboard mode is now more error proof when it stumbles across bad or damaged repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3234
diff
changeset
|
113 last_change = scmr.last_change |
85f69bf84d95
non-lightweight dashboard mode is now more error proof when it stumbles across bad or damaged repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3234
diff
changeset
|
114 tip = h.get_changeset_safe(scmr, 'tip') |
85f69bf84d95
non-lightweight dashboard mode is now more error proof when it stumbles across bad or damaged repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3234
diff
changeset
|
115 except Exception: |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
116 log.error( |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
117 '%s this repository is present in database but it ' |
3360
85f69bf84d95
non-lightweight dashboard mode is now more error proof when it stumbles across bad or damaged repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3234
diff
changeset
|
118 'cannot be created as an scm instance, org_exc:%s' |
85f69bf84d95
non-lightweight dashboard mode is now more error proof when it stumbles across bad or damaged repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
3234
diff
changeset
|
119 % (dbr.repo_name, traceback.format_exc()) |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
120 ) |
1373
66f03a87141c
Fixes issue #201
Marcin Kuzminski <marcin@python-works.com>
parents:
1370
diff
changeset
|
121 continue |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
122 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
123 tmp_d = {} |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
124 tmp_d['name'] = dbr.repo_name |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
125 tmp_d['name_sort'] = tmp_d['name'].lower() |
2936
62e493c7f436
Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
126 tmp_d['raw_name'] = tmp_d['name'].lower() |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
127 tmp_d['description'] = dbr.description |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
128 tmp_d['description_sort'] = tmp_d['description'].lower() |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
129 tmp_d['last_change'] = last_change |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
130 tmp_d['last_change_sort'] = time.mktime(last_change.timetuple()) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
131 tmp_d['tip'] = tip.raw_id |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
132 tmp_d['tip_sort'] = tip.revision |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
133 tmp_d['rev'] = tip.revision |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
134 tmp_d['contact'] = dbr.user.full_contact |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
135 tmp_d['contact_sort'] = tmp_d['contact'] |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
136 tmp_d['owner_sort'] = tmp_d['contact'] |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
137 tmp_d['repo_archives'] = list(scmr._get_archives()) |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
138 tmp_d['last_msg'] = tip.message |
1459
6691d4097344
added author to main page tooltip
Marcin Kuzminski <marcin@python-works.com>
parents:
1437
diff
changeset
|
139 tmp_d['author'] = tip.author |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
140 tmp_d['dbrepo'] = dbr.get_dict() |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1722
diff
changeset
|
141 tmp_d['dbrepo_fork'] = dbr.fork.get_dict() if dbr.fork else {} |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
142 yield tmp_d |
1213
68e34f5cf122
#150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
143 |
1801
b6d23aa3754c
fixed problem with uploading files into rhodecode that wasn't detected as streams
Marcin Kuzminski <marcin@python-works.com>
parents:
1755
diff
changeset
|
144 |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
145 class SimpleCachedRepoList(CachedRepoList): |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
146 """ |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
147 Lighter version of CachedRepoList without the scm initialisation |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
148 """ |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
149 |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
150 def __iter__(self): |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
151 for dbr in self.db_repo_list: |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
152 # check permission at this level |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
153 if not HasRepoPermissionAny( |
3717 | 154 *self.perm_set)(dbr.repo_name, 'get repo check'): |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
155 continue |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
156 |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
157 tmp_d = {} |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
158 tmp_d['name'] = dbr.repo_name |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
159 tmp_d['name_sort'] = tmp_d['name'].lower() |
2936
62e493c7f436
Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
160 tmp_d['raw_name'] = tmp_d['name'].lower() |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
161 tmp_d['description'] = dbr.description |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
162 tmp_d['description_sort'] = tmp_d['description'].lower() |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
163 tmp_d['dbrepo'] = dbr.get_dict() |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
164 tmp_d['dbrepo_fork'] = dbr.fork.get_dict() if dbr.fork else {} |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
165 yield tmp_d |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
166 |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
167 |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
168 class _PermCheckIterator(object): |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
169 def __init__(self, obj_list, obj_attr, perm_set, perm_checker): |
3222
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
170 """ |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
171 Creates iterator from given list of objects, additionally |
3222
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
172 checking permission for them from perm_set var |
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
173 |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
174 :param obj_list: list of db objects |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
175 :param obj_attr: attribute of object to pass into perm_checker |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
176 :param perm_set: list of permissions to check |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
177 :param perm_checker: callable to check permissions against |
3222
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
178 """ |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
179 self.obj_list = obj_list |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
180 self.obj_attr = obj_attr |
3222
b4daef4cc26d
Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents:
3152
diff
changeset
|
181 self.perm_set = perm_set |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
182 self.perm_checker = perm_checker |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
183 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
184 def __len__(self): |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
185 return len(self.obj_list) |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
186 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
187 def __repr__(self): |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
188 return '<%s (%s)>' % (self.__class__.__name__, self.__len__()) |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
189 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
190 def __iter__(self): |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
191 for db_obj in self.obj_list: |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
192 # check permission at this level |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
193 name = getattr(db_obj, self.obj_attr, None) |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
194 if not self.perm_checker(*self.perm_set)(name, self.__class__.__name__): |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
195 continue |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
196 |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
197 yield db_obj |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
198 |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
199 |
3864
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
200 class RepoList(_PermCheckIterator): |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
201 |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
202 def __init__(self, db_repo_list, perm_set=None): |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
203 if not perm_set: |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
204 perm_set = ['repository.read', 'repository.write', 'repository.admin'] |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
205 |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
206 super(RepoList, self).__init__(obj_list=db_repo_list, |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
207 obj_attr='repo_name', perm_set=perm_set, |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
208 perm_checker=HasRepoPermissionAny) |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
209 |
1aefa8d864e4
Do read only checks on attach as fork of repo list.
Marcin Kuzminski <marcin@python-works.com>
parents:
3840
diff
changeset
|
210 |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
211 class RepoGroupList(_PermCheckIterator): |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
212 |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
213 def __init__(self, db_repo_group_list, perm_set=None): |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
214 if not perm_set: |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
215 perm_set = ['group.read', 'group.write', 'group.admin'] |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
216 |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
217 super(RepoGroupList, self).__init__(obj_list=db_repo_group_list, |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
218 obj_attr='group_name', perm_set=perm_set, |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
219 perm_checker=HasReposGroupPermissionAny) |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
220 |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
221 |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
222 class UserGroupList(_PermCheckIterator): |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
223 |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
224 def __init__(self, db_user_group_list, perm_set=None): |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
225 if not perm_set: |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
226 perm_set = ['usergroup.read', 'usergroup.write', 'usergroup.admin'] |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
227 |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
228 super(UserGroupList, self).__init__(obj_list=db_user_group_list, |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
229 obj_attr='users_group_name', perm_set=perm_set, |
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
230 perm_checker=HasUserGroupPermissionAny) |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
231 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
232 |
752
89b9037d68b7
fixed Example celery config to ampq,
Marcin Kuzminski <marcin@python-works.com>
parents:
747
diff
changeset
|
233 class ScmModel(BaseModel): |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
234 """ |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
235 Generic Scm Model |
58
8fb1abd4178a
Added hg model,implemented removal of repos, added HgModel for fetching repos(with generator)
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
236 """ |
8fb1abd4178a
Added hg model,implemented removal of repos, added HgModel for fetching repos(with generator)
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
237 |
1755
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
238 def __get_repo(self, instance): |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
239 cls = Repository |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
240 if isinstance(instance, cls): |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
241 return instance |
2672
169807710db2
fixed possible unicode errors on repo get function
Marcin Kuzminski <marcin@python-works.com>
parents:
2655
diff
changeset
|
242 elif isinstance(instance, int) or safe_str(instance).isdigit(): |
1755
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
243 return cls.get(instance) |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
244 elif isinstance(instance, basestring): |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
245 return cls.get_by_repo_name(instance) |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
246 elif instance: |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
247 raise Exception('given object must be int, basestr or Instance' |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
248 ' of %s got %s' % (type(cls), type(instance))) |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
249 |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
250 @LazyProperty |
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
251 def repos_path(self): |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
252 """ |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
253 Get's the repositories root path from database |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
254 """ |
811 | 255 |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
256 q = self.sa.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == '/').one() |
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
257 |
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
258 return q.ui_value |
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
259 |
1038
5554aa9c2480
another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents:
1033
diff
changeset
|
260 def repo_scan(self, repos_path=None): |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
261 """ |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
262 Listing of repositories in given path. This path should not be a |
245
a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
222
diff
changeset
|
263 repository itself. Return a dictionary of repository objects |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1193
diff
changeset
|
264 |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
629
diff
changeset
|
265 :param repos_path: path to directory containing repositories |
245
a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
222
diff
changeset
|
266 """ |
811 | 267 |
1038
5554aa9c2480
another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents:
1033
diff
changeset
|
268 if repos_path is None: |
5554aa9c2480
another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents:
1033
diff
changeset
|
269 repos_path = self.repos_path |
5554aa9c2480
another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents:
1033
diff
changeset
|
270 |
1925
9d400b585c24
fixes issue #341, logger outputed invalid path name
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
271 log.info('scanning for repositories in %s' % repos_path) |
9d400b585c24
fixes issue #341, logger outputed invalid path name
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
272 |
1038
5554aa9c2480
another major code rafactor, reimplemented (almost from scratch)
Marcin Kuzminski <marcin@python-works.com>
parents:
1033
diff
changeset
|
273 baseui = make_ui('db') |
1751
47c2a006d43b
Summary page downloads limited to zip.
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
274 repos = {} |
690
4685f3eafd35
Fixed sumamry page description bug
Marcin Kuzminski <marcin@python-works.com>
parents:
665
diff
changeset
|
275 |
877
bc9a73adc216
Added recursive scanning for repositories in directory
Marcin Kuzminski <marcin@python-works.com>
parents:
851
diff
changeset
|
276 for name, path in get_filesystem_repos(repos_path, recursive=True): |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
277 # name need to be decomposed and put back together using the / |
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
278 # since this is internal storage separator for rhodecode |
3152
46234d2d388f
fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents:
3150
diff
changeset
|
279 name = Repository.normalize_repo_name(name) |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
280 |
245
a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
222
diff
changeset
|
281 try: |
1751
47c2a006d43b
Summary page downloads limited to zip.
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
282 if name in repos: |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
283 raise RepositoryError('Duplicate repository name %s ' |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
284 'found in %s' % (name, path)) |
248
fb7f066126cc
Added support for repository located in subdirectories.
Marcin Kuzminski <marcin@python-works.com>
parents:
245
diff
changeset
|
285 else: |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
286 |
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
287 klass = get_backend(path[0]) |
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
288 |
710
e2f3c8e6939d
Disable git support due to large problems with dulwich.
Marcin Kuzminski <marcin@python-works.com>
parents:
693
diff
changeset
|
289 if path[0] == 'hg' and path[0] in BACKENDS.keys(): |
1753
1d1ccb873d00
moved soon-to-be-deleted code from vcs to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
1751
diff
changeset
|
290 repos[name] = klass(safe_str(path[1]), baseui=baseui) |
629
7e536d1af60d
Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents:
569
diff
changeset
|
291 |
710
e2f3c8e6939d
Disable git support due to large problems with dulwich.
Marcin Kuzminski <marcin@python-works.com>
parents:
693
diff
changeset
|
292 if path[0] == 'git' and path[0] in BACKENDS.keys(): |
1751
47c2a006d43b
Summary page downloads limited to zip.
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
293 repos[name] = klass(path[1]) |
245
a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
222
diff
changeset
|
294 except OSError: |
a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
222
diff
changeset
|
295 continue |
3228
ba2e2514a01a
reposcann should skip directories with starting with '.'
Marcin Kuzminski <marcin@python-works.com>
parents:
3222
diff
changeset
|
296 log.debug('found %s paths with repositories' % (len(repos))) |
1751
47c2a006d43b
Summary page downloads limited to zip.
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
297 return repos |
629
7e536d1af60d
Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents:
569
diff
changeset
|
298 |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
299 def get_repos(self, all_repos=None, sort_key=None, simple=False): |
1343
a04fe5986109
#47 implemented basic gui for browsing repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
300 """ |
a04fe5986109
#47 implemented basic gui for browsing repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
301 Get all repos from db and for each repo create it's |
1213
68e34f5cf122
#150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
302 backend instance and fill that backed with information from database |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1193
diff
changeset
|
303 |
1343
a04fe5986109
#47 implemented basic gui for browsing repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
304 :param all_repos: list of repository names as strings |
a04fe5986109
#47 implemented basic gui for browsing repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
305 give specific repositories list, good for filtering |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
306 |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
307 :param sort_key: initial sorting of repos |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
308 :param simple: use SimpleCachedList - one without the SCM info |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
309 """ |
767
632b0761e617
bugfix, when user had no repos he would see all repos in my account, (correct commit)
Marcin Kuzminski <marcin@python-works.com>
parents:
758
diff
changeset
|
310 if all_repos is None: |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
311 all_repos = self.sa.query(Repository)\ |
1343
a04fe5986109
#47 implemented basic gui for browsing repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1312
diff
changeset
|
312 .filter(Repository.group_id == None)\ |
2354
f3417f0d54b5
fixed default sorting on main page with sorting using wrapped lower() call on database level
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
313 .order_by(func.lower(Repository.repo_name)).all() |
2604
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
314 if simple: |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
315 repo_iter = SimpleCachedRepoList(all_repos, |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
316 repos_path=self.repos_path, |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
317 order_by=sort_key) |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
318 else: |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
319 repo_iter = CachedRepoList(all_repos, |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
320 repos_path=self.repos_path, |
dfa5180cf02f
Use simplified cached repos list for quick repo switcher, in some cases it can have 2-3x speed-up since it doesn't need to init the scms
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
321 order_by=sort_key) |
665
070f32743632
Moved out reposcan into hg Model.
Marcin Kuzminski <marcin@python-works.com>
parents:
636
diff
changeset
|
322 |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
323 return repo_iter |
629
7e536d1af60d
Code refactoring,models renames
Marcin Kuzminski <marcin@python-works.com>
parents:
569
diff
changeset
|
324 |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
325 def get_repos_groups(self, all_groups=None): |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
326 if all_groups is None: |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
327 all_groups = RepoGroup.query()\ |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
328 .filter(RepoGroup.group_parent_id == None).all() |
3714
7e3d89d9d3a2
- Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents:
3685
diff
changeset
|
329 return [x for x in RepoGroupList(all_groups)] |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1925
diff
changeset
|
330 |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
331 def mark_for_invalidation(self, repo_name): |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
332 """ |
3682
cf65b2c1b69d
invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents:
3631
diff
changeset
|
333 Mark caches of this repo invalid in the database. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1193
diff
changeset
|
334 |
3682
cf65b2c1b69d
invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents:
3631
diff
changeset
|
335 :param repo_name: the repo for which caches should be marked invalid |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
336 """ |
3759
12ca667b69b6
api: don't report invalidated cache_keys after invalidating a repo
Mads Kiilerich <madski@unity3d.com>
parents:
3717
diff
changeset
|
337 CacheInvalidation.set_invalidate(repo_name) |
3150
80abc924a38c
always update changeset cache after invalidation signal
Marcin Kuzminski <marcin@python-works.com>
parents:
3090
diff
changeset
|
338 repo = Repository.get_by_repo_name(repo_name) |
80abc924a38c
always update changeset cache after invalidation signal
Marcin Kuzminski <marcin@python-works.com>
parents:
3090
diff
changeset
|
339 if repo: |
80abc924a38c
always update changeset cache after invalidation signal
Marcin Kuzminski <marcin@python-works.com>
parents:
3090
diff
changeset
|
340 repo.update_changeset_cache() |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
341 |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
342 def toggle_following_repo(self, follow_repo_id, user_id): |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
343 |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
344 f = self.sa.query(UserFollowing)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
345 .filter(UserFollowing.follows_repo_id == follow_repo_id)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
346 .filter(UserFollowing.user_id == user_id).scalar() |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
347 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
348 if f is not None: |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
349 try: |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
350 self.sa.delete(f) |
735
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
351 action_logger(UserTemp(user_id), |
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
352 'stopped_following_repo', |
747
2f89beda06a1
Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents:
735
diff
changeset
|
353 RepoTemp(follow_repo_id)) |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
354 return |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3589
diff
changeset
|
355 except Exception: |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
356 log.error(traceback.format_exc()) |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
357 raise |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
358 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
359 try: |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
360 f = UserFollowing() |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
361 f.user_id = user_id |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
362 f.follows_repo_id = follow_repo_id |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
363 self.sa.add(f) |
1722
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
364 |
735
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
365 action_logger(UserTemp(user_id), |
dbec976d9975
added action loggers to following repositories,
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
366 'started_following_repo', |
747
2f89beda06a1
Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents:
735
diff
changeset
|
367 RepoTemp(follow_repo_id)) |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3589
diff
changeset
|
368 except Exception: |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
369 log.error(traceback.format_exc()) |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
370 raise |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
371 |
1213
68e34f5cf122
#150 fixes for errors on repositories mapped in db but corrupted in filesystem
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
372 def toggle_following_user(self, follow_user_id, user_id): |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
373 f = self.sa.query(UserFollowing)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
374 .filter(UserFollowing.follows_user_id == follow_user_id)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
375 .filter(UserFollowing.user_id == user_id).scalar() |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
376 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
377 if f is not None: |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
378 try: |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
379 self.sa.delete(f) |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
380 return |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3589
diff
changeset
|
381 except Exception: |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
382 log.error(traceback.format_exc()) |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
383 raise |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
384 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
385 try: |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
386 f = UserFollowing() |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
387 f.user_id = user_id |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
388 f.follows_user_id = follow_user_id |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
389 self.sa.add(f) |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3589
diff
changeset
|
390 except Exception: |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
391 log.error(traceback.format_exc()) |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
392 raise |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
393 |
999
1951c35483ab
fixed following js snipet. It' can be called multiple times now next to each repository
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
394 def is_following_repo(self, repo_name, user_id, cache=False): |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
395 r = self.sa.query(Repository)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
396 .filter(Repository.repo_name == repo_name).scalar() |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
397 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
398 f = self.sa.query(UserFollowing)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
399 .filter(UserFollowing.follows_repository == r)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
400 .filter(UserFollowing.user_id == user_id).scalar() |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
401 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
402 return f is not None |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
403 |
999
1951c35483ab
fixed following js snipet. It' can be called multiple times now next to each repository
Marcin Kuzminski <marcin@python-works.com>
parents:
902
diff
changeset
|
404 def is_following_user(self, username, user_id, cache=False): |
1530
04027bdb876c
Refactoring of model get functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1508
diff
changeset
|
405 u = User.get_by_username(username) |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
406 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
407 f = self.sa.query(UserFollowing)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
408 .filter(UserFollowing.follows_user == u)\ |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
409 .filter(UserFollowing.user_id == user_id).scalar() |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
410 |
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
726
diff
changeset
|
411 return f is not None |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
412 |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
413 def get_followers(self, repo): |
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
414 repo = self._get_repo(repo) |
1282
faaadfc3c359
fixed condition evaluated for gitrepo that returned null, simplified scm functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1265
diff
changeset
|
415 |
faaadfc3c359
fixed condition evaluated for gitrepo that returned null, simplified scm functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1265
diff
changeset
|
416 return self.sa.query(UserFollowing)\ |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
417 .filter(UserFollowing.follows_repository == repo).count() |
747
2f89beda06a1
Added icons with numbers of followers and number of forks
Marcin Kuzminski <marcin@python-works.com>
parents:
735
diff
changeset
|
418 |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
419 def get_forks(self, repo): |
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
420 repo = self._get_repo(repo) |
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
421 return self.sa.query(Repository)\ |
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
422 .filter(Repository.fork == repo).count() |
1282
faaadfc3c359
fixed condition evaluated for gitrepo that returned null, simplified scm functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1265
diff
changeset
|
423 |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
424 def get_pull_requests(self, repo): |
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
425 repo = self._get_repo(repo) |
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
426 return self.sa.query(PullRequest)\ |
3580
7b9d4f6bb04e
show only open pull requests in the counter, and use repo context bar in pull requests view
Marcin Kuzminski <marcin@python-works.com>
parents:
3577
diff
changeset
|
427 .filter(PullRequest.other_repo == repo)\ |
7b9d4f6bb04e
show only open pull requests in the counter, and use repo context bar in pull requests view
Marcin Kuzminski <marcin@python-works.com>
parents:
3577
diff
changeset
|
428 .filter(PullRequest.status != PullRequest.STATUS_CLOSED).count() |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
691
diff
changeset
|
429 |
1755
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
430 def mark_as_fork(self, repo, fork, user): |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
431 repo = self.__get_repo(repo) |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
432 fork = self.__get_repo(fork) |
2629
d2901d906ef3
Fixed issue #501 error on setting set_as_fork to same repo
Marcin Kuzminski <marcin@python-works.com>
parents:
2620
diff
changeset
|
433 if fork and repo.repo_id == fork.repo_id: |
d2901d906ef3
Fixed issue #501 error on setting set_as_fork to same repo
Marcin Kuzminski <marcin@python-works.com>
parents:
2620
diff
changeset
|
434 raise Exception("Cannot set repository as fork of itself") |
1755
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
435 repo.fork = fork |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
436 self.sa.add(repo) |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
437 return repo |
1088ded6e602
implements #239 manual marking of repos as forks for admins
Marcin Kuzminski <marcin@python-works.com>
parents:
1753
diff
changeset
|
438 |
3878
7d29355db6f4
fixes #834 hooks error on remote pulling
Marcin Kuzminski <marcin@python-works.com>
parents:
3864
diff
changeset
|
439 def _handle_rc_scm_extras(self, username, repo_name, repo_alias, |
7d29355db6f4
fixes #834 hooks error on remote pulling
Marcin Kuzminski <marcin@python-works.com>
parents:
3864
diff
changeset
|
440 action=None): |
3826
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
441 from rhodecode import CONFIG |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
442 from rhodecode.lib.base import _get_ip_addr |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
443 try: |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
444 from pylons import request |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
445 environ = request.environ |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
446 except TypeError: |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
447 # we might use this outside of request context, let's fake the |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
448 # environ data |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
449 from webob import Request |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
450 environ = Request.blank('').environ |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
451 extras = { |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
452 'ip': _get_ip_addr(environ), |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
453 'username': username, |
3878
7d29355db6f4
fixes #834 hooks error on remote pulling
Marcin Kuzminski <marcin@python-works.com>
parents:
3864
diff
changeset
|
454 'action': action or 'push_local', |
3826
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
455 'repository': repo_name, |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
456 'scm': repo_alias, |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
457 'config': CONFIG['__file__'], |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
458 'server_url': get_server_url(environ), |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
459 'make_lock': None, |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
460 'locked_by': [None, None] |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
461 } |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
462 _set_extras(extras) |
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
463 |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
464 def _handle_push(self, repo, username, action, repo_name, revisions): |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
465 """ |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
466 Triggers push action hooks |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
467 |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
468 :param repo: SCM repo |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
469 :param username: username who pushes |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
470 :param action: push/push_loca/push_remote |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
471 :param repo_name: name of repo |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
472 :param revisions: list of revisions that we pushed |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
473 """ |
3826
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
474 self._handle_rc_scm_extras(username, repo_name, repo_alias=repo.alias) |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
475 _scm_repo = repo._repo |
3826
00e2c162d8bc
move out setting rc_extras for in-memory-push handlers to separate function
Marcin Kuzminski <marcin@python-works.com>
parents:
3772
diff
changeset
|
476 # trigger push hook |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
477 if repo.alias == 'hg': |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
478 log_push_action(_scm_repo.ui, _scm_repo, node=revisions[0]) |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
479 elif repo.alias == 'git': |
3589
35454cd8233b
kill depracated .ui objects on git repos
Marcin Kuzminski <marcin@python-works.com>
parents:
3580
diff
changeset
|
480 log_push_action(None, _scm_repo, _git_revs=revisions) |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
481 |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
482 def _get_IMC_module(self, scm_type): |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
483 """ |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
484 Returns InMemoryCommit class based on scm_type |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
485 |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
486 :param scm_type: |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
487 """ |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
488 if scm_type == 'hg': |
3952 | 489 from rhodecode.lib.vcs.backends.hg import MercurialInMemoryChangeset |
490 return MercurialInMemoryChangeset | |
491 | |
492 if scm_type == 'git': | |
493 from rhodecode.lib.vcs.backends.git import GitInMemoryChangeset | |
494 return GitInMemoryChangeset | |
495 | |
496 raise Exception('Invalid scm_type, must be one of hg,git got %s' | |
497 % (scm_type,)) | |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
498 |
2514
9b734e9530c2
fixed pull method repo lookup
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
499 def pull_changes(self, repo, username): |
9b734e9530c2
fixed pull method repo lookup
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
500 dbrepo = self.__get_repo(repo) |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1485
diff
changeset
|
501 clone_uri = dbrepo.clone_uri |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1485
diff
changeset
|
502 if not clone_uri: |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1485
diff
changeset
|
503 raise Exception("This repository doesn't have a clone uri") |
1530
04027bdb876c
Refactoring of model get functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1508
diff
changeset
|
504 |
1370
ef9a30e22ea6
Fixed remote pull command from todays code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1366
diff
changeset
|
505 repo = dbrepo.scm_instance |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
506 repo_name = dbrepo.repo_name |
1114
4de3fa6290a7
#109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents:
1045
diff
changeset
|
507 try: |
2383
e576410f911d
Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents:
2354
diff
changeset
|
508 if repo.alias == 'git': |
e576410f911d
Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents:
2354
diff
changeset
|
509 repo.fetch(clone_uri) |
3880
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
510 # git doesn't really have something like post-fetch action |
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
511 # we fake that now. #TODO: extract fetched revisions somehow |
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
512 # here |
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
513 self._handle_push(repo, |
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
514 username=username, |
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
515 action='push_remote', |
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
516 repo_name=repo_name, |
a228a33d868e
Fake post-push actions when doing git fetch. It's still want show
Marcin Kuzminski <marcin@python-works.com>
parents:
3878
diff
changeset
|
517 revisions=[]) |
2383
e576410f911d
Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents:
2354
diff
changeset
|
518 else: |
3878
7d29355db6f4
fixes #834 hooks error on remote pulling
Marcin Kuzminski <marcin@python-works.com>
parents:
3864
diff
changeset
|
519 self._handle_rc_scm_extras(username, dbrepo.repo_name, |
7d29355db6f4
fixes #834 hooks error on remote pulling
Marcin Kuzminski <marcin@python-works.com>
parents:
3864
diff
changeset
|
520 repo.alias, action='push_remote') |
2383
e576410f911d
Don't do git pull on remote repos since they are bare now, we need to use git fetch on them
Marcin Kuzminski <marcin@python-works.com>
parents:
2354
diff
changeset
|
521 repo.pull(clone_uri) |
3878
7d29355db6f4
fixes #834 hooks error on remote pulling
Marcin Kuzminski <marcin@python-works.com>
parents:
3864
diff
changeset
|
522 |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
523 self.mark_for_invalidation(repo_name) |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3589
diff
changeset
|
524 except Exception: |
1114
4de3fa6290a7
#109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents:
1045
diff
changeset
|
525 log.error(traceback.format_exc()) |
4de3fa6290a7
#109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents:
1045
diff
changeset
|
526 raise |
4de3fa6290a7
#109, added manual pull of changes for repositories that have remote location filled in.
Marcin Kuzminski <marcin@python-works.com>
parents:
1045
diff
changeset
|
527 |
1722
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
528 def commit_change(self, repo, repo_name, cs, user, author, message, |
e7eef7a1db6a
#235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
529 content, f_path): |
2684
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
530 """ |
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
531 Commits changes |
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
532 |
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
533 :param repo: SCM instance |
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
534 |
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
535 """ |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
536 user = self._get_user(user) |
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
537 IMC = self._get_IMC_module(repo.alias) |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1282
diff
changeset
|
538 |
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1282
diff
changeset
|
539 # decoding here will force that we have proper encoded values |
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1282
diff
changeset
|
540 # in any other case this will throw exceptions and deny commit |
1401
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1380
diff
changeset
|
541 content = safe_str(content) |
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1380
diff
changeset
|
542 path = safe_str(f_path) |
2199
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2147
diff
changeset
|
543 # message and author needs to be unicode |
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2147
diff
changeset
|
544 # proper backend should then translate that into required type |
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2147
diff
changeset
|
545 message = safe_unicode(message) |
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2147
diff
changeset
|
546 author = safe_unicode(author) |
3836
14a6e9ffd9c8
fixed issue with web-editor that didn't preserve executable bit
Marcin Kuzminski <marcin@python-works.com>
parents:
3826
diff
changeset
|
547 imc = IMC(repo) |
14a6e9ffd9c8
fixed issue with web-editor that didn't preserve executable bit
Marcin Kuzminski <marcin@python-works.com>
parents:
3826
diff
changeset
|
548 imc.change(FileNode(path, content, mode=cs.get_file_mode(f_path))) |
4070
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
549 try: |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
550 tip = imc.commit(message=message, author=author, |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
551 parents=[cs], branch=cs.branch) |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
552 except Exception, e: |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
553 log.error(traceback.format_exc()) |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
554 raise IMCCommitError(str(e)) |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
555 finally: |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
556 # always clear caches, if commit fails we want fresh object also |
008e460c5b9d
fixes issue #860.
Marcin Kuzminski <marcin@python-works.com>
parents:
3980
diff
changeset
|
557 self.mark_for_invalidation(repo_name) |
3478
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
558 self._handle_push(repo, |
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
559 username=user.username, |
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
560 action='push_local', |
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
561 repo_name=repo_name, |
796738bb697c
webinterface file commiting executes push hooks ref #594
Marcin Kuzminski <marcin@python-works.com>
parents:
3418
diff
changeset
|
562 revisions=[tip.raw_id]) |
2684
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
563 return tip |
1311
6705eeebc41b
moved out commit into scm model, and added cache invalidation after commit.
Marcin Kuzminski <marcin@python-works.com>
parents:
1282
diff
changeset
|
564 |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
565 def create_nodes(self, user, repo, message, nodes, parent_cs=None, |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
566 author=None, trigger_push_hook=True): |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
567 """ |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
568 Commits given multiple nodes into repo |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
569 |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
570 :param user: RhodeCode User object or user_id, the commiter |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
571 :param repo: RhodeCode Repository object |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
572 :param message: commit message |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
573 :param nodes: mapping {filename:{'content':content},...} |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
574 :param parent_cs: parent changeset, can be empty than it's initial commit |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
575 :param author: author of commit, cna be different that commiter only for git |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
576 :param trigger_push_hook: trigger push hooks |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
577 |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
578 :returns: new commited changeset |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
579 """ |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
580 |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
581 user = self._get_user(user) |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
582 scm_instance = repo.scm_instance_no_cache() |
3481
c9214877d43e
If commit operation is used out of pylons request scope use blank request instead
Marcin Kuzminski <marcin@python-works.com>
parents:
3478
diff
changeset
|
583 |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
584 processed_nodes = [] |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
585 for f_path in nodes: |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
586 if f_path.startswith('/') or f_path.startswith('.') or '../' in f_path: |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
587 raise NonRelativePathError('%s is not an relative path' % f_path) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
588 if f_path: |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
589 f_path = os.path.normpath(f_path) |
3912
91f440a11b94
fixes issues #849 IMC failed for non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
3880
diff
changeset
|
590 content = nodes[f_path]['content'] |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
591 f_path = safe_str(f_path) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
592 # decoding here will force that we have proper encoded values |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
593 # in any other case this will throw exceptions and deny commit |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
594 if isinstance(content, (basestring,)): |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
595 content = safe_str(content) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
596 elif isinstance(content, (file, cStringIO.OutputType,)): |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
597 content = content.read() |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
598 else: |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
599 raise Exception('Content is of unrecognized type %s' % ( |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
600 type(content) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
601 )) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
602 processed_nodes.append((f_path, content)) |
1530
04027bdb876c
Refactoring of model get functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1508
diff
changeset
|
603 |
2199
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2147
diff
changeset
|
604 message = safe_unicode(message) |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
605 commiter = user.full_contact |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
606 author = safe_unicode(author) if author else commiter |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1459
diff
changeset
|
607 |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
608 IMC = self._get_IMC_module(scm_instance.alias) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
609 imc = IMC(scm_instance) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
610 |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
611 if not parent_cs: |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
612 parent_cs = EmptyChangeset(alias=scm_instance.alias) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
613 |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
614 if isinstance(parent_cs, EmptyChangeset): |
2199
31ebf7010566
various fixes for git and mercurial with InMemoryCommit backend and non-ascii files
Marcin Kuzminski <marcin@python-works.com>
parents:
2147
diff
changeset
|
615 # EmptyChangeset means we we're editing empty repository |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1459
diff
changeset
|
616 parents = None |
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1459
diff
changeset
|
617 else: |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
618 parents = [parent_cs] |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
619 # add multiple nodes |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
620 for path, content in processed_nodes: |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
621 imc.add(FileNode(path, content=content)) |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1459
diff
changeset
|
622 |
3840
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
623 tip = imc.commit(message=message, |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
624 author=author, |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
625 parents=parents, |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
626 branch=parent_cs.branch) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
627 |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
628 self.mark_for_invalidation(repo.repo_name) |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
629 if trigger_push_hook: |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
630 self._handle_push(scm_instance, |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
631 username=user.username, |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
632 action='push_local', |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
633 repo_name=repo.repo_name, |
dc4644865e8b
Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents:
3836
diff
changeset
|
634 revisions=[tip.raw_id]) |
2684
2b6939a77052
Bumped mercurial version to 2.3
Marcin Kuzminski <marcin@python-works.com>
parents:
2672
diff
changeset
|
635 return tip |
1483
7b67b0dcad6d
Added initial support for creating new nodes in repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1459
diff
changeset
|
636 |
1810
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
637 def get_nodes(self, repo_name, revision, root_path='/', flat=True): |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
638 """ |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
639 recursive walk in root dir and return a set of all path in that dir |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
640 based on repository walk function |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
641 |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
642 :param repo_name: name of repository |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
643 :param revision: revision for which to list nodes |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
644 :param root_path: root path to list |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
645 :param flat: return as a list, if False returns a dict with decription |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
646 |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
647 """ |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
648 _files = list() |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
649 _dirs = list() |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
650 try: |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
651 _repo = self.__get_repo(repo_name) |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
652 changeset = _repo.scm_instance.get_changeset(revision) |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
653 root_path = root_path.lstrip('/') |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
654 for topnode, dirs, files in changeset.walk(root_path): |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
655 for f in files: |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
656 _files.append(f.path if flat else {"name": f.path, |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
657 "type": "file"}) |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
658 for d in dirs: |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
659 _dirs.append(d.path if flat else {"name": d.path, |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
660 "type": "dir"}) |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
661 except RepositoryError: |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
662 log.debug(traceback.format_exc()) |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
663 raise |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
664 |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
665 return _dirs, _files |
203af05539e0
implements #330 api method for listing nodes at particular revision
Marcin Kuzminski <marcin@python-works.com>
parents:
1801
diff
changeset
|
666 |
784
30d3161c6683
Implemented fancier top menu for logged and anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents:
767
diff
changeset
|
667 def get_unread_journal(self): |
30d3161c6683
Implemented fancier top menu for logged and anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents:
767
diff
changeset
|
668 return self.sa.query(UserLog).count() |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
669 |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
670 def get_repo_landing_revs(self, repo=None): |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
671 """ |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
672 Generates select option with tags branches and bookmarks (for hg only) |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
673 grouped by type |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
674 |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
675 :param repo: |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
676 """ |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
677 |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
678 hist_l = [] |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
679 choices = [] |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
680 repo = self.__get_repo(repo) |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
681 hist_l.append(['tip', _('latest tip')]) |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
682 choices.append('tip') |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
683 if not repo: |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
684 return choices, hist_l |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
685 |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
686 repo = repo.scm_instance |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
687 |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
688 branches_group = ([(k, k) for k, v in |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
689 repo.branches.iteritems()], _("Branches")) |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
690 hist_l.append(branches_group) |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
691 choices.extend([x[0] for x in branches_group[0]]) |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
692 |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
693 if repo.alias == 'hg': |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
694 bookmarks_group = ([(k, k) for k, v in |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
695 repo.bookmarks.iteritems()], _("Bookmarks")) |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
696 hist_l.append(bookmarks_group) |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
697 choices.extend([x[0] for x in bookmarks_group[0]]) |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
698 |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
699 tags_group = ([(k, k) for k, v in |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
700 repo.tags.iteritems()], _("Tags")) |
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
701 hist_l.append(tags_group) |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
702 choices.extend([x[0] for x in tags_group[0]]) |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2383
diff
changeset
|
703 |
2460
12fa0c19c42f
validating choices for landing_rev
Marcin Kuzminski <marcin@python-works.com>
parents:
2459
diff
changeset
|
704 return choices, hist_l |
2618
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
705 |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
706 def install_git_hook(self, repo, force_create=False): |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
707 """ |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
708 Creates a rhodecode hook inside a git repository |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
709 |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
710 :param repo: Instance of VCS repo |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
711 :param force_create: Create even if same name hook exists |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
712 """ |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
713 |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
714 loc = jn(repo.path, 'hooks') |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
715 if not repo.bare: |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
716 loc = jn(repo.path, '.git', 'hooks') |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
717 if not os.path.isdir(loc): |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
718 os.makedirs(loc) |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
719 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
720 tmpl_post = pkg_resources.resource_string( |
2618
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
721 'rhodecode', jn('config', 'post_receive_tmpl.py') |
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
722 ) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
723 tmpl_pre = pkg_resources.resource_string( |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
724 'rhodecode', jn('config', 'pre_receive_tmpl.py') |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
725 ) |
2618
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
726 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
727 for h_type, tmpl in [('pre', tmpl_pre), ('post', tmpl_post)]: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
728 _hook_file = jn(loc, '%s-receive' % h_type) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
729 _rhodecode_hook = False |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
730 log.debug('Installing git hook in repo %s' % repo) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
731 if os.path.exists(_hook_file): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
732 # let's take a look at this hook, maybe it's rhodecode ? |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
733 log.debug('hook exists, checking if it is from rhodecode') |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
734 with open(_hook_file, 'rb') as f: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
735 data = f.read() |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
736 matches = re.compile(r'(?:%s)\s*=\s*(.*)' |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
737 % 'RC_HOOK_VER').search(data) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
738 if matches: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
739 try: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
740 ver = matches.groups()[0] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
741 log.debug('got %s it is rhodecode' % (ver)) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
742 _rhodecode_hook = True |
3631
10b4e34841a4
Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents:
3589
diff
changeset
|
743 except Exception: |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
744 log.error(traceback.format_exc()) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
745 else: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
746 # there is no hook in this dir, so we want to create one |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
747 _rhodecode_hook = True |
2618
e1370dcb9908
Created install_git_hook more verbose version of previos code.
Marcin Kuzminski <marcin@python-works.com>
parents:
2604
diff
changeset
|
748 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
749 if _rhodecode_hook or force_create: |
3952 | 750 log.debug('writing %s hook file !' % (h_type,)) |
3980
3648a2b2e17a
accept that repos are read-only - very convenient for testing.
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
751 try: |
3648a2b2e17a
accept that repos are read-only - very convenient for testing.
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
752 with open(_hook_file, 'wb') as f: |
3648a2b2e17a
accept that repos are read-only - very convenient for testing.
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
753 tmpl = tmpl.replace('_TMPL_', rhodecode.__version__) |
3648a2b2e17a
accept that repos are read-only - very convenient for testing.
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
754 f.write(tmpl) |
3648a2b2e17a
accept that repos are read-only - very convenient for testing.
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
755 os.chmod(_hook_file, 0755) |
3648a2b2e17a
accept that repos are read-only - very convenient for testing.
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
756 except IOError, e: |
3648a2b2e17a
accept that repos are read-only - very convenient for testing.
Marcin Kuzminski <marcin@python-works.com>
parents:
3960
diff
changeset
|
757 log.error('error writing %s: %s' % (_hook_file, e)) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
758 else: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2684
diff
changeset
|
759 log.debug('skipping writing hook file') |