git-remote-mediawiki: properly deal with invalid remote revisions
authorMatthieu Moy <Matthieu.Moy@imag.fr>
Mon, 16 Jul 2012 19:46:42 +0000 (21:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 16 Jul 2012 19:52:40 +0000 (12:52 -0700)
Some wiki, including https://git.wiki.kernel.org/ have invalid revision
numbers (i.e. the actual revision numbers are non-contiguous). Don't die
when encountering one.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/mw-to-git/git-remote-mediawiki

index 8badff601c81725bcd2a9996a9589f0bf4ba035a..5eab96b63ca38ced0a0a73dc6a9446c7f26e89af 100755 (executable)
@@ -910,6 +910,10 @@ sub mw_import_revids {
        my $last_timestamp = 0; # Placeholer in case $rev->timestamp is undefined
 
        foreach my $pagerevid (@$revision_ids) {
+               # Count page even if we skip it, since we display
+               # $n/$total and $total includes skipped pages.
+               $n++;
+
                # fetch the content of the pages
                my $query = {
                        action => 'query',
@@ -924,6 +928,11 @@ sub mw_import_revids {
                        die "Failed to retrieve modified page for revision $pagerevid";
                }
 
+               if (defined($result->{query}->{badrevids}->{$pagerevid})) {
+                       # The revision id does not exist on the remote wiki.
+                       next;
+               }
+
                if (!defined($result->{query}->{pages})) {
                        die "Invalid revision $pagerevid.";
                }
@@ -932,10 +941,6 @@ sub mw_import_revids {
                my $result_page = $result_pages[0];
                my $rev = $result_pages[0]->{revisions}->[0];
 
-               # Count page even if we skip it, since we display
-               # $n/$total and $total includes skipped pages.
-               $n++;
-
                my $page_title = $result_page->{title};
 
                if (!exists($pages->{$page_title})) {