source: mergebot/trunk/mergebot/CheckMergeActor.py

Last change on this file was 37, checked in by retracile, 14 years ago

Mergebot: fix imports

File size: 2.4 KB
Line 
1#!/usr/bin/env python
2"""
3Verify that a branch can be merged to its trunk without conflicts, but don't
4commit the merge.
5"""
6
7import os
8import shutil
9
10from mergebot.svn import SvnLib
11SvnOps = SvnLib()
12from mergebot.Actor import Actor
13
14class CheckMergeActor(Actor):
15    """Checks that this ticket can be merged to its baseline, but don't modify
16    the repository.
17    """
18    def execute(self):
19        """
20        Verify that a branch can be merged to its trunk without conflicts, but
21        don't commit the merge.
22        """
23        results = {}
24        workdir = self.work_dir
25        logfile = self.logfilename()
26
27        if os.path.exists(workdir):
28            shutil.rmtree(workdir)
29
30        # Make sure the various urls we require do exist
31        problems = self.check_required_directories()
32        if problems:
33            return results, problems, False
34
35        branch_info = SvnOps.get_branch_info(self.branch_local_url(), logfile)
36        if not branch_info:
37            comment = 'Branch for ticket %s does not exist in the repository.' \
38                % (self.ticket)
39            return results, comment, False
40        startrev, endrev = branch_info
41
42        SvnOps.checkout(self.baseline_local_url(), workdir, logfile)
43        # TODO: check return code of the above
44        merge_results = SvnOps.merge(self.branch_local_url(), workdir,
45                                     (startrev, endrev), logfile)
46        conflicts = SvnOps.conflicts_from_merge_results(merge_results)
47        if conflicts:
48            message = '\n'.join([
49                'Found %s conflicts while checking merge of %s:%s to %s for ' \
50                    '%s.' % (len(conflicts), startrev, endrev, self.version,
51                    self.requestor),
52                'Files in conflict:',
53                '{{{',
54                '\n'.join(conflicts),
55                '}}}',
56                'A rebranch will be needed before this can be merged.',
57            ])
58            success = False
59        else:
60            message = 'Found no conflicts while checking merge of %s:%s to ' \
61                '%s for %s.' % (startrev, endrev, self.version, self.requestor)
62            success = True
63
64        # Clean up the work area
65        if os.path.exists(workdir):
66            shutil.rmtree(workdir)
67
68        return results, message, success
69
70# vim:foldcolumn=4 foldmethod=indent
71# vim:tabstop=4 shiftwidth=4 softtabstop=4 expandtab
Note: See TracBrowser for help on using the repository browser.