挑战在于我正在检查我的FoxPro代码到源代码控制中(使用Mercurial,但这不是这个问题的焦点),并希望快速获取FoxPro SCCTEXT输出和二进制输出而不使用{ {1}}功能。
对于我想要生成的输出类型的示例,VFPX source包含许多这些文本.sca,.vca等文件。 有没有办法按需生成这些文件?
答案 0 :(得分:6)
您可以破解scctext.prg(随VFP提供)并使用项目挂钩生成文件,而不是设置源控件提供程序 - 有关使用Subversion的示例实现,请参阅http://paulmcnett.com/scX.php。
编辑:你看过Alternate SCCText on Codeplex
吗?另请参阅http://www.foxpert.com/docs/cvs.en.htm了解其他观点。
答案 1 :(得分:4)
这是我用来为我的Project文件中的每个文件生成SCCText文件的代码。只需打开您的项目(以确保它是活动项目,然后运行此prg文件)。
(2011-06-10更新:添加了一项新功能,如果原始源文件的DateTime比现有的SCC文件更新,则只会构建新的SCC文本文件。实际上,这个新版本只生成一个新的SCC文件如果VFP源文件自上次运行以来已被更改。)
lnResponse = MessageBox('Run SSCText to generate ascii code files?', 3, 'Generate SCC files?')
If lnResponse <> 6
Return
EndIf
*Clear All
*Release All
Set ClassLib to && Must clear them out, cause we're about to generate ascii files of them
lnCount = DoSCCTextOnProject()
? Chr(10)+Chr(13)
? 'Done. ' + Str(lnCount) + ' files processed.'
*----------------------------------------------------------------------
Procedure DoSCCTextOnProject
Local loFile, loProject, lnCount
lcSCCText = Home(1) + 'SCCText.prg'
lnCount = 0
If !File(lcSCCText)
Messagebox('Unable to find file ' + lcSCCText, 16, 'Error')
Return 0
Endif
Try
loProject = _vfp.ActiveProject
Catch To loEx
Endtry
If Type('loEx') = 'O'
Messagebox('There are no active projects', 64, 'Error')
Return 0
Endif
lcSkipFiles = 'LIST-FILES-TO-SKIP-HERE'
For Each loFile In loProject.Files
If Inlist(loFile.Type, 'V', 'K', 'R') and ;
!InList(Upper(JustFname(loFile.name)), Upper(lcSkipFiles)) ;
and Fdate(loFile.name, 1) > SCCFileDateTime(loFile.name)
? 'Generating: ' + loFile.Name
Do (lcSCCText) With loFile.Name
lnCount = lnCount + 1
Endif
Endfor
Return lnCount
*------------------------------------------------------------------
Procedure SCCFileDateTime(tcFile)
lcSCCFilename = Upper(Strtran(Upper(tcFile), '.SCX', '.SCA'))
lcSCCFilename = Strtran(lcSCCFilename, '.VCX', '.VCA')
lcSCCFilename = Strtran(lcSCCFilename, '.FRX', '.FRA')
If File(lcSCCFilename)
Return Fdate(lcSCCFilename, 1)
Else
Return {^1900-01-01 00:00:00}
EndIf
EndProc