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
    {
    }
}