@@ -99,101 +99,108 @@ public int Enrich(TfsProcessor processor, WorkItemData sourceWorkItem, WorkItem
9999 if ( l is ExternalLink && gitWits . Contains ( l . ArtifactLinkType . Name ) )
100100 {
101101 ExternalLink el = ( ExternalLink ) l ;
102-
103- TfsGitRepositoryInfo sourceRepoInfo = TfsGitRepositoryInfo . Create ( el , sourceRepos , changeSetMappings , sourceWorkItem ? . ProjectName ) ;
104-
105- // if sourceRepo is null ignore this link and keep processing further links
106- if ( sourceRepoInfo == null )
102+ if ( Options . ShouldDropChangedSetLinks )
107103 {
108- continue ;
104+ Log . LogDebug ( "Dropping changeset {Id}" , el . LinkedArtifactUri ) ;
105+ removeEL . Add ( el ) ;
109106 }
110-
111- // if repo was not found in source project, try to find it by repoId in the whole project collection
112- if ( sourceRepoInfo . GitRepo == null )
107+ else
113108 {
114- var anyProjectSourceRepoInfo = TfsGitRepositoryInfo . Create ( el , allSourceRepos , changeSetMappings , sourceWorkItem ? . ProjectName ) ;
115- // if repo is found in a different project and the repo Name is listed in repo mappings, use it
116- if ( anyProjectSourceRepoInfo . GitRepo != null && Options . Mappings . ContainsKey ( anyProjectSourceRepoInfo . GitRepo . Name ) )
117- {
118- sourceRepoInfo = anyProjectSourceRepoInfo ;
119- }
120- else
109+ TfsGitRepositoryInfo sourceRepoInfo = TfsGitRepositoryInfo . Create ( el , sourceRepos , changeSetMappings , sourceWorkItem ? . ProjectName ) ;
110+
111+ // if sourceRepo is null ignore this link and keep processing further links
112+ if ( sourceRepoInfo == null )
121113 {
122- Log . LogWarning ( "GitRepositoryEnricher: Could not find source git repo - repo referenced: {SourceRepoName}/{TargetRepoName}" , anyProjectSourceRepoInfo ? . GitRepo ? . ProjectReference ? . Name , anyProjectSourceRepoInfo ? . GitRepo ? . Name ) ;
114+ continue ;
123115 }
124- }
125116
126- if ( sourceRepoInfo . GitRepo != null )
127- {
128- string targetRepoName = GetTargetRepoName ( Options . Mappings , sourceRepoInfo ) ;
129- string sourceProjectName = sourceRepoInfo ? . GitRepo ? . ProjectReference ? . Name ?? _processor . Target . Options . Project ;
130- string targetProjectName = _processor . Target . Options . Project ;
131-
132- TfsGitRepositoryInfo targetRepoInfo = TfsGitRepositoryInfo . Create ( targetRepoName , sourceRepoInfo , targetRepos ) ;
133- // if repo was not found in the target project, try to find it in the whole target project collection
134- if ( targetRepoInfo . GitRepo == null )
117+ // if repo was not found in source project, try to find it by repoId in the whole project collection
118+ if ( sourceRepoInfo . GitRepo == null )
135119 {
136- if ( Options . Mappings . Values . Contains ( targetRepoName ) )
120+ var anyProjectSourceRepoInfo = TfsGitRepositoryInfo . Create ( el , allSourceRepos , changeSetMappings , sourceWorkItem ? . ProjectName ) ;
121+ // if repo is found in a different project and the repo Name is listed in repo mappings, use it
122+ if ( anyProjectSourceRepoInfo . GitRepo != null && Options . Mappings . ContainsKey ( anyProjectSourceRepoInfo . GitRepo . Name ) )
137123 {
138- var anyTargetRepoInCollectionInfo = TfsGitRepositoryInfo . Create ( targetRepoName , sourceRepoInfo , allTargetRepos ) ;
139- if ( anyTargetRepoInCollectionInfo . GitRepo != null )
140- {
141- targetRepoInfo = anyTargetRepoInCollectionInfo ;
142- }
124+ sourceRepoInfo = anyProjectSourceRepoInfo ;
125+ }
126+ else
127+ {
128+ Log . LogWarning ( "GitRepositoryEnricher: Could not find source git repo - repo referenced: {SourceRepoName}/{TargetRepoName}" , anyProjectSourceRepoInfo ? . GitRepo ? . ProjectReference ? . Name , anyProjectSourceRepoInfo ? . GitRepo ? . Name ) ;
143129 }
144130 }
145131
146- // Fix commit links if target repo has been found
147- if ( targetRepoInfo . GitRepo != null )
132+ if ( sourceRepoInfo . GitRepo != null )
148133 {
149- Log . LogDebug ( "GitRepositoryEnricher: Fixing {SourceRepoUrl} to {TargetRepoUrl}?" , sourceRepoInfo . GitRepo . RemoteUrl , targetRepoInfo . GitRepo . RemoteUrl ) ;
134+ string targetRepoName = GetTargetRepoName ( Options . Mappings , sourceRepoInfo ) ;
135+ string sourceProjectName = sourceRepoInfo ? . GitRepo ? . ProjectReference ? . Name ?? _processor . Target . Options . Project ;
136+ string targetProjectName = _processor . Target . Options . Project ;
150137
151- // Create External Link object
152- ExternalLink newLink = null ;
153- switch ( l . ArtifactLinkType . Name )
138+ TfsGitRepositoryInfo targetRepoInfo = TfsGitRepositoryInfo . Create ( targetRepoName , sourceRepoInfo , targetRepos ) ;
139+ // if repo was not found in the target project, try to find it in the whole target project collection
140+ if ( targetRepoInfo . GitRepo == null )
154141 {
155- case "Branch" :
156- newLink = new ExternalLink ( ( ( TfsWorkItemMigrationClient ) _processor . Target . WorkItems ) . Store . RegisteredLinkTypes [ ArtifactLinkIds . Branch ] ,
157- $ "vstfs:///git/ref/{ targetRepoInfo . GitRepo . ProjectReference . Id } %2f{ targetRepoInfo . GitRepo . Id } %2f{ sourceRepoInfo . CommitID } ") ;
158- break ;
159-
160- case "Fixed in Changeset" : // TFVC
161- case "Fixed in Commit" :
162- newLink = new ExternalLink ( ( ( TfsWorkItemMigrationClient ) _processor . Target . WorkItems ) . Store . RegisteredLinkTypes [ ArtifactLinkIds . Commit ] ,
163- $ "vstfs:///git/commit/{ targetRepoInfo . GitRepo . ProjectReference . Id } %2f{ targetRepoInfo . GitRepo . Id } %2f{ sourceRepoInfo . CommitID } ") ;
164- newLink . Comment = el . Comment ;
165- break ;
166-
167- case "Pull Request" :
168- //newLink = new ExternalLink(targetStore.Store.RegisteredLinkTypes[ArtifactLinkIds.PullRequest],
169- // $"vstfs:///Git/PullRequestId/{targetRepoInfo.GitRepo.ProjectReference.Id}%2f{targetRepoInfo.GitRepo.Id}%2f{sourceRepoInfo.CommitID}");
170- removeEL . Add ( el ) ;
171- break ;
172-
173- default :
174- Log . LogWarning ( "Skipping unsupported link type {0}" , l . ArtifactLinkType . Name ) ;
175- break ;
142+ if ( Options . Mappings . Values . Contains ( targetRepoName ) )
143+ {
144+ var anyTargetRepoInCollectionInfo = TfsGitRepositoryInfo . Create ( targetRepoName , sourceRepoInfo , allTargetRepos ) ;
145+ if ( anyTargetRepoInCollectionInfo . GitRepo != null )
146+ {
147+ targetRepoInfo = anyTargetRepoInCollectionInfo ;
148+ }
149+ }
176150 }
177151
178- if ( newLink != null )
152+ // Fix commit links if target repo has been found
153+ if ( targetRepoInfo . GitRepo != null )
179154 {
180- var elinks = from Link lq in targetWorkItem . ToWorkItem ( ) . Links
181- where gitWits . Contains ( lq . ArtifactLinkType . Name )
182- select ( ExternalLink ) lq ;
183- var found =
184- ( from Link lq in elinks
185- where ( ( ExternalLink ) lq ) . LinkedArtifactUri . ToLower ( ) == newLink . LinkedArtifactUri . ToLower ( )
186- select lq ) . SingleOrDefault ( ) ;
187- if ( found == null )
155+ Log . LogDebug ( "GitRepositoryEnricher: Fixing {SourceRepoUrl} to {TargetRepoUrl}?" , sourceRepoInfo . GitRepo . RemoteUrl , targetRepoInfo . GitRepo . RemoteUrl ) ;
156+
157+ // Create External Link object
158+ ExternalLink newLink = null ;
159+ switch ( l . ArtifactLinkType . Name )
160+ {
161+ case "Branch" :
162+ newLink = new ExternalLink ( ( ( TfsWorkItemMigrationClient ) _processor . Target . WorkItems ) . Store . RegisteredLinkTypes [ ArtifactLinkIds . Branch ] ,
163+ $ "vstfs:///git/ref/{ targetRepoInfo . GitRepo . ProjectReference . Id } %2f{ targetRepoInfo . GitRepo . Id } %2f{ sourceRepoInfo . CommitID } ") ;
164+ break ;
165+
166+ case "Fixed in Changeset" : // TFVC
167+ case "Fixed in Commit" :
168+ newLink = new ExternalLink ( ( ( TfsWorkItemMigrationClient ) _processor . Target . WorkItems ) . Store . RegisteredLinkTypes [ ArtifactLinkIds . Commit ] ,
169+ $ "vstfs:///git/commit/{ targetRepoInfo . GitRepo . ProjectReference . Id } %2f{ targetRepoInfo . GitRepo . Id } %2f{ sourceRepoInfo . CommitID } ") ;
170+ newLink . Comment = el . Comment ;
171+ break ;
172+
173+ case "Pull Request" :
174+ //newLink = new ExternalLink(targetStore.Store.RegisteredLinkTypes[ArtifactLinkIds.PullRequest],
175+ // $"vstfs:///Git/PullRequestId/{targetRepoInfo.GitRepo.ProjectReference.Id}%2f{targetRepoInfo.GitRepo.Id}%2f{sourceRepoInfo.CommitID}");
176+ removeEL . Add ( el ) ;
177+ break ;
178+
179+ default :
180+ Log . LogWarning ( "Skipping unsupported link type {0}" , l . ArtifactLinkType . Name ) ;
181+ break ;
182+ }
183+
184+ if ( newLink != null )
188185 {
189- newEL . Add ( newLink ) ;
186+ var elinks = from Link lq in targetWorkItem . ToWorkItem ( ) . Links
187+ where gitWits . Contains ( lq . ArtifactLinkType . Name )
188+ select ( ExternalLink ) lq ;
189+ var found =
190+ ( from Link lq in elinks
191+ where ( ( ExternalLink ) lq ) . LinkedArtifactUri . ToLower ( ) == newLink . LinkedArtifactUri . ToLower ( )
192+ select lq ) . SingleOrDefault ( ) ;
193+ if ( found == null )
194+ {
195+ newEL . Add ( newLink ) ;
196+ }
197+ removeEL . Add ( el ) ;
190198 }
191- removeEL . Add ( el ) ;
192199 }
193- }
194- else
195- {
196- Log . LogWarning ( "GitRepositoryEnricher: Target Repo not found. Cannot map {SourceRepoUrl} to ???" , sourceRepoInfo . GitRepo . RemoteUrl ) ;
200+ else
201+ {
202+ Log . LogWarning ( "GitRepositoryEnricher: Target Repo not found. Cannot map {SourceRepoUrl} to ???" , sourceRepoInfo . GitRepo . RemoteUrl ) ;
203+ }
197204 }
198205 }
199206 }
0 commit comments