Show More
@@ -319,6 +319,7 b' class DbManage(object):' | |||
|
319 | 319 | (RhodeCodeUi.HOOK_PRE_PUSH, 'python:vcsserver.hooks.pre_push'), |
|
320 | 320 | (RhodeCodeUi.HOOK_PRETX_PUSH, 'python:vcsserver.hooks.pre_push'), |
|
321 | 321 | (RhodeCodeUi.HOOK_PUSH, 'python:vcsserver.hooks.log_push_action'), |
|
322 | (RhodeCodeUi.HOOK_PUSH_KEY, 'python:vcsserver.hooks.key_push'), | |
|
322 | 323 | |
|
323 | 324 | ] |
|
324 | 325 |
@@ -232,8 +232,20 b' def post_push(extras):' | |||
|
232 | 232 | # 2xx Codes don't raise exceptions |
|
233 | 233 | output += _http_ret.title |
|
234 | 234 | |
|
235 | if extras.new_refs: | |
|
236 | tmpl = \ | |
|
237 | extras.server_url + '/' + \ | |
|
238 | extras.repository + \ | |
|
239 | "/pull-request/new?{ref_type}={ref_name}" | |
|
240 | for branch_name in extras.new_refs['branches']: | |
|
241 | output += 'RhodeCode: open pull request link: {}\n'.format( | |
|
242 | tmpl.format(ref_type='branch', ref_name=branch_name)) | |
|
243 | ||
|
244 | for book_name in extras.new_refs['bookmarks']: | |
|
245 | output += 'RhodeCode: open pull request link: {}\n'.format( | |
|
246 | tmpl.format(ref_type='bookmark', ref_name=book_name)) | |
|
247 | ||
|
235 | 248 | output += 'RhodeCode: push completed\n' |
|
236 | ||
|
237 | 249 | return HookResponse(0, output) |
|
238 | 250 | |
|
239 | 251 |
@@ -428,6 +428,7 b' def config_data_from_db(clear_session=Tr' | |||
|
428 | 428 | if 'push' not in enabled_hook_classes: |
|
429 | 429 | skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRE_PUSH)) |
|
430 | 430 | skip_entries.append(('hooks', RhodeCodeUi.HOOK_PRETX_PUSH)) |
|
431 | skip_entries.append(('hooks', RhodeCodeUi.HOOK_PUSH_KEY)) | |
|
431 | 432 | |
|
432 | 433 | config = [entry for entry in config if entry[:2] not in skip_entries] |
|
433 | 434 |
@@ -52,7 +52,8 b' class SettingsModel(BaseModel):' | |||
|
52 | 52 | BUILTIN_HOOKS = ( |
|
53 | 53 | RhodeCodeUi.HOOK_REPO_SIZE, RhodeCodeUi.HOOK_PUSH, |
|
54 | 54 | RhodeCodeUi.HOOK_PRE_PUSH, RhodeCodeUi.HOOK_PRETX_PUSH, |
|
55 |
RhodeCodeUi.HOOK_PULL, RhodeCodeUi.HOOK_PRE_PULL |
|
|
55 | RhodeCodeUi.HOOK_PULL, RhodeCodeUi.HOOK_PRE_PULL, | |
|
56 | RhodeCodeUi.HOOK_PUSH_KEY,) | |
|
56 | 57 | HOOKS_SECTION = 'hooks' |
|
57 | 58 | |
|
58 | 59 | def __init__(self, sa=None, repo=None): |
@@ -86,22 +86,24 b' HOOK_PUSH = db.RhodeCodeUi.HOOK_PUSH' | |||
|
86 | 86 | HOOK_PRE_PULL = db.RhodeCodeUi.HOOK_PRE_PULL |
|
87 | 87 | HOOK_PULL = db.RhodeCodeUi.HOOK_PULL |
|
88 | 88 | HOOK_REPO_SIZE = db.RhodeCodeUi.HOOK_REPO_SIZE |
|
89 | HOOK_PUSH_KEY = db.RhodeCodeUi.HOOK_PUSH_KEY | |
|
89 | 90 | |
|
90 | 91 | HG_HOOKS = frozenset( |
|
91 | 92 | (HOOK_PRE_PULL, HOOK_PULL, HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_PUSH, |
|
92 | HOOK_REPO_SIZE)) | |
|
93 | HOOK_REPO_SIZE, HOOK_PUSH_KEY)) | |
|
93 | 94 | |
|
94 | 95 | |
|
95 | 96 | @pytest.mark.parametrize('disabled_hooks,expected_hooks', [ |
|
96 | 97 | ([], HG_HOOKS), |
|
97 | 98 | (HG_HOOKS, []), |
|
98 | 99 | |
|
99 | ([HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_REPO_SIZE], [HOOK_PRE_PULL, HOOK_PULL, HOOK_PUSH]), | |
|
100 | ([HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_REPO_SIZE, HOOK_PUSH_KEY], [HOOK_PRE_PULL, HOOK_PULL, HOOK_PUSH]), | |
|
100 | 101 | |
|
101 | 102 | # When a pull/push hook is disabled, its pre-pull/push counterpart should |
|
102 | 103 | # be disabled too. |
|
103 | 104 | ([HOOK_PUSH], [HOOK_PRE_PULL, HOOK_PULL, HOOK_REPO_SIZE]), |
|
104 |
([HOOK_PULL], [HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_PUSH, HOOK_REPO_SIZE |
|
|
105 | ([HOOK_PULL], [HOOK_PRE_PUSH, HOOK_PRETX_PUSH, HOOK_PUSH, HOOK_REPO_SIZE, | |
|
106 | HOOK_PUSH_KEY]), | |
|
105 | 107 | ]) |
|
106 | 108 | def test_make_db_config_hg_hooks(pylonsapp, request, disabled_hooks, |
|
107 | 109 | expected_hooks): |
@@ -131,6 +131,13 b' def _check_proper_git_push(' | |||
|
131 | 131 | assert "Setting default branch" not in stderr |
|
132 | 132 | |
|
133 | 133 | |
|
134 | def _check_proper_hg_push(stdout, stderr, branch='default'): | |
|
135 | assert 'pushing to' in stdout | |
|
136 | assert 'searching for changes' in stdout | |
|
137 | ||
|
138 | assert 'abort:' not in stderr | |
|
139 | ||
|
140 | ||
|
134 | 141 | def _check_proper_clone(stdout, stderr, vcs): |
|
135 | 142 | if vcs == 'hg': |
|
136 | 143 | assert 'requesting all changes' in stdout |
@@ -84,6 +84,9 b' class RcWebServer(object):' | |||
|
84 | 84 | _url = 'http://%(user)s:%(passwd)s@%(host)s/%(cloned_repo)s' % params |
|
85 | 85 | return _url |
|
86 | 86 | |
|
87 | def host_url(self): | |
|
88 | return 'http://' + get_host_url(self.pylons_config) | |
|
89 | ||
|
87 | 90 | |
|
88 | 91 | @pytest.fixture(scope="module") |
|
89 | 92 | def rcextensions(request, pylonsapp, tmpdir_factory): |
@@ -34,6 +34,7 b' import time' | |||
|
34 | 34 | import pytest |
|
35 | 35 | |
|
36 | 36 | from rhodecode.lib.vcs.backends.git.repository import GitRepository |
|
37 | from rhodecode.lib.vcs.backends.hg.repository import MercurialRepository | |
|
37 | 38 | from rhodecode.lib.vcs.nodes import FileNode |
|
38 | 39 | from rhodecode.model.auth_token import AuthTokenModel |
|
39 | 40 | from rhodecode.model.db import Repository, UserIpMap, CacheKey |
@@ -42,7 +43,8 b' from rhodecode.model.user import UserMod' | |||
|
42 | 43 | from rhodecode.tests import (GIT_REPO, HG_REPO, TEST_USER_ADMIN_LOGIN) |
|
43 | 44 | |
|
44 | 45 | from rhodecode.tests.other.vcs_operations import ( |
|
45 |
Command, _check_proper_clone, _check_proper_git_push, |
|
|
46 | Command, _check_proper_clone, _check_proper_git_push, | |
|
47 | _check_proper_hg_push, _add_files_and_push, | |
|
46 | 48 | HG_REPO_WITH_GROUP, GIT_REPO_WITH_GROUP) |
|
47 | 49 | |
|
48 | 50 | |
@@ -396,7 +398,6 b' class TestVCSOperations(object):' | |||
|
396 | 398 | 'hg clone', clone_url, tmpdir.strpath) |
|
397 | 399 | assert 'abort: authorization failed' in stderr |
|
398 | 400 | |
|
399 | ||
|
400 | 401 | def test_clone_by_auth_token_with_scope( |
|
401 | 402 | self, rc_web_server, tmpdir, user_util, enable_auth_plugins): |
|
402 | 403 | enable_auth_plugins(['egg:rhodecode-enterprise-ce#token', |
@@ -479,3 +480,176 b' def test_git_fetches_from_remote_reposit' | |||
|
479 | 480 | source_repo = backend_git['annotated-tag'] |
|
480 | 481 | target_vcs_repo = backend_git.create_repo().scm_instance() |
|
481 | 482 | target_vcs_repo.fetch(rc_web_server.repo_clone_url(source_repo.repo_name)) |
|
483 | ||
|
484 | ||
|
485 | def test_git_push_shows_pull_request_refs(backend_git, rc_web_server, tmpdir): | |
|
486 | """ | |
|
487 | test if remote info about refs is visible | |
|
488 | """ | |
|
489 | empty_repo = backend_git.create_repo() | |
|
490 | ||
|
491 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) | |
|
492 | ||
|
493 | cmd = Command(tmpdir.strpath) | |
|
494 | cmd.execute('git clone', clone_url) | |
|
495 | ||
|
496 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
497 | repo.in_memory_commit.add(FileNode('readme.md', content='## Hello')) | |
|
498 | repo.in_memory_commit.commit( | |
|
499 | message='Commit on branch Master', | |
|
500 | author='Automatic test', | |
|
501 | branch='master') | |
|
502 | ||
|
503 | repo_cmd = Command(repo.path) | |
|
504 | stdout, stderr = repo_cmd.execute('git push --verbose origin master') | |
|
505 | _check_proper_git_push(stdout, stderr, branch='master') | |
|
506 | ||
|
507 | ref = '{}/{}/pull-request/new?branch=master'.format( | |
|
508 | rc_web_server.host_url(), empty_repo.repo_name) | |
|
509 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr | |
|
510 | assert 'remote: RhodeCode: push completed' in stderr | |
|
511 | ||
|
512 | # push on the same branch | |
|
513 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
514 | repo.in_memory_commit.add(FileNode('setup.py', content='print\n')) | |
|
515 | repo.in_memory_commit.commit( | |
|
516 | message='Commit2 on branch Master', | |
|
517 | author='Automatic test2', | |
|
518 | branch='master') | |
|
519 | ||
|
520 | repo_cmd = Command(repo.path) | |
|
521 | stdout, stderr = repo_cmd.execute('git push --verbose origin master') | |
|
522 | _check_proper_git_push(stdout, stderr, branch='master') | |
|
523 | ||
|
524 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr | |
|
525 | assert 'remote: RhodeCode: push completed' in stderr | |
|
526 | ||
|
527 | # new Branch | |
|
528 | repo = GitRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
529 | repo.in_memory_commit.add(FileNode('feature1.py', content='## Hello world')) | |
|
530 | repo.in_memory_commit.commit( | |
|
531 | message='Commit on branch feature', | |
|
532 | author='Automatic test', | |
|
533 | branch='feature') | |
|
534 | ||
|
535 | repo_cmd = Command(repo.path) | |
|
536 | stdout, stderr = repo_cmd.execute('git push --verbose origin feature') | |
|
537 | _check_proper_git_push(stdout, stderr, branch='feature') | |
|
538 | ||
|
539 | ref = '{}/{}/pull-request/new?branch=feature'.format( | |
|
540 | rc_web_server.host_url(), empty_repo.repo_name) | |
|
541 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stderr | |
|
542 | assert 'remote: RhodeCode: push completed' in stderr | |
|
543 | ||
|
544 | ||
|
545 | def test_hg_push_shows_pull_request_refs(backend_hg, rc_web_server, tmpdir): | |
|
546 | empty_repo = backend_hg.create_repo() | |
|
547 | ||
|
548 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) | |
|
549 | ||
|
550 | cmd = Command(tmpdir.strpath) | |
|
551 | cmd.execute('hg clone', clone_url) | |
|
552 | ||
|
553 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
554 | repo.in_memory_commit.add(FileNode(u'readme.md', content=u'## Hello')) | |
|
555 | repo.in_memory_commit.commit( | |
|
556 | message=u'Commit on branch default', | |
|
557 | author=u'Automatic test', | |
|
558 | branch='default') | |
|
559 | ||
|
560 | repo_cmd = Command(repo.path) | |
|
561 | repo_cmd.execute('hg checkout default') | |
|
562 | ||
|
563 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) | |
|
564 | _check_proper_hg_push(stdout, stderr, branch='default') | |
|
565 | ||
|
566 | ref = '{}/{}/pull-request/new?branch=default'.format( | |
|
567 | rc_web_server.host_url(), empty_repo.repo_name) | |
|
568 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |
|
569 | assert 'remote: RhodeCode: push completed' in stdout | |
|
570 | ||
|
571 | # push on the same branch | |
|
572 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
573 | repo.in_memory_commit.add(FileNode(u'setup.py', content=u'print\n')) | |
|
574 | repo.in_memory_commit.commit( | |
|
575 | message=u'Commit2 on branch default', | |
|
576 | author=u'Automatic test2', | |
|
577 | branch=u'default') | |
|
578 | ||
|
579 | repo_cmd = Command(repo.path) | |
|
580 | repo_cmd.execute('hg checkout default') | |
|
581 | ||
|
582 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) | |
|
583 | _check_proper_hg_push(stdout, stderr, branch='default') | |
|
584 | ||
|
585 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |
|
586 | assert 'remote: RhodeCode: push completed' in stdout | |
|
587 | ||
|
588 | # new Branch | |
|
589 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
590 | repo.in_memory_commit.add(FileNode(u'feature1.py', content=u'## Hello world')) | |
|
591 | repo.in_memory_commit.commit( | |
|
592 | message=u'Commit on branch feature', | |
|
593 | author=u'Automatic test', | |
|
594 | branch=u'feature') | |
|
595 | ||
|
596 | repo_cmd = Command(repo.path) | |
|
597 | repo_cmd.execute('hg checkout feature') | |
|
598 | ||
|
599 | stdout, stderr = repo_cmd.execute('hg push --new-branch --verbose', clone_url) | |
|
600 | _check_proper_hg_push(stdout, stderr, branch='feature') | |
|
601 | ||
|
602 | ref = '{}/{}/pull-request/new?branch=feature'.format( | |
|
603 | rc_web_server.host_url(), empty_repo.repo_name) | |
|
604 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |
|
605 | assert 'remote: RhodeCode: push completed' in stdout | |
|
606 | ||
|
607 | ||
|
608 | def test_hg_push_shows_pull_request_refs_book(backend_hg, rc_web_server, tmpdir): | |
|
609 | empty_repo = backend_hg.create_repo() | |
|
610 | ||
|
611 | clone_url = rc_web_server.repo_clone_url(empty_repo.repo_name) | |
|
612 | ||
|
613 | cmd = Command(tmpdir.strpath) | |
|
614 | cmd.execute('hg clone', clone_url) | |
|
615 | ||
|
616 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
617 | repo.in_memory_commit.add(FileNode(u'readme.md', content=u'## Hello')) | |
|
618 | repo.in_memory_commit.commit( | |
|
619 | message=u'Commit on branch default', | |
|
620 | author=u'Automatic test', | |
|
621 | branch='default') | |
|
622 | ||
|
623 | repo_cmd = Command(repo.path) | |
|
624 | repo_cmd.execute('hg checkout default') | |
|
625 | ||
|
626 | stdout, stderr = repo_cmd.execute('hg push --verbose', clone_url) | |
|
627 | _check_proper_hg_push(stdout, stderr, branch='default') | |
|
628 | ||
|
629 | ref = '{}/{}/pull-request/new?branch=default'.format( | |
|
630 | rc_web_server.host_url(), empty_repo.repo_name) | |
|
631 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |
|
632 | assert 'remote: RhodeCode: push completed' in stdout | |
|
633 | ||
|
634 | # add bookmark | |
|
635 | repo = MercurialRepository(os.path.join(tmpdir.strpath, empty_repo.repo_name)) | |
|
636 | repo.in_memory_commit.add(FileNode(u'setup.py', content=u'print\n')) | |
|
637 | repo.in_memory_commit.commit( | |
|
638 | message=u'Commit2 on branch default', | |
|
639 | author=u'Automatic test2', | |
|
640 | branch=u'default') | |
|
641 | ||
|
642 | repo_cmd = Command(repo.path) | |
|
643 | repo_cmd.execute('hg checkout default') | |
|
644 | repo_cmd.execute('hg bookmark feature2') | |
|
645 | stdout, stderr = repo_cmd.execute('hg push -B feature2 --verbose', clone_url) | |
|
646 | _check_proper_hg_push(stdout, stderr, branch='default') | |
|
647 | ||
|
648 | ref = '{}/{}/pull-request/new?branch=default'.format( | |
|
649 | rc_web_server.host_url(), empty_repo.repo_name) | |
|
650 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |
|
651 | ref = '{}/{}/pull-request/new?bookmark=feature2'.format( | |
|
652 | rc_web_server.host_url(), empty_repo.repo_name) | |
|
653 | assert 'remote: RhodeCode: open pull request link: {}'.format(ref) in stdout | |
|
654 | assert 'remote: RhodeCode: push completed' in stdout | |
|
655 | assert 'exporting bookmark feature2' in stdout |
General Comments 0
You need to be logged in to leave comments.
Login now