Improve namespaceDupes.php

Authored by tstarling.


Improve namespaceDupes.php

General review and improvement in service of T87645.

  • Add the option to add a prefix to a page on conflict, instead of a suffix. This makes it easier to find the pages after they are renamed, since [[Special:Prefixindex]] can be used.
  • Rename options --prefix to --source-pseudo-ns, --suffix to --add-suffix, --key to --dest-ns.
  • Document --source-pseudo-ns and verify that it does what I think it was meant to do, per T14371, thus allowing me to remove the "todo" note.
  • Add the option to do a history merge instead of a rename to resolve conflicts.
  • Pass around an options array instead of an ever-growing list of formal parameters.
  • Rename resolveConflictOn() to movePage() and remove the $table and $prefix parameters which were unused since MW 1.5. Also get rid of the usage AS in getConflicts(), most instances of which were for MW 1.4 compatibility.
  • Rename getConflicts() to getTargetList() since "conflict" is a misnomer. A conflict occurs between two entities, really what the code was calling an "unresolvable conflict" is actually a conflict, whereas a "resolvable conflict" is merely a page in the wrong namespace.
  • Add option --move-talk since checking the talk namespace doesn't make sense in the case of corruption, it only makes sense when introducing a new namespace, when a pseudo-namespace has previously been used.
  • Use terse, greppable output, with a single line per page.
  • Replace ksort() followed by asort() with a single uksort(), since I think that is what was intended. PHP's sort functions are not stable, so you can't run two different sort functions on the same array and expect to the first sort to have a predictable effect on the result.
  • If --fix is not given, give the same output, just don't take the action.
  • Refactor checkNamespace(). Move target title determination to its own function, was a mixture of SQL and a couple of lines in reportConflict(). Move alternate title determination to its own function, was mostly in resolveConflict(). Get rid of reportConflict() and resolveConflict(), do what's left of them in the main loop. Get rid of modification of page row.
  • Improve destination namespace calculation logic of --move-talk feature, per comments by PleaseStand.

Change-Id: I49921315315e1a29c9559ba221e9903b10b73d68