Uloženo beze změny

./blog.sh v1.10 — díl 6 z 8

Oprava překlepu v jednom odstavci. To je celá změna, kterou autor udělal, a tak ji má archiv zapsat: jeden odstavec jinak, ostatní jak byly. Na skutečném archivu, cestou, kterou příspěvky posílá telefon, to engine do 1.9 neuměl. Měřeno 8. října: 101 příspěvků se změnilo tím, že byly uloženy beze změny.

Co markdown neumí říct

Příspěvek je uložený jako bloky, a editor ukazuje text. Mezi tím stojí převod, který většinou nic neztratí – odstavec je odstavec, nadpis je nadpis. Jenže archiv, který přišel z importu, nese na blocích věci, pro které markdown slovo nemá: odstavec, který Tumblr označil jako odsazený, jako položku seznamu nebo jako řádek chatu; u videa jeho poskytovatele a adresu, na které bylo poprvé; přehrávač, který služba předala jako HTML. Text, který editor ukáže, nic z toho nenese. A uložení dosud postavilo každý blok znovu z textu: oprava jednoho překlepu přepsala všechny ostatní bloky příspěvku bez nich. U stolu i z programu stejně; jen u stolu to nikoho nenapadlo měřit.

Otázka naopak

Opravit to po jednom – vrátit plakát videa, vrátit adresu přehrávače, vrátit původ souboru – je cesta, kterou engine šel třikrát, a je takových věcí víc, než kdo sepsal. 1.10 proto klade otázku obráceně: ne „co tenhle blok ztratil", ale „sáhl na něj autor".

Uložený blok se zapíše jako text, který by editor ukázal, a přečte zpátky, sám o sobě: takhle vypadá, když se ho nikdo nedotkl. Což není vždy to, jak byl uložený – odstavec s mezerou na konci se vrátí bez ní. Kde je blok nového textu napsaný přesně takhle, uloží se ten uložený, celý, se vším, co na něm je. Co text změnil, je autorovo, tak jak to napsal. Blok, který text přepsal, si přitom nechá, co text o něm říct nemohl – druh odstavce z importu, první adresu videa – tam, kde se dá říct, který uložený blok přepsal: mezi dvěma bloky ponechanými, jak byly, se přepsané bloky spárují po pořadí s uloženými stejného druhu, když je jich stejně. Odstavec vložený vedle opraveného dělá dva z jednoho, a oba se uloží tak, jak jsou napsané.

Tři druhy se nechávají být. Karta odkazu cestuje v hlavičce, ne v textu, a má vlastní cestu zpátky. Uložený blok, který se nepřečte zpět jako jeden blok, nemá v novém textu jeden blok, ve kterém by se poznal. A blok, který jmenuje soubor, jenž přišel s tímhle uložením: co se před chvílí změřilo z bajtů, to teď platí, a uložený blok popisuje soubor, který byl.

Co se odmítne jako ztráta

Zbývá to, co text nemůže nést vůbec. Druhá karta odkazu, přehrávač odněkud, co engine nezná: takový blok ztratí každé uložení toho textu, ať ho dělá kdo chce. U stolu se edit zeptá, než to pustí. Program se zeptat nemůže, takže soubor, který by to ztratil, je odmítnut jako content_lost, a takový příspěvek je označený editable: false už ve chvíli, kdy se jeho text vydává – telefon ho ukáže, ale neotevře. Odmítnuto jako ztráta je jen to, co autor neviděl odcházet; co z textu vyškrtl, je úprava.

A soubor bez textu není úprava. Je odmítnut jako empty, stejně jako nový příspěvek bez textu, protože přesně tohle pošle program, který text nikdy neměl. Výjimka je příspěvek, který tělo nikdy neměl – titulek se štítky, karta odkazu – ten se uloží.

Proti které verzi

Text, který program vrací, říká v hlavičce edits: <slug> a base: <otisk>: otisk souboru příspěvku ve chvíli, kdy text dostal. Když se příspěvek mezitím změnil – někdo ho upravil u stolu, nebo publikoval – soubor je odmítnut jako changed, místo aby potichu vrátil zpátky, co se mezitím stalo. Koncept smí přijít bez base:; publikovaný příspěvek nesmí. A publikovaný příspěvek jde teď z programu upravit vůbec: do 1.9 cesta z telefonu končila u konceptů.

Pod tím vším zůstává to, co tu bylo už dřív: co příspěvek říkal před posledními deseti uloženími, leží v content.nosync/versions/, a klávesa [v] z toho vrací.

Dvě zásilky najednou

Jedna věc o ukládání ještě, protože se také projevila až na skutečném provozu. incoming/ zná obrázek podle jména, pod kterým přišel, a každý telefon říká svému prvnímu obrázku stejně: ze dvou příspěvků poslaných v tutéž chvíli dostal ten vytvořený první obrázek 01.jpg toho druhého, a oba byly odpovězeny ok. Přijímač teď bere zásilky po jedné; ta, která čekala pět minut, dostane busy a neuloží nic. Odpověď, které se dá věřit, je lepší než dvě ok.

Jeden odstavec jinak

Uložení má změnit to, co autor upravil, a nic jiného. Zní to jako definice, ne jako funkce, a přesně proto se to dlouho nekontrolovalo: u stolu, kde příspěvek vznikl v tomhle enginu a nic z importu na sobě nenese, to platilo vždycky. Platit to má i o příspěvku z roku 2011, který přišel z Tumblru a někdo mu dnes opravil čárku. Číslo, na kterém se to pozná, je nula: tolik příspěvků se teď změní tím, že se uloží beze změny.

Komentáře