Functions/ConvertTo-HgChangesetInfo.ps1
function ConvertTo-HgChangesetInfo { <# #> [CmdletBinding()] [OutputType([PsHg.ChangesetInfo])] param( [Parameter(Mandatory=$true,ValueFromPipeline=$true)] [object[]] # The deserialized object to turn back into a PsHg.ChangesetInfo object. $InputObject ) begin { Set-StrictMode -Version 'Latest' } process { foreach( $object in $InputObject ) { $id = New-Object 'PsHg.ChangesetID' $object.ID.Revision,$object.ID.NodeID $p1 = $null if( ($object | Get-Member 'Parent1') -and $object.Parent1 ) { $p1 = New-Object 'PsHg.ChangesetID' $object.Parent1.Revision,$object.Parent1.NodeID } $p2 = $null if( ($object | Get-Member 'Parent2') -and $object.Parent2 ) { $p2 = New-Object 'PsHg.ChangesetID' $object.Parent2.Revision,$object.Parent2.NodeID } $phaseInfo = New-Object -TypeName 'PsHg.PhaseInfo' -ArgumentList $object.Phase.Name,$object.Phase.Index $diffStats = $null if( $object.DiffStats ) { $diffStats = New-Object -TypeName 'PsHg.DiffInfo' -ArgumentList $object.DiffStats.FilesModified,$object.DiffStats.LinesAdded,$object.DiffStats.LinesRemoved } $author = New-Object 'PsHg.AuthorInfo' $object.Author.Name,$object.Author.Email $date = $object.Date if( $date.Kind -eq [DateTimeKind]::Utc ) { $date = $date.ToLocalTime() } $changeset = New-Object 'PsHg.ChangesetInfo' $id,$object.Branch,$p1,$p2,$author,$date,$object.Description,$phaseInfo,$diffStats foreach( $propName in ('FileAdds','FileDeletes','FileModifications','Files') ) { foreach( $item in $object.$propName ) { [void]$changeset.$propName.Add( $item ) } } if( $object.Extras -is [hashtable] ) { foreach( $key in ($object.Extras.Keys) ) { $changeset.Extras[$key] = $object.Extras[$key].ToString() } } else { foreach( $name in ($object.Extras | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty 'Name')) { $changeset.Extras[$name] = $object.Extras.$name.ToString() } } foreach( $copyInfo in $object.Copies ) { [void]$changeset.Copies.Add( (New-Object -TypeName 'PsHg.CopyInfo' $copyInfo.Source,$copyInfo.Destination) ) } foreach( $name in $object.Tags ) { [void]$changeset.Tags.Add( $name ) } $changeset } } end { } } |