如何在Visual FoxPro中手动生成整个项目的文本文件(例如.sca,.vca等)

Kit*_*oed 5 diff foxpro visual-foxpro

挑战是我正在检查我的FoxPro代码到源代码控制(使用Mercurial,但这不是这个问题的焦点),并希望快速获得FoxPro SCCTEXT输出和二进制输出而不使用该Tools > Options > Projects > Active source control provider功能.

有关我想要生成的输出类型的示例,VFPX源包含许多这些文本.sca,.vca等文件.有没有办法按需生成这些文件?

stu*_*rtd 6

您可以破解scctext.prg(随VFP提供)并使用项目挂钩生成文件,而不是设置源控件提供程序 - 有关使用Subversion的示例实现,请参阅http://paulmcnett.com/scX.php.

编辑:你看过Codeplex上的Alternate SCCText吗?

另请参阅http://www.foxpert.com/docs/cvs.en.htm以获取另一个视角.


Mat*_*lay 4

以下是我用来为项目文件中的每个文件生成 SCCText 文件的代码。只需打开您的项目(以确保它是活动项目,然后运行此 prg 文件)。

(2011-06-10 更新:添加了一项新功能,如果原始源文件的日期时间比现有 SCC 文件更新,则仅生成新的 SCC 文本文件。本质上,此新版本仅在 VFP 生成时生成新的 SCC 文件自上次运行以来源文件已更改。)

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
Run Code Online (Sandbox Code Playgroud)