@@ -103,79 +103,85 @@ loadUnisonFile sourceName text = do
103103 let newPpe = PPED. suffixifiedPPE (PPED. makePPED (PPE. hqNamer 10 newNames) (PPE. suffixifyByHash newNames))
104104 pp <- Cli. getCurrentProjectPath
105105
106- maybeUpdateOrUpgradeBranchParentCausalHash <-
107- if pp. branch. isUpdate || pp. branch. isUpgrade
106+ -- If we're on an update, upgrade, or merge branch, we have special logic to render changes relative to the parent
107+ -- branch (in a merge branch, that's the branch we're merging into). This is because, on these branches, dependents
108+ -- have been pulled out of the underlying namespace and put into the scratch file (so that we can support deleting
109+ -- things). Without this special logic, all of these things would be classified as new definitions.
110+
111+ maybeSpecialBranchParentCausalHash <-
112+ if pp. branch. isUpdate || pp. branch. isUpgrade || pp. branch. isMerge
108113 then case pp. branch. parentBranchId of
109114 Nothing -> pure Nothing
110115 Just parentBranchId ->
111116 Just <$> Cli. runTransaction (Queries. expectProjectBranchHeadHash pp. project. projectId parentBranchId)
112117 else pure Nothing
113118
114- case maybeUpdateOrUpgradeBranchParentCausalHash of
115- Nothing -> do
116- slurpEntries <-
117- Cli. runTransaction do
118- terms <-
119- slurpTerms
120- env. codebase
121- unisonFile
122- False
123- (Relation. domain oldNames. terms)
124- (Relation. domain unisonFileNames. terms)
125- types <-
126- slurpTypes
127- env. codebase
128- unisonFile
129- False
130- (Relation. domain oldNames. types)
131- (Relation. domain unisonFileNames. types)
132- pure Defns {terms, types}
133-
134- let aliases :: Map Referent (NESet Name )
135- aliases =
136- getTermAliases oldNames. terms slurpEntries. terms
137-
138- let oldPpe =
139- PPED. suffixifiedPPE (PPED. makePPED (PPE. hqNamer 10 oldNames) (PPE. suffixifyByHash oldNames))
140-
141- Cli. respond (Output. Typechecked oldPpe newPpe slurpEntries aliases)
142- Just updateOrUpgradeBranchParentCausalHash -> do
143- updateOrUpgradeBranchParent <- liftIO (Codebase. expectBranchForHash env. codebase updateOrUpgradeBranchParentCausalHash)
144- let updateOrUpgradeBranchParent0 = Branch. head updateOrUpgradeBranchParent
145- let updateOrUpgradeBranchParentNames = Branch. toNames updateOrUpgradeBranchParent0
146- let updateOrUpgradeBranchParentLocalNames = Branch. toNames (Branch. deleteLibdeps updateOrUpgradeBranchParent0)
147- let updateOrUpgradeBranchLocalNames =
148- Names. shadowing unisonFileNames (Branch. toNames (Branch. deleteLibdeps oldBranch0))
119+ (oldPpe, slurpEntries, existingTerms) <-
120+ case maybeSpecialBranchParentCausalHash of
121+ Nothing -> do
122+ slurpEntries <-
123+ Cli. runTransaction do
124+ terms <-
125+ slurpTerms
126+ env. codebase
127+ unisonFile
128+ False
129+ (Relation. domain oldNames. terms)
130+ (Relation. domain unisonFileNames. terms)
131+ types <-
132+ slurpTypes
133+ env. codebase
134+ unisonFile
135+ False
136+ (Relation. domain oldNames. types)
137+ (Relation. domain unisonFileNames. types)
138+ pure Defns {terms, types}
149139
150- slurpEntries <-
151- Cli. runTransaction do
152- terms <-
153- slurpTerms
154- env. codebase
155- unisonFile
156- True
157- (Relation. domain updateOrUpgradeBranchParentLocalNames. terms)
158- (Relation. domain updateOrUpgradeBranchLocalNames. terms)
159- types <-
160- slurpTypes
161- env. codebase
162- unisonFile
163- False
164- (Relation. domain updateOrUpgradeBranchParentLocalNames. types)
165- (Relation. domain updateOrUpgradeBranchLocalNames. types)
166- pure Defns {terms, types}
140+ pure
141+ ( PPED. suffixifiedPPE (PPED. makePPED (PPE. hqNamer 10 oldNames) (PPE. suffixifyByHash oldNames)),
142+ slurpEntries,
143+ oldNames. terms
144+ )
145+ Just specialBranchParentCausalHash -> do
146+ specialBranchParent <- liftIO (Codebase. expectBranchForHash env. codebase specialBranchParentCausalHash)
147+ let specialBranchParent0 = Branch. head specialBranchParent
148+ let specialBranchParentNames = Branch. toNames specialBranchParent0
149+ let specialBranchParentLocalNames = Branch. toNames (Branch. deleteLibdeps specialBranchParent0)
150+ let specialBranchLocalNames =
151+ Names. shadowing unisonFileNames (Branch. toNames (Branch. deleteLibdeps oldBranch0))
167152
168- let aliases :: Map Referent (NESet Name )
169- aliases =
170- getTermAliases updateOrUpgradeBranchParentNames. terms slurpEntries. terms
153+ slurpEntries <-
154+ Cli. runTransaction do
155+ terms <-
156+ slurpTerms
157+ env. codebase
158+ unisonFile
159+ True
160+ (Relation. domain specialBranchParentLocalNames. terms)
161+ (Relation. domain specialBranchLocalNames. terms)
162+ types <-
163+ slurpTypes
164+ env. codebase
165+ unisonFile
166+ False
167+ (Relation. domain specialBranchParentLocalNames. types)
168+ (Relation. domain specialBranchLocalNames. types)
169+ pure Defns {terms, types}
171170
172- let oldPpe =
173- PPED. suffixifiedPPE $
171+ pure
172+ ( PPED. suffixifiedPPE $
174173 PPED. makePPED
175- (PPE. hqNamer 10 updateOrUpgradeBranchParentNames)
176- (PPE. suffixifyByHash updateOrUpgradeBranchParentNames)
174+ (PPE. hqNamer 10 specialBranchParentNames)
175+ (PPE. suffixifyByHash specialBranchParentNames),
176+ slurpEntries,
177+ specialBranchParentNames. terms
178+ )
179+
180+ let aliases :: Map Referent (NESet Name )
181+ aliases =
182+ getTermAliases existingTerms slurpEntries. terms
177183
178- Cli. respond (Output. Typechecked oldPpe newPpe slurpEntries aliases)
184+ Cli. respond (Output. Typechecked oldPpe newPpe slurpEntries aliases pp . branch . isMerge )
179185
180186 when (not . null $ UF. watchComponents unisonFile) do
181187 Timing. time " evaluating watches" do
0 commit comments