mirror of
https://github.com/drewcassidy/yaclog.git
synced 2024-09-01 14:58:58 +00:00
Version accessors on Changelog
This commit is contained in:
parent
c09df3a770
commit
5c379e2635
@ -1,12 +1,12 @@
|
|||||||
import unittest
|
|
||||||
import os.path
|
import os.path
|
||||||
|
import unittest
|
||||||
|
|
||||||
import git
|
import git
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
import changelog
|
import changelog
|
||||||
import version
|
|
||||||
import yaclog
|
import yaclog
|
||||||
from yaclog.cli.__main__ import cli
|
from yaclog.cli.__main__ import cli
|
||||||
from click.testing import CliRunner
|
|
||||||
|
|
||||||
|
|
||||||
def check_result(runner, result, expected=0):
|
def check_result(runner, result, expected=0):
|
||||||
|
@ -19,7 +19,8 @@ import os
|
|||||||
import re
|
import re
|
||||||
from typing import List, Optional, Dict
|
from typing import List, Optional, Dict
|
||||||
|
|
||||||
import markdown
|
import yaclog.markdown as markdown
|
||||||
|
import yaclog.version
|
||||||
|
|
||||||
default_header = '# Changelog\n\nAll notable changes to this project will be documented in this file'
|
default_header = '# Changelog\n\nAll notable changes to this project will be documented in this file'
|
||||||
|
|
||||||
@ -142,6 +143,10 @@ class VersionEntry:
|
|||||||
contents += '\n\n' + body
|
contents += '\n\n' + body
|
||||||
return contents
|
return contents
|
||||||
|
|
||||||
|
@property
|
||||||
|
def released(self):
|
||||||
|
return yaclog.version.is_release(self.name)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return self.header(False)
|
return self.header(False)
|
||||||
|
|
||||||
@ -288,13 +293,61 @@ class Changelog:
|
|||||||
fp.write(text)
|
fp.write(text)
|
||||||
|
|
||||||
def add_version(self, index: int = 0, *args, **kwargs) -> VersionEntry:
|
def add_version(self, index: int = 0, *args, **kwargs) -> VersionEntry:
|
||||||
version = VersionEntry(*args, **kwargs)
|
"""
|
||||||
self.versions.insert(index, version)
|
Add a new version to the changelog
|
||||||
|
|
||||||
|
:param index: Where to add the new version in the log. Defaults to the top
|
||||||
|
:param args: args to forward to the :py:class:`VersionEntry` constructor
|
||||||
|
:param kwargs: kwargs to forward to the :py:class:`VersionEntry` constructor
|
||||||
|
:return: The created entry
|
||||||
|
"""
|
||||||
|
self.versions.insert(index, version := VersionEntry(*args, **kwargs))
|
||||||
return version
|
return version
|
||||||
|
|
||||||
def current(self, new_version_name='Unreleased') -> VersionEntry:
|
def current_version(self, released: Optional[bool] = None,
|
||||||
if len(self.versions) == 0:
|
new_version_name: str = 'Unreleased') -> Optional[VersionEntry]:
|
||||||
|
"""
|
||||||
|
Get the current version entry from the changelog
|
||||||
|
|
||||||
|
:param released: if the returned version should be a released version,
|
||||||
|
an unreleased version, or ``None`` to return the most recent
|
||||||
|
:param new_version_name: if unreleased versions are allowed, the name of
|
||||||
|
the version to create if there are no matches
|
||||||
|
:return: The current version matching the criteria, or None if only
|
||||||
|
release versions are allowed and none are found.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if released is None:
|
||||||
|
# return the first version, we dont care about release status
|
||||||
|
if len(self.versions) > 0:
|
||||||
|
return self.versions[0]
|
||||||
|
else:
|
||||||
|
# return the first version that matches `released`
|
||||||
|
for version in self.versions:
|
||||||
|
if version.released == released:
|
||||||
|
return version
|
||||||
|
|
||||||
|
# fallback if none are found
|
||||||
|
if released:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
return self.add_version(name=new_version_name)
|
return self.add_version(name=new_version_name)
|
||||||
|
|
||||||
return self.versions[0]
|
def get_version(self, name: Optional[str] = None) -> VersionEntry:
|
||||||
|
"""
|
||||||
|
Get a version from the changelog
|
||||||
|
|
||||||
|
:param name: The name of the version to get, or ``None`` to return the most recent
|
||||||
|
:return: The first version with the selected name
|
||||||
|
"""
|
||||||
|
|
||||||
|
for version in self.versions:
|
||||||
|
if version.name == name or name is None:
|
||||||
|
return version
|
||||||
|
raise IndexError()
|
||||||
|
|
||||||
|
def __getitem__(self, item: str) -> VersionEntry:
|
||||||
|
return self.get_version(item)
|
||||||
|
|
||||||
|
def __len__(self) -> int:
|
||||||
|
return len(self.versions)
|
||||||
|
Loading…
Reference in New Issue
Block a user