{"thread":{"id":"35008","subject":"[PATCH v3] git-remote-mediawiki: bugfix for pages w/ >500 revisions","startedAt":"2013-09-24T19:32:30Z","lastAt":"2013-09-25T07:04:22Z","messageCount":2,"participants":["Benoit Person","Matthieu Moy"],"isPatch":true,"patchVersion":3,"patchTotal":null},"messages":[{"id":"228171","messageId":"1380051150-6863-1-git-send-email-benoit.person@gmail.com","threadId":"35008","inReplyTo":null,"subject":"[PATCH v3] git-remote-mediawiki: bugfix for pages w/ >500 revisions","fromName":"Benoit Person","fromEmail":"benoit.person@gmail.com","sentAt":"2013-09-24T19:32:30Z","receivedAt":"2013-09-24T19:32:30Z","isPatch":true,"sender":{"key":"benoit.person@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1145270?v=4"},"body":"Mediawiki introduces a new API for queries w/ more than 500 results in\nversion 1.21. That change triggered an infinite loop while cloning a\nmediawiki with such a page.\n\nThe latest API renamed and moved the \"continuing\" information in the\nresponse, necessary to build the next query. The code failed to retrieve\nthat information but still detected that it was in a \"continuing\nquery\". As a result, it launched the same query over and over again.\n\nIf a \"continuing\" information is detected in the response (old or new),\nthe next query is updated accordingly. If not, we quit assuming it's not\na continuing query.\n\nSigned-off-by: Benoit Person <benoit.person@gmail.com>\nReported-by: Benjamin Cathey\n---\n contrib/mw-to-git/git-remote-mediawiki.perl     | 14 ++++++++++++--\n contrib/mw-to-git/t/t9365-continuing-queries.sh | 23 +++++++++++++++++++++++\n 2 files changed, 35 insertions(+), 2 deletions(-)\n create mode 100755 contrib/mw-to-git/t/t9365-continuing-queries.sh\n\ndiff --git a/contrib/mw-to-git/git-remote-mediawiki.perl b/contrib/mw-to-git/git-remote-mediawiki.perl\nindex c9a4805..f1db5d2 100755\n--- a/contrib/mw-to-git/git-remote-mediawiki.perl\n+++ b/contrib/mw-to-git/git-remote-mediawiki.perl\n@@ -625,6 +625,9 @@ sub fetch_mw_revisions_for_page {\n \t\trvstartid => $fetch_from,\n \t\trvlimit => 500,\n \t\tpageids => $id,\n+\n+\t\t# let the mediawiki know that we support the latest API\n+\t\tcontinue => '',\n \t};\n \n \tmy $revnum = 0;\n@@ -640,8 +643,15 @@ sub fetch_mw_revisions_for_page {\n \t\t\tpush(@page_revs, $page_rev_ids);\n \t\t\t$revnum++;\n \t\t}\n-\t\tlast if (!$result->{'query-continue'});\n-\t\t$query->{rvstartid} = $result->{'query-continue'}->{revisions}->{rvstartid};\n+\n+\t\tif ($result->{'query-continue'}) { # For legacy APIs\n+\t\t\t$query->{rvstartid} = $result->{'query-continue'}->{revisions}->{rvstartid};\n+\t\t} elsif ($result->{continue}) { # For newer APIs\n+\t\t\t$query->{rvstartid} = $result->{continue}->{rvcontinue};\n+\t\t\t$query->{continue} = $result->{continue}->{continue};\n+\t\t} else {\n+\t\t\tlast;\n+\t\t}\n \t}\n \tif ($shallow_import && @page_revs) {\n \t\tprint {*STDERR} \"  Found 1 revision (shallow import).\\n\";\ndiff --git a/contrib/mw-to-git/t/t9365-continuing-queries.sh b/contrib/mw-to-git/t/t9365-continuing-queries.sh\nnew file mode 100755\nindex 0000000..27e267f\n--- /dev/null\n+++ b/contrib/mw-to-git/t/t9365-continuing-queries.sh\n@@ -0,0 +1,23 @@\n+#!/bin/sh\n+\n+test_description='Test the Git Mediawiki remote helper: queries w/ more than 500 results'\n+\n+. ./test-gitmw-lib.sh\n+. $TEST_DIRECTORY/test-lib.sh\n+\n+test_check_precond\n+\n+test_expect_success 'creating page w/ >500 revisions' '\n+\twiki_reset &&\n+\tfor i in `test_seq 501`\n+\tdo\n+\t\techo \"creating revision $i\" &&\n+\t\twiki_editpage foo \"revision $i<br/>\" true\n+\tdone\n+'\n+\n+test_expect_success 'cloning page w/ >500 revisions' '\n+\tgit clone mediawiki::'\"$WIKI_URL\"' mw_dir\n+'\n+\n+test_done\n-- \n1.8.4.GIT\n"},{"id":"228192","messageId":"vpq1u4d1ix5.fsf@anie.imag.fr","threadId":"35008","inReplyTo":"1380051150-6863-1-git-send-email-benoit.person@gmail.com","subject":"Re: [PATCH v3] git-remote-mediawiki: bugfix for pages w/ >500 revisions","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@grenoble-inp.fr","sentAt":"2013-09-25T07:04:22Z","receivedAt":"2013-09-25T07:04:22Z","isPatch":true,"sender":{"key":"matthieu.moy@grenoble-inp.fr","avatar":"https://gravatar.com/avatar/72c8a2705971a25dfaff23cece15130d405685845d911aedd5667ace277f3fc5?d=mp&s=160"},"body":"Benoit Person <benoit.person@gmail.com> writes:\n\n>  contrib/mw-to-git/git-remote-mediawiki.perl     | 14 ++++++++++++--\n>  contrib/mw-to-git/t/t9365-continuing-queries.sh | 23 +++++++++++++++++++++++\n\nThis version sounds all right. Thanks a lot,\n\n-- \nMatthieu Moy\nhttp://www-verimag.imag.fr/~moy/\n"}]}