Show More
@@ -21,6 +21,7 b' class CeleryConfig(object):' | |||||
21 | imports = [ |
|
21 | imports = [ | |
22 | 'kallithea.lib.indexers.daemon', |
|
22 | 'kallithea.lib.indexers.daemon', | |
23 | 'kallithea.model.async_tasks', |
|
23 | 'kallithea.model.async_tasks', | |
|
24 | 'kallithea.model.repo', | |||
24 | ] |
|
25 | ] | |
25 | task_always_eager = False |
|
26 | task_always_eager = False | |
26 |
|
27 |
@@ -40,10 +40,10 b' import celery.utils.log' | |||||
40 | from tg import config |
|
40 | from tg import config | |
41 |
|
41 | |||
42 | import kallithea |
|
42 | import kallithea | |
43 |
from kallithea.lib import celerylib, conf, ext_json |
|
43 | from kallithea.lib import celerylib, conf, ext_json | |
44 | from kallithea.lib.utils2 import asbool, ascii_bytes |
|
44 | from kallithea.lib.utils2 import asbool, ascii_bytes | |
45 | from kallithea.lib.vcs.utils import author_email, author_name |
|
45 | from kallithea.lib.vcs.utils import author_email, author_name | |
46 |
from kallithea.model import db, meta |
|
46 | from kallithea.model import db, meta | |
47 |
|
47 | |||
48 |
|
48 | |||
49 | __all__ = ['get_commits_stats', 'send_email'] |
|
49 | __all__ = ['get_commits_stats', 'send_email'] | |
@@ -333,150 +333,6 b' def send_email(recipients, subject, body' | |||||
333 | log.error(traceback.format_exc()) |
|
333 | log.error(traceback.format_exc()) | |
334 |
|
334 | |||
335 |
|
335 | |||
336 | @celerylib.task |
|
|||
337 | def create_repo(form_data, cur_user): |
|
|||
338 | cur_user = db.User.guess_instance(cur_user) |
|
|||
339 |
|
||||
340 | owner = cur_user |
|
|||
341 | repo_name = form_data['repo_name'] |
|
|||
342 | repo_name_full = form_data['repo_name_full'] |
|
|||
343 | repo_type = form_data['repo_type'] |
|
|||
344 | description = form_data['repo_description'] |
|
|||
345 | private = form_data['repo_private'] |
|
|||
346 | clone_uri = form_data.get('clone_uri') |
|
|||
347 | repo_group = form_data['repo_group'] |
|
|||
348 | landing_rev = form_data['repo_landing_rev'] |
|
|||
349 | copy_fork_permissions = form_data.get('copy_permissions') |
|
|||
350 | copy_group_permissions = form_data.get('repo_copy_permissions') |
|
|||
351 | fork_of = form_data.get('fork_parent_id') |
|
|||
352 | state = form_data.get('repo_state', db.Repository.STATE_PENDING) |
|
|||
353 |
|
||||
354 | # repo creation defaults, private and repo_type are filled in form |
|
|||
355 | defs = db.Setting.get_default_repo_settings(strip_prefix=True) |
|
|||
356 | enable_statistics = defs.get('repo_enable_statistics') |
|
|||
357 | enable_downloads = defs.get('repo_enable_downloads') |
|
|||
358 |
|
||||
359 | try: |
|
|||
360 | db_repo = repo.RepoModel()._create_repo( |
|
|||
361 | repo_name=repo_name_full, |
|
|||
362 | repo_type=repo_type, |
|
|||
363 | description=description, |
|
|||
364 | owner=owner, |
|
|||
365 | private=private, |
|
|||
366 | clone_uri=clone_uri, |
|
|||
367 | repo_group=repo_group, |
|
|||
368 | landing_rev=landing_rev, |
|
|||
369 | fork_of=fork_of, |
|
|||
370 | copy_fork_permissions=copy_fork_permissions, |
|
|||
371 | copy_group_permissions=copy_group_permissions, |
|
|||
372 | enable_statistics=enable_statistics, |
|
|||
373 | enable_downloads=enable_downloads, |
|
|||
374 | state=state |
|
|||
375 | ) |
|
|||
376 |
|
||||
377 | userlog.action_logger(cur_user, 'user_created_repo', |
|
|||
378 | form_data['repo_name_full'], '') |
|
|||
379 |
|
||||
380 | meta.Session().commit() |
|
|||
381 | # now create this repo on Filesystem |
|
|||
382 | repo.RepoModel()._create_filesystem_repo( |
|
|||
383 | repo_name=repo_name, |
|
|||
384 | repo_type=repo_type, |
|
|||
385 | repo_group=db.RepoGroup.guess_instance(repo_group), |
|
|||
386 | clone_uri=clone_uri, |
|
|||
387 | ) |
|
|||
388 | db_repo = db.Repository.get_by_repo_name(repo_name_full) |
|
|||
389 | hooks.log_create_repository(db_repo.get_dict(), created_by=owner.username) |
|
|||
390 |
|
||||
391 | # update repo changeset caches initially |
|
|||
392 | db_repo.update_changeset_cache() |
|
|||
393 |
|
||||
394 | # set new created state |
|
|||
395 | db_repo.set_state(db.Repository.STATE_CREATED) |
|
|||
396 | meta.Session().commit() |
|
|||
397 | except Exception as e: |
|
|||
398 | log.warning('Exception %s occurred when forking repository, ' |
|
|||
399 | 'doing cleanup...' % e) |
|
|||
400 | # rollback things manually ! |
|
|||
401 | db_repo = db.Repository.get_by_repo_name(repo_name_full) |
|
|||
402 | if db_repo: |
|
|||
403 | db.Repository.delete(db_repo.repo_id) |
|
|||
404 | meta.Session().commit() |
|
|||
405 | repo.RepoModel()._delete_filesystem_repo(db_repo) |
|
|||
406 | raise |
|
|||
407 |
|
||||
408 |
|
||||
409 | @celerylib.task |
|
|||
410 | def create_repo_fork(form_data, cur_user): |
|
|||
411 | """ |
|
|||
412 | Creates a fork of repository using interval VCS methods |
|
|||
413 |
|
||||
414 | :param form_data: |
|
|||
415 | :param cur_user: |
|
|||
416 | """ |
|
|||
417 | base_path = kallithea.CONFIG['base_path'] |
|
|||
418 | cur_user = db.User.guess_instance(cur_user) |
|
|||
419 |
|
||||
420 | repo_name = form_data['repo_name'] # fork in this case |
|
|||
421 | repo_name_full = form_data['repo_name_full'] |
|
|||
422 |
|
||||
423 | repo_type = form_data['repo_type'] |
|
|||
424 | owner = cur_user |
|
|||
425 | private = form_data['private'] |
|
|||
426 | clone_uri = form_data.get('clone_uri') |
|
|||
427 | repo_group = form_data['repo_group'] |
|
|||
428 | landing_rev = form_data['landing_rev'] |
|
|||
429 | copy_fork_permissions = form_data.get('copy_permissions') |
|
|||
430 |
|
||||
431 | try: |
|
|||
432 | fork_of = db.Repository.guess_instance(form_data.get('fork_parent_id')) |
|
|||
433 |
|
||||
434 | repo.RepoModel()._create_repo( |
|
|||
435 | repo_name=repo_name_full, |
|
|||
436 | repo_type=repo_type, |
|
|||
437 | description=form_data['description'], |
|
|||
438 | owner=owner, |
|
|||
439 | private=private, |
|
|||
440 | clone_uri=clone_uri, |
|
|||
441 | repo_group=repo_group, |
|
|||
442 | landing_rev=landing_rev, |
|
|||
443 | fork_of=fork_of, |
|
|||
444 | copy_fork_permissions=copy_fork_permissions |
|
|||
445 | ) |
|
|||
446 | userlog.action_logger(cur_user, 'user_forked_repo:%s' % repo_name_full, |
|
|||
447 | fork_of.repo_name, '') |
|
|||
448 | meta.Session().commit() |
|
|||
449 |
|
||||
450 | source_repo_path = os.path.join(base_path, fork_of.repo_name) |
|
|||
451 |
|
||||
452 | # now create this repo on Filesystem |
|
|||
453 | repo.RepoModel()._create_filesystem_repo( |
|
|||
454 | repo_name=repo_name, |
|
|||
455 | repo_type=repo_type, |
|
|||
456 | repo_group=db.RepoGroup.guess_instance(repo_group), |
|
|||
457 | clone_uri=source_repo_path, |
|
|||
458 | ) |
|
|||
459 | db_repo = db.Repository.get_by_repo_name(repo_name_full) |
|
|||
460 | hooks.log_create_repository(db_repo.get_dict(), created_by=owner.username) |
|
|||
461 |
|
||||
462 | # update repo changeset caches initially |
|
|||
463 | db_repo.update_changeset_cache() |
|
|||
464 |
|
||||
465 | # set new created state |
|
|||
466 | db_repo.set_state(db.Repository.STATE_CREATED) |
|
|||
467 | meta.Session().commit() |
|
|||
468 | except Exception as e: |
|
|||
469 | log.warning('Exception %s occurred when forking repository, ' |
|
|||
470 | 'doing cleanup...' % e) |
|
|||
471 | # rollback things manually ! |
|
|||
472 | db_repo = db.Repository.get_by_repo_name(repo_name_full) |
|
|||
473 | if db_repo: |
|
|||
474 | db.Repository.delete(db_repo.repo_id) |
|
|||
475 | meta.Session().commit() |
|
|||
476 | repo.RepoModel()._delete_filesystem_repo(db_repo) |
|
|||
477 | raise |
|
|||
478 |
|
||||
479 |
|
||||
480 | def __get_codes_stats(repo_name): |
|
336 | def __get_codes_stats(repo_name): | |
481 | scm_repo = db.Repository.get_by_repo_name(repo_name).scm_instance |
|
337 | scm_repo = db.Repository.get_by_repo_name(repo_name).scm_instance | |
482 |
|
338 |
@@ -33,13 +33,13 b' import traceback' | |||||
33 | from datetime import datetime |
|
33 | from datetime import datetime | |
34 |
|
34 | |||
35 | import kallithea.lib.utils2 |
|
35 | import kallithea.lib.utils2 | |
36 | from kallithea.lib import hooks, webutils |
|
36 | from kallithea.lib import celerylib, hooks, webutils | |
37 | from kallithea.lib.auth import HasRepoPermissionLevel, HasUserGroupPermissionLevel |
|
37 | from kallithea.lib.auth import HasRepoPermissionLevel, HasUserGroupPermissionLevel | |
38 | from kallithea.lib.exceptions import AttachedForksError |
|
38 | from kallithea.lib.exceptions import AttachedForksError | |
39 | from kallithea.lib.utils import is_valid_repo_uri, make_ui |
|
39 | from kallithea.lib.utils import is_valid_repo_uri, make_ui | |
40 | from kallithea.lib.utils2 import LazyProperty, get_current_authuser, obfuscate_url_pw, remove_prefix |
|
40 | from kallithea.lib.utils2 import LazyProperty, get_current_authuser, obfuscate_url_pw, remove_prefix | |
41 | from kallithea.lib.vcs.backends import get_backend |
|
41 | from kallithea.lib.vcs.backends import get_backend | |
42 | from kallithea.model import db, meta, scm |
|
42 | from kallithea.model import db, meta, scm, userlog | |
43 |
|
43 | |||
44 |
|
44 | |||
45 | log = logging.getLogger(__name__) |
|
45 | log = logging.getLogger(__name__) | |
@@ -404,8 +404,7 b' class RepoModel(object):' | |||||
404 | :param form_data: |
|
404 | :param form_data: | |
405 | :param cur_user: |
|
405 | :param cur_user: | |
406 | """ |
|
406 | """ | |
407 | from kallithea.model import async_tasks |
|
407 | return create_repo(form_data, cur_user) | |
408 | return async_tasks.create_repo(form_data, cur_user) |
|
|||
409 |
|
408 | |||
410 | def _update_permissions(self, repo, perms_new=None, perms_updates=None, |
|
409 | def _update_permissions(self, repo, perms_new=None, perms_updates=None, | |
411 | check_perms=True): |
|
410 | check_perms=True): | |
@@ -447,8 +446,7 b' class RepoModel(object):' | |||||
447 | :param form_data: |
|
446 | :param form_data: | |
448 | :param cur_user: |
|
447 | :param cur_user: | |
449 | """ |
|
448 | """ | |
450 | from kallithea.model import async_tasks |
|
449 | return create_repo_fork(form_data, cur_user) | |
451 | return async_tasks.create_repo_fork(form_data, cur_user) |
|
|||
452 |
|
450 | |||
453 | def delete(self, repo, forks=None, fs_remove=True, cur_user=None): |
|
451 | def delete(self, repo, forks=None, fs_remove=True, cur_user=None): | |
454 | """ |
|
452 | """ | |
@@ -695,3 +693,147 b' class RepoModel(object):' | |||||
695 | shutil.move(rm_path, os.path.join(self.repos_path, _d)) |
|
693 | shutil.move(rm_path, os.path.join(self.repos_path, _d)) | |
696 | else: |
|
694 | else: | |
697 | log.error("Can't find repo to delete in %r", rm_path) |
|
695 | log.error("Can't find repo to delete in %r", rm_path) | |
|
696 | ||||
|
697 | ||||
|
698 | @celerylib.task | |||
|
699 | def create_repo(form_data, cur_user): | |||
|
700 | cur_user = db.User.guess_instance(cur_user) | |||
|
701 | ||||
|
702 | owner = cur_user | |||
|
703 | repo_name = form_data['repo_name'] | |||
|
704 | repo_name_full = form_data['repo_name_full'] | |||
|
705 | repo_type = form_data['repo_type'] | |||
|
706 | description = form_data['repo_description'] | |||
|
707 | private = form_data['repo_private'] | |||
|
708 | clone_uri = form_data.get('clone_uri') | |||
|
709 | repo_group = form_data['repo_group'] | |||
|
710 | landing_rev = form_data['repo_landing_rev'] | |||
|
711 | copy_fork_permissions = form_data.get('copy_permissions') | |||
|
712 | copy_group_permissions = form_data.get('repo_copy_permissions') | |||
|
713 | fork_of = form_data.get('fork_parent_id') | |||
|
714 | state = form_data.get('repo_state', db.Repository.STATE_PENDING) | |||
|
715 | ||||
|
716 | # repo creation defaults, private and repo_type are filled in form | |||
|
717 | defs = db.Setting.get_default_repo_settings(strip_prefix=True) | |||
|
718 | enable_statistics = defs.get('repo_enable_statistics') | |||
|
719 | enable_downloads = defs.get('repo_enable_downloads') | |||
|
720 | ||||
|
721 | try: | |||
|
722 | db_repo = RepoModel()._create_repo( | |||
|
723 | repo_name=repo_name_full, | |||
|
724 | repo_type=repo_type, | |||
|
725 | description=description, | |||
|
726 | owner=owner, | |||
|
727 | private=private, | |||
|
728 | clone_uri=clone_uri, | |||
|
729 | repo_group=repo_group, | |||
|
730 | landing_rev=landing_rev, | |||
|
731 | fork_of=fork_of, | |||
|
732 | copy_fork_permissions=copy_fork_permissions, | |||
|
733 | copy_group_permissions=copy_group_permissions, | |||
|
734 | enable_statistics=enable_statistics, | |||
|
735 | enable_downloads=enable_downloads, | |||
|
736 | state=state | |||
|
737 | ) | |||
|
738 | ||||
|
739 | userlog.action_logger(cur_user, 'user_created_repo', | |||
|
740 | form_data['repo_name_full'], '') | |||
|
741 | ||||
|
742 | meta.Session().commit() | |||
|
743 | # now create this repo on Filesystem | |||
|
744 | RepoModel()._create_filesystem_repo( | |||
|
745 | repo_name=repo_name, | |||
|
746 | repo_type=repo_type, | |||
|
747 | repo_group=db.RepoGroup.guess_instance(repo_group), | |||
|
748 | clone_uri=clone_uri, | |||
|
749 | ) | |||
|
750 | db_repo = db.Repository.get_by_repo_name(repo_name_full) | |||
|
751 | hooks.log_create_repository(db_repo.get_dict(), created_by=owner.username) | |||
|
752 | ||||
|
753 | # update repo changeset caches initially | |||
|
754 | db_repo.update_changeset_cache() | |||
|
755 | ||||
|
756 | # set new created state | |||
|
757 | db_repo.set_state(db.Repository.STATE_CREATED) | |||
|
758 | meta.Session().commit() | |||
|
759 | except Exception as e: | |||
|
760 | log.warning('Exception %s occurred when forking repository, ' | |||
|
761 | 'doing cleanup...' % e) | |||
|
762 | # rollback things manually ! | |||
|
763 | db_repo = db.Repository.get_by_repo_name(repo_name_full) | |||
|
764 | if db_repo: | |||
|
765 | db.Repository.delete(db_repo.repo_id) | |||
|
766 | meta.Session().commit() | |||
|
767 | RepoModel()._delete_filesystem_repo(db_repo) | |||
|
768 | raise | |||
|
769 | ||||
|
770 | ||||
|
771 | @celerylib.task | |||
|
772 | def create_repo_fork(form_data, cur_user): | |||
|
773 | """ | |||
|
774 | Creates a fork of repository using interval VCS methods | |||
|
775 | ||||
|
776 | :param form_data: | |||
|
777 | :param cur_user: | |||
|
778 | """ | |||
|
779 | base_path = kallithea.CONFIG['base_path'] | |||
|
780 | cur_user = db.User.guess_instance(cur_user) | |||
|
781 | ||||
|
782 | repo_name = form_data['repo_name'] # fork in this case | |||
|
783 | repo_name_full = form_data['repo_name_full'] | |||
|
784 | ||||
|
785 | repo_type = form_data['repo_type'] | |||
|
786 | owner = cur_user | |||
|
787 | private = form_data['private'] | |||
|
788 | clone_uri = form_data.get('clone_uri') | |||
|
789 | repo_group = form_data['repo_group'] | |||
|
790 | landing_rev = form_data['landing_rev'] | |||
|
791 | copy_fork_permissions = form_data.get('copy_permissions') | |||
|
792 | ||||
|
793 | try: | |||
|
794 | fork_of = db.Repository.guess_instance(form_data.get('fork_parent_id')) | |||
|
795 | ||||
|
796 | RepoModel()._create_repo( | |||
|
797 | repo_name=repo_name_full, | |||
|
798 | repo_type=repo_type, | |||
|
799 | description=form_data['description'], | |||
|
800 | owner=owner, | |||
|
801 | private=private, | |||
|
802 | clone_uri=clone_uri, | |||
|
803 | repo_group=repo_group, | |||
|
804 | landing_rev=landing_rev, | |||
|
805 | fork_of=fork_of, | |||
|
806 | copy_fork_permissions=copy_fork_permissions | |||
|
807 | ) | |||
|
808 | userlog.action_logger(cur_user, 'user_forked_repo:%s' % repo_name_full, | |||
|
809 | fork_of.repo_name, '') | |||
|
810 | meta.Session().commit() | |||
|
811 | ||||
|
812 | source_repo_path = os.path.join(base_path, fork_of.repo_name) | |||
|
813 | ||||
|
814 | # now create this repo on Filesystem | |||
|
815 | RepoModel()._create_filesystem_repo( | |||
|
816 | repo_name=repo_name, | |||
|
817 | repo_type=repo_type, | |||
|
818 | repo_group=db.RepoGroup.guess_instance(repo_group), | |||
|
819 | clone_uri=source_repo_path, | |||
|
820 | ) | |||
|
821 | db_repo = db.Repository.get_by_repo_name(repo_name_full) | |||
|
822 | hooks.log_create_repository(db_repo.get_dict(), created_by=owner.username) | |||
|
823 | ||||
|
824 | # update repo changeset caches initially | |||
|
825 | db_repo.update_changeset_cache() | |||
|
826 | ||||
|
827 | # set new created state | |||
|
828 | db_repo.set_state(db.Repository.STATE_CREATED) | |||
|
829 | meta.Session().commit() | |||
|
830 | except Exception as e: | |||
|
831 | log.warning('Exception %s occurred when forking repository, ' | |||
|
832 | 'doing cleanup...' % e) | |||
|
833 | # rollback things manually ! | |||
|
834 | db_repo = db.Repository.get_by_repo_name(repo_name_full) | |||
|
835 | if db_repo: | |||
|
836 | db.Repository.delete(db_repo.repo_id) | |||
|
837 | meta.Session().commit() | |||
|
838 | RepoModel()._delete_filesystem_repo(db_repo) | |||
|
839 | raise |
@@ -158,7 +158,6 b' known_violations = set([' | |||||
158 | ('kallithea.lib.utils', 'kallithea.model'), # clean up utils |
|
158 | ('kallithea.lib.utils', 'kallithea.model'), # clean up utils | |
159 | ('kallithea.lib.utils', 'kallithea.model.db'), |
|
159 | ('kallithea.lib.utils', 'kallithea.model.db'), | |
160 | ('kallithea.lib.utils', 'kallithea.model.scm'), |
|
160 | ('kallithea.lib.utils', 'kallithea.model.scm'), | |
161 | ('kallithea.model.async_tasks', 'kallithea.lib.hooks'), |
|
|||
162 | ('kallithea.model.async_tasks', 'kallithea.model'), |
|
161 | ('kallithea.model.async_tasks', 'kallithea.model'), | |
163 | ('kallithea.model', 'kallithea.lib.auth'), # auth.HasXXX |
|
162 | ('kallithea.model', 'kallithea.lib.auth'), # auth.HasXXX | |
164 | ('kallithea.model', 'kallithea.lib.auth_modules'), # validators |
|
163 | ('kallithea.model', 'kallithea.lib.auth_modules'), # validators |
General Comments 0
You need to be logged in to leave comments.
Login now