В модуле itertools есть функция: itertools.product . Он делает именно то, что вам нужно.
Пример:
a = [None,1,2]
list(itertools.product(a, repeat=3))
[(None, None, None),
(None, None, 1),
(None, None, 2),
(None, 1, None),
(None, 1, 1),
(None, 1, 2),
(None, 2, None),
(None, 2, 1),
(None, 2, 2),
(1, None, None),
(1, None, 1),
(1, None, 2),
(1, 1, None),
(1, 1, 1),
...
Ваша проблема может быть решена с помощью этого кода:
[list(zip(a, elem))for elem in itertools.product(b, repeat=3)]
При удалении старого вида изменений поражений точка управления версиями, но можно просто разгрузить изменения, которые Вы хотите сохранить, затем поместить их в новый repo и удалить старый.
svnadmin dump /path/to/current/repo -r48:50 > svn.dump
svnadmin create /path/to/new/repo
svnadmin load /path/to/new/repo < svn.dump
Или используйте svndumpfilter для включения/исключения конкретных битов, которые Вы хотите и т.д. Там также некоторая информация в svn часто задаваемых вопросах об удалении, которое можно найти полезным.
Нет никакого способа "отрезать" репозиторий в конкретном пересмотре таким образом, Вы описываете. То, что Вы могли сделать, svn export
целый репозиторий в желаемом пересмотре, затем импортируйте его в новый репозиторий, затем воспроизведите фиксации от изменений после этого от Вашего файла журнала в новый репозиторий. Это не тривиально.
С другой стороны, если Вы просто хотите исключить некоторые нарушенные пути из своего репозитория, и у Вас есть прямой доступ к файловой системе, где репозиторий находится, можно использовать комбинацию svnadmin
и svndumpfilter
для выбора путей, Вы хотите и сокращаете всех других.
Обратите внимание, что то, что Вы описываете, более или менее против точки Подверсии: это, как предполагается, сохраняет все. Если Вы часто испытываете затруднения из-за этого, считаете установление лучшими методами регистрации. Или рассмотрите использование Мерзавца, который делает этот вид из экспериментирования фактически свободным.