Uploaded image for project: 'Bitbucket Data Center'
  1. Bitbucket Data Center
  2. BSERV-10104

Pull request diffs fail for repositories with submodules in directories other than the root

      When a repository has a submodule in a nested directory, as opposed to directly in the project root, pull request diffs cannot be displayed correctly.

      • For Bitbucket Server 4.10 or newer, the UI will display a message indicating the merge diff could not be created
      • For older versions, the UI will indicate the pull request has conflicts but none will be shown

      In the logs, this manifests with an error similar to the following:

      2017-08-30 12:12:12,121 INFO  [http-nio-7990-exec-1] user @3J8EQFx370x444444x4 2zzzzz2 1.1.1.1 "GET /rest/api/latest/projects/KEY/repos/slug/pull-requests/1/merge HTTP/1.1" c.a.s.i.s.g.p.DefaultPullRequestAutoMergeStrategy KEY/slug[1]: Pull request 1@1 failed automatic merging
      com.atlassian.bitbucket.scm.MergeException: The merge could not be completed automatically. Please clone 'KEY/slug', checkout 'master' and merge 'submodule-branch' (or commit '3b0b26edc4b62877663ab1fe5d04069d00319771') manually, resolving any conflicts, and push the result.
      	at com.atlassian.stash.internal.scm.git.merge.MergeCommand.newMergeException(MergeCommand.java:172)
      	at com.atlassian.stash.internal.scm.git.merge.MergeCommand.doWithWorkTree(MergeCommand.java:166)
      	at com.atlassian.stash.internal.scm.git.merge.MergeCommand.call(MergeCommand.java:68)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestAutoMergeStrategy.doMerge(DefaultPullRequestAutoMergeStrategy.java:104)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestAutoMergeStrategy.merge(DefaultPullRequestAutoMergeStrategy.java:72)
      	at com.atlassian.stash.internal.scm.git.pull.CompositePullRequestAutoMergeStrategy.merge(CompositePullRequestAutoMergeStrategy.java:22)
      	at com.atlassian.stash.internal.scm.git.pull.CachingPullRequestAutoMergeStrategy.merge(CachingPullRequestAutoMergeStrategy.java:49)
      	at com.atlassian.stash.internal.scm.git.pull.CompositePullRequestAutoMergeStrategy.merge(CompositePullRequestAutoMergeStrategy.java:22)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper.resolveNewEffectiveDiff(DefaultPullRequestRefHelper.java:425)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper.access$500(DefaultPullRequestRefHelper.java:53)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper$EffectiveDiffOperation.perform(DefaultPullRequestRefHelper.java:545)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper$EffectiveDiffOperation.perform(DefaultPullRequestRefHelper.java:510)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper$AbstractOperation.perform(DefaultPullRequestRefHelper.java:476)
      	at com.atlassian.stash.internal.concurrent.ClusterMappedLock.withLock(ClusterMappedLock.java:49)
      	at com.atlassian.stash.internal.concurrent.ClusterPullRequestLock.withLock(ClusterPullRequestLock.java:25)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper.withLock(DefaultPullRequestRefHelper.java:458)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper.access$300(DefaultPullRequestRefHelper.java:53)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper$EffectiveDiffOperation.call(DefaultPullRequestRefHelper.java:522)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper$EffectiveDiffOperation.call(DefaultPullRequestRefHelper.java:510)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at com.atlassian.util.concurrent.ConcurrentOperationMapImpl$CallerRunsFuture.get(ConcurrentOperationMapImpl.java:63)
      	at com.atlassian.util.concurrent.ConcurrentOperationMapImpl.runOperation(ConcurrentOperationMapImpl.java:51)
      	at com.atlassian.stash.internal.scm.git.pull.DefaultPullRequestRefHelper.resolveEffectiveDiff(DefaultPullRequestRefHelper.java:132)
      	at com.atlassian.stash.internal.scm.git.DefaultGitPullRequestCommandFactory$2.call(DefaultGitPullRequestCommandFactory.java:181)
      	at com.atlassian.stash.internal.scm.git.DefaultGitPullRequestCommandFactory$2.call(DefaultGitPullRequestCommandFactory.java:177)
      	at com.atlassian.stash.internal.pull.DefaultMergeRequestCheckService.tryMerge(DefaultMergeRequestCheckService.java:70)
      	at com.atlassian.stash.internal.pull.DefaultMergeRequestCheckService.checkMergeability(DefaultMergeRequestCheckService.java:47)
      	at com.atlassian.stash.internal.pull.DefaultPullRequestService.canMerge(DefaultPullRequestService.java:246)
      	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.stash.internal.rest.pull.PullRequestResource.canMerge(PullRequestResource.java:480)
      	at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)
      	at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)
      	at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)
      	at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)
      	at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)
      	at com.atlassian.analytics.client.filter.UniversalAnalyticsFilter.doFilter(UniversalAnalyticsFilter.java:92)
      	at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:39)
      	at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)
      	at com.atlassian.plugin.connect.plugin.auth.scope.ApiScopingFilter.doFilter(ApiScopingFilter.java:81)
      	at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)
      	at com.atlassian.stash.internal.spring.security.StashAuthenticationFilter.doFilter(StashAuthenticationFilter.java:88)
      	at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doInsideSpringSecurityChain(BeforeLoginPluginAuthenticationFilter.java:112)
      	at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doFilter(BeforeLoginPluginAuthenticationFilter.java:75)
      	at com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:94)
      	at com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:67)
      	at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)
      	at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.doFilter(ThreeLeggedAuthFilter.java:109)
      	at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32)
      	at com.atlassian.analytics.client.filter.DefaultAnalyticsFilter.doFilter(DefaultAnalyticsFilter.java:38)
      	at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:39)
      	at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)
      	at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doBeforeBeforeLoginFilters(BeforeLoginPluginAuthenticationFilter.java:90)
      	at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doFilter(BeforeLoginPluginAuthenticationFilter.java:73)
      	at com.atlassian.stash.internal.request.DefaultRequestManager.doAsRequest(DefaultRequestManager.java:89)
      	at com.atlassian.stash.internal.hazelcast.ConfigurableWebFilter.doFilter(ConfigurableWebFilter.java:38)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.lang.Thread.run(Thread.java:745)
      	... 307 frames trimmed
      Caused by: java.lang.IllegalStateException: Could not create conflict file for submodule in path: path/to/submodule
      	at com.atlassian.stash.internal.scm.git.pull.MergeConflictHandler.visit(MergeConflictHandler.java:219)
      	at com.atlassian.bitbucket.scm.git.command.merge.conflict.SubmoduleGitMergeConflict.accept(SubmoduleGitMergeConflict.java:19)
      	at com.atlassian.stash.internal.scm.git.pull.PullRequestAutoMergeCommand.handleConflicts(PullRequestAutoMergeCommand.java:190)
      	at com.atlassian.stash.internal.scm.git.pull.PullRequestAutoMergeCommand.commitConflicts(PullRequestAutoMergeCommand.java:128)
      	at com.atlassian.stash.internal.scm.git.pull.PullRequestAutoMergeCommand.doMerge(PullRequestAutoMergeCommand.java:106)
      	at com.atlassian.stash.internal.scm.git.merge.MergeCommand.doWithWorkTree(MergeCommand.java:126)
      	... 61 common frames omitted
      

            [BSERV-10104] Pull request diffs fail for repositories with submodules in directories other than the root

            There are no comments yet on this issue.

              bturner Bryan Turner (Inactive)
              bturner Bryan Turner (Inactive)
              Affected customers:
              0 This affects my team
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: