Как вручную сгенерировать текстовые файлы для всего проекта для сравнения в Visual FoxPro (например, .sca, .vca и т. Д.) - PullRequest
5 голосов
/ 25 мая 2011

Сложность заключается в том, что я проверяю свой код FoxPro в системе управления версиями (используя Mercurial, но это не является предметом этого вопроса) и хотел бы получить быстрый способ получить вывод FoxPro SCCTEXT вместе с двоичным выводом без использования Tools > Options > Projects > Active source control provider функциональность.

В качестве примера вида вывода, который я хочу сгенерировать, источник VFPX содержит многие из этих текстовых файлов .sca, .vca и т. Д. Есть ли способ сгенерировать эти файлы по требованию?

Ответы [ 2 ]

6 голосов
/ 25 мая 2011

Вместо настройки поставщика управления исходным кодом, вы можете взломать scctext.prg (который поставляется с VFP) и использовать ловушку проекта для генерации файлов - см. http://paulmcnett.com/scX.php для примера реализации с использованием Subversion.

Редактировать: Вы смотрели на Альтернативный текст SCCT на Codeplex

Также см. http://www.foxpert.com/docs/cvs.en.htm для другой перспективы.

4 голосов
/ 05 июня 2011

Вот код, который я использую для генерации файлов SCCText для каждого файла в моем файле проекта.Просто откройте ваш проект (чтобы убедиться, что это активный проект, а затем запустите этот файл prg).

(Обновлено 2011-06-10: добавлена ​​новая функция, которая будет создавать новые текстовые файлы SCC, только если DateTimeисходного исходного файла новее существующего файла 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
...