Продолжая тему версионизации данных.

ys

отодвинутый новичок
Продолжая тему версионизации данных.

Чтобы не гадить в: http://phpclub.ru/talk/showthread.php?s=&threadid=106261&rand=10
У меня такой вопрос:

Как кто решает проблему одновременного внесения изменений в текст?

Ситуация:

Текст (маленький/средний/большой).
Его редактируют (редакторы/корректоры/просто дятлы). Весь доступ авторизирован.
Но. С момента загрузки в браузер и до точки "submit" проходит иногда много времени и тот текст, что редактировался уже может утратить актуальность. А могут и просто закрыть и забыть.

Я тут вижу (пока) тут только один путь решения: клиент должен отдать (в hidden?) старый текст и в другом объекте формы - то, что он наредактировал.

Далее, делаем diff. Формируем patch и применяем его к актуальному содержанию, если есть коллизии, уведомляем редактора, если нет - коммит (новая версия).

Но тут только одна проблема - прицеп в виде оригинального текста.

Может кто решал это по другому? (javascript не учитываем)
 

korchasa

LIMB infected
что ты подразумевашь под актуальным содержимым? Последнюю версию? Или ту, что правили?

-~{}~ 17.02.08 20:50:

Просто для всех актуальная версия это последняя, а для того, кто правит, актуальная - его текст ;)
 

daevaorn

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

Wicked

Новичок
ys
а нельзя вместо "прицепа в виде оригинального текста" передавать номер версии?
 

ys

отодвинутый новичок
korchasa
Да, я имею ввиду то, что некий браузер загрузил в данный момент веремени некий объем данных.
Они то может и последнии, но через секунду - уже не факт..

daevaorn
Вики я изучил, там немного не то. Конечно, можно увидеть, что и кто убрал/заменил. Но это не решает задачу совместного редактирования.

Пример, текст:
"провет\n\rвася пьет водку"

Его скачали 2 человека (оригинальный текст).

1. первый исправил: "провед" ->"Привет"
2. второй исправил: "вася" -> "Вася"

И вот. Вариант будет "провет\n\rВася пьет водку"

А первые изменения можно только из хистори достать, но они не будут актуалны и активны :(

-~{}~ 17.02.08 21:15:

Wicked
Я думал об этом, но не стоит забывать:

> А могут и просто закрыть и забыть.

-~{}~ 17.02.08 21:18:

Тем более, что оригинальную версию, особенно первую, любят править особенно часто и все кому не попадя.

-~{}~ 17.02.08 21:19:

Тем более, что передавать? Ее еще на момент загрузки небыло!

-~{}~ 17.02.08 21:22:

Хм. Все понял. Фиксируем версию при отдаче и не паримся. :)
Во я дурак :(
 

daevaorn

Новичок
daevaorn
Вики я изучил, там немного не то. Конечно, можно увидеть, что и кто убрал/заменил. Но это не решает задачу совместного редактирования.

Пример, текст:
"провет\n\rвася пьет водку"

Его скачали 2 человека (оригинальный текст).

1. первый исправил: "провед" ->"Привет"
2. второй исправил: "вася" -> "Вася"

И вот. Вариант будет "провет\n\rВася пьет водку"

А первые изменения можно только из хистори достать, но они не будут актуалны и активны :(
Так в том то и дело, что в wiki если кто-то начал редактировать страницу, то она блокируется для изменениями другими, пока первый не закончит её изменять.

А насчет примера. то я не очень понял. Допустим если бы это был svn, то в результате получилось бы "Привет\n\rВася пьет водку"
 

ys

отодвинутый новичок
daevaorn
Нет не блокируется. По одному тому факту, что тело может изменения и не внести (уснуло, не захотело, забило).

Вот Wicked дал не явный но верный ответ, за что ему спасибо :), сам я немного потупил...
 

daevaorn

Новичок
Автор оригинала: ys
daevaorn
Нет не блокируется. По одному тому факту, что тело может изменения и не внести (уснуло, не захотело, забило).
Значит мы о разных wiki-движках говорим.
 

джамшут

Новичок
как минимум в докувики - блокируется. хотя, конечно, путь свина - самый труъ :)
 

ys

отодвинутый новичок
daevaorn

О каких разных?
Есть факт. Оригинальные данные (version NN)
Кто то их запросил (запросом GET). Посидел часок, другой, долго думал. И что? На все это время блокировать? Не жирно?
 

С.

Продвинутый новичок
А если браузер закрыть, то блокировка останется навечно. Это беда!
 

FractalizeR

Новичок
Автор оригинала: С.
А если браузер закрыть, то блокировка останется навечно. Это беда!
В DokuWiki блокировка обновляется Яваскриптом по таймеру, пока страница у вас открыта, если не ошибаюсь, каждую минуту. Если вы закроете страницу, не сохранив результат, блокировка простоит еще минуту, а потом истечет.
 
Сверху