Show More
@@ -628,34 +628,42 b' class MercurialRepository(BaseRepository' | |||||
628 | push_branches=push_branches) |
|
628 | push_branches=push_branches) | |
629 |
|
629 | |||
630 | def _local_merge(self, target_ref, merge_message, user_name, user_email, |
|
630 | def _local_merge(self, target_ref, merge_message, user_name, user_email, | |
631 | source_ref, use_rebase=False, dry_run=False): |
|
631 | source_ref, use_rebase=False, close_commit_id=None, dry_run=False): | |
632 | """ |
|
632 | """ | |
633 | Merge the given source_revision into the checked out revision. |
|
633 | Merge the given source_revision into the checked out revision. | |
634 |
|
634 | |||
635 | Returns the commit id of the merge and a boolean indicating if the |
|
635 | Returns the commit id of the merge and a boolean indicating if the | |
636 | commit needs to be pushed. |
|
636 | commit needs to be pushed. | |
637 | """ |
|
637 | """ | |
638 | self._update(target_ref.commit_id, clean=True) |
|
638 | source_ref_commit_id = source_ref.commit_id | |
|
639 | target_ref_commit_id = target_ref.commit_id | |||
639 |
|
640 | |||
640 | ancestor = self._ancestor(target_ref.commit_id, source_ref.commit_id) |
|
641 | # update our workdir to target ref, for proper merge | |
|
642 | self._update(target_ref_commit_id, clean=True) | |||
|
643 | ||||
|
644 | ancestor = self._ancestor(target_ref_commit_id, source_ref_commit_id) | |||
641 | is_the_same_branch = self._is_the_same_branch(target_ref, source_ref) |
|
645 | is_the_same_branch = self._is_the_same_branch(target_ref, source_ref) | |
642 |
|
646 | |||
643 |
if |
|
647 | if close_commit_id: | |
644 | # Nothing to do, the changes were already integrated |
|
648 | # NOTE(marcink): if we get the close commit, this is our new source | |
645 | return target_ref.commit_id, False |
|
649 | # which will include the close commit itself. | |
|
650 | source_ref_commit_id = close_commit_id | |||
646 |
|
651 | |||
647 |
|
|
652 | if ancestor == source_ref_commit_id: | |
|
653 | # Nothing to do, the changes were already integrated | |||
|
654 | return target_ref_commit_id, False | |||
|
655 | ||||
|
656 | elif ancestor == target_ref_commit_id and is_the_same_branch: | |||
648 | # In this case we should force a commit message |
|
657 | # In this case we should force a commit message | |
649 |
return source_ref |
|
658 | return source_ref_commit_id, True | |
650 |
|
659 | |||
651 | unresolved = None |
|
660 | unresolved = None | |
652 | if use_rebase: |
|
661 | if use_rebase: | |
653 | try: |
|
662 | try: | |
654 |
bookmark_name = 'rcbook%s%s' % (source_ref |
|
663 | bookmark_name = 'rcbook%s%s' % (source_ref_commit_id, target_ref_commit_id) | |
655 | target_ref.commit_id) |
|
|||
656 | self.bookmark(bookmark_name, revision=source_ref.commit_id) |
|
664 | self.bookmark(bookmark_name, revision=source_ref.commit_id) | |
657 | self._remote.rebase( |
|
665 | self._remote.rebase( | |
658 |
source=source_ref |
|
666 | source=source_ref_commit_id, dest=target_ref_commit_id) | |
659 | self._remote.invalidate_vcs_cache() |
|
667 | self._remote.invalidate_vcs_cache() | |
660 | self._update(bookmark_name, clean=True) |
|
668 | self._update(bookmark_name, clean=True) | |
661 | return self._identify(), True |
|
669 | return self._identify(), True | |
@@ -678,7 +686,7 b' class MercurialRepository(BaseRepository' | |||||
678 | raise |
|
686 | raise | |
679 | else: |
|
687 | else: | |
680 | try: |
|
688 | try: | |
681 |
self._remote.merge(source_ref |
|
689 | self._remote.merge(source_ref_commit_id) | |
682 | self._remote.invalidate_vcs_cache() |
|
690 | self._remote.invalidate_vcs_cache() | |
683 | self._remote.commit( |
|
691 | self._remote.commit( | |
684 | message=safe_str(merge_message), |
|
692 | message=safe_str(merge_message), | |
@@ -820,10 +828,12 b' class MercurialRepository(BaseRepository' | |||||
820 |
|
828 | |||
821 | needs_push = False |
|
829 | needs_push = False | |
822 | if merge_possible: |
|
830 | if merge_possible: | |
|
831 | ||||
823 | try: |
|
832 | try: | |
824 | merge_commit_id, needs_push = shadow_repo._local_merge( |
|
833 | merge_commit_id, needs_push = shadow_repo._local_merge( | |
825 | target_ref, merge_message, merger_name, merger_email, |
|
834 | target_ref, merge_message, merger_name, merger_email, | |
826 |
source_ref, use_rebase=use_rebase, |
|
835 | source_ref, use_rebase=use_rebase, | |
|
836 | close_commit_id=close_commit_id, dry_run=dry_run) | |||
827 | merge_possible = True |
|
837 | merge_possible = True | |
828 |
|
838 | |||
829 | # read the state of the close action, if it |
|
839 | # read the state of the close action, if it |
@@ -2053,9 +2053,9 b' class MergeCheck(object):' | |||||
2053 | repo_type = pull_request.target_repo.repo_type |
|
2053 | repo_type = pull_request.target_repo.repo_type | |
2054 | close_msg = '' |
|
2054 | close_msg = '' | |
2055 | if repo_type == 'hg': |
|
2055 | if repo_type == 'hg': | |
2056 |
close_msg = _('Source branch will be closed |
|
2056 | close_msg = _('Source branch will be closed before the merge.') | |
2057 | elif repo_type == 'git': |
|
2057 | elif repo_type == 'git': | |
2058 | close_msg = _('Source branch will be deleted after merge.') |
|
2058 | close_msg = _('Source branch will be deleted after the merge.') | |
2059 |
|
2059 | |||
2060 | merge_details['close_branch'] = dict( |
|
2060 | merge_details['close_branch'] = dict( | |
2061 | details={}, |
|
2061 | details={}, |
General Comments 0
You need to be logged in to leave comments.
Login now