writePackageUpdateChanges method

void writePackageUpdateChanges(
  1. MelosPendingPackageUpdate update
)

Implementation

void writePackageUpdateChanges(MelosPendingPackageUpdate update) {
  final config = update.workspace.config;
  final repository = config.repository;
  final linkToCommits = config.commands.version.linkToCommits;
  final includeCommitId = config.commands.version.includeCommitId;

  String processCommitHeader(String header) =>
      repository != null ? header.withIssueLinks(repository) : header;

  // User provided changelog entry message.
  if (update.userChangelogMessage != null) {
    writeln(' - ${update.userChangelogMessage}');
    writeln();
  }

  // Entries for commits included in new version.
  final commits = _filteredAndSortedCommits(update);
  if (commits.isNotEmpty) {
    for (final commit in commits) {
      final parsedMessage = commit.parsedMessage;

      write(' - ');

      if (parsedMessage.isBreakingChange) {
        writeBold('BREAKING');
        write(' ');
      }

      writeBold(parsedMessage.type!.toUpperCase());
      if (config.commands.version.includeScopes) {
        if (parsedMessage.scopes.isNotEmpty) {
          write('(');
          write(parsedMessage.scopes.join(','));
          write(')');
        }
      }
      write(': ');
      writePunctuated(processCommitHeader(parsedMessage.description!));

      if (linkToCommits || includeCommitId) {
        final shortCommitId = commit.id.substring(0, 8);
        final commitUrl = repository!.commitUrl(commit.id);
        write(' (');
        if (linkToCommits) {
          writeLink(shortCommitId, uri: commitUrl.toString());
        } else {
          write(shortCommitId);
        }
        write(')');
      }

      writeln();

      final version = update.workspace.config.commands.version;

      if (!version.includeCommitBody) continue;
      if (parsedMessage.body == null) continue;

      final shouldWriteBody =
          !version.commitBodyOnlyBreaking || parsedMessage.isBreakingChange;

      if (shouldWriteBody) {
        writeln();
        for (final line in parsedMessage.body!.split('\n')) {
          write(' ' * 4);
          writeln(line);
        }
        writeln();
      }
    }
    writeln();
  }
}