Re: [PATCH v3] git-remote-mediawiki: bugfix for pages w/ 500 revisions

2013-09-25 Thread Matthieu Moy
Benoit Person benoit.per...@gmail.com writes:

  contrib/mw-to-git/git-remote-mediawiki.perl | 14 --
  contrib/mw-to-git/t/t9365-continuing-queries.sh | 23 +++

This version sounds all right. Thanks a lot,

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3] git-remote-mediawiki: bugfix for pages w/ 500 revisions

2013-09-24 Thread Benoit Person
Mediawiki introduces a new API for queries w/ more than 500 results in
version 1.21. That change triggered an infinite loop while cloning a
mediawiki with such a page.

The latest API renamed and moved the continuing information in the
response, necessary to build the next query. The code failed to retrieve
that information but still detected that it was in a continuing
query. As a result, it launched the same query over and over again.

If a continuing information is detected in the response (old or new),
the next query is updated accordingly. If not, we quit assuming it's not
a continuing query.

Signed-off-by: Benoit Person benoit.per...@gmail.com
Reported-by: Benjamin Cathey
---
 contrib/mw-to-git/git-remote-mediawiki.perl | 14 --
 contrib/mw-to-git/t/t9365-continuing-queries.sh | 23 +++
 2 files changed, 35 insertions(+), 2 deletions(-)
 create mode 100755 contrib/mw-to-git/t/t9365-continuing-queries.sh

diff --git a/contrib/mw-to-git/git-remote-mediawiki.perl 
b/contrib/mw-to-git/git-remote-mediawiki.perl
index c9a4805..f1db5d2 100755
--- a/contrib/mw-to-git/git-remote-mediawiki.perl
+++ b/contrib/mw-to-git/git-remote-mediawiki.perl
@@ -625,6 +625,9 @@ sub fetch_mw_revisions_for_page {
rvstartid = $fetch_from,
rvlimit = 500,
pageids = $id,
+
+   # let the mediawiki know that we support the latest API
+   continue = '',
};
 
my $revnum = 0;
@@ -640,8 +643,15 @@ sub fetch_mw_revisions_for_page {
push(@page_revs, $page_rev_ids);
$revnum++;
}
-   last if (!$result-{'query-continue'});
-   $query-{rvstartid} = 
$result-{'query-continue'}-{revisions}-{rvstartid};
+
+   if ($result-{'query-continue'}) { # For legacy APIs
+   $query-{rvstartid} = 
$result-{'query-continue'}-{revisions}-{rvstartid};
+   } elsif ($result-{continue}) { # For newer APIs
+   $query-{rvstartid} = $result-{continue}-{rvcontinue};
+   $query-{continue} = $result-{continue}-{continue};
+   } else {
+   last;
+   }
}
if ($shallow_import  @page_revs) {
print {*STDERR}   Found 1 revision (shallow import).\n;
diff --git a/contrib/mw-to-git/t/t9365-continuing-queries.sh 
b/contrib/mw-to-git/t/t9365-continuing-queries.sh
new file mode 100755
index 000..27e267f
--- /dev/null
+++ b/contrib/mw-to-git/t/t9365-continuing-queries.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+test_description='Test the Git Mediawiki remote helper: queries w/ more than 
500 results'
+
+. ./test-gitmw-lib.sh
+. $TEST_DIRECTORY/test-lib.sh
+
+test_check_precond
+
+test_expect_success 'creating page w/ 500 revisions' '
+   wiki_reset 
+   for i in `test_seq 501`
+   do
+   echo creating revision $i 
+   wiki_editpage foo revision $ibr/ true
+   done
+'
+
+test_expect_success 'cloning page w/ 500 revisions' '
+   git clone mediawiki::'$WIKI_URL' mw_dir
+'
+
+test_done
-- 
1.8.4.GIT

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html