Откаты правок

Я и раньше писал - письмо на английском языке от иностранца производит неизгладимое впечатление в странах СНГ. Даже на ректора.

Прошу откатить 37308967, совесть замучила, а плагин при откате крашиться. Ещё раз привет Gennadi03.
Частично откатил, реанимировав отношение АРК.

http://www.openstreetmap.org/#map=15/61.8805/46.9068

Прошёл год, пользователь drovalet продолжает рисовать полную херню, используя ОСМ как краску на заборе. Прошу поговорить с человеком и объяснить, что рисовать надо только существующие объекты, а не так, “что бы у меня в навигаторе было видно и я понял”. Год назад я потратил неделю, на удаление его мусора из ОСМ, оставляя только то, что реально существует. Если ему не объяснить, как надо рисовать, то проще за ним вообще всё удалять за год его “излияний” в ОСМ.

Написал drovalet

Там что-то на лесное хозяйство похожее просматривается (могу ошибаться). Есть и схема тегирования и даже рендеринг этого дела (Mapsurfer что-то поддерживает).

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

https://github.com/Zverik/simple-revert

Просто делаете git clone и пользуетесь. Есть ограничения: откатывалка предназначена для несложных ченджсетов, поэтому, например, она откажется восстанавливать линии и отношения из старых правок, которые десять раз перезаписывались. На вход можно подать имя пользователя (выведет список правок) или несколько номеров ченджсетов (результат будет лучше, чем если откатывать по одному).

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

Заодно там лежит второй скрипт, который вернёт любую старую версию любого объекта, в том числе отношений границ и маршрутов с тысячью версий. Удалённое восстановит, так что после восстановления достаточно проверить в редакторе, что всё нормально. Оба скрипта могут вместо загрузки на сервер направить вывод в файл, который откроется в JOSM.

Узнаю программистскую логику Зверика: git-клиент и компилятор за “неудобстово” и “дополнительные библиотеки” не считаются.

Это питоновский скрипт, там нет компилятора, а питон должен быть у любого осмера. Когда я сидел под виндой, у меня было три в разных каталогах. И я тогда ещё не программировал на питоне!

Вместо git clone можно нажать “Download ZIP” справа вверху.

Пожалуйста откатите правки пользователя Nawa Yumio. Большинство правок ценные, но они сделаны в Id по непривязанному Bing и поэтому ломают геометрию. Ниже я сделал список ченджсетов, которые нужно откатить.

31495676 (кроме тегов way 105189712)
31495761 (кроме node 3549315472, node 1204489600)
31495939 (кроме node 776808849, node 776808855, тегов way 277236599)
31496064
31496229 (кроме way 277236591)
31496506 (кроме node 776808855, way 348908581)
31496556 (кроме node 3549420065)
31496989 (кроме тегов)
31497057 (кроме тегов)
31497092 (кроме тегов)
31497171 (кроме way 348943162)

Мне так и не удалось заставить работать плагин reverter в JOSM, даже в latest версии.

Зачем откатывать? Скачать область, где все эти пакеты, и выделить в строке поиска через user:“Nawa Yumio” и подвинуть обратно.
Подвинул.

Весьма смелое утверждение.

Я согласен, что веб-интерфейс был бы идеальным решением, но от него у меня только планы. Пока что этот скрипт — самое простое решение из существующих.

Более того, оно оскорбительно.

А можно уточнить, что это за редактор такой?

MAPS.ME. Ночные беты для андроида тут (качайте «Beta new»). Но по качеству это — ранние альфы, там вылеты на каждое третье действие. В базе уже много ченджсетов из нашего редактора, скоро сделаю их отдельный просмотр.

простота - это здорово, но добавить пару опций (необязательных, естественно) все же не мешало бы:

  • количество выводимых строк в истории чейнджсетов пользователя
  • флаг вывода изменений в файл вместо загрузки на сервер (как мне кажется, изменение поведения программы при перенаправлении вывода - крайне неочевидная штука)
  • в некоторых утилитах это называется “dry-run”: ничего не делаем, на экран выводим список предполагаемых изменений (delete node XXX или change way YYY)

… ну и не отправляет changeset на сервер, если не сделать так


-      request = urllib2.Request(API_ENDPOINT + '/user/details')
+      request = urllib2.Request(API_ENDPOINT + '/api/0.6/user/details')

-    request = MethodRequest(API_ENDPOINT + '/changeset/create', etree.tostring(create_xml), method=MethodRequest.PUT)
+    request = MethodRequest(API_ENDPOINT + '/api/0.6/changeset/create', etree.tostring(create_xml), method=MethodRequest.PUT)

-  request = MethodRequest('{0}/changeset/{1}/upload'.format(API_ENDPOINT, changeset_id), etree.tostring(osc), method=MethodRequest.POST)
+  request = MethodRequest('{0}/api/0.6/changeset/{1}/upload'.format(API_ENDPOINT, changeset_id), etree.tostring(osc), method=MethodRequest.POST)

-  request = MethodRequest('{0}/changeset/{1}/close'.format(API_ENDPOINT, changeset_id), method=MethodRequest.PUT)
+  request = MethodRequest('{0}/api/0.6/changeset/{1}/close'.format(API_ENDPOINT, changeset_id), method=MethodRequest.PUT)
     response = opener.open(request)

мда, вот так мапишь, мапишь, а ты, оказывается, вовсе даже и не осмер :-((

Ау, тут есть ещё модераторы? Почему этот оффтор ещё не перенесли в отдельную, профильную тему?

Прежде всего, спасибо, что воспользовался и нашёл ошибку с путями к API. Поправил.

Флаги я не хочу делать, потому что это бессмысленное усложнение. Я люблю эвристику и когда инструмент делает то, что нужно, без лишних вопросов. Например, количество выводимых строк — есть же удобный веб-интерфейс, если нужно закапываться глубоко в историю. А для ситуаций типа «знакомый просит откатить его правку» достаточно последних строк.

Второе и третье пожелания, кажется, одинаковые: я тестирую методом ./simple-revert | cat. Сохранение и вывод на экран — опять же, продвинутые фичи, и если хочется всё контролировать, то есть же более сложный плагин reverter. Хотя не знаю, умеет ли он делать «мягкие» откаты, не изменяя поля, не тронутые в ченджсете.

Короче, эти скрипты — промежуточный вариант на пути к нормальному веб-интерфейсу. Который я в ближайшие 3-4 года, наверняка, напишу. Поэтому я делал их максимально простыми: лучше частично и сейчас, чем… ну, понятно. Откатывать правки maps.me получается отлично, для последних ченджсетов из истории тоже должно работать.