LINUX.ORG.RU

svn update


0

0

Hi. Думаю сделать систему автообновлений на базе subversion. Мож кто подскажет, как сделать так, чтобы в случае неудачного svn update (связь пропала к примеру), файлы которые успели обновиться возвращались на ревизию перед началом update?

update to revision не пойдет, т.к. связь может отсутствовать.

★★

Не знаю, реализована ли такая возможность в svn, но можно пойти в лоб. svn update запускать из скрипта, в случае неудачи (ненулевой код возврата) восстанавливать рабочую копию из бекапа, в случае удачи обновлять бекап для соответствия новой резизии.

И не забывать про скрытые директории .svn/

plumbum
()

> Думаю сделать систему автообновлений на базе subversion.

Это прекрасный пример использования дрели для забивания гвоздей.

tailgunner ★★★★★
()
Ответ на: комментарий от fghj

plumbum@celerond:~$ svn help revert

...

  Note: ... However, it does not restore removed directories.
                        ^^^^^^^^^^^^^^^^    

plumbum
()
Ответ на: комментарий от tailgunner

В лоб нехоцца.

>Это прекрасный пример использования дрели для забивания гвоздей.

Не думаю. почему бы и не использовать svn?

> svn revert -R

Не пойдет. Это не локальные изменения. :(

k0l0b0k ★★
() автор топика
Ответ на: комментарий от Kpoxman

Думал. Но у клиентов там гребанный виндавс

k0l0b0k ★★
() автор топика
Ответ на: комментарий от k0l0b0k

>>Это прекрасный пример использования дрели для забивания гвоздей.

>Не думаю. почему бы и не использовать svn?

1) Чем это лучше rsync? 2) ты учел, что в каталогах .svn лежат полные копии всех файлов?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Да хер с ними, с копиями - это не public software. А вот про rsync +5, пошел курить доку.

k0l0b0k ★★
() автор топика
Ответ на: комментарий от tailgunner

Не, не то. svn в этом плане удобней - есть номер версии (ревизии), всегда можно откатится назад (если есть связь), можно делать бранчи, и многое другое. Пока решения не нашел, буду бить лбом %)

k0l0b0k ★★
() автор топика
Ответ на: комментарий от k0l0b0k

> всегда можно откатится назад (если есть связь), можно делать бранчи, и многое другое.

То есть релизов (сопровождающихся бинарными сборками) у этой софтины не бывает? Если бывают, то что - ты собираешься их хранить в репозитории? Или в репозитории хранятся бинарные сборки _всех_ ревизий?

Короче, не понял я - причем здесь бранчи и ревизии, и чем это лучше набора каталогов с бинарными сборками. Ну да тебе виднее.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Если бывают, то что - ты собираешься их хранить в репозитории

Именно так. весь срез софтины лежит в репозитории, если чего изменилось - commit его, при этом основная масса не меняется (100Мб звуков к примеру). Если все это папками зачудить, то 10 версий - гиг, нафига такое счастье? Можно отдельно хранить, но гемор возрастает в несколько раз. Да и истории не будет. Бранчи - у двух клиентов одна и та же прога, но у одного она вверхногами перевернута допустим. Вот тебе и бранч (а все остальное - модули, графика, звуки остается тем же).

k0l0b0k ★★
() автор топика
Ответ на: комментарий от k0l0b0k

> Если все это папками зачудить, то 10 версий - гиг

Ну, если у вас по 10 версий в эксплуатации одновременно - тогда ой. Но ты не сказал насчет бинарных сборок - они вообще есть? И если есть - где хранятся, в репозитории с исходниками или в отдельном?

> Да и истории не будет.

Зачем _клиенту_ история?

tailgunner ★★★★★
()

Ээ... А Microsoft Installer чем не угодил?

Dr_ZLO
()
Ответ на: комментарий от tailgunner

>Ну, если у вас по 10 версий в эксплуатации одновременно - тогда ой. Но ты не сказал насчет бинарных сборок - они вообще есть? И если есть - где хранятся, в репозитории с исходниками или в отдельном?

Нет, не 10. Сейчас одна, но может быть больше (бранчи?). Бинарники есть, в отдельном репозитории с которого и идет автообновление.

>Зачем _клиенту_ история?

Откатить софт на любое время назад. Это как бы требование (нахера я чесно говоря сам не доганяню. Это типа мелкософта - к фичам софтины прилеплено - "вы типа можете поиметь любую из версий страше чем у вас кже имееццо, если новая вас чем-то не устраивает". Манагеров стрелять нада)

Если взять rsync - то как на нем реализовать сабж? (типа - при обновлении обновляется либо все (до HEAD) либо ничего).

>Ээ... А Microsoft Installer чем не угодил?

А он уже умеет делать инкрементальный апдейт? о_О. Не хочу завязываться на гамноподелие. Может господа клиенты проникнуцца и перейдут на тру ОС.

ЗЫ. Какие системы автообновления вообще существуют? /me пошел гуглить

k0l0b0k ★★
() автор топика
Ответ на: комментарий от k0l0b0k

svn в директориях .svn хранит копии файлов. если что-то прибил, можешь из репозитария снова стянуть svn co -r <номер_нужной_ревизии> <адрес_репозитария>

не понимаю, в чём проблема

AnDoR ★★★★★
()
Ответ на: комментарий от AnDoR

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

>если что-то прибил, можешь из репозитария снова стянуть svn co -r

Где ты вычитал что что-то прибито? И причем тут checkout?

k0l0b0k ★★
() автор топика
Ответ на: комментарий от k0l0b0k

юзай mercuiral или другую подобную распределенную vcs, где операции скачивания последних изменений и апдейта рабочей копии (pull и update) отделены.

anonymous
()
Ответ на: комментарий от adarovsky

В mercurial можно повесить хук, чтобы после выкачивания обновления автоматически делался hg up -C. Поведение будет похоже на svn.

Есть, однако, подводный камень: в распределённых системах у клиента будет лежать вся история. Так что надо запасать большие винты :)

adarovsky ★★★★
()
Ответ на: комментарий от adarovsky

ОООО! Огромный THANX! Завтра буду курить эту фичу. По ходу винты не проблема. Вообще.

>где операции скачивания последних изменений и апдейта рабочей копии (pull и update) отделены.

вроде cvs тоже так себя ведет?

k0l0b0k ★★
() автор топика
Ответ на: комментарий от k0l0b0k

>>где операции скачивания последних изменений и апдейта рабочей копии (pull и update) отделены.

>вроде cvs тоже так себя ведет?

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

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.