ОК, я написал скрипт (на самом деле два - которые могут быть объединены в один), который делает то, что мне нужно: для автоматического слияния из представления снимка в динамическое представление. Я предполагаю, что он также будет работать с любой другой комбинацией, но от динамического до динамического или от динамического до моментального снимка уже поддерживается инструментом IBM ClearCase "Merge Manager" *1006*.
First Scrip найдет все извлечения и отформатирует их соответствующим образом, добавив их в files.txt:
@echo off
REM ------------------------------- synopsis ----------------------------------
REM This script creates a list of all checked out into files.txt under the
REM batch-file directory.
REM files in the following format:
REM \VOB1\file1.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file1
REM \VOB2\file2.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file2
REM \VOB2\file3.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file3
REM ------------------------------- synopsis ----------------------------------
set source_view_path=C:\Snapshot\some-snapshot-john
set currentDirectory=%~dp0
set chekedOutOutputFile=%currentDirectory%find_co.txt
set resultFile=%currentDirectory%files.txt
@echo Getting checkouts of %source_view_path%
@echo %currentDirectory%
REM ---------------------------------------------------------------------------
REM The next code produces a find_co.txt intermediate file with the following
REM format of checkouts:
REM <File Full Path>@@<Version ID>@@<File Comment>
REM %n - for file Name (With full path)
REM %Vn - for file Version ID.
REM %c - for file Comment
REM
REM Example:
REM C:\MY_VIEW_PATH\VOB1\file1.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file1
REM C:\MY_VIEW_PATH\VOB2\file2.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file2
REM C:\MY_VIEW_PATH\VOB2\file3.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file3
REM ---------------------------------------------------------------------------
pushd %source_view_path%
cleartool lsco -cview -avobs -fmt "%%n@@%%Vn@@%%c" > "%chekedOutOutputFile%"
popd
del /q "%resultFile%"
REM ---------------------------------------------------------------------------
REM The following code formats the find_co.txt into files.txt with the desired
REM result - <File VOB Path>@@<Version ID>@@<File Comment>
REM Example:
REM From -
REM C:\MY_VIEW_PATH\VOB1\file1.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file1
REM C:\MY_VIEW_PATH\VOB2\file2.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file2
REM C:\MY_VIEW_PATH\VOB2\file3.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file3
REM To
REM \VOB1\file1.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file1
REM \VOB2\file2.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file2
REM \VOB2\file3.txt@@\main\branch_v111\CHECKEDOUT@@Comment for file3
REM ---------------------------------------------------------------------------
for /F "usebackq tokens=*" %%A in ("%chekedOutOutputFile%") do (
call ::removeSourceViewPath "%%%A"
)
goto endOfScript
REM ---------------------------------------------------------------------------
REM Manipulate the path of each file to exclude the view from it e.g:
REM C:\MY_VIEW_PATH\MY_VOB\file.txt -> \MY_VOB\file.txt
REM >>>-----------------> start of :removeSourceViewPath
:removeSourceViewPath
set str=%1
call set "resultStr=%%str:%source_view_path%=%%"
set resultStr=%resultStr:~1,-1%
@echo %resultStr%
@echo.%resultStr%>>"%resultFile%"
exit /b
REM <<<-----------------< end of :removeSourceViewPath
REM ---------------------------------------------------------------------------
:endOfScript
pause
@echo ------------------------------------------------------------------
Второй скрипт берет файл files.txt и объединяет их из исходного представления в целевое:
@echo off
REM ------------------------------- synopsis ----------------------------------
REM This script takes a list of all files from the files.txt which is under
REM this batch-file directory and merges them from TARGET to SOURCES views
REM files in the following format:
REM <File VOB Path>@@<Version ID>@@<File Comment>
REM are merged from <SOURCE_VIEW>\<File VOB Path> to
REM <TARGET_VIEW>\<File VOB Path> with the <File Comment> as comment.
REM ------------------------------- synopsis ----------------------------------
setlocal
set TARGET_VIEW=V:\v11-john-local-nt
set SOURCE_VIEW=C:\Snapshot\some-snapshot-john
REM ---------------------------------------------------------------------------
REM The following takes the line:
REM <File VOB Path>@@<Version ID>@@<File Comment> and checks out the target
REM file, then it automatically merges the file from source to target.
REM Note that the version is not required here (it might be required if we
REM want to merged from a version which is not the latest one in the branch).
REM ---------------------------------------------------------------------------
for /f "tokens=1,2,3 delims=@@" %%i in (files.txt) do (
cleartool co -unreserved -c "%%k" %TARGET_VIEW%%%i
cleartool merge -to %TARGET_VIEW%%%i %SOURCE_VIEW%%%i
)
endlocal
pause
Оба этих сценария объединили все нужные мне файлы из исходного представления в целевое представление.
Примечания:
- Вы можете создать командный файл, который получает SOURCE_VIEW и TARGET_VIEW
в командной строке как% 1 и% 2,
- Я разделил это на два сценария, чтобы я мог удалить некоторые файлы из
список, прежде чем делать слияние.
- Скрипты сохранят исходный комментарий к файлу.
- % ~ dp0 - так я могу заставить работать в текущем командном файле
каталог.
- Не стесняйтесь комментировать. Если у вас есть лучшее решение, я буду рад
переместить мой V к вашему: -)