Example #1
0
    def bumped(self, what, current_version):
        """
        :param str what: Which component to bump
        :param Version current_version: Current version
        :return str: Represented next version, with 'what' bumped
        """
        if not isinstance(self.main_bits, list):
            setupmeta.abort("Main format is not a list: %s" %
                            setupmeta.stringify(self.main_bits))

        if what not in self.bumpable:
            msg = "Can't bump '%s', it's out of scope" % what
            msg += " of main format '%s'" % self.main
            msg += " acceptable values: %s" % ", ".join(self.bumpable)
            setupmeta.abort(msg)

        major, minor, rev = current_version.major, current_version.minor, current_version.patch
        if what == "major":
            major, minor, rev = (major + 1, 0, 0)

        elif what == "minor":
            major, minor, rev = (major, minor + 1, 0)

        elif what == "patch":
            major, minor, rev = (major, minor, rev + 1)

        next_version = Version(main="%s.%s.%s" % (major, minor, rev))
        return self.rendered(next_version, extra=False)
Example #2
0
    def apply_tag(self, commit, push, next_version, branch):
        self.get_output("fetch", "--all")
        output = self.get_output("status", "--porcelain", "--branch")
        for line in output.splitlines():
            m = RE_BRANCH_STATUS.match(line)
            if m and m.group(1) == branch:
                state = m.group(6)
                if state and ("behind" in state or "gone" in state):
                    # Example: Local branch 'master' is out of date (behind 1), can't bump
                    setupmeta.abort(
                        "Local branch '%s' is out of date (%s), can't bump" %
                        (branch, state))

        bump_msg = "Version %s" % next_version
        tag = "v%s" % next_version

        self.run(commit, "tag", "-a", tag, "-m", bump_msg)
        if push:
            if self.has_origin():
                self.run(commit, "push", "--tags", "origin")

            else:
                print(
                    "Not running 'git push --tags origin' as you don't have an origin"
                )
Example #3
0
 def verify_remote_tags(self):
     """Verify that remote tags are identical to local tags"""
     local_tags = self.scm.local_tags()
     remote_tags = self.scm.remote_tags()
     local_only = local_tags.difference(remote_tags)
     remote_only = remote_tags.difference(local_tags)
     if remote_only:
         message = "Can't bump: not all remote tags are present locally!\n"
         if local_only:
             message += "Tags only seen locally: %s\n" % ", ".join(
                 local_only)
         if remote_only:
             message += "Tags only on remote: %s\n" % ", ".join(remote_only)
         setupmeta.abort(message)
Example #4
0
    def bump(self, what, commit=False, simulate_branch=None):
        if self.problem:
            setupmeta.abort(self.problem)

        branch = simulate_branch or self.scm.get_branch()
        if branch not in self.strategy.branches:
            setupmeta.abort("Can't bump branch '%s', need one of %s" % (branch, self.strategy.branches))

        gv = self.scm.get_version()
        if gv and gv.dirty:
            if commit:
                setupmeta.abort("You have pending changes, can't bump")
            print("Note: you have pending changes, commit (or stash) them before using --commit")

        next_version = self.strategy.bumped(what, gv)

        if not commit:
            print("Not committing bump, use --commit to commit")

        vdefs = self.meta.definitions.get("version")
        if vdefs:
            self.update_sources(next_version, commit, vdefs)

        self.scm.apply_tag(commit, next_version)

        if not self.strategy.hook:
            return

        hook = setupmeta.project_path(self.strategy.hook)
        if setupmeta.is_executable(hook):
            setupmeta.run_program(hook, self.meta.name, branch, next_version, fatal=True, dryrun=not commit, cwd=setupmeta.project_path())
Example #5
0
    def get_bump(self, what):
        if self.problem:
            setupmeta.abort(self.problem)

        gv = self.scm.get_version()
        return self.strategy.bumped(what, gv)