<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in MediaChangeLog.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>6f10c544ba4dccbc9874cebc522bd31c9ae71432 - chore(changelog): rename $clogRev to $recordedRev</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#6f10c544ba4dccbc9874cebc522bd31c9ae71432</link>
        <description>chore(changelog): rename $clogRev to $recordedRevIt&apos;s a bit easier to decipher

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Wed, 08 Jul 2026 10:49:08 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>5a285deb52b56fa567c6d217b5c396330c58f297 - fix(changelog): stop media mtime bumps from recording bogus external edits</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#5a285deb52b56fa567c6d217b5c396330c58f297</link>
        <description>fix(changelog): stop media mtime bumps from recording bogus external editsCommit 01e8d739c (&quot;persist external-edit detection on first read&quot;) began writingdetected external edits to the changelog and snapshotting the new content to theattic via saveExternalAttic(). That is correct for pages, which archive everyrevision, but wrong for media: a media file&apos;s current revision is never archived(media only copies content to the attic on replace or delete, to save space).So getCurrentRevisionInfo()&apos;s external-change detection had no attic copy of thecurrent revision to work with: the unchanged-content guard always failed and theold-size lookup returned 0. A mere mtime bump (touch, rsync --times, unzip) of anunchanged media file was therefore recorded as an external edit sized as the wholefile, and since detection is now persisted, that bogus entry (plus a redundantattic copy) became permanent.The &quot;before&quot; size of an external change is now taken through a lastRevisionSize()seam: the base reads it from the last revision&apos;s attic copy (unchanged for pages),and MediaChangeLog reconstructs it from the previous revision&apos;s archived size plusthe size change logged for the last revision. currentContentMatchesRevision()compares the current file size against that reconstructed size, so an unchangedsize is treated as a mere touch (mtime reset, no entry) and a changed size is areal external edit with the correct size change.Media no longer snapshots an external edit to the attic at all, consistent withnot archiving the current revision: it will be archived if and when the file islater replaced. The mtime repair for an unreliable external date moved to a baserepairExternalMtime() shared by pages and media.

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Mon, 06 Jul 2026 12:32:00 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>0a245329500f3be55c2a4eb03710ad926803aac6 - fix(changelog): don&apos;t record an external edit when the content is unchanged (#4634)</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#0a245329500f3be55c2a4eb03710ad926803aac6</link>
        <description>fix(changelog): don&apos;t record an external edit when the content is unchanged (#4634)A current revision&apos;s file mtime can change without its content changing &#8212; abackup restore, a git checkout, an in-place rewrite. Such a bump was detectedas an external edit and logged with a 0-byte size change, cluttering history.getCurrentRevisionInfo() now compares the current content against the lastrecorded revision before treating an mtime change as an external edit. When thecontent is identical no external edit happened: the file mtime is reset to therecorded revision date and the last revision is returned. The comparison is anabstract currentContentMatchesRevision() &#8212; pages compare the decompressed text,media compare file size then md5_file().

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Sun, 07 Jun 2026 18:19:49 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>01e8d739c8b53aeb1d0a653331d65eb1f8394002 - refactor(changelog): persist external-edit detection on first read</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#01e8d739c8b53aeb1d0a653331d65eb1f8394002</link>
        <description>refactor(changelog): persist external-edit detection on first readThis addresses the flaky test that makes tests randomly fail (mostly onwindows runners).The flake in common_saveWikiText_test::test_savesequence5 came fromthis line in ChangeLog::getCurrentRevisionInfo():    &apos;date&apos; =&gt; max($lastRev + 1, time() - 1)The synthesized &quot;external delete&quot; entry was kept in memory only andonly persisted later, when saveWikiText next called detectExternalEdit.That meant the formula was evaluated twice on different ChangeLoginstances &#8212; once during the test&apos;s inspection, and again during thefollowing saveWikiText &#8212; and the two evaluations could pick differentseconds depending on how long the surrounding I/O took. The testcached the first result in $expectExternal and asserted it against theon-disk entry written during the second call. On the slower Windowsrunner the second call sometimes crossed a second boundary, producingthe off-by-one date mismatch.The questions I had was, why are we persisting external file deletions(or edits) only when a page is saved when we are obviously alreadydetecting it earlier during the changelog read already?Instead of recording the external delete at the time a new page iswritten, it makes sense to record it as soon as we detect it (when thechangelog is requested by a user or a bot). This will make the recodedtimestamp closer to the actual deletion.This patch refactors the changelog accordingly, but still tries to beminimal invasive (I think the changelog handling would need much morerefactoring, but that&apos;s beyond the scope of this change).To enable proper locking (when logging an external edit and copyingthe attic file), locking had to be moved to the Changelog class,duplicating some code of io_saveFile.PageFile::detectExternalEdit() and the deprecated procedural wrapperdetectExternalEdit() in inc/common.php are removed. A codesearch.dokuwiki.orgcheck confirmed no plugin calls the method directly; the only externalcaller of the procedural function is the farmsync plugin, which needsa parallel update.

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Sat, 25 Apr 2026 15:30:23 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>a835c93a8c9175f580c05a0aeb56b7664f5e8435 - Let ChangeLog set the mode(media/page) for a revision log entry</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#a835c93a8c9175f580c05a0aeb56b7664f5e8435</link>
        <description>Let ChangeLog set the mode(media/page) for a revision log entry

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Sun, 24 Sep 2023 22:07:03 +0000</pubDate>
        <dc:creator>Gerrit Uitslag &lt;klapinklapin@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>d4f83172d9533c4d84f450fe22ef630816b21d75 - code style: line breaks</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#d4f83172d9533c4d84f450fe22ef630816b21d75</link>
        <description>code style: line breaks

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Thu, 31 Aug 2023 20:44:40 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>8c7c53b0321a3cd3116b8d3b2ad27863a38dece7 - codestyle adjustments: class declaration braces</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#8c7c53b0321a3cd3116b8d3b2ad27863a38dece7</link>
        <description>codestyle adjustments: class declaration braces

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Wed, 30 Aug 2023 15:05:28 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>c1482d1c08360e6401534a1391da2b650c37d34d - codestyle adjustments: function argument spacing</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#c1482d1c08360e6401534a1391da2b650c37d34d</link>
        <description>codestyle adjustments: function argument spacing

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Wed, 30 Aug 2023 15:03:06 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>0603e565f99519c35708bab370f1c5f3271c1365 - Apply rector fixes to inc/ChangeLog</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#0603e565f99519c35708bab370f1c5f3271c1365</link>
        <description>Apply rector fixes to inc/ChangeLog

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Tue, 29 Aug 2023 12:26:54 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>eeda7ada8c965be1a48afa72ccc473ba9e1db91b - some spelling</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#eeda7ada8c965be1a48afa72ccc473ba9e1db91b</link>
        <description>some spelling

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Sun, 23 Jan 2022 20:46:39 +0000</pubDate>
        <dc:creator>Gerrit Uitslag &lt;klapinklapin@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>07869ee73b75fd263305f87d20b50e7f842d3b9d - fix typo</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#07869ee73b75fd263305f87d20b50e7f842d3b9d</link>
        <description>fix typo

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Sun, 28 Nov 2021 02:52:50 +0000</pubDate>
        <dc:creator>Satoshi Sahara &lt;sahara.satoshi@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>1d11f1d3396b6d0e55489e568b4bb7028ff9f172 - ChangeLogTrait</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#1d11f1d3396b6d0e55489e568b4bb7028ff9f172</link>
        <description>ChangeLogTrait- move ChangeLog low level methods  into trait- static ChangeLog::parseLogLine() replaces parseChangeLogLine()- new ChangeLog::buildLogLine()

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Sat, 06 Nov 2021 02:56:15 +0000</pubDate>
        <dc:creator>Satoshi Sahara &lt;sahara.satoshi@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>c71927663aade6cf69a15ca99cabe28d9a6db62f - new method ChangeLog::addLogEntry()</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#c71927663aade6cf69a15ca99cabe28d9a6db62f</link>
        <description>new method ChangeLog::addLogEntry()rewrite `detectExternalEdit()` in inc/common.php

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Thu, 04 Nov 2021 03:02:55 +0000</pubDate>
        <dc:creator>Satoshi Sahara &lt;sahara.satoshi@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>e49fa56bf2db001a4fefcb366d1e886f4cfe66f6 - use getFilename() method instead of wikiFN()</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#e49fa56bf2db001a4fefcb366d1e886f4cfe66f6</link>
        <description>use getFilename() method instead of wikiFN()

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Mon, 20 Sep 2021 07:24:40 +0000</pubDate>
        <dc:creator>Satoshi Sahara &lt;sahara.satoshi@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>0c3a5702735953748f68955d51bb478538fb6eda - split changelog classes into their own namespace</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/MediaChangeLog.php#0c3a5702735953748f68955d51bb478538fb6eda</link>
        <description>split changelog classes into their own namespaceThe remaining functions in inc/changelog.php should be moved into autility class.

            List of files:
            /dokuwiki/inc/ChangeLog/MediaChangeLog.php</description>
        <pubDate>Fri, 15 Jun 2018 09:45:58 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
</channel>
</rss>
