我在Server 2008上运行并通过Powershell编写CMD行Diff的脚本。我有一切工作(工作,没有完成),但我无法弄清楚如何将输出限制为只有SQL文件。差异的一个例子:
p4.exe diff -S -db -dn 251674 251616 > C:\Users\UserName\Documents\Queries\Output2.txt
第一个更改列表是仅SQL更改,因此结果符合我的需要,但第二个是SQL和C代码更改的混合。我正在继续改进我的Diff,但我是DBA所以我的重点只是SQL更改......
答案 0 :(得分:1)
您提供的命令行不是有效的(" p4 diff"不会将更改列表作为参数,它不会采用-S标志,并且它会传递未决等待更改,但未提交更改),因此我无法对其进行修改,以便为您提供适合您根据自己的描述进行尝试的内容,但有类似内容:
p4 diff -dbn ....sql
将使用" b"在当前目录下打开文件。 (忽略空格)和" n" (RCS格式)diff标志,其名称以" .sql"。
结尾如果您尝试在两个提交的更改列表之间获取sql文件的差异,那么您需要更多类似的内容:
p4 diff2 -dbn ....sql@251616 ....sql@251674
答案 1 :(得分:1)
通过使用整个Depot路径和版本号构建单独的查询,我能够完成 SQL only Diff 。 还有很大的改进空间(例如从第一个查询解析信息而不是运行所有三个查询)但我没有时间因为我想将它用于今天的报告。任何有用的建议将不胜感激!
我首先使用P4Report并查询符合我标准的Files表(第1行和第2行)中的所有信息,然后将其输出到“报告”中。文本文件。这最终将在Excel中报告我的报告。
P4Report查询:
select * from files where RIGHT (FILE,9) = 'chema.sql' and TIME > timestampadd(4, -8, now()) and action in ('add', 'edit', 'integrate') order by time;
然后我询问了Path&文件名并存储在变量中(第3行和第4行)。
P4Report查询:
select file from files where RIGHT (FILE,9) = 'chema.sql' and TIME > timestampadd(4, -8, now()) and action in ('add', 'edit', 'integrate') order by time;
最后,我查询了版本号,并将其存储在变量中(第7行和第8行)。
P4Report查询:
select revision from files where RIGHT (FILE,9) = 'chema.sql' and TIME > timestampadd(4, -8, now()) and action in ('add', 'edit', 'integrate') order by time;
然后我使用foreach循环创建并执行每个Perforce命令行字符串,并将每个字符串的结果附加到' _Diff_Report'文本文件。
最后,我删除了' _Diff_Report'中的所有标签。 (这导致我在导入Excel时更加清晰。)
$Rpt = '"C:\Program Files\Perforce\P4Report\p4sql.exe" -d ""~"" -i C:\Users\UserName\documents\Queries\DataQ\_Report.txt > C:\Users\UserName\Documents\Queries\Report.txt'
$out = iex "& $Rpt"
$Cmd1 = '"C:\Program Files\Perforce\P4Report\p4sql.exe" -i C:\Users\UserName\Documents\Queries\DataQ\_Files.txt'
$fil = iex "& $Cmd1"
# Debug
# $fil | Out-File C:\Users\UserName\Documents\Queries\_fil_Debug.txt
$Cmd2 = '"C:\Program Files\Perforce\P4Report\p4sql.exe" -i C:\Users\UserName\Documents\Queries\DataQ\_Revisions.txt'
$rev = iex "& $Cmd2"
# Debug
# $rev | Out-File C:\Users\UserName\Documents\Queries\_Rev_Debug.txt
$dt = Get-Date
$dt | Out-File C:\Users\UserName\Documents\Queries\DataQ\_Diff_Report.txt
$f = $fil
$r = $rev
# Debug
# $r | Out-File C:\Users\UserName\Documents\Queries\_R_variable_Debug.txt
$cnt = 2
foreach ($Change in $f)
{
$revision = $r[$cnt] -1
$Cmd3 = '"C:\Program Files\Perforce\p4" diff2 -db '
$Cmd3 = $Cmd3 + '"'
$Cmd3 = $Cmd3 + $f[$cnt]
$Cmd3 = $Cmd3 + '--'
$Cmd3 = $Cmd3 + $revision
$Cmd3 = $Cmd3 + '"'
$Cmd3 = $Cmd3 + ' ' + '"'
$Cmd3 = $Cmd3 + $f[$cnt]
$Cmd3 = $Cmd3 + '--'
$Cmd3 = $Cmd3 + $r[$cnt]
$Cmd3 = $Cmd3 + '"'
$Cmd3
$Diffs = iex "& $Cmd3"
$Diffs | Out-File C:\Users\UserName\Documents\Queries\DataQ\_Diff_Report.txt -Append
$cnt = $cnt + 1
}
$Content = [IO.File]::ReadAllText("C:\Users\UserName\Documents\Queries\DataQ\_Diff_Report.txt")
$Content = $Content -replace "`t",''
Write-Host $Content
[IO.File]::WriteAllText("C:\Users\UserName\Documents\Queries\Diff_Report.txt", $Content)