Example #1
0
    def run(self):
        self.chars = setupmeta.to_int(self.chars, default=setupmeta.Console.columns())

        definitions = self.setupmeta.definitions
        self.check_recommend('name')
        self.check_recommend('version', "you can use setupmeta's versioning='...'")
        self.check_recommend('description', "add a README or a docstring to your module")
        self.check_recommend('long_description', "add a README file")
        if self.recommend:
            self.check_recommend('author')
            self.check_recommend('classifiers')
            self.check_recommend('download_url')
            self.check_recommend('license')
            self.check_recommend('url')
        if definitions:
            longest_key = min(24, max(len(key) for key in definitions))
            sources = sum((d.sources for d in definitions.values()), [])
            longest_source = min(32, max(len(s.source) for s in sources))
            form = "%%%ss: (%%%ss) %%s" % (longest_key, -longest_source)
            max_chars = max(60, self.chars - longest_key - longest_source - 5)

            for definition in sorted(definitions.values()):
                count = 0
                for source in definition.sources:
                    if count:
                        prefix = "\_"
                    elif source.key not in setupmeta.MetaDefs.all_fields:
                        prefix = "%s*" % source.key
                    else:
                        prefix = source.key

                    preview = setupmeta.short(source.value, c=max_chars)
                    print(form % (prefix, source.source, preview))
                    count += 1
Example #2
0
 def rendered_attr_auto_bumped(self, version):
     """
     :param Version version: Version to render
     :return str: Auto-bumped if possible
     """
     value = self.rendered_attr(version)
     return setupmeta.to_int(value) + 1
Example #3
0
def test_parsing():
    assert setupmeta.to_int(None) is None
    assert setupmeta.to_int(None, default=2) == 2
    assert setupmeta.to_int('') is None
    assert setupmeta.to_int('foo') is None
    assert setupmeta.to_int(['foo']) is None
    assert setupmeta.to_int([1]) is None
    assert setupmeta.to_int(1, default=2) == 1
    assert setupmeta.to_int(0, default=2) == 0
Example #4
0
def test_parsing():
    assert setupmeta.to_int(None) is None
    assert setupmeta.to_int(None, default=2) == 2
    assert setupmeta.to_int("") is None
    assert setupmeta.to_int("foo") is None
    assert setupmeta.to_int(["foo"]) is None
    assert setupmeta.to_int([1]) is None
    assert setupmeta.to_int(1, default=2) == 1
    assert setupmeta.to_int(0, default=2) == 0
Example #5
0
 def parsed_version(text, dirty=None):
     if text:
         m = RE_GIT_DESCRIBE.match(text)
         if m:
             main = m.group(1)
             distance = setupmeta.strip_dash(m.group(2))
             distance = setupmeta.to_int(distance, default=0)
             commitid = setupmeta.strip_dash(m.group(3))
             if dirty is None:
                 dirty = m.group(4) == "-dirty"
             return Version(main, distance, commitid, dirty, text)
     return None
Example #6
0
    def run(self):
        if not self.setupmeta:
            return

        if self.expand:
            return self.show_expanded_python()

        if self.dependencies:
            return self.show_dependencies()

        self.chars = setupmeta.to_int(self.chars,
                                      default=setupmeta.Console.columns())

        definitions = self.setupmeta.definitions
        self.check_recommend("name")
        self.check_recommend("version",
                             "you can use setupmeta's versioning='...'")
        self.check_recommend("description",
                             "add a README or a docstring to your module")
        self.check_recommend("long_description", "add a README file")
        if self.recommend:
            self.check_recommend("author")
            self.check_recommend("classifiers")
            self.check_recommend("download_url")
            self.check_recommend("license")
            self.check_recommend("url")
        if definitions:
            longest_key = min(30, max(len(key) for key in definitions))
            sources = sum((d.sources for d in definitions.values()), [])
            longest_source = min(40, max(len(s.source) for s in sources))
            form = "%%%ss: (%%%ss) %%s" % (longest_key, -longest_source)
            max_chars = max(60, self.chars - longest_key - longest_source - 5)

            for definition in sorted(definitions.values()):
                count = 0
                for source in definition.sources:
                    if count:
                        prefix = "\\_"
                    elif source.key not in setupmeta.MetaDefs.all_fields:
                        prefix = "%s*" % source.key
                    else:
                        prefix = source.key

                    preview = setupmeta.short(source.value, c=max_chars)
                    s = form % (prefix, setupmeta.short(
                        source.source), preview)
                    print(s)
                    count += 1
Example #7
0
    def update_sources(self, next_version, commit, push, vdefs):
        modified = []
        for vdef in vdefs.sources:
            if ".py:" not in vdef.source:
                continue

            relative_path, _, target_line = vdef.source.partition(":")
            full_path = setupmeta.project_path(relative_path)
            target_line = setupmeta.to_int(target_line, default=0)

            lines = []
            changed = 0
            line_number = 0
            revised = None
            with io.open(full_path, "rt") as fh:
                for line in fh.readlines():
                    line_number += 1
                    if line_number == target_line:
                        revised = updated_line(line, next_version, vdef)
                        if revised and revised != line:
                            changed += 1
                            line = revised

                    lines.append(line)

            if not changed:
                print("%s already has the right version" % vdef.source)

            else:
                modified.append(relative_path)
                if commit:
                    with io.open(full_path, "wt") as fh:
                        fh.writelines(lines)

                else:
                    print("Would update %s with: %s" %
                          (vdef.source, revised.strip()))

        if not modified:
            return

        self.scm.commit_files(commit, push, modified, next_version)
Example #8
0
    def __init__(self, main=None, distance=0, commitid=None, dirty=False, text=None):
        """
        :param str|None main: Main part of the version (example: "1.0.0")
        :param int distance: Number of commits since last version tag
        :param str|None commitid: Current commit id (example: g1234567)
        :param bool dirty: Whether checkout is dirty or not
        :param str|None text: Version text as received from SCM
        """
        self.distance = distance or 0
        self.commitid = (commitid or "g0000000").strip()
        self.dirty = ".dirty" if dirty else ""
        main = (main or "0.0.0").strip()
        self.text = text or "v%s-%s-%s" % (main, self.distance, self.commitid)

        components = [setupmeta.to_int(x, default=x) for x in RE_VERSION_COMPONENT.split(main) if x and x.isalnum()]
        main_triplet = []
        additional = []
        qualifier = ""
        for component in components:
            if not isinstance(component, int):
                qualifier = "%s%s" % (qualifier, component)
                continue

            if not additional and not qualifier and len(main_triplet) < 3:
                main_triplet.append(component)
                continue

            if qualifier is not None:
                component = "%s%s" % (qualifier, component)
                qualifier = ""

            additional.append(component)

        while len(main_triplet) < 3:
            main_triplet.append(0)

        if qualifier:
            additional.append(qualifier)

        self.major, self.minor, self.patch = main_triplet
        self.additional = ".".join(additional)