我想以类似“报告”的格式导出变更集列表,其中作者、评论和文件已更改(只是文件名,而不是内容)。
我在 Windows 上使用 TortoiseHg。我怎样才能做到这一点?
我想以类似“报告”的格式导出变更集列表,其中作者、评论和文件已更改(只是文件名,而不是内容)。
我在 Windows 上使用 TortoiseHg。我怎样才能做到这一点?
你想要什么样的格式?hg log
与模板一起使用。Mercurial 为自定义输出提供了广泛的支持,并且在 Mercurial 书中有很好的记录。
所以我用 Powershell 解决了这个问题(和许多其他问题一样)。我根据 Mercurial 可以导出的补丁文件生成了一份 HTML 报告。
它当然不是完美的,但它工作得很好。典型的免责声明适用,使用此功能需您自担风险,如果您运行此功能等,我概不负责。
这是代码:
function Generate-PatchReport([string]$loc)
{
$patchFiles = ls $loc -Filter "*.patch"
$html = @()
$html += "<html><head><title>Diff Report</title><style type=`"text/css`">body,table{font-family:Verdana;font-size:10pt}
table{border-collapse:collapse;margin:10px}
p{margin:0}
thead{font-weight:700}
td{border:1px solid gray;padding:5px}
.bin{background-color:#eee}
.add{background-color:#dfd}
.chg{background-color:#ffd}
.rem{background-color:#fdd}
hr{height:1px;background-color:#999;border:none;margin-top:15px;margin-bottom:15px}</style></head><body>"
foreach($patch in $patchFiles)
{
$lines = gc $patch.FullName;
# Get checkin notes
$null, $null, $username = $lines[1].Split(' ')
$datestamp = $lines[2].Split(' ')[2]
$date = Get-Date -Year 1970 -Month 1 -Day 1 -Minute 0 -Hour 0 -Second 0 -Millisecond 0
$date = $date.AddSeconds($datestamp)
foreach($l in $lines)
{
if(!$l.StartsWith('#'))
{
$note = $l
break;
}
}
$html += '<p><strong>Note:</strong> ' + $note + '</p>'
$html += "<p><strong>User:</strong> $username</p>"
$html += "<p><strong>Timestamp:</strong> $($date.ToString("MM/dd/yyyy hh:mm tt")) UTC</p>"
# Generate file reports
$html += "<table><thead><td>Operation</td><td>File</td></thead>"
for($i = 0; $i -lt $lines.Length; $i++)
{
if($lines[$i].StartsWith('diff'))
{
$html += "<tr>"
$null, $null, $null, $null, $null, $filename = $lines[$i].Split(' ')
if($lines[$i+1].Contains('Binary file'))
{
$html += '<td class="bin">% Binary</td>'
}
elseif($lines[$i+1].Contains('/dev/null'))
{
$html += '<td class="add">+ Add</td>'
}
elseif($lines[$i+2].Contains('/dev/null'))
{
$html += '<td class="rem">- Remove</td>'
}
else
{
$html += '<td class="chg">• Change</td>'
}
$html += "<td>$filename</td>"
$html += "</tr>"
}
}
$html += "</table><hr />"
}
# Finalize HTML
$html += "</body></html>"
# Write the file to the same folder
sc $html -Path ([System.IO.Path]::Combine($loc, "PatchReport.html"))
}