示例#1
0
 def test_custom_branchnames(self):
     gitflow = GitFlow(self.repo).init()
     self.assertEquals('production', gitflow.master_name())
     self.assertEquals('master', gitflow.develop_name())
     self.assertEquals('origin', gitflow.origin_name())
     self.assertEquals('f-', gitflow.get_prefix('feature'))
     self.assertEquals('rel-', gitflow.get_prefix('release'))
     self.assertEquals('hf-', gitflow.get_prefix('hotfix'))
     self.assertEquals('supp-', gitflow.get_prefix('support'))
     self.assertEquals('v', gitflow.get_prefix('versiontag'))
示例#2
0
文件: test_core.py 项目: OBdA/gitflow
 def test_custom_branchnames(self):
     gitflow = GitFlow(self.repo).init()
     self.assertEquals('production', gitflow.master_name())
     self.assertEquals('master', gitflow.develop_name())
     self.assertEquals('origin', gitflow.origin_name())
     self.assertEquals('f-', gitflow.get_prefix('feature'))
     self.assertEquals('rel-', gitflow.get_prefix('release'))
     self.assertEquals('hf-', gitflow.get_prefix('hotfix'))
     self.assertEquals('supp-', gitflow.get_prefix('support'))
     self.assertEquals('v', gitflow.get_prefix('versiontag'))
示例#3
0
 def test_gitflow_init_initializes_default_config(self):
     repo = create_git_repo(self)
     gitflow = GitFlow(repo).init()
     self.assertEquals('master', gitflow.master_name())
     self.assertEquals('develop', gitflow.develop_name())
     self.assertEquals('origin', gitflow.origin_name())
     self.assertEquals('feature/', gitflow.get_prefix('feature'))
     self.assertEquals('hotfix/', gitflow.get_prefix('hotfix'))
     self.assertEquals('release/', gitflow.get_prefix('release'))
     self.assertEquals('support/', gitflow.get_prefix('support'))
     self.assertEquals('', gitflow.get_prefix('versiontag'))
示例#4
0
文件: test_core.py 项目: OBdA/gitflow
 def test_gitflow_init_initializes_default_config(self):
     repo = create_git_repo(self)
     gitflow = GitFlow(repo).init()
     self.assertEquals('master', gitflow.master_name())
     self.assertEquals('develop', gitflow.develop_name())
     self.assertEquals('origin', gitflow.origin_name())
     self.assertEquals('feature/', gitflow.get_prefix('feature'))
     self.assertEquals('hotfix/', gitflow.get_prefix('hotfix'))
     self.assertEquals('release/', gitflow.get_prefix('release'))
     self.assertEquals('support/', gitflow.get_prefix('support'))
     self.assertEquals('', gitflow.get_prefix('versiontag'))
示例#5
0
    def test_gitflow_init_config_with_partly_inited(self):
        gitflow = GitFlow(self.repo).init()

        # Already set in fixture, shouldn't change
        self.assertEquals('production', gitflow.master_name())
        self.assertEquals('f-', gitflow.get_prefix('feature'))

        # Implicit defaults
        self.assertEquals('develop', gitflow.develop_name())
        self.assertEquals('origin', gitflow.origin_name())
        self.assertEquals('release/', gitflow.get_prefix('release'))
        self.assertEquals('hotfix/', gitflow.get_prefix('hotfix'))
        self.assertEquals('support/', gitflow.get_prefix('support'))
        self.assertEquals('', gitflow.get_prefix('versiontag'))
示例#6
0
文件: test_core.py 项目: OBdA/gitflow
    def test_gitflow_init_config_with_partly_inited(self):
        gitflow = GitFlow(self.repo).init()

        # Already set in fixture, shouldn't change
        self.assertEquals('production', gitflow.master_name())
        self.assertEquals('f-', gitflow.get_prefix('feature'))

        # Implicit defaults
        self.assertEquals('develop', gitflow.develop_name())
        self.assertEquals('origin', gitflow.origin_name())
        self.assertEquals('release/', gitflow.get_prefix('release'))
        self.assertEquals('hotfix/', gitflow.get_prefix('hotfix'))
        self.assertEquals('support/', gitflow.get_prefix('support'))
        self.assertEquals('', gitflow.get_prefix('versiontag'))
示例#7
0
    def test_gitflow_force_reinit_partly_inited(self):
        gitflow = GitFlow(self.repo)
        gitflow.init(force_defaults=True)

        # Implicit defaults
        self.assertEquals('develop', gitflow.develop_name())
        self.assertEquals('origin', gitflow.origin_name())
        self.assertEquals('release/', gitflow.get_prefix('release'))
        self.assertEquals('hotfix/', gitflow.get_prefix('hotfix'))
        self.assertEquals('support/', gitflow.get_prefix('support'))
        self.assertEquals('', gitflow.get_prefix('versiontag'))

        # Explicitly forced back to defaults
        self.assertEquals('master', gitflow.master_name())
        self.assertEquals('feature/', gitflow.get_prefix('feature'))
示例#8
0
文件: test_core.py 项目: OBdA/gitflow
    def test_gitflow_force_reinit_partly_inited(self):
        gitflow = GitFlow(self.repo)
        gitflow.init(force_defaults=True)

        # Implicit defaults
        self.assertEquals('develop', gitflow.develop_name())
        self.assertEquals('origin', gitflow.origin_name())
        self.assertEquals('release/', gitflow.get_prefix('release'))
        self.assertEquals('hotfix/', gitflow.get_prefix('hotfix'))
        self.assertEquals('support/', gitflow.get_prefix('support'))
        self.assertEquals('', gitflow.get_prefix('versiontag'))

        # Explicitly forced back to defaults
        self.assertEquals('master', gitflow.master_name())
        self.assertEquals('feature/', gitflow.get_prefix('feature'))
示例#9
0
文件: test_core.py 项目: OBdA/gitflow
 def test_gitflow_init_with_alternative_config(self):
     repo = create_git_repo(self)
     gitflow = GitFlow(repo)
     prefixes = dict(feature='f-',
                     hotfix='hf-',
                     release='rel-',
                     support='supp-',
                     versiontag='ver')
     names = dict(origin='somewhereelse')
     gitflow.init(master='foo', develop='bar', prefixes=prefixes, names=names)
     self.assertEquals('foo', gitflow.master_name())
     self.assertEquals('bar', gitflow.develop_name())
     self.assertEquals('somewhereelse', gitflow.origin_name())
     self.assertEquals('f-', gitflow.get_prefix('feature'))
     self.assertEquals('rel-', gitflow.get_prefix('release'))
     self.assertEquals('hf-', gitflow.get_prefix('hotfix'))
     self.assertEquals('supp-', gitflow.get_prefix('support'))
     self.assertEquals('ver', gitflow.get_prefix('versiontag'))
示例#10
0
    def _run_deploy(args):
        assert args.environ
        if args.environ in ('qa', 'client'):
            assert args.version

        gitflow = GitFlow()

        branches = {
                'develop':    gitflow.develop_name(),
                'qa':         gitflow.managers['release'].full_name(args.version),
                'production': gitflow.master_name(),
        }

        if gitflow.is_circleci_enabled():
            branches['client'] = gitflow.client_name()
            _deploy_circleci(gitflow, branches, args.environ)
        else:
            branches['client'] = gitflow.managers['release'].full_name(args.version)
            _deploy_jenkins(gitflow, branches, args.environ)
示例#11
0
    def _run_deploy(args):
        assert args.environ
        if args.environ in ('qa', 'client'):
            assert args.version

        gitflow = GitFlow()

        branches = {
            'develop': gitflow.develop_name(),
            'qa': gitflow.managers['release'].full_name(args.version),
            'production': gitflow.master_name(),
        }

        if gitflow.is_circleci_enabled():
            branches['client'] = gitflow.client_name()
            _deploy_circleci(gitflow, branches, args.environ)
        else:
            branches['client'] = gitflow.managers['release'].full_name(
                args.version)
            _deploy_jenkins(gitflow, branches, args.environ)
示例#12
0
 def test_gitflow_init_with_alternative_config(self):
     repo = create_git_repo(self)
     gitflow = GitFlow(repo)
     prefixes = dict(feature='f-',
                     hotfix='hf-',
                     release='rel-',
                     support='supp-',
                     versiontag='ver')
     names = dict(origin='somewhereelse')
     gitflow.init(master='foo',
                  develop='bar',
                  prefixes=prefixes,
                  names=names)
     self.assertEquals('foo', gitflow.master_name())
     self.assertEquals('bar', gitflow.develop_name())
     self.assertEquals('somewhereelse', gitflow.origin_name())
     self.assertEquals('f-', gitflow.get_prefix('feature'))
     self.assertEquals('rel-', gitflow.get_prefix('release'))
     self.assertEquals('hf-', gitflow.get_prefix('hotfix'))
     self.assertEquals('supp-', gitflow.get_prefix('support'))
     self.assertEquals('ver', gitflow.get_prefix('versiontag'))
示例#13
0
    def run_finish(args):
        gitflow = GitFlow()
        git     = gitflow.git
        origin  = gitflow.origin()
        version = gitflow.name_or_current('release', args.version)

        #+++ Check if all stories were QA'd
        pt_release = pivotal.Release(args.version)
        print('Checking Pivotal Tracker stories ... ')
        pt_release.try_finish()
        print('OK')

        #+++ Check all relevant review requests in Review Board, to be sure
        rb_release = review.Release(pt_release)
        print('Checking Review Board review requests ... ')
        rb_release.try_finish(args.ignore_missing_reviews)
        print('OK')

        #+++ Merge release branch into develop and master
        sys.stdout.write('Merging release branch %s ... ' % version)
        tagging_info = None
        if not args.notag:
            tagging_info = dict(
                sign=args.sign or args.signingkey,
                signingkey=args.signingkey,
                message=args.message)
        gitflow.finish('release', version,
                                 fetch=(not args.no_fetch), rebase=False,
                                 keep=True, force_delete=False,
                                 tagging_info=tagging_info, push=False)
        print('OK')

        #+++ Close all relevant review requests
        sys.stdout.write('Submitting all relevant review requests  ... ')
        rb_release.finish()
        print('OK')

        #+++ Collect local and remote branches to be deleted
        sys.stdout.write('Collecting branches to be deleted ... ')
        local_branches  = list()
        remote_branches = list()

        #+ Collect features to be deleted.
        origin_prefix = str(origin) + '/'
        feature_prefix = gitflow.get_prefix('feature')
        # refs = [<type>/<id>/...]
        refs = [str(ref)[len(origin_prefix):] for ref in origin.refs]
        for story in pt_release:
            if story.is_rejected():
                continue
            # prefix = <feature-prefix>/<id>
            prefix = feature_prefix + str(story.get_id())
            base_marker = gitflow.managers['feature'].base_marker_name(prefix)
            try:
                name = gitflow.nameprefix_or_current('feature', prefix)
                local_branches.append(feature_prefix + name)
                if base_marker in gitflow.repo.refs:
                    local_branches.append(base_marker)
            except NoSuchBranchError:
                pass
            for ref in refs:
                # if <feature-prefix>/... startswith <feature-prefix>/<id>
                if ref.startswith(prefix) or ref == base_marker:
                    remote_branches.append(ref)
        #+ Collect releases to be deleted.
        if not args.keep:
            release_branch = gitflow.get_prefix('release') + version
            try:
                gitflow.name_or_current('release', version)
                local_branches.append(release_branch)
            except NoSuchBranchError:
                pass
            if release_branch in refs:
                remote_branches.append(release_branch)
            print 'OK'

        #+++ Delete local and remote branches that are a part of this release
        sys.stdout.write('Checking out %s ... ' % gitflow.develop_name())
        git.checkout(gitflow.develop_name())
        print 'OK'
        #+ Delete local branches.
        print 'Deleting local branches ...'
        for branch in local_branches:
            git.branch('-D', branch)
            print '    ' + branch
        print '    OK'
        #+ Delete remote branches.
        print 'Deleting remote branches and pushing the rest ...'
        for branch in remote_branches:
            print '    ' + branch
        refspecs = [(':' + b) for b in remote_branches]
        refspecs.append(gitflow.develop_name())
        refspecs.append(gitflow.master_name())
        git.push(str(origin), '--tags', *refspecs)
        print '    OK'
示例#14
0
    def run_finish(args):
        gitflow = GitFlow()
        git = gitflow.git
        origin = gitflow.origin()
        version = gitflow.name_or_current('release', args.version)

        #+++ Check if all stories were QA'd
        pt_release = pivotal.Release(args.version)
        print('Checking Pivotal Tracker stories ... ')
        pt_release.try_finish()
        print('OK')

        #+++ Check all relevant review requests in Review Board, to be sure
        rb_release = review.Release(pt_release)
        print('Checking Review Board review requests ... ')
        rb_release.try_finish(args.ignore_missing_reviews)
        print('OK')

        #+++ Merge release branch into develop and master
        sys.stdout.write('Merging release branch %s ... ' % version)
        tagging_info = None
        if not args.notag:
            tagging_info = dict(sign=args.sign or args.signingkey,
                                signingkey=args.signingkey,
                                message=args.message)
        gitflow.finish('release',
                       version,
                       fetch=(not args.no_fetch),
                       rebase=False,
                       keep=True,
                       force_delete=False,
                       tagging_info=tagging_info,
                       push=False)
        print('OK')

        #+++ Close all relevant review requests
        sys.stdout.write('Submitting all relevant review requests  ... ')
        rb_release.finish()
        print('OK')

        #+++ Collect local and remote branches to be deleted
        sys.stdout.write('Collecting branches to be deleted ... ')
        local_branches = list()
        remote_branches = list()

        #+ Collect features to be deleted.
        origin_prefix = str(origin) + '/'
        feature_prefix = gitflow.get_prefix('feature')
        # refs = [<type>/<id>/...]
        refs = [str(ref)[len(origin_prefix):] for ref in origin.refs]
        for story in pt_release:
            if story.is_rejected():
                continue
            # prefix = <feature-prefix>/<id>
            prefix = feature_prefix + str(story.get_id())
            base_marker = gitflow.managers['feature'].base_marker_name(prefix)
            try:
                name = gitflow.nameprefix_or_current('feature', prefix)
                local_branches.append(feature_prefix + name)
                if base_marker in gitflow.repo.refs:
                    local_branches.append(base_marker)
            except NoSuchBranchError:
                pass
            for ref in refs:
                # if <feature-prefix>/... startswith <feature-prefix>/<id>
                if ref.startswith(prefix) or ref == base_marker:
                    remote_branches.append(ref)
        #+ Collect releases to be deleted.
        if not args.keep:
            release_branch = gitflow.get_prefix('release') + version
            try:
                gitflow.name_or_current('release', version)
                local_branches.append(release_branch)
            except NoSuchBranchError:
                pass
            if release_branch in refs:
                remote_branches.append(release_branch)
            print 'OK'

        #+++ Delete local and remote branches that are a part of this release
        sys.stdout.write('Checking out %s ... ' % gitflow.develop_name())
        git.checkout(gitflow.develop_name())
        print 'OK'
        #+ Delete local branches.
        print 'Deleting local branches ...'
        for branch in local_branches:
            git.branch('-D', branch)
            print '    ' + branch
        print '    OK'
        #+ Delete remote branches.
        print 'Deleting remote branches and pushing the rest ...'
        for branch in remote_branches:
            print '    ' + branch
        refspecs = [(':' + b) for b in remote_branches]
        refspecs.append(gitflow.develop_name())
        refspecs.append(gitflow.master_name())
        git.push(str(origin), '--tags', *refspecs)
        print '    OK'