Задача перед сборкой - удаление рабочей копии в CruiseControl.NET

map вообще не относится к декартовому произведению, хотя я представляю, что кто-то, хорошо разбирающийся в функциональном программировании, может придумать какое-то непонятное для понимания способ создания одного с помощью map.

map в Python 3 эквивалентен этому:

def map(func, iterable):
    for i in iterable:
        yield func(i)

, и единственная разница в Python 2 заключается в том, что он создаст полный список результатов, чтобы вернуть все в один раз вместо yield ing.

Хотя соглашение Python обычно предпочитает использование списков (или выражений генератора) для достижения того же результата, что и вызов map, особенно если вы используете лямбда-выражение как первый аргумент:

[func(i) for i in iterable]

В качестве примера того, что вы просили в комментариях к вопросу - «превратить строку в массив», «массивом» вы, вероятно, хотите либо кортеж, либо (оба они немного похожи на массивы с других языков) -

 >>> a = "hello, world"
 >>> list(a)
['h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd']
>>> tuple(a)
('h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd')

Использование map здесь будет, если вы начнете с list строк вместо одной строки - map могут их перечислять индивидуально:

>>> a = ["foo", "bar", "baz"]
>>> list(map(list, a))
[['f', 'o', 'o'], ['b', 'a', 'r'], ['b', 'a', 'z']]

Обратите внимание, что map(list, a) эквивалентно в Python 2, но в Python 3 вам нужен вызов list, если вы хотите делать что угодно, кроме подачи в контур for (или функцию обработки, такую ​​как sum, который требует только итерации, а не последовательности). Но также обратите внимание на то, что обычно предпочтительным является понимание списка:

>>> [list(b) for b in a]
[['f', 'o', 'o'], ['b', 'a', 'r'], ['b', 'a', 'z']]
8
задан Chris 23 August 2008 в 21:28
поделиться

5 ответов

Выполнение полного удаляет, прежде или после того, как Ваша сборка является хорошей практикой. Это означает, что нет никакого шанса Вашей среды сборки, берущей устаревшее файл. Ваше здание точно против того, что находится в репозитории.

Удаление рабочей копии возможно, поскольку я сделал это с Nant.

В Nant у меня был бы чистый сценарий в его собственной папке outwith той, которую я хочу удалить и затем вызвал бы его из CC.net.

Я предполагаю, что это должно также быть возможно с пакетным файлом. Смотрите на rmdir команду http://www.computerhope.com/rmdirhlp.htm

@pauldoo

Я предпочитаю, чтобы мой сервер CI сделал, полное удаляет, поскольку я не хочу удивления, когда я иду, чтобы сделать сборку конечных версий, которая должна всегда делаться от чистого состояния. Но это должно смочь обработать обоих, никакая причина почему нет

10
ответ дан 5 December 2019 в 12:15
поделиться

При проверке jira CC.NET существует патч, в котором зарегистрировались для реализации CleanCopy для Подверсии, которая делает точно, что Вы хотите и просто устанавливаете CleanCopy, равный истинному в Вашем блоке управления исходным кодом точно так же, как с TFS один.

2
ответ дан 5 December 2019 в 12:15
поделиться

@jamie: существует одна причина, почему Вы не можете делать чистую сборку каждый раз при использовании непрерывного сервера интеграции - время изготовления. На некоторых проектах я продолжил работать, чистые сборки берут 80 + минуты (встроенный проект, состоящий из тысяч файлов C++ к контролю, и затем скомпилируйте против нескольких целей). В этом случае необходимо взвесить преимущество быстрой обратной связи против вероятности, что чистая сборка поймает что-то, что возрастающая сборка не будет. В нашем случае мы работали над улучшением и параллелизацией процесса сборки, одновременно позволяя возрастающие сборки на нашей машине CI. У нас действительно было несколько проблем, потому что мы не делали чистых сборок, но путем выполнения чистой сборки, ночной или еженедельной, Вы могли удалить риск, не теряя быструю обратную связь Вашей машины CI.

2
ответ дан 5 December 2019 в 12:15
поделиться

Это очень распространено и обычно хорошая практика для любого процесса сборки, чтобы сделать 'чистое' прежде, чем сделать любую значительную сборку. Это предотвращает любые 'артефакты' от предыдущих сборок для заражения вывода.

Чистое по существу, что Вы делаете путем удаления рабочей копии.

0
ответ дан 5 December 2019 в 12:15
поделиться

@Brad Barker

Чистый означает просто вытирать продукты сборки.

Удаление рабочей копии удаляет все остальное также (источник и файлы проекта и т.д.).

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


@jamie

Для формальных выпусков да лучше сделать абсолютно чистый контроль. Таким образом, я предполагаю, что это зависит от цели сборки.

0
ответ дан 5 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: