Non-zero exit code 129 BCMA Migration Failure
Platform Notice: Cloud, Server, and Data Center - This article applies equally to all platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
Summary
Unable to migrate repository to Bitbucket Cloud due to Git error code 129.
2022-12-10 11:11:11,101 ERROR [bcma-4] c.a.b.s.g.c.GitCommandExitHandler [/bin/git rev-list --format=%H%x02%P%x02%aN%x02%aE%x02%at%x02%cN%x02%cE%x02%ct%n%B%n%x03END%x04 --ignore-missing --stdin --no-walk=unsorted --] The syntax used is incorrect. git exited and printed a usage block
2022-11-11 11:11:11,101 ERROR [bcma-1] c.a.b.p.b.j.MigrationJobPollerDelegate task worker failed to process a task [<...>::BitbucketRepositoryPullRequestUpload::<...>, poller-BitbucketRepositoryPullRequestUpload-<...>]
com.atlassian.bitbucket.scm.CommandUsageException: The syntax used for the command is incorrect.
...
Suppressed: com.atlassian.utils.process.ProcessException: Non-zero exit code: 129
Environment
Any migration from Bitbucket Data Center to Bitbucket Cloud where git 2.24 or earlier is installed on Bitbucket Data Center.
Diagnosis
When upgrading, Bitbucket Data Center will show the following exception in the atlassian-bitbucket.log log:
2022-12-10 11:11:11,101 ERROR [bcma-4] c.a.b.s.g.c.GitCommandExitHandler [/bin/git rev-list --format=%H%x02%P%x02%aN%x02%aE%x02%at%x02%cN%x02%cE%x02%ct%n%B%n%x03END%x04 --ignore-missing --stdin --no-walk=unsorted --] The syntax used is incorrect. git exited and printed a usage block
2022-11-11 11:11:11,101 ERROR [bcma-1] c.a.b.p.b.j.MigrationJobPollerDelegate task worker failed to process a task [<...>::BitbucketRepositoryPullRequestUpload::<...>, poller-BitbucketRepositoryPullRequestUpload-<...>]
com.atlassian.bitbucket.scm.CommandUsageException: The syntax used for the command is incorrect.
at com.atlassian.bitbucket.scm.git.command.GitCommandExitHandler.checkUsage(GitCommandExitHandler.java:63)
at com.atlassian.bitbucket.scm.git.command.GitCommandExitHandler.evaluateStdErr(GitCommandExitHandler.java:69)
at com.atlassian.bitbucket.scm.git.command.GitCommandExitHandler.onError(GitCommandExitHandler.java:204)
at com.atlassian.bitbucket.scm.DefaultCommandExitHandler.onExit(DefaultCommandExitHandler.java:32)
at com.atlassian.bitbucket.internal.process.nu.NioNuProcessHandler.callExitHandler(NioNuProcessHandler.java:314)
at com.atlassian.bitbucket.internal.process.nu.NioNuProcessHandler.finish(NioNuProcessHandler.java:355)
at com.atlassian.bitbucket.internal.process.nu.NioNuProcessHandler.onExit(NioNuProcessHandler.java:122)
at com.zaxxer.nuprocess.internal.BasePosixProcess.onExit(BasePosixProcess.java:317)
at com.zaxxer.nuprocess.linux.ProcessEpoll.handleExit(ProcessEpoll.java:356)
at com.zaxxer.nuprocess.linux.ProcessEpoll.cleanupProcess(ProcessEpoll.java:319)
at com.zaxxer.nuprocess.linux.ProcessEpoll.process(ProcessEpoll.java:257)
at com.zaxxer.nuprocess.internal.BaseEventProcessor.run(BaseEventProcessor.java:86)
at com.zaxxer.nuprocess.linux.ProcessEpoll.run(ProcessEpoll.java:163)
at com.zaxxer.nuprocess.linux.LinuxProcess.run(LinuxProcess.java:111)
at com.zaxxer.nuprocess.linux.LinProcessFactory.runProcess(LinProcessFactory.java:50)
at com.zaxxer.nuprocess.NuProcessBuilder.run(NuProcessBuilder.java:275)
at com.atlassian.bitbucket.internal.process.nu.NuNioProcessHelper.run(NuNioProcessHelper.java:75)
at com.atlassian.bitbucket.internal.process.NioCommand.call(NioCommand.java:52)
at com.atlassian.stash.internal.commit.DefaultCommitService.streamCommits(DefaultCommitService.java:248)
at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.CommentService.getCommitOrNull(CommentService.kt:92)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.CommentService.toStashPullRequestAnchor(CommentService.kt:113)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.CommentService.access$toStashPullRequestAnchor(CommentService.kt:23)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.CommentService$getComments$1$1.invoke(CommentService.kt:50)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.CommentService$getComments$1$1.invoke(CommentService.kt:36)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.compat.BitbucketPre714PullRequestActivityService.visitPullRequestActivities$lambda-1$lambda-0(BitbucketPre714PullRequestActivityService.kt:67)
at java.lang.Iterable.forEach(Iterable.java:75)
at com.atlassian.bitbucket.util.PageImpl.forEach(PageImpl.java:92)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.compat.BitbucketPre714PullRequestActivityService.visitPullRequestActivities$lambda-1(BitbucketPre714PullRequestActivityService.kt:67)
at com.atlassian.sal.core.transaction.HostContextTransactionTemplate$1.doInTransaction(HostContextTransactionTemplate.java:21)
at com.atlassian.stash.internal.sal.spi.HostContextAccessorImpl.doInTransaction(HostContextAccessorImpl.java:54)
at com.atlassian.sal.core.transaction.HostContextTransactionTemplate.execute(HostContextTransactionTemplate.java:18)
at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.compat.BitbucketPre714PullRequestActivityService.visitPullRequestActivities(BitbucketPre714PullRequestActivityService.kt:65)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.CommentService.getComments$lambda-0(CommentService.kt:36)
at com.atlassian.stash.internal.user.DefaultEscalatedSecurityContext.call(DefaultEscalatedSecurityContext.java:59)
at com.atlassian.bitbucket.plugin.bcma.pullrequest.CommentService.getComments(CommentService.kt:35)
at com.atlassian.bitbucket.plugin.bcma.jobs.RepositoryPullRequestUploadJob.run(RepositoryPullRequestUploadJob.kt:60)
at com.atlassian.bitbucket.plugin.bcma.jobs.InterruptableMigrationJob.run(InterruptableMigrationJob.kt:37)
at com.atlassian.bitbucket.plugin.bcma.jobs.DefaultMigrationJobService$TrackingMigrationJob.run(DefaultMigrationJobService.kt:77)
at com.atlassian.bitbucket.plugin.bcma.jobs.MigrationJobPollerDelegate$createAndRunJob$2.invoke(MigrationJobPollerDelegate.kt:199)
at com.atlassian.bitbucket.plugin.bcma.jobs.MigrationJobPollerDelegate$createAndRunJob$2.invoke(MigrationJobPollerDelegate.kt:199)
at com.atlassian.bitbucket.plugin.bcma.utils.WorkTracker.createWorkAndRun(WorkTracker.kt:37)
at com.atlassian.bitbucket.plugin.bcma.jobs.MigrationJobPollerDelegate.createAndRunJob(MigrationJobPollerDelegate.kt:196)
at com.atlassian.bitbucket.plugin.bcma.jobs.MigrationJobPollerDelegate.runJob(MigrationJobPollerDelegate.kt:131)
at com.atlassian.bitbucket.plugin.bcma.jobs.MigrationJobPollerDelegate.dispatchTask(MigrationJobPollerDelegate.kt:119)
at com.atlassian.bitbucket.plugin.bcma.jobs.MigrationJobPollerDelegate.pollForTaskAndDispatch(MigrationJobPollerDelegate.kt:98)
at com.atlassian.bitbucket.plugin.bcma.jobs.MigrationJobPollerDelegate.run(MigrationJobPollerDelegate.kt:40)
at com.atlassian.bitbucket.plugin.bcma.polling.Poller.doPoll(Poller.kt:115)
at com.atlassian.sal.core.executor.ThreadLocalDelegateRunnable.run(ThreadLocalDelegateRunnable.java:34)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.lang.Thread.run(Thread.java:748)
... 83 frames trimmed
Suppressed: com.atlassian.utils.process.ProcessException: Non-zero exit code: 129
at com.atlassian.bitbucket.internal.process.nu.NioNuProcessHandler.callExitHandler(NioNuProcessHandler.java:306)
... 62 common frames omitted
Cause
When git rev-list on git version 2.24 or earlier gets a incomplete or null hash, it exits with 129. For git version 2.25 or later, the exit code status is null. Bitbucket Cloud Migration Assistant, BMCA, expects a exit code of 0 when this happens. This error code cause the migration to stop.