LINUX.ORG.RU
ФорумTalks

А бывают ли wiki поверх VCS?


0

0

Задумался: почему почти все вики хранят свои страницы в реляционных БД или в своих хитрых форматах. И все выдумывают свои костыли для управления версиями, отслеживания конфликтов, хранения бинарных файлов и т. д. А ведь любой Mercurial или SVN — готовое викихранилище. Наверняка это многим в голову приходило, но я ничего похожего найти не смог. Кому-нибудь попадалось?

>А ведь любой Mercurial или SVN — готовое викихранилище.

со своими костылями для хранения версий =)

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

WebDAV - это вообще велосипед. Зачем оно нужно, если есть FTP?

(Аргументация и логика оригинала сохранены.)

Sikon ★★★
()

>почему почти все вики хранят свои страницы в реляционных БД

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

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

У ftp версионности нет, а в WebDAV оно в спецификации указано (правда, никем это так и не реализовано).

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

Почти. Они в своей книжке честно пишут, что спецификациям WebDAV в части контроля версий они не следовали.

anonymous
()

twiki хранит в rcs

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

> Супер! Главный разработчик - колумбиец, написана на схеме.

Дык оно понятно. В колумбии же кокаин дешевле хлеба...

redvasily
()
Ответ на: комментарий от ero-sennin

Только это поделие уже успело устареть, и с нынешним меркуриалом работать не хочет.

PS Кстати, кто может объяснить, с какого перепугу в меркуриале все классы называются с маленькой буквы? Мэтт Макколл не читал PEP-8?

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

PEP-8 ни разу не библия, а лишь рекомендации, не хочешь - не используешь. Хотели бы, чтобы все классы обязательно назывались с большой буквы - сперли бы ограничение на уровне синтаксиса из хаскелла (как с двумерным синтаксисом сделали).

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

Можно иногда называть классы с маленькой буквы, если на это есть веские причины. А если нет веских причин делать иначе, делай как остальные, чтоб остальным было легче тебя понимать. И умей своё решение внятно аргументировать. А у Макколла вся аргументация сводится к «чисто меня в натуре ломает лишний раз шифт нажимать, и нивалнуит». На http://www.selenic.com/mercurial/wiki/index.cgi/Basic_Coding_Style примерно так и написано. Страшный человек, блин.

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

По поводу coding style я лично уверен только в одном, во всём проекте он должен быть одинаковым. А остальное - в сущности мелочи бытия.

Legioner ★★★★★
()
Ответ на: комментарий от ero-sennin

> с какого перепугу в меркуриале все классы называются с маленькой буквы? Мэтт Макколл не читал PEP-8?

У Мэтта 40 лет Unix experience, все два раза "ку!" перед Мэттом :D

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

>По поводу coding style я лично уверен только в одном, во всём проекте он должен быть одинаковым. А остальное - в сущности мелочи бытия.

+1

generatorglukoff ★★
()
Ответ на: комментарий от ero-sennin

> А если нет веских причин делать иначе, делай как остальные, чтоб остальным было легче тебя понимать.

Прямо тоталитаризм какой-то. "Мне не нравится такой стиль" - это веская причина, поверьте.

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

Здесь дело не только в coding style. Меня не очень заломает даже сплошными заглавными буквами классы называть. Больше беспокоит Мэттовский самодержавный стиль руководства проектом. Названия классов мы все будем писать с маленькой буквы, потому что я так хочу, пропертей в стиле SVN у нас не будет, потому что я не знаю, как ими пользоваться, юникода в именах файлов у нас не будет, потому что я говорю на ASCII, и т. д.

Если бы BFDL Гвидо принимал решения в таком иррациональном стиле, долго бы он смог оставаться BFDL? :) Однако он умеет разумно аргументировать свои решения, и даже если эти решения тебя и не устраивают, с аргументами, как правило, сложно не согласиться. И сам он умеет соглашаться с чужими доводами, если они достаточно убедительны. И даже засранец Линус так себя не ведёт, как Мэтт, большинство его решений предельно рациональны, хоть он и чудит иногда в последнее время. Если говорить про стиль кодирования, то /usr/src/linux/Documentation/CodingStyle, наверно, все читали. Там на каждую мелочь есть непробиваемые доводы. И даже если мне и не нравится, к примеру, использовать отступы по 8 пробелов, после Линусового "some people will claim that having 8-character indentations makes the code move too far to the right, and makes it hard to read on a 80-character terminal screen. The answer to that is that if you need more than 3 levels of indentation, you're screwed anyway, and should fix your program" никаких вопросов и возражений не остаётся.

А Мэтт хоть один разумный довод привёл в пользу того, чтобы называть классы с маленькой буквы? Нет. А доводов против я могу привести море. Про PEP-8, которого придерживается подавляющее большинство питоновских проектов, я уже говорил. Если кто-то, придерживающийся PEP-8, будет использовать меркуриаловские модули в своём коде, код будет выглядеть как помойка. Другой довод: если имена классов начинать с прописной буквы, а имена экземпляров — с маленькой, то они как бы оказываются в разных пространствах имён. И можно спокойно писать manifest = Manifest(...). В меркуриале же приходится для экземпляров классов выдумывать какие-то другие непонятное имена, и начинается: repo = repository(...), r = revlog(...), , mnfst = manifest(...) и т. п. Вдобавок, Макколл ещё и не использует символ подчёркивания для разделения слов в имени: findold, applyupdates, dogitpatch... Всё это отнюдь не добавляет коду читаемости. А причина этого? Мэтту лень нажимать шифт, как он сам пишет. Честное слово, детство какое-то.

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

> пропертей в стиле SVN у нас не будет, потому что я не знаю, как ими пользоваться, юникода в именах файлов у нас не будет, потому что я говорю на ASCII, и т. д.

> Если бы BFDL Гвидо принимал решения в таком иррациональном стиле

Мэтт нормально обосновывает свои решения - всё это было сделано ради сохранения простого формата репозитория, отсуствия дублирования кода и corner cases. С этим можно не соглашаться (мне вот хочется атрибуты в стиле Monotone), но обоснования _были даны_.

Кстати, что не так с Unicode в именах файлов? Я сейчас попробовал - вроде работает.

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

> Мэтт нормально обосновывает свои решения - всё это было сделано ради сохранения простого формата репозитория, отсуствия дублирования кода и corner cases.

Что-то я в рассылке нашёл только этот пост: http://selenic.com/pipermail/mercurial-devel/2006-November/000268.html В нём все доводы сводятся к тому, что Мэтт не монимает, зачем это надо, и следовательно, и другим это не надо. Или он ещё по этому поводу высказывался?

> Кстати, что не так с Unicode в именах файлов? Я сейчас попробовал - вроде работает.

Работает, пока у всех одна и та же локаль. Если из-под венды поместить в репозиторий файл с русским названием, а затем из-под линукса его достать, будет бНОПНЯ.

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

> Или он ещё по этому поводу высказывался?

Я слышал на IRC, там же сам спрашивал о поддержке переименований - омне подробно объяснял (может, просто в хорошем настроении был - ХЗ).

>> Кстати, что не так с Unicode в именах файлов? Я сейчас попробовал - вроде работает.

> Работает, пока у всех одна и та же локаль.

В Линуксе работает для utf-8 и koi8-r. Винды нету, но с правильно настроенной локалью она тоже должна работать :/

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

> В Линуксе работает для utf-8 и koi8-r.

$ mkdir unicode
$ cd unicode
$ bzr init
$ touch проверка
5 bzr add проверка
$ bzr ci -m test
$ rm проверка
$ LC_ALL=KOI8-R bzr revert
$ ls | iconv -f KOI8-R
проверка
$ rm *
$ hg init
$ touch проверка
$ hg add проверка
$ hg ci -m test
$ rm проверка
$ LC_ALL=KOI8-R hg revert --all
$ ls | iconv -f KOI8-R
п©я─п╬п╡п╣я─п╨п╟

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

> Винды нету, но с правильно настроенной локалью она тоже должна работать :/

Наша вера непокобелима.

Не работает. Проверь, или просто поверь если проверять лень.

execve
()
Ответ на: комментарий от ero-sennin

Ну, то что _это_ не работает, и чёрт с ним. Но я проверил потщательней - в 00changelog.i имена файлов не в Unicode :/

2 execve * (*) (07.10.2007 1:00:57)

> Наша вера непокобелима.

Ну, неправ был

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

эээ, а это ниче, что кен томпсон слепил первый прототип юникса (до самого юникса надо было еще пахать и пахать) всего 38 лет назад?

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

а че, меркуриал правда юникод не поддерживает? а как же хваленая питонья юникодность строк по дефолту?

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

> эээ, а это ниче, что кен томпсон слепил первый прототип юникса (до самого юникса надо было еще пахать и пахать) всего 38 лет назад?

А если учесть, что сама фраза про 40 лет была сказана пару-тройку лет назад ;) Шутка это, шутка.

> че, меркуриал правда юникод не поддерживает?

Нормально - пока нет

> а как же хваленая питонья юникодность строк по дефолту?

Она в Python 3.0

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

>>Нормально - пока нет

А что значит нормально? Этот "пяпяпя" как раз очень похож на русский уникод вываленный на однобайтный терминал. А что большинство приложений теперь на локаль плюют - так это тенденция такая. Проблемы лохов без С или UTF8 локалей шерифа не беспокоят.

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

А вот патчеги, кому патчег? :)

Есть добровольцы, работающие в двух системах (или двух локалях), проверить патч к hg?

diff --git a/mercurial/changelog.py b/mercurial/changelog.py
--- a/mercurial/changelog.py
+++ b/mercurial/changelog.py
@@ -172,7 +172,11 @@ class changelog(revlog):
             extra = self.decode_extra(extra)
         if not extra.get('branch'):
             extra['branch'] = 'default'
-        files = l[3:]
+#      for i in l[3:]:
+#              print ">", i
+        files = map(util.tolocal, l[3:])
+#      for i in files:
+#              print ">>", i
         return (manifest, user, (time, timezone), files, desc, extra)
 
     def read(self, node):
@@ -193,6 +197,7 @@ class changelog(revlog):
             extra = self.encode_extra(extra)
             parseddate = "%s %s" % (parseddate, extra)
         list.sort()
+        list = map(util.fromlocal, list)
         l = [hex(manifest), user, parseddate] + list + ["", desc]
         text = "\n".join(l)
         return self.addrevision(text, transaction, self.count(), p1, p2)
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -421,7 +421,7 @@ class localrepository(repo.repository):
     def file(self, f):
         if f[0] == '/':
             f = f[1:]
-        return filelog.filelog(self.sopener, f)
+        return filelog.filelog(self.sopener, util.fromlocal(f))
 
     def changectx(self, changeid=None):
         return context.changectx(self, changeid)
diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -40,6 +40,13 @@ class manifest(revlog):
         mfdict = manifestdict()
         for l in lines.splitlines():
             f, n = l.split('\0')
+            def isascii(s):
+                for c in s:
+                    if ord(c) > 127:
+                        return False
+                return True
+            if not isascii(f):
+               f = util.tolocal(f)
             if len(n) > 40:
                 mfdict._flags[f] = n[40:]
                 mfdict[f] = bin(n[:40])
@@ -103,6 +110,7 @@ class manifest(revlog):
     def find(self, node, f):
         '''look up entry for a single file efficiently.
         return (node, flags) pair if found, (None, None) if not.'''
+        f = util.fromlocal(f)
         if self.mapcache and node == self.mapcache[0]:
             return self.mapcache[1].get(f), self.mapcache[1].flags(f)
         text = self.revision(node)
@@ -136,6 +144,13 @@ class manifest(revlog):
             if '\n' in f or '\r' in f:
                 raise RevlogError(_("'\\n' and '\\r' disallowed in filenames"))
 
+#        print map, map.flags
+        t = manifestdict()
+        for k in map.keys():
+            fname = util.fromlocal(k)
+            t[fname] = map[k]
+            t.set(fname, map.execf(k), map.linkf(k))
+        map = t
         # if we're using the listcache, make sure it is valid and
         # parented by the same node we're diffing against
         if not (changed and self.listcache and p1 and self.mapcache[0] == p1):
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -442,6 +442,7 @@ class revlog(object):
 
         i = ""
         try:
+#            print self.indexfile
             f = self.opener(self.indexfile)
             i = f.read(4)
             f.seek(0)
@@ -841,6 +842,7 @@ class revlog(object):
         if n:
             return n
 
+        print id
         raise LookupError(_("No match found"))
 
     def cmp(self, node, text):

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

Перекодируются только имена файлов в логах, остальное не работает. :)

ЗЫ Если есть настроение, можно вместе этим заняться. Стучи в жаббер: ero-sennin@unstable.nl.

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

> Перекодируются только имена файлов в логах, остальное не работает. :)

У меня и файлы в ФС создаются с правильной кодировкой. А что еще надо?

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

> У меня и файлы в ФС создаются с правильной кодировкой.

По-моему, они создаются в UTF-8, независимо от локали. И hg revert забавно глючит.

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

>> У меня и файлы в ФС создаются с правильной кодировкой.

> По-моему, они создаются в UTF-8, независимо от локали.

У меня они подчиняются HGENCODING

> И hg revert забавно глючит.

Обеспечивать работу с одной и той же рабочей копией и меняющейся локали - зачем?

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

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

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