orhun / git-cliff

A highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️
https://git-cliff.org
Apache License 2.0
9.3k stars 199 forks source link

Relevant tags are missing when using --include-path #208

Open cjorge-graphops opened 1 year ago

cjorge-graphops commented 1 year ago

Describe the bug

When using --include-path, the first release tag goes missing. Also, if there is a tag that points to a commit that is filtered out by --include-path, then that tag no longer shows on the change log and the commits that do show, show as unreleased instead.

To reproduce

I'm running the following script to reproduce the issues:

#!/bin/bash

rm -Rf reproduce-repo
mkdir reproduce-repo
cd reproduce-repo
git init
mkdir included-path
touch included-path/{a,b,c}
git add included-path/a
git commit -m "feat: add a"
git tag release-v0.1.0
git add included-path/b
git commit -m "feat: add b"
git tag release-v0.2.0
git add included-path/c
git commit -m "feat: add c"
git tag release-v0.3.0
git-cliff -i
sed -i 's/tag_pattern = .*/tag_pattern = "release*"/g' cliff.toml
echo "######## WITHOUT INCLUDE PATH #############"
git-cliff -c cliff.toml
echo "######## WITH INCLUDE PATH, FIST TAG MISSING #############"
git-cliff -c cliff.toml --include-path "included-path/**"
mkdir other-path
touch other-path/d
git add other-path/d
git commit -m "feat: add d"
touch included-path/e
git add included-path/e
git commit -m "feat: add e"
touch other-path/f
git add other-path/f
git commit -m "feat: add f"
git tag release-v0.4.0
echo "######## WITH INCLUDE PATH, SHOWS AS UNRELEASED #############"
git-cliff -c cliff.toml --include-path "included-path/**"

Expected behavior

I expected that when using --include-path, all the first three releases would show on the change log and instead the first one is missing. I get this, which misses release-v0.1.0 tag:

Changelog

All notable changes to this project will be documented in this file.

[release-v0.3.0] - 2023-06-30

Features

  • Add c

[release-v0.2.0] - 2023-06-30

Features

  • Add b

Regarding release-v0.4.0, I would expect it to show on change log but the relevant commit shows as unreleased:

Changelog

All notable changes to this project will be documented in this file.

[unreleased]

Features

  • Add e

[release-v0.3.0] - 2023-06-30

Features

  • Add c

[release-v0.2.0] - 2023-06-30

Features

  • Add b

Software information

welcome[bot] commented 1 year ago

Thanks for opening your first issue at git-cliff! Be sure to follow the issue template! ⛰️

calinah commented 1 year ago

I am seeing the same issue as @cjorge-graphops

lusor commented 3 months ago

I had the same issue that the first (inital) commit would not show up when using --include-path. I could track the issue to https://github.com/orhun/git-cliff/blob/9dbf47bac596be7bacc335e8afa3cdc383dc8ebb/git-cliff-core/src/repo.rs#L79, where the parent commit is looked up. As the initial commit does not have a parent, the then-path is not followed and the commit is not included.

As diff_tree_to_tree allows to have one of the tree to be None, this could be given as old_tree.

TimKnight-DWP commented 1 month ago

I am seeing the same issue:

image image

git log scoped to my directory shows commits with associated tags

if I run git cliff with just the tag-pattern, then it picks up the correct tag style and determines version based on the full history of my repo

but with include-path it ceases to find the tags

I want to be able to tag/version sub-directories of my repository in order to support a monorepo container factory, was hoping git cliff could give me that natively