首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将P4DIFF限制为仅限于SQL文件?

如何将P4DIFF限制为仅限于SQL文件?
EN

Stack Overflow用户
提问于 2016-09-01 15:55:05
回答 2查看 70关注 0票数 1

我正在服务器2008上运行,并通过Powershell编写CMD行差别化脚本。我已经完成了所有的工作(工作,还没有完成),但是我很难弄清楚如何将输出限制在SQL文件上。差异的一个例子:

代码语言:javascript
复制
p4.exe diff -S -db -dn 251674 251616 > C:\Users\UserName\Documents\Queries\Output2.txt

第一个更改列表是SQL更改,因此结果与我所需要的一致,而第二个更改是SQL和C代码更改的混合。我继续完善我的差异,但我是DBA,所以我的重点是在SQL的变化.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-16 20:17:19

通过使用整个Depot路径和修订编号构建单独的查询,我能够完成我的SQL仅Diff。还有很大的改进空间(比如解析来自第一个查询的信息,而不是运行所有三个查询),但是我没有时间了,因为我想把它用于今天的报告。如有任何有帮助的建议,将不胜感激!

我首先使用P4Report并查询符合我的条件的Files表(第1和第2行)中的所有信息,并将其输出到“Report”文本文件中。这最终导致了我在Excel中的报告。

P4Report查询:

代码语言:javascript
复制
select * from files where RIGHT (FILE,9) = 'chema.sql' and TIME > timestampadd(4, -8, now()) and action in ('add', 'edit', 'integrate') order by time;

然后我只查询路径和文件名,并将其存储在一个变量中(第3和第4行)。

P4Report查询:

代码语言:javascript
复制
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查询:

代码语言:javascript
复制
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中时非常干净)。

代码语言:javascript
复制
$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)
票数 1
EN

Stack Overflow用户

发布于 2016-09-01 21:33:08

您所提供的命令行是无效的("p4 diff“不以变更列表作为参数,它不使用-S标志,它会区分挂起的更改,而不是提交的更改),因此我无法修改它,使您能够根据您的描述为您想要做的事情提供一些有用的内容,但如下所示:

代码语言:javascript
复制
p4 diff -dbn ....sql

将使用"b“(忽略空格)和"n”(RCS格式) diff标志打开当前目录下的文件,其名称以".sql“结尾。

如果您试图在两个提交的变更者之间获得sql文件的差异,那么您可能需要更多的如下内容:

代码语言:javascript
复制
p4 diff2 -dbn ....sql@251616 ....sql@251674
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39276053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档