@@ -45,11 +45,11 @@ func runChangerator(commit *model.Commit, breakingConfig *whatChangedModel.Break
4545
4646 rightModel , err := commit .Document .BuildV3Model ()
4747 if err != nil {
48- return nil , fmt . Errorf ( "building right model: %w" , err )
48+ return nil , modelBuildError ( "modified" , commitSourceLabel ( commit , true ) , err )
4949 }
5050 leftModel , err := commit .OldDocument .BuildV3Model ()
5151 if err != nil {
52- return nil , fmt . Errorf ( "building left model: %w" , err )
52+ return nil , modelBuildError ( "original" , commitSourceLabel ( commit , false ) , err )
5353 }
5454
5555 rightDrDoc := drModel .NewDrDocumentAndGraph (rightModel )
@@ -180,6 +180,73 @@ func rewriteDocumentLocation(raw string, rewriters []model.DocumentPathRewriter)
180180 return raw
181181}
182182
183- func emitCommitWarning (commitHash string , err error ) {
184- fmt .Fprintf (os .Stderr , "warning: commit %s: %s\n " , commitHash , err )
183+ func modelBuildError (side , label string , err error ) error {
184+ if label == "" {
185+ return fmt .Errorf ("building %s model: %w" , side , err )
186+ }
187+ return fmt .Errorf ("building %s model '%s': %w" , side , label , err )
188+ }
189+
190+ func commitSourceLabel (commit * model.Commit , modified bool ) string {
191+ if commit == nil {
192+ return ""
193+ }
194+ if modified {
195+ if commit .ModifiedSource != "" {
196+ return commit .ModifiedSource
197+ }
198+ if commit .FilePath != "" {
199+ return commit .FilePath
200+ }
201+ return ""
202+ }
203+ if commit .OriginalSource != "" {
204+ return commit .OriginalSource
205+ }
206+ if commit .FilePath != "" {
207+ return commit .FilePath
208+ }
209+ return ""
210+ }
211+
212+ func commitContextLabel (commit * model.Commit ) string {
213+ if commit == nil {
214+ return ""
215+ }
216+ if commit .Synthetic {
217+ switch {
218+ case commit .OriginalSource != "" && commit .ModifiedSource != "" :
219+ return fmt .Sprintf ("comparison '%s' -> '%s'" , commit .OriginalSource , commit .ModifiedSource )
220+ case commit .ModifiedSource != "" :
221+ return fmt .Sprintf ("comparison '%s'" , commit .ModifiedSource )
222+ case commit .OriginalSource != "" :
223+ return fmt .Sprintf ("comparison '%s'" , commit .OriginalSource )
224+ }
225+ }
226+ if commit .Hash != "" && commit .FilePath != "" {
227+ return fmt .Sprintf ("commit %s (%s)" , commit .Hash , commit .FilePath )
228+ }
229+ if commit .Hash != "" {
230+ return fmt .Sprintf ("commit %s" , commit .Hash )
231+ }
232+ if commit .FilePath != "" {
233+ return fmt .Sprintf ("file '%s'" , commit .FilePath )
234+ }
235+ return ""
236+ }
237+
238+ func wrapCommitError (commit * model.Commit , err error ) error {
239+ if err == nil {
240+ return nil
241+ }
242+ if label := commitContextLabel (commit ); label != "" {
243+ return fmt .Errorf ("%s: %w" , label , err )
244+ }
245+ return err
246+ }
247+
248+ func emitCommitWarning (commit * model.Commit , err error ) {
249+ if wrapped := wrapCommitError (commit , err ); wrapped != nil {
250+ fmt .Fprintf (os .Stderr , "warning: %s\n " , wrapped )
251+ }
185252}
0 commit comments