Skip to content

CAMEL-26192: camel-git - checkout of an existing branch, and CamelGitCommitId is the sha of the commit - #28629

Open
vignesh-manel wants to merge 6 commits into
apache:mainfrom
vignesh-manel:bugfix/CAMEL-26192
Open

vignesh-manel wants to merge 6 commits into
apache:mainfrom
vignesh-manel:bugfix/CAMEL-26192

Conversation

@vignesh-manel

@vignesh-manel vignesh-manel commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Description

https://issues.apache.org/jira/browse/CAMEL-26192

Problem

  1. GitProducer.doCheckout always called setCreateBranch(true), so the checkout operation could only create a branch: checking out a branch that already exists failed with RefAlreadyExistsException.
  2. GitCommitConsumer set CamelGitCommitId to commit.getId(), which is the RevCommit itself. Its String form is commit <sha> <time> -----sp, not the sha, although GitConstants documents the header with javaType = "String". Giving the header to the cherryPick operation, which reads it as a String, failed.
  3. commit and commitAll discarded the RevCommit returned by JGit, so a route could not know the id of the commit it had just made.

Change

  • checkout without a tagName creates the branch only when refs/heads/<branchName> does not exist, and otherwise checks out the existing branch by its full name, refs/heads/<branchName>. Following the review, the full name is needed because JGit resolves a short name with refs/tags/ before refs/heads/, so a tag with the name of the branch would be checked out instead (detached HEAD at the tag's commit). With a tagName it still always creates the branch from the tag, as before (checking out an existing branch at a tag would silently ignore the tag). The create path keeps the short name, as JGit's CreateBranchCommand adds refs/heads/ itself. The same short-name ambiguity exists on main for the create path and for the other operations that switch branch with setName(branchName); that is left for a follow-up, as the review suggests.
  • The commit consumer sets CamelGitCommitId to commit.getName(), the sha as a String.
    • The consumer also used this header value to skip the commits it had already consumed (onPreProcessed / onProcessed kept it only when it was an ObjectId). It now reads the sha back with ObjectId.fromString. Without that, each poll would deliver every commit again.
  • commit and commitAll set CamelGitCommitId to the sha of the new commit. The body is unchanged, as the endpoint's body-type metadata says for these operations.
  • The description of CamelGitCommitId in GitConstants says where the header is set and read; git.json is regenerated and copied to the catalog. The Javadoc of the header in the generated GitEndpointBuilderFactory (endpoint DSL) changes with it: I missed that file, and the maintainer bot added it in the "Regen" commit b1da32b.
  • Upgrade guide: a Breaking change entry for the header type of the commit consumer, plus the new header of commit/commitAll (which replaces a CamelGitCommitId already on the message) and the checkout behaviour. Following the review, the entry is placed after the camel-github2 commit-consumer entry instead of at the end of the file, so later appends do not conflict with it.

New tests:

  • GitProducerTest.checkoutExistingBranchTest: creates the branch with createBranch, moves master one commit past it and tags that commit with the branch name, then checks out the branch and checks that HEAD is the branch at its own commit.
  • GitProducerTest.commitSetsCommitIdTest and commitAllOperationSetsCommitIdTest: the header is the sha of the new commit. The second uses a new route with operation=commitAll (the existing direct:commit-all route uses operation=commit, so commitAll had no test).
  • GitConsumerCommitTest.commitIdIsTheShaTest: the header is the sha, and with a 2 s assert period (several polls) the commit is delivered only once.

Verification (local, JDK 21, Maven 3.9.12)

  • Before the fix, all 4 new tests failed: RefAlreadyExistsException: Ref testBranch already exists, expected: <sha> but was: <null> (twice), and expected: <sha> but was: <commit sha 1793186035 -----sp>.
  • After the fix: GitProducerTest (38) and GitConsumerCommitTest (2) pass.
  • Mutation: keeping the old instanceof ObjectId check in onProcessed makes commitIdIsTheShaTest fail with Expected: <1> but was: <4> (the commit delivered again on each poll). The existing commitConsumerTest does not catch that.
  • GitConsumerTest (4) errors locally in its setup, on this branch and on unchanged main alike: its route loads a git config file from gist.githubusercontent.com, and the JVM gets java.net.ConnectException: Operation timed out on this machine. I left it to CI. GitRemoteProducerTest is skipped.
  • CI passed on b1da32b (main merged in for the conflict at the end of the upgrade guide, then the Regen commit). It tested camel-catalog, camel-git, docs and camel-endpointdsl. In camel-git, 45 tests ran with 1 skipped, including the 4 GitConsumerTest tests, which passed. The one retried test, MonitorStartupTest in camel-jbang-plugin-tui, is unrelated.
  • Review follow-up (b1f89cd, then main merged in at bbecc69 and the upgrade-guide sentence in a24980b): the strengthened checkoutExistingBranchTest failed before the full-name change with expected: <testBranch> but was: <31c83b3a…> (detached HEAD at the tag), and passes after. GitProducerTest (38) and GitConsumerCommitTest (2) pass, and sourcecheck is clean. main did not touch camel-git since the previous merge. CI on a24980b is pending.
  • mvn install -Psourcecheck -DskipTests passes in components/camel-git, with no uncommitted changes afterwards. The catalog git.json is a byte-identical copy of the component one, as on main.

Target

  • I checked that the commit is targeting the correct branch (Camel 4 uses the main branch)

Tracking

  • If this is a large change, bug fix, or code improvement, I checked there is a JIRA issue filed for the change (usually before you start working on it).

Apache Camel coding standards and style

  • I checked that each commit in the pull request has a meaningful subject line and body.

  • I have run mvn clean install -DskipTests locally from root folder and I have committed all auto-generated changes.
    Not from the root: I built components/camel-git with -Psourcecheck, and copied the regenerated git.json to the catalog (the catalog module could not resolve its dependencies locally). CI's uncommitted-changes check covers the rest.

AI-assisted contributions

  • If this PR includes AI-generated code, commits have proper co-authorship attribution (e.g., Co-authored-by trailers) and the PR description identifies the AI tool used.

Claude Code on behalf of vignesh-manel

🤖 Generated with Claude Code

vignesh-manel and others added 2 commits October 28, 2026 18:09
…CommitId is the sha of the commit

The checkout operation always created the branch, so checking out a branch
that exists failed with RefAlreadyExistsException. Without a tagName, it now
creates the branch only when it does not exist. With a tagName, it still
creates the branch from the tag.

The commit consumer set CamelGitCommitId to the RevCommit, whose String form
is not the sha, so the header could not be given to the cherryPick
operation. It is now the sha as a String, as the header is documented. The
consumer kept the header value to skip the commits it already consumed, so
it now reads the sha back as an ObjectId.

The commit and commitAll operations now set CamelGitCommitId to the sha of
the new commit; the body is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
@github-actions

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. No issues found.

The three fixes are correct:

  • doCheckout now idempotently creates the branch only when it doesn't exist, fixing RefAlreadyExistsException on existing branches
  • CamelGitCommitId in the consumer is now commit.getName() (the 40-char SHA string), and ObjectId.fromString() correctly reconstructs the same ObjectId for the deduplication set — the round-trip is consistent
  • doCommit and doCommitAll now capture and expose the returned RevCommit SHA as a header

Breaking change is documented in the 4.24 upgrade guide. Tests properly validate the fixed behavior.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

✅ Generated files are up to date

An earlier CI run reported uncommitted generated changes; the latest run no longer does.

@github-actions github-actions Bot added the dsl label Oct 28, 2026
@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • components/camel-git
  • docs
  • dsl/camel-endpointdsl

🔁 3 tests passed only after a retry on JDK 21 (3 retried attempts)

Recovered flaky tests on JDK 21 (3)
Module Test Failed attempts First failure
dsl/camel-jbang/camel-jbang-plugin-tui AiPanelAcpTest.usageUpdateFeedsTheTokenCounter 1 array contents differ at index [0], expected: <900> but was: <0>
dsl/camel-jbang/camel-jbang-plugin-tui LaunchManagerOutcomeTest.startedWhenTheStatusFileSaysSo 1 expected: null but was: LaunchOutcome[ok=false, log=null]
dsl/camel-jbang/camel-jbang-plugin-tui MonitorStartupTest.browserOnlyServesUntilTheServerStops 1 Connection refused (connect failed)

ℹ️ These tests did not fail the build. Surefire retried them and they passed.
Retries are enabled project-wide by surefire.rerunFailingTestsCount in parent/pom.xml.


🔬 Scalpel shadow comparison — Scalpel: 8 of 708 tested, 24 compile-only — current: 8 all tested

Maveniverse Scalpel detected 8 affected modules (current approach: 8).

Skip-tests mode would test 8 modules (4 direct + 7 downstream), skip tests for 24 (generated code, meta-modules)

Modules Scalpel would test (8)
  • camel-git ← components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json, components/camel-git/src/main/java/org/apache/camel/component/git/GitConstants.java, components/camel-git/src/main/java/org/apache/camel/component/git/consumer/GitCommitConsumer.java, components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java, components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java, components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
  • camel-jbang-mcp ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-mcp ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-tui ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-validate ← downstream of org.apache.camel:camel-yaml-dsl-validator
  • camel-launcher-container ← downstream of org.apache.camel:camel-launcher
  • camel-yaml-dsl-validator ← downstream of org.apache.camel:camel-catalog
  • camel-yaml-dsl-validator-maven-plugin ← downstream of org.apache.camel:camel-yaml-dsl-validator
Modules with tests skipped (24)
  • apache-camel
  • camel-allcomponents
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

All tested modules (35 modules, 5m 9s total)

Total reactor time: 5m 9s

Module Duration Status
Camel :: JBang :: MCP 43.0s SUCCESS
Camel :: JBang :: Plugin :: Validate 29.8s SUCCESS
Camel :: Git 27.4s SUCCESS
Camel :: YAML DSL :: Validator 26.1s SUCCESS
Camel :: YAML DSL 23.2s SUCCESS
Camel :: Component DSL 21.8s SUCCESS
Camel :: Catalog :: Camel Catalog 21.6s SUCCESS
Camel :: Kamelet Main 18.2s SUCCESS
Camel :: JBang :: Plugin :: Testing 15.8s SUCCESS
Camel :: JBang :: Plugin :: Kubernetes 14.2s SUCCESS
Camel :: Docs 11.7s SUCCESS
Camel :: YAML DSL :: Deserializers 8.0s SUCCESS
Camel :: Catalog :: Camel Report Maven Plugin 7.6s SUCCESS
Camel :: Catalog :: Camel Route Parser 7.5s SUCCESS
Camel :: All Components Sync point 5.2s SUCCESS
Camel :: YAML DSL :: Validator Maven Plugin 4.5s SUCCESS
Camel :: Assembly 3.8s SUCCESS
Camel :: Catalog :: Maven 3.4s SUCCESS
Camel :: YAML DSL :: Maven Plugins 2.9s SUCCESS
Camel :: Catalog :: Suggest (deprecated) 2.5s SUCCESS
Camel :: Catalog :: Dummy Component 1.7s SUCCESS
Camel :: Coverage 1.6s SUCCESS
Camel :: JBang :: Plugin :: Generate 1.2s SUCCESS
Camel :: JBang :: Plugin :: Edit 1.1s SUCCESS
Camel :: Catalog :: Console 1.0s SUCCESS
Camel :: JBang :: Plugin :: MCP 0.8s SUCCESS
Camel :: JBang :: Integration tests 0.8s SUCCESS
Camel :: Endpoint DSL :: Support 0.7s SUCCESS
Camel :: Launcher :: Container 0.7s SUCCESS
Camel :: JBang :: Main 0.7s SUCCESS
Camel :: Endpoint DSL n/a
Camel :: Integration Tests n/a
Camel :: JBang :: Core n/a
Camel :: JBang :: Plugin :: TUI n/a
Camel :: Launcher n/a

Top 20 slowest modules:

  • Camel :: JBang :: MCP (43.0s)
  • Camel :: JBang :: Plugin :: Validate (29.8s)
  • Camel :: Git (27.4s)
  • Camel :: YAML DSL :: Validator (26.1s)
  • Camel :: YAML DSL (23.2s)
  • Camel :: Component DSL (21.8s)
  • Camel :: Catalog :: Camel Catalog (21.6s)
  • Camel :: Kamelet Main (18.2s)
  • Camel :: JBang :: Plugin :: Testing (15.8s)
  • Camel :: JBang :: Plugin :: Kubernetes (14.2s)
  • Camel :: Docs (11.7s)
  • Camel :: YAML DSL :: Deserializers (8.0s)
  • Camel :: Catalog :: Camel Report Maven Plugin (7.6s)
  • Camel :: Catalog :: Camel Route Parser (7.5s)
  • Camel :: All Components Sync point (5.2s)
  • Camel :: YAML DSL :: Validator Maven Plugin (4.5s)
  • Camel :: Assembly (3.8s)
  • Camel :: Catalog :: Maven (3.4s)
  • Camel :: YAML DSL :: Maven Plugins (2.9s)
  • Camel :: Catalog :: Suggest (deprecated) (2.5s)

⚙️ View full build and test results

@vignesh-manel
vignesh-manel marked this pull request as ready for review October 28, 2026 15:14

@oscerd oscerd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TL;DR

Comment. The three fixes are correct, each has a test that would fail without it, and CI ran all four new tests; no code blocker, but the branch conflicts with main in the 4.24 upgrade guide and needs a rebase before it can merge.

Blockers: None. (The conflict in camel-4x-upgrade-guide-4_24.adoc needs a rebase, see 1; it is not a defect in the change.)

Other findings: 4 (1 rebase needed, 3 non-blocking suggestions).


Thank you for the careful work here, and for a description that shows the failures before the fix and the mutation the consumer test catches.

What works well

  • Good catch that the consumer's de-duplication depends on the header type (GitCommitConsumer.java:75-84): with only the header changed, every poll would deliver every commit again. commitIdIsTheShaTest (GitConsumerCommitTest.java:69-86) pins that with setAssertPeriod(2000) instead of a sleep.
  • The existence check at GitProducer.java:250 is the same one JGit's CreateBranchCommand runs (CreateBranchCommand.java:91 in JGit 7.8.0, the version camel-git uses), so our check and JGit's never disagree on whether the branch exists. Leaving the tagName path as it was, so that a tag is never ignored, is a good call.
  • The commit consumer now matches the branch and tag consumers, which already put ref.getObjectId().getName() in their header (GitBranchConsumer.java:49, GitTagConsumer.java:48). The new direct:commit-all-operation route (GitProducerTest.java:1003) gives commitAll its first real test, since direct:commit-all (:1002) uses operation=commit.

Findings

1. [Important] Rebase needed: the upgrade guide conflicts with main at its last line.
docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc is the only file that both this PR and main changed since the merge base 931bee0a80d1. The PR appends its section at the end of the file (lines 3872-3885 at head), and 012274993a9b (CAMEL-26135, #28576, merged today) appended === camel-spring - a CamelEvent only goes to the consumers of the same name at the same place, so GitHub reports a conflict. Merge commit 297f9d23 already resolved one conflict at this spot. The 4.24 guide has no fixed order, and several of today's PRs inserted their section mid-file (camel-stax, camel-csv, camel-sjms, camel-ftp). When we rebase, moving the camel-git section away from the end should stop it from colliding with every PR that appends to the guide, for example after === camel-github2 - the commit consumer routes the commits beyond the newest 100.

2. [Suggestion, non-blocking] Checkout of an existing branch picks a tag with the same name.
On the existing-branch path, GitProducer.java:251 passes the short name to git.checkout().setName(...). JGit's CheckoutCommand resolves that name through RefDatabase.SEARCH_PATH, where refs/tags/ comes before refs/heads/ (CheckoutCommand.java:220 and :256-258, RefDatabase.java:49-54, JGit 7.8.0). So when a tag has the same name as the branch, the checkout ends on a detached HEAD at the tag's commit. I ran these two calls in a small standalone JGit 7.8.0 program. With branch x at commit A and tag x at commit B, HEAD ended detached at B, and a following commit landed on no branch (neither x nor master moved). Before this PR, that case failed with RefAlreadyExistsException; now it succeeds without any error, on another commit. Passing the full ref name on this path fixes it (same program: HEAD on refs/heads/x at A):

boolean exists = repo.findRef(Constants.R_HEADS + endpoint.getBranchName()) != null;
if (exists) {
    // the full name, so that a tag with the same name is not checked out instead
    git.checkout().setName(Constants.R_HEADS + endpoint.getBranchName()).call();
} else {
    git.checkout().setCreateBranch(true).setName(endpoint.getBranchName()).call();
}

The creation path has to keep the short name, because CreateBranchCommand adds refs/heads/ itself (CreateBranchCommand.java:141). That path has the same ambiguity on main today: with a tag y and no branch y, it creates y at HEAD and then detaches at the tag. The other operations that switch branch with setCreateBranch(false).setName(branchName) (add, remove, commit, status, log, cherryPick, clean) share it too. A follow-up Jira looks like a better place for those than this PR.

3. [Suggestion] checkoutExistingBranchTest cannot tell the existing branch from HEAD.
In GitProducerTest.java:97-111 the branch is created on the commit master is on. So the final getBranch() check would also pass if checkout re-created the branch at HEAD, for example after a later change to a forced create. Moving master one commit ahead and comparing HEAD with the branch's commit closes that gap, and needs no new import:

template.sendBody("direct:create-branch", "");
String branchCommit = git.getRepository().resolve(branchTest).getName();
// move master one commit past the branch
File fileToAdd1 = new File(getGitDir(), filenameBranchToAdd);
fileToAdd1.createNewFile();
git.add().addFilepattern(filenameBranchToAdd).call();
git.commit().setMessage(commitMessageBranch).call();

template.sendBody("direct:checkout", "");

assertEquals(branchTest, git.getRepository().getBranch());
assertEquals(branchCommit, git.getRepository().resolve("HEAD").getName());

Adding git.tag().setName(branchTest).call(); after the second commit would make this the regression test for point 2: it fails on the current head and passes with the full ref name.

4. [Suggestion] Upgrade guide: say that commit and commitAll replace the header.
GitProducer.java:348 and :385 overwrite any CamelGitCommitId already on the message. A route that consumes commits (type=commit) and then runs commit now sees the sha of the new commit instead of the consumed one. A route that sets the header for a later cherryPick (read at GitProducer.java:588-589) and runs a commit in between now cherry-picks the new commit. One sentence in the second paragraph of the section would cover both, for example: "The header replaces a CamelGitCommitId already on the message, such as the one set by the commit consumer."

Checked

Each fix has a test that would fail without it. The new tests use JUnit assertions like the rest of camel-git. There is no Thread.sleep and no fully qualified class name. Both copies of git.json and GitEndpointBuilderFactory are regenerated, and the uncommitted-changes check is green. The upgrade-guide entry is present, and the commit carries the Co-Authored-By trailer. CI run 40694050135 on b1da32b8 ran GitProducerTest (38 tests, 35 on main) and GitConsumerCommitTest (2 tests, 1 on main) with no failures. The earlier gnodet-bot review (on 297f9d23) reported no issues, and the only commit since then is the Regen commit; the points above add to it.

This is a rules-and-conventions review and not a substitute for static analysis tools.

Reviewed with Claude Code on behalf of oscerd. This review was generated by an AI agent and may contain inaccuracies; please verify all suggestions before applying.

vignesh-manel and others added 3 commits October 28, 2026 23:35
…ed by a tag of the same name

JGit's checkout resolves a short name through the search path, where
refs/tags comes before refs/heads, so a tag with the name of the branch was
checked out instead (detached HEAD at the tag's commit). The existing
branch is now checked out by its full name, refs/heads/<branchName>.

checkoutExistingBranchTest now moves master one commit past the branch and
tags it with the branch name, and checks that HEAD is the branch at its own
commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
…ommitId already on the message

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vignesh-manel

Copy link
Copy Markdown
Contributor Author

@oscerd thanks for the review, and for running the JGit case. All four points are done:

  1. Upgrade-guide conflict: main is merged in (bbecc69; a normal merge, no rebase, since we don't force-push this branch). The camel-git section now sits after === camel-github2 - the commit consumer routes the commits beyond the newest 100 instead of at the end of the file.
  2. Tag with the branch name: confirmed and fixed in b1f89cd. The existing branch is checked out by refs/heads/<branchName>, and the create path keeps the short name, as you noted. I left the same ambiguity on the create path and on the other operations that switch branch for a follow-up, as you suggest.
  3. checkoutExistingBranchTest: now moves master one commit past the branch, tags that commit with the branch name, and checks that HEAD is the branch at its own commit. Before the fix it failed with expected: <testBranch> but was: <31c83b3a…> (detached HEAD at the tag), and it passes after.
  4. Upgrade guide: says that commit and commitAll replace a CamelGitCommitId already on the message (a24980b).

Locally, GitProducerTest (38) and GitConsumerCommitTest (2) pass, and sourcecheck is clean. The PR description is updated. CI is running on a24980b.

Claude Code on behalf of vignesh-manel

@oscerd oscerd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TL;DR

Comment. Thanks @vignesh-manel, all four points of my earlier review are addressed on a24980b8, and CI is green.

Blockers: None

Other findings: none.

  • Conflict: main is merged in, and the camel-git note now sits mid-file in the 4.24 guide, away from the appends at the end.
  • Tag with the same name as the branch: the existing-branch path now checks out Constants.R_HEADS + branchName (GitProducer.java), and the creation path keeps the short name, as CreateBranchCommand needs.
  • Test: checkoutExistingBranchTest now moves master one commit past the branch and tags that commit with the branch's name. It then asserts both the branch name and that HEAD is the branch's commit. So it pins the existing-branch behaviour and the tag case together.
  • Upgrade guide: the note says that commit/commitAll replace a CamelGitCommitId already on the message.

The same short-name ambiguity in the other operations that switch branch (add, remove, commit, status, log, cherryPick, clean) is still a candidate for a follow-up Jira, outside this PR.

Reviewed with Claude Code on behalf of oscerd. This review was generated by an AI agent and may contain inaccuracies; please verify all suggestions before applying.

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes since my last review: the points I raised are addressed, and CI is green on the current head.

Reviewed with Claude Code on behalf of davsclaus. This review was generated by an AI agent and may contain inaccuracies; please verify all suggestions before applying.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants