<?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 ChangeLog.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>6d10fb865f5e25ac6523d2bf15c2cb9763853197 - style(changelog): fix overlong line</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#6d10fb865f5e25ac6523d2bf15c2cb9763853197</link>
        <description>style(changelog): fix overlong line

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Tue, 14 Jul 2026 09:25:50 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>6f10c544ba4dccbc9874cebc522bd31c9ae71432 - chore(changelog): rename $clogRev to $recordedRev</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#6f10c544ba4dccbc9874cebc522bd31c9ae71432</link>
        <description>chore(changelog): rename $clogRev to $recordedRevIt&apos;s a bit easier to decipher

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.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/ChangeLog.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/ChangeLog.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>6372bc80cf66844189fb35b36624654d095e5f9b - fix(changelog): detect an externally restored deleted page as a re-creation</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#6372bc80cf66844189fb35b36624654d095e5f9b</link>
        <description>fix(changelog): detect an externally restored deleted page as a re-creationA deleted page restored outside DokuWiki with a preserved mtime predating thedeletion (cp -p from an old backup, rsync --times) has content matching thedelete revision&apos;s attic copy. That copy holds the pre-delete content, so theunchanged-content shortcut in getCurrentRevisionInfo() wrongly treated therestore as an unchanged file, touched the mtime back to the delete revision andkept the DELETE as the current revision. The page then stayed &quot;deleted&quot; on everysubsequent read.A last recorded revision of type DELETE means the page did not exist then, so anexisting file is an external re-creation regardless of its mtime.getCurrentRevisionInfo() now classifies the external change and delegates tosynthesizeExternalDeletion/synthesizeExternalCreate/synthesizeExternalEdit; onlythe edit path keeps the unchanged-content shortcut. A re-creation records the fullfile as its size change and, when the restored mtime predates the delete, is datedjust after it with an unknown date.The getCurrentRevisionInfo() method got rather unwieldy, so it was refactored touse three helper methods, for synthesizing the changelog data.

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Mon, 06 Jul 2026 10:54:49 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>eab6268cca3310499bb33a53846d6e00bebf8f3a - fix(changelog): keep out-of-order external edits out of recent changes (#4634)</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#eab6268cca3310499bb33a53846d6e00bebf8f3a</link>
        <description>fix(changelog): keep out-of-order external edits out of recent changes (#4634)A detected external edit is recorded both in the page&apos;s own changelog and inthe global recent-changes feed. When its date is older than the most recentchange already in the global changelog &#8212; an old file surfacing after the feedhas moved on &#8212; appending it placed it at the top of recent changes with an olddate, above genuinely newer entries.writeLogEntry() now delegates the global-feed append to writeGlobalLogEntry(),which skips an external edit whose date predates the global changelog&apos;slast-modified time. The entry still lands in the page&apos;s own changelog; it isonly kept out of the cross-page feed. Normal edits are always appended.

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Sun, 07 Jun 2026 18:20:44 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&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/ChangeLog.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/ChangeLog.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>8788dbbd585b42284320d64cc932f3c875eab6b2 - &#55358;&#56598; Rector and PHPCS fixes</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#8788dbbd585b42284320d64cc932f3c875eab6b2</link>
        <description>&#55358;&#56598; Rector and PHPCS fixes

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Wed, 06 May 2026 19:32:03 +0000</pubDate>
        <dc:creator>splitbrain &lt;86426+splitbrain@users.noreply.github.com&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/ChangeLog.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/ChangeLog.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>d41f5a8f13cbe65aecfb29abc34975970b616198 - fix destructuring false returns from changelog functions</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#d41f5a8f13cbe65aecfb29abc34975970b616198</link>
        <description>fix destructuring false returns from changelog functionsThe changelog functions can return false when lines are unparsable ordon&apos;t exist. The result can no longer be destructured then in newer PHPversions. This adds the necessary checks.It should also handle corrupt lines within a changelog better.

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Sat, 07 Mar 2026 16:10:27 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>4d95c1688e79d492a3c9ca96ecc6002c30019b5a - code style</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#4d95c1688e79d492a3c9ca96ecc6002c30019b5a</link>
        <description>code style

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Sun, 24 Sep 2023 22:14:17 +0000</pubDate>
        <dc:creator>Gerrit Uitslag &lt;klapinklapin@gmail.com&gt;</dc:creator>
    </item>
<item>
        <title>851600592bbc8267f78bad982a3c48fc5a00b15f - little refactoring</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#851600592bbc8267f78bad982a3c48fc5a00b15f</link>
        <description>little refactoring

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Sun, 24 Sep 2023 22:10:01 +0000</pubDate>
        <dc:creator>Gerrit Uitslag &lt;klapinklapin@gmail.com&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/ChangeLog.php#a835c93a8c9175f580c05a0aeb56b7664f5e8435</link>
        <description>Let ChangeLog set the mode(media/page) for a revision log entry

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.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>0f8604a9720b481eb6ec95c5905002745d5c7104 - don&apos;t strict compare</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#0f8604a9720b481eb6ec95c5905002745d5c7104</link>
        <description>don&apos;t strict compareI&apos;m not 100% sure but revs might be strings sometimes, so better notchage current behavior

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Sat, 02 Sep 2023 08:47:33 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>90fb952c4c30c09c8446076ba05991c89a3f0b01 - code style: operator spacing</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#90fb952c4c30c09c8446076ba05991c89a3f0b01</link>
        <description>code style: operator spacing

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Thu, 31 Aug 2023 20:38:07 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>7d34963b3e75ea04c63ec066a6b7a692e123cb53 - coding style: control flow line breaks</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#7d34963b3e75ea04c63ec066a6b7a692e123cb53</link>
        <description>coding style: control flow line breaks

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Thu, 31 Aug 2023 13:04:10 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>177d6836e2f75d0e404be9c566e61725852a1e07 - coding style: control flow whitespaces</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#177d6836e2f75d0e404be9c566e61725852a1e07</link>
        <description>coding style: control flow whitespaces

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Thu, 31 Aug 2023 12:22:35 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>83bec4752cdd7b0b551fb56e3e2736f3ae1633fa - fix abstract declaration of ChangeLog::getFilename()</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#83bec4752cdd7b0b551fb56e3e2736f3ae1633fa</link>
        <description>fix abstract declaration of ChangeLog::getFilename()

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Thu, 31 Aug 2023 12:08:15 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
<item>
        <title>6e695190a730214d53bcea6198b632234e98c6f2 - fix sizehandling in Changelog</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#6e695190a730214d53bcea6198b632234e98c6f2</link>
        <description>fix sizehandling in ChangelogSeems rector was too aggressive here in removing a variable.

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Tue, 29 Aug 2023 14:07:43 +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/ChangeLog.php#0603e565f99519c35708bab370f1c5f3271c1365</link>
        <description>Apply rector fixes to inc/ChangeLog

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.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>aec2ae89d7547a5ff5628285842538e2e01fdf00 - Merge pull request #3607 from ssahara/revdiff2</title>
        <link>http://127.0.0.1:8080/history/dokuwiki/inc/ChangeLog/ChangeLog.php#aec2ae89d7547a5ff5628285842538e2e01fdf00</link>
        <description>Merge pull request #3607 from ssahara/revdiff2add mechanism to track current revision, and other code improvements

            List of files:
            /dokuwiki/inc/ChangeLog/ChangeLog.php</description>
        <pubDate>Fri, 24 Jun 2022 12:41:41 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;andi@splitbrain.org&gt;</dc:creator>
    </item>
</channel>
</rss>
