From 8bcb814f942618ae45ded10aea08dc538692445d Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 20 Feb 2025 09:58:56 +0100 Subject: [PATCH] Keep original timestamp on rebase Squash commits of branch bugfix/keep_original_timestamp_on_rebase: - Keep original timestamp on rebase --- .../changelog/keep_original_timestamp_on_rebase .yaml | 2 ++ .../java/sonia/scm/repository/spi/CommitHelper.java | 11 ++++++++++- .../java/sonia/scm/repository/spi/GitMergeRebase.java | 2 +- .../sonia/scm/repository/spi/GitMergeCommandTest.java | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 gradle/changelog/keep_original_timestamp_on_rebase .yaml diff --git a/gradle/changelog/keep_original_timestamp_on_rebase .yaml b/gradle/changelog/keep_original_timestamp_on_rebase .yaml new file mode 100644 index 0000000000..81a582d21f --- /dev/null +++ b/gradle/changelog/keep_original_timestamp_on_rebase .yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Keep original timestamp on rebase diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/CommitHelper.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/CommitHelper.java index 68139509be..6fa9ac1bdb 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/CommitHelper.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/CommitHelper.java @@ -66,12 +66,21 @@ class CommitHelper { String message, boolean sign, ObjectId... parentCommitIds) throws IOException, CanceledException, UnsupportedSigningFormatException { + return createCommit(treeId, createPersonIdent(author), committer, message, sign, parentCommitIds); + } + + ObjectId createCommit(ObjectId treeId, + PersonIdent author, + Person committer, + String message, + boolean sign, + ObjectId... parentCommitIds) throws IOException, CanceledException, UnsupportedSigningFormatException { log.trace("create commit for tree {} and parent ids {} in repository {}", treeId, parentCommitIds, context.getRepository()); try (ObjectInserter inserter = repository.newObjectInserter()) { CommitBuilder commitBuilder = new CommitBuilder(); commitBuilder.setTreeId(treeId); commitBuilder.setParentIds(parentCommitIds); - commitBuilder.setAuthor(createPersonIdent(author)); + commitBuilder.setAuthor(author); commitBuilder.setCommitter(createPersonIdent(committer)); commitBuilder.setMessage(message); if (sign) { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeRebase.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeRebase.java index 72ba89bca6..a2a2cd6614 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeRebase.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeRebase.java @@ -85,7 +85,7 @@ class GitMergeRebase { PersonIdent originalAuthor = commit.getAuthorIdent(); targetRevision = commitHelper.createCommit( newTreeId, - new Person(originalAuthor.getName(), originalAuthor.getEmailAddress()), + originalAuthor, request.getAuthor(), commit.getFullMessage(), request.isSign(), diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java index c3f460a0d4..2b8d9439fd 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java @@ -543,6 +543,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase { assertThat(mergeCommit.getParent(0).name()).isEqualTo("fcd0ef1831e4002ac43ea539f4094334c79ea9ec"); assertThat(mergeCommit.getName()).isEqualTo(mergeCommandResult.getNewHeadRevision()); assertThat(mergeCommit.getName()).doesNotStartWith("91b99de908fcd04772798a31c308a64aea1a5523"); + assertThat(mergeCommit.getAuthorIdent().getWhenAsInstant()).isEqualTo("2018-11-07T10:20:52Z"); // the timestamp of the original commit } @Test