From e7807e13c4b38aaa4a735ff05b69fdd6b57a7a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Orhun=20Parmaks=C4=B1z?= Date: Tue, 25 Jun 2024 23:41:37 +0300 Subject: [PATCH] feat(context): add repository path to template context (#721) --- git-cliff-core/src/changelog.rs | 10 +++++---- git-cliff-core/src/release.rs | 26 +++++++++++++++--------- git-cliff-core/src/repo.rs | 7 +++++-- git-cliff-core/src/template.rs | 1 + git-cliff-core/tests/integration_test.rs | 2 ++ git-cliff/src/lib.rs | 2 ++ website/docs/templating/context.md | 2 ++ website/docs/usage/multiple-repos.md | 8 ++++++++ 8 files changed, 42 insertions(+), 16 deletions(-) diff --git a/git-cliff-core/src/changelog.rs b/git-cliff-core/src/changelog.rs index 5680d49..c6a84d9 100644 --- a/git-cliff-core/src/changelog.rs +++ b/git-cliff-core/src/changelog.rs @@ -613,7 +613,7 @@ mod test { header: Some(String::from("# Changelog")), body: Some(String::from( r#"{% if version %} - ## Release [{{ version }}] - {{ timestamp | date(format="%Y-%m-%d") }} + ## Release [{{ version }}] - {{ timestamp | date(format="%Y-%m-%d") }} - ({{ repository }}) {% if commit_id %}({{ commit_id }}){% endif %}{% else %} ## Unreleased{% endif %} {% for group, commits in commits | group_by(attribute="group") %} @@ -881,6 +881,7 @@ mod test { commit_id: Some(String::from("0bc123")), timestamp: 50000000, previous: None, + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: crate::remote::RemoteReleaseMetadata { contributors: vec![], @@ -941,6 +942,7 @@ mod test { commit_id: None, timestamp: 1000, previous: Some(Box::new(test_release)), + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: crate::remote::RemoteReleaseMetadata { contributors: vec![], @@ -974,7 +976,7 @@ mod test { String::from( r#"# Changelog - ## Release [v1.1.0] - 1970-01-01 + ## Release [v1.1.0] - 1970-01-01 - (/root/repo) ### Bug Fixes @@ -992,7 +994,7 @@ mod test { #### ui - do exciting stuff - ## Release [v1.0.0] - 1971-08-02 + ## Release [v1.0.0] - 1971-08-02 - (/root/repo) (0bc123) ### Bug Fixes @@ -1117,7 +1119,7 @@ chore(deps): fix broken deps #### app - merge #5 - ## Release [v1.0.0] - 1971-08-02 + ## Release [v1.0.0] - 1971-08-02 - (/root/repo) (0bc123) ### Bug Fixes diff --git a/git-cliff-core/src/release.rs b/git-cliff-core/src/release.rs index 05720d2..9ee2383 100644 --- a/git-cliff-core/src/release.rs +++ b/git-cliff-core/src/release.rs @@ -20,30 +20,32 @@ use serde::{ #[serde(rename_all = "camelCase")] pub struct Release<'a> { /// Release version, git tag. - pub version: Option, + pub version: Option, /// git tag's message. - pub message: Option, + pub message: Option, /// Commits made for the release. - pub commits: Vec>, + pub commits: Vec>, /// Commit ID of the tag. #[serde(rename = "commit_id")] - pub commit_id: Option, + pub commit_id: Option, /// Timestamp of the release in seconds, from epoch. - pub timestamp: i64, + pub timestamp: i64, /// Previous release. - pub previous: Option>>, + pub previous: Option>>, + /// Repository path. + pub repository: Option, /// Contributors. #[cfg(feature = "github")] - pub github: RemoteReleaseMetadata, + pub github: RemoteReleaseMetadata, /// Contributors. #[cfg(feature = "gitlab")] - pub gitlab: RemoteReleaseMetadata, + pub gitlab: RemoteReleaseMetadata, /// Contributors. #[cfg(feature = "gitea")] - pub gitea: RemoteReleaseMetadata, + pub gitea: RemoteReleaseMetadata, /// Contributors. #[cfg(feature = "bitbucket")] - pub bitbucket: RemoteReleaseMetadata, + pub bitbucket: RemoteReleaseMetadata, } #[cfg(feature = "github")] @@ -187,6 +189,7 @@ mod test { version: Some(String::from(version)), ..Default::default() })), + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: crate::remote::RemoteReleaseMetadata { contributors: vec![], @@ -395,6 +398,7 @@ mod test { version: Some(String::from("1.0.0")), ..Default::default() })), + repository: Some(String::from("/root/repo")), github: RemoteReleaseMetadata { contributors: vec![], }, @@ -681,6 +685,7 @@ mod test { version: Some(String::from("1.0.0")), ..Default::default() })), + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: RemoteReleaseMetadata { contributors: vec![], @@ -1025,6 +1030,7 @@ mod test { version: Some(String::from("1.0.0")), ..Default::default() })), + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: RemoteReleaseMetadata { contributors: vec![], diff --git a/git-cliff-core/src/repo.rs b/git-cliff-core/src/repo.rs index 50645c8..25d9a23 100644 --- a/git-cliff-core/src/repo.rs +++ b/git-cliff-core/src/repo.rs @@ -32,7 +32,9 @@ static TAG_SIGNATURE_REGEX: Lazy = lazy_regex!( /// /// [`Repository`]: GitRepository pub struct Repository { - inner: GitRepository, + inner: GitRepository, + /// Repository path. + pub path: PathBuf, } impl Repository { @@ -40,7 +42,8 @@ impl Repository { pub fn init(path: PathBuf) -> Result { if path.exists() { Ok(Self { - inner: GitRepository::open(path)?, + inner: GitRepository::open(&path)?, + path, }) } else { Err(Error::IoError(io::Error::new( diff --git a/git-cliff-core/src/template.rs b/git-cliff-core/src/template.rs index 3fe0e8a..6d2e611 100644 --- a/git-cliff-core/src/template.rs +++ b/git-cliff-core/src/template.rs @@ -206,6 +206,7 @@ mod test { commit_id: None, timestamp: 0, previous: None, + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: crate::remote::RemoteReleaseMetadata { contributors: vec![], diff --git a/git-cliff-core/tests/integration_test.rs b/git-cliff-core/tests/integration_test.rs index 3e960fa..47f2791 100644 --- a/git-cliff-core/tests/integration_test.rs +++ b/git-cliff-core/tests/integration_test.rs @@ -194,6 +194,7 @@ fn generate_changelog() -> Result<()> { commit_id: None, timestamp: 0, previous: None, + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: git_cliff_core::remote::RemoteReleaseMetadata { contributors: vec![], @@ -235,6 +236,7 @@ fn generate_changelog() -> Result<()> { commit_id: None, timestamp: 0, previous: None, + repository: Some(String::from("/root/repo")), #[cfg(feature = "github")] github: git_cliff_core::remote::RemoteReleaseMetadata { contributors: vec![], diff --git a/git-cliff/src/lib.rs b/git-cliff/src/lib.rs index 6fc8e8c..a42da54 100644 --- a/git-cliff/src/lib.rs +++ b/git-cliff/src/lib.rs @@ -245,6 +245,8 @@ fn process_repository<'a>( for git_commit in commits.iter().rev() { let commit = Commit::from(git_commit); let commit_id = commit.id.to_string(); + releases[release_index].repository = + Some(repository.path.to_string_lossy().to_string()); if args.sort == Sort::Newest { releases[release_index].commits.insert(0, commit); } else { diff --git a/website/docs/templating/context.md b/website/docs/templating/context.md index 9d61db8..c979659 100644 --- a/website/docs/templating/context.md +++ b/website/docs/templating/context.md @@ -62,6 +62,7 @@ following context is generated to use for templating: ], "commit_id": "a440c6eb26404be4877b7e3ad592bfaa5d4eb210 (release commit)", "timestamp": 1625169301, + "repository": "/path/to/repository", "previous": { "version": "previous release" } @@ -156,6 +157,7 @@ If [`conventional_commits`](/docs/configuration/git#conventional_commits) is set ], "commit_id": "a440c6eb26404be4877b7e3ad592bfaa5d4eb210 (release commit)", "timestamp": 1625169301, + "repository": "/path/to/repository", "previous": { "version": "previous release" } diff --git a/website/docs/usage/multiple-repos.md b/website/docs/usage/multiple-repos.md index d6fe294..0e4a6bd 100644 --- a/website/docs/usage/multiple-repos.md +++ b/website/docs/usage/multiple-repos.md @@ -11,3 +11,11 @@ git cliff --repository path1 path2 ``` Note that the changelog will be generated using the merged history of the given repositories. + +:::tip + +You can use the `{{ repository }}` variable in the template to display which release belongs to which repository. + +See [context](/docs/templating/context) for more information. + +:::