Неясности символов и расположение репо
Я пытаюсь преобразовать SVN из CVS с помощью cvs2svn, и мы хотим, чтобы в макете были ствол / теги / ветви внутри каждого проекта. Сначала я попробовал это:
sudo cvs2svn -s /build/svn-test3 /build/cvs2016-02-08
Что не дало мне правильное расположение. Я получил транк / теги / ветки как каталоги верхнего уровня со всеми моими проектами внутри транка. Поэтому я начал возиться с методом файла опций и придумал следующее:
cvs_repo_main_dir = r'/build/cvs2016-02-08'
projects = os.listdir(cvs_repo_main_dir)
# don't want to convert CVSROOT:
projects.remove('CVSROOT')
for project in projects:
run_options.add_project(
cvs_repo_main_dir + '/' + project,
trunk_path=(project + '/trunk'),
branches_path=(project + '/branches'),
tags_path=('tags'),
)
но теперь я получаю большое количество неясностей и ошибок:
cvs2svn ERROR: Problems determining how symbols should be converted:
Кажется, что есть проблема со всем, что является тегом, веткой или импортом в CVS, и в CVS не было соглашения о присвоении имен ветвям и тегам, так что на самом деле нет никакого способа создать простые правила для принудительного применения тегов или ветвей с помощью регулярных выражений.
Вот правила стратегии символов, которые я использую (я пробовал разные их комбинации, но всегда получал один и тот же результат):
global_symbol_strategy_rules = [
#SymbolHintsFileRule('symbol-hints.txt'),
#ForceBranchRegexpStrategyRule(r'branch.*'),
ForceTagRegexpStrategyRule(r'[0-9]_[0-9]'),
ForceTagRegexpStrategyRule(r'RELEASE_'),
#ExcludeRegexpStrategyRule(r'unknown-.*'),
#ExcludeTrivialImportBranchRule(),
ExcludeVendorBranchRule(),
UnambiguousUsageRule(),
BranchIfCommitsRule(),
# Convert ambiguous symbols based on whether they were used more
# often as branches or as tags:
HeuristicStrategyRule(),
# Convert all ambiguous symbols as branches:
#AllBranchRule(),
# Convert all ambiguous symbols as tags:
AllTagRule(),
HeuristicPreferredParentRule(),
]
Два вопроса:
Почему я получаю неоднозначности, когда я использую файл параметров, а не когда я использую параметры преобразования по умолчанию в командной строке?
Есть ли способ исправить это, не проходя вручную мой файл с символом 4600+ line-info.txt?
2 ответа
Я снова нашел ответ на свой вопрос. Проблема заключалась в том, что в моем разделе run_options.add_project у меня не было раздела symbol_strategy_rules, поэтому он пропускал все мои правила.
Теперь для следующего вызова:
The following paths are not disjoint:
Path tags/AF_RELEASE_23 is repeated 10 times
Path tags/AF_RELEASE_24 is repeated 10 times
Path tags/AF_RELEASE_25 is repeated 10 times
Path tags/AF_RELEASE_26 is repeated 10 times
Path tags/AF_RELEASE_27 is repeated 10 times
Path tags/AF_RELEASE_28 is repeated 10 times
Path tags/AF_RELEASE_30 is repeated 10 times
Path tags/AF_RELEASE_30_1 is repeated 9 times
Path tags/AF_RELEASE_31 is repeated 9 times
Path tags/AF_RELEASE_31_1 is repeated 7 times
Кто-нибудь думает, что они могут понять это до меня?
Мне было очень трудно найти хорошие примеры, так что вот (соответствующая часть) мой последний файл cvs2svn.options для всех, кто наткнулся на этот пост:
global_symbol_strategy_rules = [
ExcludeTrivialImportBranchRule(),
ExcludeVendorBranchRule(),
UnambiguousUsageRule(),
BranchIfCommitsRule(),
HeuristicStrategyRule(),
# Convert all ambiguous symbols as branches:
#AllBranchRule(),
# Convert all ambiguous symbols as tags:
#AllTagRule(),
# The last rule is here to choose the preferred parent of branches
# and tags, that is, the line of development from which the symbol
# sprouts.
HeuristicPreferredParentRule(),
]
...
cvs_repo_main_dir = r'/build/cvs2016-02-08'
projects = os.listdir(cvs_repo_main_dir)
# don't want to convert CVSROOT:
projects.remove('CVSROOT')
for project in projects:
run_options.add_project(
cvs_repo_main_dir + '/' + project,
trunk_path=('/projects/'+project + '/trunk'),
branches_path=('/projects/'+project + '/branches'),
tags_path=('/projects/'+project + '/tags'),
symbol_strategy_rules=[
# Additional, project-specific symbol strategy rules can
# be added here.
] + global_symbol_strategy_rules,
)