##// END OF EJS Templates
backported update_repo API method from rhodecode-pam
marcink -
r3959:e1a0fdae beta
parent child Browse files
Show More
@@ -35,12 +35,12 b' from rhodecode.lib.auth import PasswordG'
35 35 HasPermissionAnyApi, HasRepoPermissionAnyApi
36 36 from rhodecode.lib.utils import map_groups, repo2db_mapper
37 37 from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_int
38 from rhodecode.lib import helpers as h
39 38 from rhodecode.model.meta import Session
40 39 from rhodecode.model.scm import ScmModel
41 40 from rhodecode.model.repo import RepoModel
42 41 from rhodecode.model.user import UserModel
43 42 from rhodecode.model.users_group import UserGroupModel
43 from rhodecode.model.repos_group import ReposGroupModel
44 44 from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap,\
45 45 Permission, User, Gist
46 46 from rhodecode.lib.compat import json
@@ -50,6 +50,15 b' from rhodecode.model.gist import GistMod'
50 50 log = logging.getLogger(__name__)
51 51
52 52
53 def store_update(updates, attr, name):
54 """
55 Stores param in updates dict if it's not instance of Optional
56 allows easy updates of passed in params
57 """
58 if not isinstance(attr, Optional):
59 updates[name] = attr
60
61
53 62 class OptionalAttr(object):
54 63 """
55 64 Special Optional Option that defines other attribute
@@ -124,6 +133,19 b' def get_repo_or_error(repoid):'
124 133 return repo
125 134
126 135
136 def get_repo_group_or_error(repogroupid):
137 """
138 Get repo group by id or name or return JsonRPCError if not found
139
140 :param repogroupid:
141 """
142 repo_group = ReposGroupModel()._get_repo_group(repogroupid)
143 if repo_group is None:
144 raise JSONRPCError(
145 'repository group `%s` does not exist' % (repogroupid,))
146 return repo_group
147
148
127 149 def get_users_group_or_error(usersgroupid):
128 150 """
129 151 Get user group by id or name or return JsonRPCError if not found
@@ -829,6 +851,71 b' class ApiController(JSONRPCController):'
829 851 log.error(traceback.format_exc())
830 852 raise JSONRPCError('failed to create repository `%s`' % repo_name)
831 853
854 # permission check inside
855 def update_repo(self, apiuser, repoid, name=Optional(None),
856 owner=Optional(OAttr('apiuser')),
857 group=Optional(None),
858 description=Optional(''), private=Optional(False),
859 clone_uri=Optional(None), landing_rev=Optional('tip'),
860 enable_statistics=Optional(False),
861 enable_locking=Optional(False),
862 enable_downloads=Optional(False)):
863
864 """
865 Updates repo
866
867 :param apiuser: filled automatically from apikey
868 :type apiuser: AuthUser
869 :param repoid: repository name or repository id
870 :type repoid: str or int
871 :param name:
872 :param owner:
873 :param group:
874 :param description:
875 :param private:
876 :param clone_uri:
877 :param landing_rev:
878 :param enable_statistics:
879 :param enable_locking:
880 :param enable_downloads:
881 """
882 repo = get_repo_or_error(repoid)
883 if not HasPermissionAnyApi('hg.admin')(user=apiuser):
884 # check if we have admin permission for this repo !
885 if not HasRepoPermissionAnyApi('repository.admin')(user=apiuser,
886 repo_name=repo.repo_name):
887 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
888
889 updates = {
890 # update function requires this.
891 'repo_name': repo.repo_name
892 }
893 repo_group = group
894 if not isinstance(repo_group, Optional):
895 repo_group = get_repo_group_or_error(repo_group)
896 repo_group = repo_group.group_id
897 try:
898 store_update(updates, name, 'repo_name')
899 store_update(updates, repo_group, 'repo_group')
900 store_update(updates, owner, 'user')
901 store_update(updates, description, 'repo_description')
902 store_update(updates, private, 'repo_private')
903 store_update(updates, clone_uri, 'clone_uri')
904 store_update(updates, landing_rev, 'repo_landing_rev')
905 store_update(updates, enable_statistics, 'repo_enable_statistics')
906 store_update(updates, enable_locking, 'repo_enable_locking')
907 store_update(updates, enable_downloads, 'repo_enable_downloads')
908
909 RepoModel().update(repo, **updates)
910 Session().commit()
911 return dict(
912 msg='updated repo ID:%s %s' % (repo.repo_id, repo.repo_name),
913 repository=repo.get_api_data()
914 )
915 except Exception:
916 log.error(traceback.format_exc())
917 raise JSONRPCError('failed to update repo `%s`' % repoid)
918
832 919 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
833 920 def fork_repo(self, apiuser, repoid, fork_name, owner=Optional(OAttr('apiuser')),
834 921 description=Optional(''), copy_permissions=Optional(False),
General Comments 0
You need to be logged in to leave comments. Login now