From 3386905076e04940717c6c5ff23bdcbda6178b70 Mon Sep 17 00:00:00 2001 From: Sergey Matveev <stargrave@stargrave.org> Date: Sat, 19 Feb 2022 12:49:04 +0300 Subject: [PATCH] =?utf8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?utf8?q?=D0=B8=D0=B8=20redo?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit ÐоÑовлÑÑÑ ÑÑÑ Ð´ÑÑзÑÑм пÑогÑаммиÑÑам ÑаÑÑказаÑÑ Ð¿Ñо redo. Рнадо же ÑделаÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑое ÑезÑме по имеÑÑимÑÑ ÑеализаÑиÑм. ÐÑли кÑаÑко и Ñ Ñ Ð¾Ð´Ñ Ð¿Ð¾ памÑÑи, Ñо вÑÑ Ð½Ðµ оÑенÑ, но оно иÑпÑавимо: apenwarr/redo (https://redo.readthedocs.io/en/latest/) -- по ÑÑÑи единÑÑвеннÑй недоÑÑаÑок ÑÑо Ñо, ÑÑо он на Python. ÐнаÑÐ¸Ñ Ð´Ð°Ð¶Ðµ пÑоÑÑо его запÑÑк бÑÐ´ÐµÑ Ð½Ð° глаз замеÑен. Ðн не Ð´ÐµÐ»Ð°ÐµÑ Ð°Ð²ÑомаÑиÑеÑкое Ñ ÑÑиÑование Ñелей, а полагаеÑÑÑ Ð½Ð° mtime+inodeNum+size+мелоÑи, ÑÑо ознаÑÐ°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñе false positive, но ÑÑо ÑеÑпимо. Ðлавное ÑÑÐ¾Ð±Ñ Ð±Ñло ÑобÑано Ñо, ÑÑо должно ÑобÑаÑÑÑÑ. ÐÑÑÑ Ð¾ÑобенноÑÑÑ Ð½ÐµÐ¿ÑиÑÑÐ½Ð°Ñ Ð² виде SQLite3 ÐÐ, коÑоÑÐ°Ñ ÑоздаÑÑÑÑ Ð¾Ð´Ð¸Ð½ Ñаз на пÑÐ¾ÐµÐºÑ Ð¸ важно ÑÑÐ¾Ð±Ñ ÑÑо бÑло в его top-диÑекÑоÑии. Сам авÑÐ¾Ñ Ð¿ÑизнаÑÑ ÑÑо коÑÑекÑнее Ð±Ñ Ð±Ñло делаÑÑ .redo в каждой поддиÑекÑоÑии. Ðе Ð¿Ð¾Ð¼Ð½Ñ ÑÐ²Ð°Ð¶Ð°ÐµÑ Ð»Ð¸ он umask. Ðе Ð´ÐµÐ»Ð°ÐµÑ fsync-и даже Ð´Ð»Ñ SQLite3. Ðо жиÑÑ Ñ ÑÑим можно. ЦеннейÑÐ°Ñ Ð²ÐµÑÑ Ð² ÑÑом пÑоекÑе ÑÑо докÑменÑаÑиÑ, коÑоÑÑÑ ÑÑÐ¾Ð¸Ñ ÑиÑаÑÑ Ð²Ñем кÑо погÑÑжаеÑÑÑ Ð² redo! https://github.com/leahneukirchen/redo-c -- 1kLOC Си без завиÑимоÑÑей, вмеÑÑе Ñ Ð²ÑÑÑоенной SHA256 ÑеализаÑией. Ð£Ð¼ÐµÐµÑ ÑаÑпалаллеливаÑÑÑÑ. umask не ÑважаеÑ. ÐÑÑ Ð¼ÐµÑаинÑоÑмаÑÐ¸Ñ ÑазмеÑÐ°ÐµÑ ÑÑдом Ñ ÑелÑми, вмеÑÑо помеÑÐµÐ½Ð¸Ñ Ð² оÑделÑнÑÑ Ð´Ð¸ÑекÑоÑиÑ. ÐÑÑ ÑÑо Ñ Ð´Ð°Ð¶Ðµ иÑпÑавлÑл в ÑвоÑм fork. РвÑÑ Ð±Ñ Ð½Ð¸Ñего (Ñ ÑÑими пÑавками), еÑли Ð±Ñ Ð½Ðµ один ÐºÐ¾Ð¼Ð¼Ð¸Ñ Ð½Ð° паÑÑ ÑÑÑоÑек, коÑоÑÑй ÑоздаÑÑ ÑезÑлÑÑиÑÑÑÑий Ñайл пÑи пÑÑÑом stdout. ÐÑо полноÑÑÑÑ ÑниÑÑÐ¾Ð¶Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ð¸ÑÑÑалÑнÑÑ OOD-Ñелей. ÐÑквалÑно еÑли ÑделаÑÑ revert ÑÑÐ¸Ñ Ð¿Ð°ÑÑ ÑÑÑоÑек -- redo-c Ð±Ñ Ð±Ñл полноÑÑÑÑ ÑзабелÑной оÑлиÑной ÑеализаÑией, ÑмоÑÑÑÑей на ctime+hash. https://github.com/gotroyb127/baredo -- ÑовÑем новÑй пÑоекÑ, коÑоÑÑй Ñ, Ñак ÑказаÑÑ, конÑÑлÑÑиÑовал и из-за Ð¼ÐµÐ½Ñ Ð¿Ð¾ÑвилиÑÑ fsync-и ÑеÑÑнÑе, umask-дÑÑжелÑбноÑÑÑ, аÑомаÑное обновление Ñайлов Ñ Ð¼ÐµÑаинÑоÑмаÑией и возможноÑÑÑ Ð¸Ñ ÑÑÐµÐ½Ð¸Ñ Ñеловеком, плÑÑ ÑаÑпаÑаллеливание Ð·Ð°Ð´Ð°Ñ (пÑавда ÑейÑÐ°Ñ Ð°Ð²ÑÐ¾Ñ Ñам ÑÑо-Ñо еÑÑ ÐºÐ¾Ð¼Ð¼Ð¸ÑÐ¸Ñ Ð¸ Ñ Ð½Ðµ Ð·Ð½Ð°Ñ ÑабоÑÐ°ÐµÑ Ð»Ð¸ оно), плÑÑ Ñо, ÑÑо должно ÑÑиÑÑваÑÑÑÑ ÑодеÑжимое Ñайла, как бÑдÑо он бÑл open/read, а изнаÑалÑно Ñам ÑодеÑжимое Ñамой ÑимволиÑеÑкой ÑÑÑлки напÑÐ¸Ð¼ÐµÑ ÑиÑалоÑÑ. Ðо авÑÐ¾Ñ Ð½Ð¸ в какÑÑ Ð½Ðµ ÑоглаÑаеÑÑÑ Ð¸ÑполÑзоваÑÑ ÑÑо-либо кÑоме mtime. Ðи apenwarr ÑÑаÑÑи, ни мои аÑгÑменÑÑ ÐµÐ³Ð¾ ни в ÑÑм не ÑбеждаÑÑ. ÐÑли Ñ ÑÐ´ÐµÐ»Ð°Ñ truncate -r 1 2 ; touch -r 1 2 ; mv 2 1, Ñо его baredo не ÑÐ²Ð¸Ð´Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. apenwarr ÑазÑмно ÑÑиÑÑваеÑÑÑ inode number поÑÑÐ¾Ð¼Ñ Ð¸ Ñ Ð½ÐµÐ³Ð¾ ÑÐ°ÐºÐ¸Ñ Ð¿Ñоблем не бÑдеÑ. Ðо еÑли в baredo в коде поменÑÑÑ "mtime" на "ctime", Ñо вÑÑ Ð±ÑÐ´ÐµÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ Ñебе Ñ Ð¾ÑоÑо. http://www.goredo.cypherpunks.ru/ -- наÑколÑко понимаÑ, ÑейÑÐ°Ñ ÑÑо оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑекомендÑÐµÐ¼Ð°Ñ Ð±Ð¾Ð»ÑÑинÑÑвом ÑеализаÑиÑ. Ð¡Ð°Ð¼Ð°Ñ Ð½Ð°Ð²Ð¾ÑоÑÐµÐ½Ð½Ð°Ñ Ð² плане дÑÑжелÑбноÑÑи к ÑазÑабоÑÑÐ¸ÐºÑ (вÑе ÑиÑи apenwarr заÑзал, плÑÑ Ñвои накÑÑÑил). Ð¡Ð°Ð¼Ð°Ñ Ð·Ð°Ð¼Ð¾ÑоÑÐµÐ½Ð½Ð°Ñ Ð½Ð° fsync-Ð°Ñ Ð¸ аÑомаÑноÑÑи. ÐамоÑоÑÐµÐ½Ð½Ð°Ñ Ð½Ð° (не)довеÑии к ÑайловÑм ÑиÑÑемам, позволÑÑ Ð½Ð° вÑбоÑа даже не ÑÑиÑÑваÑÑ ctime или напÑÐ¸Ð¼ÐµÑ Ð½Ð°Ð¾Ð±Ð¾ÑÐ¾Ñ Ð´Ð¾Ð²ÐµÑÑÑÑ mtime. umask дÑÑжелÑбна. Jobserver ÑовмеÑÑим Ñ GNU Make и NetBSD bmake (apenwarr единÑÑвеннÑй кÑо ÑовмеÑÑим Ñ Ð¾ÑÑ Ð±Ñ ÑолÑко Ñ GNU). ÐокÑÑÑа инÑегÑаÑионнÑми ÑеÑÑами, на некоÑоÑÑÑ Ð¸Ð· коÑоÑÑÑ Ð²Ñоде Ð±Ñ apenwarr Ð±Ñ Ñже не пÑÐ¾Ñ Ð¾Ð´Ð¸Ð». apenwarr/do -- Ð²Ñ Ð¾Ð´Ð¸Ñ Ð² apenwarr/redo и ÑÑо мизеÑÐ½Ð°Ñ POSIX shell ÑеализаÑÐ¸Ñ Ð¿ÑÐ¸Ð³Ð¾Ð´Ð½Ð°Ñ ÑолÑко Ð´Ð»Ñ ÑбоÑки Ñ Ð½ÑлÑ, без ÑаÑпаÑÐ°Ð»Ð»ÐµÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑÑÑÑа завиÑимоÑÑей. ÐÑигодна Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»Ð°Ð´ÑÐ²Ð°Ð½Ð¸Ñ Ð² tarball-Ñ ÑоÑÑа ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ можно бÑло ÑобÑаÑÑ Ð±ÐµÐ· дополниÑелÑнÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑей. Ðод OpenBSD, как недавно вÑÑÑнил, оно не ÑабоÑÐ°ÐµÑ Ð¿Ñавда (заÑо goredo ÑобиÑаеÑÑÑ Ð¸ ÑабоÑаеÑ). redo-sh (http://news.dieweltistgarnichtso.net/bin/redo-sh.html) -- из Ð½ÐµÑ Ñ Ð²Ð·Ñл оÑновнÑÑ Ð¼Ð°ÑÑÑ Ð¸Ð½ÑегÑаÑионнÑÑ ÑеÑÑов (дÑÑгÑÑ ÑаÑÑÑ ÑеÑÑов из apenwarr/redo). ÐÑполÑзоваÑÑ Ð½Ðµ пÑобовал, Ñак как оно ÑÑебÑÐµÑ GNU ÑÑилиÑÑ Ð¸ под BSD ÑабоÑаÑÑ Ð½Ðµ бÑдеÑ. -- 2.52.0