@@ -742,6 +742,7 @@ function preparePullRequestThread(
742742function makeManager ( input ?: {
743743 ghScenario ?: FakeGhScenario ;
744744 sourceControlProvider ?: SourceControlProvider [ "Service" ] ;
745+ sourceControlContext ?: SourceControlProviderRegistry . SourceControlProviderHandle [ "context" ] ;
745746 textGeneration ?: Partial < FakeGitTextGeneration > ;
746747 serverSettings ?: Parameters < typeof ServerSettings . layerTest > [ 0 ] ;
747748 setupScriptRunner ?: ProjectSetupScriptRunner . ProjectSetupScriptRunner [ "Service" ] ;
@@ -840,7 +841,8 @@ function makeManager(input?: {
840841 SourceControlProviderRegistry . SourceControlProviderRegistry . of ( {
841842 resolveLink : ( input ) => provider . resolveLink ?.( input ) ,
842843 get : ( ) => Effect . succeed ( provider ) ,
843- resolveHandle : ( ) => Effect . succeed ( { provider, context : null } ) ,
844+ resolveHandle : ( ) =>
845+ Effect . succeed ( { provider, context : input ?. sourceControlContext ?? null } ) ,
844846 resolve : ( ) => Effect . succeed ( provider ) ,
845847 discover : Effect . succeed ( [ ] ) ,
846848 } ) ,
@@ -3587,6 +3589,63 @@ it.layer(layerGitManagerTest)("GitManager", (it) => {
35873589 } ) ,
35883590 ) ;
35893591
3592+ it . effect . each ( [ false , true ] ) (
3593+ "keeps a published non-GitHub base with a bound target context (fork: %s)" ,
3594+ ( fork ) =>
3595+ Effect . gen ( function * ( ) {
3596+ const repoDir = yield * makeTempDir ( "t3code-git-manager-" ) ;
3597+ yield * initRepo ( repoDir ) ;
3598+ const originDir = yield * createBareRemote ( ) ;
3599+ const publishDir = yield * createBareRemote ( ) ;
3600+ yield * runGit ( repoDir , [ "remote" , "add" , "origin" , originDir ] ) ;
3601+ yield * runGit ( repoDir , [ "remote" , "add" , "publish" , fork ? publishDir : originDir ] ) ;
3602+ yield * runGit ( repoDir , [ "push" , "origin" , "main" ] ) ;
3603+ yield * runGit ( repoDir , [ "checkout" , "-b" , "parent" ] ) ;
3604+ NodeFS . writeFileSync ( NodePath . join ( repoDir , "parent.txt" ) , "parent work\n" ) ;
3605+ yield * runGit ( repoDir , [ "add" , "." ] ) ;
3606+ yield * runGit ( repoDir , [ "commit" , "-m" , "Parent commit" ] ) ;
3607+ yield * runGit ( repoDir , [ "push" , "origin" , "parent" ] ) ;
3608+ yield * runGit ( repoDir , [ "checkout" , "-b" , "child" ] ) ;
3609+ NodeFS . writeFileSync ( NodePath . join ( repoDir , "child.txt" ) , "child work\n" ) ;
3610+ yield * runGit ( repoDir , [ "add" , "." ] ) ;
3611+ yield * runGit ( repoDir , [ "commit" , "-m" , "Child commit" ] ) ;
3612+ yield * runGit ( repoDir , [ "push" , "-u" , "publish" , "child" ] ) ;
3613+ yield * runGit ( repoDir , [ "config" , "branch.child.gh-merge-base" , "parent" ] ) ;
3614+ // A narrow refspec keeps parent cached only under origin, even after status refreshes.
3615+ yield * runGit ( repoDir , [
3616+ "config" ,
3617+ "remote.publish.fetch" ,
3618+ "+refs/heads/child:refs/remotes/publish/child" ,
3619+ ] ) ;
3620+ const { service } = createGitHubProviderWithFakeGh ( {
3621+ defaultBranch : "main" ,
3622+ prListSequence : [ "[]" , "[]" ] ,
3623+ } ) ;
3624+ const kind = SourceControlProviderKind . make ( "gitcafe" ) ;
3625+ const generatedInputs : TextGeneration . PrContentGenerationInput [ ] = [ ] ;
3626+ const { manager } = yield * makeManager ( {
3627+ sourceControlProvider : { ...service , kind } ,
3628+ sourceControlContext : {
3629+ provider : { kind, name : "GitCafe" , baseUrl : "https://git.cafe" } ,
3630+ remoteName : "origin" ,
3631+ remoteUrl : originDir ,
3632+ } ,
3633+ textGeneration : {
3634+ generatePrContent : ( input ) => {
3635+ generatedInputs . push ( input ) ;
3636+ return Effect . succeed ( { title : "Child PR" , body : "Child body" } ) ;
3637+ } ,
3638+ } ,
3639+ } ) ;
3640+ const result = yield * runStackedAction ( manager , { cwd : repoDir , action : "create_pr" } ) ;
3641+
3642+ expect ( result . pr . baseBranch ) . toBe ( "parent" ) ;
3643+ expect ( result . toast . description ) . not . toContain ( "unavailable" ) ;
3644+ expect ( generatedInputs [ 0 ] ! . commitSummary ) . toContain ( "Child commit" ) ;
3645+ expect ( generatedInputs [ 0 ] ! . commitSummary ) . not . toContain ( "Parent commit" ) ;
3646+ } ) ,
3647+ ) ;
3648+
35903649 it . effect . each ( [
35913650 { remoteConfig : "branch.child.remote" , baseRef : null , target : "origin" } ,
35923651 { remoteConfig : "branch.child.pushRemote" , baseRef : null , target : "origin" } ,
0 commit comments