[#] ребилдилка. тестовая версия, поэтому не в dev
51t(mira, 2) — All
2014-05-28 05:30:55


import os

msgs = os.listdir('msg')
for h in msgs:
    if os.path.getsize('msg/%s' % h) == 0:
        os.remove('msg/%s' % h)
        msgs.remove(h)

echoes = os.listdir('echo')

for ea in echoes:
    passed = []
    echo = open('echo/%s' % ea).read().splitlines()
    for h in echo:
        if h in msgs:
            msgs.remove(h)
            passed.append(h)
    if passed != echo:
        passed = passed + [''] or []
        open('echo/%s' % ea,'w').write('\n'.join(passed))

for h in msgs:
    os.remove('msg/%s' % h)

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

использовать с осторожностью! сначала чекером прогнать с записью в лог. затем заархивировать базу. и только потом запускать фиксер!

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

[#] Re: ребилдилка. тестовая версия, поэтому не в dev
51t(mira, 2) — 51t
2014-05-28 05:35:03


> passed = passed + [''] or []

passed = passed + ['']

or тут не сработает ни в каком случае, но и без него join не делает лишнюю пустую строку :)